Давно у меня на канале не было почётных баянов.
Итак, напомню, что в мета-обучении у нас есть какое-то распределение задач p(T), и мы хотим уметь быстро на них обучаться. Для этого мы хотим посэмплировать задачи и как-то использовать эту информацию для "предобучения" алгоритма.
Отличие MAML от других работ по мета-обучению заключается в простоте. Мы не учим никакой "мета-алгоритм", не используем никаких дополнительных конструкций. Мы просто учим удачную инициализацию весов нейросети, из которой она быстро выучит новую задачу.
Итак, берём нашу архитектуру и какой-то вектор весов
W. Итерируемся, пока не надоест:1) Сэмплируем задачу из распределения p(T). Берём из неё K+1 батчей образцов
2) Инициализируем сетку вектором
W. На K батчах делаем шаги градиетного спуска, получаем W'3) С помощью
W' считаем ошибку на тестовом батче4) Считаем производную этой ошибки по изначальным параметрам
W5) Обновляем вектор-инициализацию
WКак можно заметить, применять результат на практике тоже элементарно - вам нужно просто инициализировать сетку мета-обученным вектором.
Благодаря этому, MAML не только стал топ-статьёй по цитированиям, но и присутствует как базовая опция в различных meta-learning библиотеках. Тем не менее, стоит понимать ключевые проблемы алгоритма, не позволяющие быть ему быть окончательным решением интеллектуального вопроса:
1) В схеме остаётся слишком много зафиксированных человеком элементов. Инициализация весов, которую мы мета-обучаем, составляет лишь малую часть всего обучения.
2) Мы мета-обучаем слишком много параметров. Я уже неоднократно писал, что для обучения обучаться (а не запоминания распределения задач) количество и разнообразие задач должно быть огромным по сравнению с размерностью мета-параметров. Тут это не так.
3) Обучение происходит засчёт дифференцирования сквозь весь процесс обучения, что плохо масштабируемо
Тем не менее, MAML это классика, это знать надо!
@knowledge_accumulator
