Код | Бумага | Xfer

Современная волна машинного обучения является воплощением разделения труда, при котором данная модель способна идеально выполнять узко определенные задачи. Хотя эти задачи могут быть довольно сложными, каждая задача требует обучения отдельной модели для решения этой и только этой задачи. Напротив, истинно общий искусственный интеллект должен уметь адаптироваться к изменениям в своей среде и к новым задачам.

Когда люди приспосабливаются к новым задачам, мы в значительной степени опираемся на предыдущие знания и опыт. Это важнейшая способность, которая позволяет нам узнавать что-то новое при очень небольшом количестве демонстраций. Например, большинство людей смогут использовать Netflix без каких-либо демонстраций, потому что они могут экстраполировать из общих шаблонов дизайна веб-сайтов.

Воспроизвести этот тип поведения в алгоритме машинного обучения очень сложно. Распространенный подход состоит в том, чтобы упростить задачу до использования модели, обученной для какой-либо другой задачи, в качестве отправной точки и настроить эту модель на задачу, которую мы теперь хотим решить. Несмотря на простоту, тонкая настройка является очень эффективным методом в компьютерном зрении [1,2,3] и обработке естественного языка [4,5,6,7], когда задачи, передаваемые между ними, схожи.

Когда задачи не так похожи или когда существует серьезная нехватка данных, точная настройка не выполняется. По сути, проблема с тонкой настройкой и аналогичными методами передачи обучения заключается в том, что они игнорируют процесс обучения . Это может вызвать катастрофическую потерю информации, так как предварительно обученная модель будет отбрасывать информацию, которая не является полезной для задачи, над которой она обучается, но которая была бы полезна для задачи, которая нас действительно волнует. Когда вы учитесь ориентироваться на веб-сайте Netflix, вы используете абстрактные знания о том, как работают веб-сайты, а не детали того, как перемещаться по определенному веб-сайту.

На пути к адаптируемому искусственному интеллекту

Нам нужен более принципиальный подход к обмену информацией между задачами. В частности, способ обмена информацией между двумя (или более) процессами обучения. Один из таких подходов - мета-обучение (также известное как обучение обучению).

В мета-обучении мы рассматриваем передачу информации как самостоятельную проблему обучения и оптимизируем ее для максимальной передачи. Поскольку метаобучение учится передавать знания между набором задач, оно может передавать знания новым, невидимым задачам, которые напоминают те, над которыми его обучали. Таким образом, метаобучение имеет потенциал для изучения действительно общего искусственного интеллекта, который может плавно адаптироваться к новым задачам с очень небольшим количеством демонстраций [8, 9, 10].

Текущее метаобучение сосредоточено исключительно на так называемой проблеме обучения по принципу «несколько выстрелов». В этой настройке у нас есть доступ к относительно богатому распределению задач, но у нас есть относительно немного образцов из каждой задачи, и поэтому мы можем сделать только несколько шагов градиента, прежде чем мы переобучаем. Чтобы это работало, задачи должны быть очень похожими, иначе нескольких шагов градиента будет недостаточно для изучения задачи. Хотя это важный случай метаобучения, это далеко не все, что может предложить метаобучение.

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

Чтобы исправить ситуацию, мы предлагаем Leap. Легкий алгоритм метаобучения, разработанный специально для длительных процессов обучения - даже для миллионов шагов градиентного спуска.

Leap будет представлен на ICLR 9 мая. Заходите, если вы там, или настраивайтесь через Facebook! Мы также выпустили код для Leap, с которым вы можете поиграться.

Разработка масштабируемого метаобучаемого

Чтобы создать такого метаобучающегося, мы сталкиваемся с несколькими сложными задачами. Первый - вычислительный; метаобучение требует изучения процессов обучения, поэтому по своей сути плохо масштабируется. Большинство алгоритмов с несколькими выстрелами требуют некоторой формы обратного распространения в процессе обучения, и как таковые являются невозможными. Следовательно, нашим первым ограничением является то, что мы не можем проходить обратный ход в процессе обучения. Вторая проблема заключается в том, как поддерживать согласованную цель трансферного обучения в течение очень длительного процесса обучения. Например, рассмотрение окончательной потери не годится: если между инициализацией и схождением проходит миллион шагов, почти вся информация о процессе обучения находится между ними. Нам нужно вывести новую мета-цель на первых принципах.

