tgoop.com/knowledge_accumulator/319
Last Update:
Class-Incremental Learning: A Survey [2023]
Вот это я лох. Оказывается, я совершенно не заметил целую подобласть в ML, которая занимается задачей, похожей на ту, которую описал в предыдущем посте.
Встречайте, Class-Incremental Learning (CIL). Представьте, у модели нет доступа ко всему датасету объектов на все классы, а она получает их последовательно в виде нескольких "задач" по несколько классов. Сначала вам приходят птицы и собаки, затем тигры и рыбы. Задача модели - учиться на каждой следующей задаче, при этом не забывая предыдущие классы. На тесте с модели спросят за умение классифицировать все объекты.
Постановка менее экстремальная, чем при подаче образцов по одному, как я описывал, но тем не менее, известно, что "Finetune", при котором мы просто каждый раз дообучаем модель на последних данных, либо теряет способность учиться на новых классах, либо забывает старые.
Авторы статьи не только сделали обзор существующих типов подходов к этой проблеме, но и самостоятельно провели сравнение около 15 различных методов, а также прогнали "оракул" - нейросеть, которую просто учили на всех данных. Спойлер - оракул сильно побеждает, хотя предложенные решения сокращают часть дистанции между ним и простым файнтюном.
Коротко взглянем на архетипы техник. Более детально я буду разгребать это сокровище в ближайшие недели.
- Data Replay
Сохраняем часть старых данных в памяти и периодически переобучаемся на них. Можно обучать ещё и генеративную сеть и обучать классификатор на синтетике - это называется Generative Replay.
- Динамические сети
Совершаем некоторую хирургию над нейросетью в процессе появления новых классов - "блоки", отвечающие за отдельные классы, и, дальше манипулируем ими для избежания негативных эффектов файнтюна.
- Регуляризация
В процессе обучения на новых классах, добавляем разного рода ограничения в оптимизацию, чтобы заморозить старые знания.
- Дистилляция
При появлении новых классов, мы одновременно учим модель на них и дистиллируем уже существующую модель.
- Model Rectify
Иногда ресёрчеры изучают особенности поведения нейросети при файнтюне и вставляют костыли, которые напрямую гасят эту особенность. Авторы обернули такие работы в отдельную группу.
Самое классное в этой статье, что авторы понимают важность контроля за затратами памяти. Без этого все эти сравнения теряют смысл, и поэтому памяти уделяется достаточное внимание. Память тратится на 2 вещи - хранение данных и дополнительные обучаемые параметры. Как распределить эти затраты? Как можно сэкономить память, сжимая данные? Class-Incremental Learning предоставляет большой простор для творчества.
Невооружённым взглядом видно, как все эти техники являются набором костылей, что лично для меня подтверждает мою мысль о том, что должен существовать гораздо более мощный метод, найденный с помощью meta-learning. Оптимальный алгоритм будет и сжимать, и хранить, и дообучать, и регуляризовывать, причём делать это всё одновременно и совершенно неинтерпретируемо для человека. Нам лишь нужно задать правильную параметризацию для такой схемы, а не сооружать поделки самостоятельно. Но горький урок пока не усвоен.
@knowledge_accumulator
BY Knowledge Accumulator

Share with your friend now:
tgoop.com/knowledge_accumulator/319