Reptile: масштабируемый алгоритм мета-обучения

Читать статьюПосмотреть код
Three simple digital outline drawings of a letter, a fish, and a triangle

Мы разработали простой алгоритм мета-обучения под названием Reptile. Он работает путем многократной выборки задачи, выполнения по ней стохастического градиентного спуска и обновления начальных параметров в сторону финальных параметров, изученных на этой задаче. Reptile представляет собой применение алгоритма наикратчайшего спуска (Shortest Descent) к задаче мета-обучения и математически похож на алгоритм MAML первого порядка (версию известного алгоритма MAML), которому требуется лишь черный ящик оптимизатора вроде SGD или Adam, обладая при этом схожей вычислительной эффективностью и производительностью.

Мета-обучение — это процесс обучения тому, как учиться. Алгоритм мета-обучения принимает распределение задач, где каждая задача представляет собой учебную проблему, и выдает быстрого обучающегося агента — того, кто способен обобщать на основе небольшого числа примеров. Одной из хорошо изученных проблем мета-обучения является классификация на малом числе примеров (few-shot classification), где каждая задача представляет собой задачу классификации, в которой обучающийся агент видит всего 1–5 примеров «входные данные — метка» для каждого класса, а затем должен классифицировать новые входные данные. Ниже вы можете опробовать нашу интерактивную демонстрацию классификации по 1 примеру (1-shot classification), в которой используется Reptile.

Как работает Reptile

Как и MAML, Reptile ищет инициализацию для параметров нейронной сети такую, чтобы сеть можно было дообучить, используя небольшое количество данных из новой задачи. Но в то время как MAML разворачивает и дифференцирует граф вычислений алгоритма градиентного спуска, Reptile просто выполняет стохастический градиентный спуск (SGD) для каждой задачи стандартным образом — он не разворачивает граф вычислений и не вычисляет вторые производные. Благодаря этому Reptile требует меньше вычислительных ресурсов и памяти, чем MAML. Псевдокод выглядит следующим образом:

В качестве альтернативы последнему шагу мы можем рассматривать Φ−W \Phi — W как градиент и передать его в более сложный оптимизатор, такой как Adam.

Поначалу кажется удивительным, что этот метод вообще работает. Если k=1 k=1 , этот алгоритм соответствовал бы «совместному обучению» (joint training) — выполнению SGD на смеси всех задач. Хотя совместное обучение в некоторых случаях позволяет найти полезную инициализацию, оно дает очень малый результат, когда обучение без примеров (zero-shot learning) невозможно (например, когда выходные метки случайно переставлены местами). Reptile требует k>1 k>1 , где обновление зависит от производных функции потерь высших порядков; как мы показываем в статье, это ведет себя совсем иначе, чем k=1 k=1  (совместное обучение).

Чтобы проанализировать, почему Reptile работает, мы аппроксимируем обновление с помощью ряда Тейлора. Мы показываем, что обновление Reptile максимизирует скалярное произведение между градиентами различных мини-батчей из одной и той же задачи, что соответствует улучшению обобщающей способности. Это открытие может иметь значение и за пределами мета-обучения для объяснения свойств обобщения SGD. Наш анализ предполагает, что Reptile и MAML выполняют очень похожие обновления, включая те же два члена с разными весами.

В наших экспериментах мы показываем, что Reptile и MAML обеспечивают схожую производительность на бенчмарках классификации на малом числе примеров Omniglot и Mini-ImageNet. Reptile также сходится к решению быстрее, поскольку его обновление имеет меньшую дисперсию.

Наш анализ Reptile предполагает множество различных алгоритмов, которые мы можем получить, используя различные комбинации градиентов SGD. На рисунке ниже предположим, что мы выполняем k шагов SGD для каждой задачи, используя разные мини-батчи, что дает градиенты  g1, g2, …, gk g_1, g_2, \dots, g_k . На графике ниже показаны кривые обучения на Omniglot, полученные при использовании каждой суммы в качестве метаградиента.  g2 g_2 ​ соответствует MAML первого порядка, алгоритму, предложенному в оригинальной статье по MAML. Включение большего числа градиентов приводит к более быстрому обучению за счет уменьшения дисперсии. Обратите внимание, что простое использование  g1 g_1 ​ (что соответствует k=1 k=1 ) не дает никакого прогресса, как и предсказывалось для этой задачи, поскольку производительность zero-shot не может быть улучшена.

Reptile Chart

Реализации

Наша реализация Reptile доступна на GitHub. Она использует TensorFlow для необходимых вычислений и включает код для воспроизведения экспериментов на Omniglot и Mini-ImageNet. Мы также выпускаем более компактную реализацию на JavaScript, которая дообучает модель, предварительно обученную с помощью TensorFlow — ее мы использовали для создания демоверсии выше.

Наконец, вот минимальный пример регрессии на малом числе примеров: предсказание случайной синусоиды по 10 парам (x, y) (x, y) . Этот пример написан на PyTorch и помещается в один gist:

Несколько человек указали нам на то, что MAML первого порядка и Reptile связаны между собой теснее, чем MAML и Reptile (в оригинальном утверждении). Эти алгоритмы смотрят на проблему под разными углами, но в итоге вычисляют схожие обновления. В частности, вклад Reptile опирается на историю как наикратчайшего спуска, так и избегания вторых производных вмета-обучении. С тех пор мы обновили первый абзац, чтобы отразить это.

Авторы

Алекс Никол (Alex Nichol), Джон Шульман (John Schulman)

Полный текст статьи читайте на OpenAI