Когда мы говорим, что задача была «легкой» для изучения, мы обычно имеем в виду, что это не заняло у нас слишком много времени и что процесс прошел относительно гладко. С точки зрения машинного обучения это предполагает быструю конвергенцию. Это также означает, что обновления параметров должны монотонно улучшать производительность (ну, по крайней мере, в ожидании). Колебаться вперед и назад равносильно незнанию, что делать.

Оба эти понятия вращаются вокруг того, как мы путешествуем от нашей инициализации до нашего конечного пункта назначения на поверхности потери задачи. Идеальным вариантом является спуск вниз к параметризации с наименьшими потерями для данной задачи. В худшем случае - это длинный обходной путь с множеством возвратно-поступательных движений. В Leap мы используем следующее понимание:

Передача знаний подразумевает влияние на траекторию параметров таким образом, чтобы она сходилась как можно быстрее и плавнее.

Масштабирование метаобучения: Leap

Чтобы сделать эту интуицию четкой, нам нужна формальная основа для работы. Хотя мы не будем вдаваться в подробности здесь (для этого прочтите статью), мы конкретизируем идеи высокого уровня. Если хотите, можете смело пропустить математику.

Процесс обучения начинается с некоторого начального предположения о параметрах модели p (0) и обновляет это предположение с помощью некоторого правила обновления u, которое зависит от цели обучения L и некоторых данных наблюдений. x с целевым выводом y,

p(k+1) = p(k) + u(L(x; p(k)), y).

Эта последовательность в конечном итоге сходится, и в этот момент наша модель, надеюсь, научилась решать эту задачу. Продолжительность этого процесса можно формально описать расстоянием, которое он прошел от первоначального предположения до окончательной параметризации, скажем, p (K). Это расстояние определяется суммированием продолжительности каждого обновления:

d(p(0), p(K)) = ∑ | p(k+1) - p(k) | .

Если предположить, что мы приблизились к хорошему минимуму для этой задачи, расстояние d этого процесса говорит нам, было ли это легкой или сложной задачей. Если он маленький, значит, нам не пришлось ехать далеко, поэтому наше первоначальное предположение было верным. Если он большой, наше первоначальное предположение было плохим, так как нам пришлось много путешествовать, чтобы добраться туда.

Следовательно, мы можем научиться передавать знания между процессами обучения, изучая инициализацию, так что ожидаемое расстояние, которое мы должны преодолеть при изучении аналогичной задачи, было как можно короче.

Это главная цель Leap. Учитывая распределение задач, из которых мы можем выбирать, Leap изучает инициализацию p (0) таким образом, чтобы ожидаемое расстояние любого процесса обучения от этого распределения задач было как можно короче в ожидании. Таким образом, Leap извлекает информацию из различных процессов обучения во время мета-обучения и уплотняет ее в хорошее начальное предположение, которое гарантирует, что изучение новой задачи будет максимально простым. Важно отметить, что это первоначальное предположение не имеет ничего общего с деталями окончательной параметризации какой-либо задачи, оно является мета-обучением для облегчения процесса изучения этих параметров, какими бы они ни были. возможно.

Сделать прыжок

Теперь мы готовы посмотреть, сможет ли метаобучение выйти за рамки простого. Чтобы протестировать Leap, мы взяли стандартный тест, Omniglot [12], и превратили его в гораздо более сложную задачу, которую невозможно решить с помощью нескольких шагов градиента. Omniglot - это набор данных из 50 различных алфавитов, где каждый алфавит состоит из 20 нарисованных вручную образцов для каждого из его символов. Для решения задачи модель извлекает данные из набора данных алфавита и пытается предсказать, какой символ изображает каждый образец. Мы позволили модели сделать 100 шагов градиента.

Во время мета-обучения мы позволяли метаобученным видеть подмножество алфавитов в диапазоне от 1 до 25 и выдавали 10 алфавитов для окончательной оценки. Чтобы увидеть, предлагает ли Leap какие-либо преимущества, мы протестировали его без предварительной тренировки, многоголовой тонкой настройки (которая немного обманывает, потому что она имеет больше параметров и использует преобразование, но давайте проигнорируем это), популярный MAML [10] метаученик, его аппроксимация первого порядка (FOMAML), и Reptile [13], метаученик, который итеративно перемещает инициализацию в направлении окончательной параметризации задачи. Итак, как мы это сделали?

