В последние годы произошел большой прогресс в исследованиях в области метаобучения. Так же произошло расширение доступной литературы и сообщений в блогах.

Модельное агностическое метаобучение (MAML) лежит в основе разработок в этой области. Было много отличных сообщений в блогах, объясняющих метаобучение в целом (здесь и здесь) и MAML в частности (здесь и здесь). Сложные термины и сложные уравнения делают алгоритм похожим на крупную ракетную науку. Однако в этом блоге я хочу предоставить интуитивное обоснование алгоритма, которое может быть легко понять человеку, не имеющему представления о мета-обучении. Все, что нужно знать, - это основная идея, которой следовали все исследователи машинного обучения с самого начала: Передайте все свои задачи нейронной сети, расслабьтесь, расслабьтесь и наблюдайте, как они учатся!

Здесь я проведу параллель между любой стандартной задачей машинного обучения и мета-обучением. В любой задаче машинного обучения вам предоставляются данные (возможно, несколько пар (x, y)), которые можно рассматривать как образцы из некоторого базового распределения, и цель состоит в том, чтобы придумать функцию, которая может предсказывать (возможно, некоторые y ' values) для некоторых невидимых данных (возможно, x '), поступающих из того же распределения. Теперь рассмотрим ситуацию, когда данные данные представляют собой разные задачи, которые снова могут быть образцами из некоторого базового распределения (назовем это распределением задач), и цель состоит в том, чтобы придумать функцию, которая может работать «хорошо» (я вернемся к этому позже) для какой-то невидимой задачи, исходящей из того же дистрибутива. Это и есть цель метаобучения, и решение тоже одно: «изучить»

Каждую задачу можно представить как пару обучающих данных (поступающих из некоторого распределения) и функции потерь. Под хорошей работой для задачи это означает низкое значение потери невидимых данных, которые поступают из того же распределения, откуда пришли обучающие данные для задачи. Теперь невидимая задача также имеет собственные обучающие данные, которые могут повысить производительность задачи. Мы знаем только один способ использования любых данных, то есть узнать некоторые параметры некоторой функции прогнозирования, которая решает эту задачу. И, следовательно, цель наших усилий теперь состоит в том, чтобы придумать некоторый начальный набор параметров для функции, которая при обновлении обучающими данными из невидимой задачи хорошо справляется с этой задачей.

Теперь у вас может возникнуть вопрос: почему мы не используем какой-то случайный набор параметров для этой невидимой задачи, как мы всегда это делали? Конечно, мы можем (я добавлю к этому позже), но мы также можем добиться большего. Это потому, что у нас есть образцы задач из распределения задач, каждая из которых имеет свои собственные обучающие данные. Итак, что мы можем искать, так это то, какие инициализации параметров работали лучше всего из этих задач, которые были достаточно адаптивными, чтобы легко учиться на данных обучения в каждой задаче. Затем мы можем применить ту же инициализацию к невидимой задаче, исходящей из того же распределения задач. Итак, мы ищем наилучшую возможную инициализацию, используя наш старый друг градиентный спуск. Мы выбираем некоторый пакет задач из обучающих данных и переходим к той инициализации, которая при обновлении с использованием индивидуальных обучающих данных каждой задачи обеспечивает более низкие средние потери для этого пакета задач. Я намеренно опускаю любые математические операции, необходимые для такого прыжка (вам придется вычислять градиент на этапах обновления градиента), поскольку это не обязательно для понимания интуиции, лежащей в основе этого замечательного алгоритма. Не стесняйтесь читать упомянутые выше блоги, чтобы узнать подробности, но я не собираюсь здесь приводить какие-либо уравнения.

Наконец, я хотел бы остановиться на мотивации всего этого. Почему эти инициализации так важны? Почему мета-обучение - горячая тема? (Некоторые могут возразить, что мне следовало начать здесь, но мне нравится, как сначала понять простой метод, а затем понять, какую потрясающую проблему он / она решил). Эти инициализации становятся тем более важными, потому что обучающие данные, которые у нас есть для каждой задачи, являются очень ограничен, и обучение с нуля может оказаться невозможным. Вместо этого для нас важна инициализация, которая является достаточно адаптивной, чтобы быстро изучить небольшое количество обновлений с очень небольшим количеством примеров. И поскольку мы начали использовать машинное обучение повсюду, подход к получению большого количества данных для каждой задачи не является устойчивым. Пришло время поделиться информацией по задачам, и инициализация - хорошее начало 😅.