Когда у нас нет точного представления о распределении задач, т. Е. Менее 5 задач, стандартная тонкая настройка работает настолько хорошо, насколько это возможно. Это неожиданно, поскольку мы не можем делать обобщения, если наше распределение задач является вырожденным. По мере того, как распределение задач становится более богатым, Leap сходится намного быстрее, чем точная настройка. Важно отметить, что мы обнаружили, что инициализация выполняется намного лучше, а это означает, что она будет лучше справляться с задачами, в которых мы сталкиваемся с нехваткой данных. Поразительно, но использование коротких алгоритмов обучения (MAML, FOMAML) не обеспечивает точной настройки.

Мы также протестировали Leap в более требовательном сценарии, где каждая задача представляет собой отдельный набор данных компьютерного зрения (подробности см. В документе). Здесь для изучения задачи потребовались тысячи обновлений параметров. Мы обнаружили, что Leap не только улучшил скорость сходимости, но и улучшил конечную производительность, поскольку более быстрая сходимость защищает от переобучения. Наконец, мы немного переборщили и протестировали Leap на очень сложной задаче трансферного обучения в Reinforcement Learning, пакете Atari. Здесь для изучения задачи требуется много миллионов обновлений параметров.

Хотя у Leap нет накладных расходов во время обучения заданию, нам все же необходимо собирать полные траектории обучения, что делает обучение дорогостоящим. Тем не менее, мы обнаружили, что обучение на сотне шагов дает инициализацию с лучшими свойствами, чем запуск с нуля в каждой игре. Это улучшение было связано не с более быстрой сходимостью, а с более последовательным исследованием семян. Хотя это и не является окончательным, мы воспринимаем их как обнадеживающие результаты, свидетельствующие о том, что метаобучение может решать чрезвычайно сложные проблемы; очень волнующе!

Leap - это первый шаг к общему метаобучению, способному справиться с любым уровнем сложности. Он простой, легкий (постоянная память, незначительные накладные расходы на вычисления, линейная сложность) и может быть интегрирован с другими алгоритмами метаобучения, которые пытаются решать другие проблемы, такие как вероятностное рассуждение или встроенный вывод задач. Мы надеемся, что вы нашли вдохновение для своей следующей идеи, и с нетерпением ждем того, что вы придумаете. Не стесняйтесь обращаться к нам!

[1] Хе, Кайминг и др. «Маска р-спн». ICCV. 2017.
[2] Zhao, Hengshuang, et al. «Сеть разбора сцены пирамиды». CVPR. 2017.
[3] Папандреу, Джордж и др. «К точной оценке позы нескольких человек в дикой природе». CVPR. 2017.
[4] Петерс, Мэтью Э. и др. «Глубоко контекстуализированные представления слов». NAACL-HLT. 2018.
[5] Ховард, Джереми и Себастьян Рудеры. «Настроенные языковые модели для классификации текста». ACL. 2018.
[6] Рэдфорд, Алек и др. «Улучшение понимания языка с помощью генеративного предварительного обучения».
[7] Девлин, Джейкоб и др. «BERT: предварительная подготовка глубоких двунаправленных преобразователей для понимания языка». arXiv: 1810.04805
[8] Koch, Gregory, et al. «Сиамские нейронные сети для одноразового распознавания изображений». ICML. 2015.
[9] Виньялс, Ориол и др. «Соответствующие сети для обучения одним выстрелом». NeuIPS. 2016.
[10] Финн, Челси и др., «Модель-агностическое метаобучение для быстрой адаптации глубоких сетей». ICML. 2017.
[11] Рави, Сачин и Хьюго Ларошель. «Оптимизация как модель для быстрого обучения». ICML. 2017.
[12] Лейк, Бренден, «Изучение простых визуальных концепций одним выстрелом». CogSci. 2011.
[13] Никол, Алекс и др. al. «Об алгоритмах метаобучения первого порядка». ArXiv: 1803.02999. 2018.