[Перевод] Глубинное обучение с подкреплением пока не работает

Об авторе. Алекс Ирпан — разработчик из группы Brain Robotics в Google, до этого работал в лаборатории Berkeley Artificial Intelligence Research (BAIR).

Здесь в основном цитируются статьи из Беркли, Google Brain, DeepMind и OpenAI за последние несколько лет, потому что их работы наиболее заметны с моей точки зрения. Почти наверняка я что-то упустил из более старой литературы и от других организаций, так что прошу прощения — я всего лишь один человек, в конце концов.

ee96255172175888c7c273e689b71b0b.jpg


Введение
Однажды в Facebook я заявил следующее.

Когда кто-то спрашивает, может ли обучение с подкреплением (RL) решить их проблему, я сразу отвечаю, что не может. Думаю, что это верно как минимум в 70% случаев.

Глубинное обучение с подкреплением сопровождается массой шумихи. И на то есть хорошие причины! Обучение с подкреплением (RL) — невероятно общая парадигма. В принципе, надёжная и высокопроизводительная система RL должна быть прекрасна во всём. Слияние этой парадигмы с эмпирической силой глубинного обучения очевидно само по себе. Глубинное RL — это то, что больше всего похоже на сильный ИИ, и это своего рода мечта, которая подпитывает миллиарды долларов финансирования.

К сожалению, в реальности эта штука пока не работает.

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

Несколько раз я видел, как людей соблазняли последние результаты. Они впервые пробовали глубинное RL и всегда недооценивали трудности. Без сомнения, эта «модельная задача» не так проста, как кажется. И без сомнения, эта область несколько раз их ломала, прежде чем они научились устанавливать реалистичные ожидания в своих исследованиях.

Тут нет чьей-то персональной ошибки. Здесь системная проблема. Легко нарисовать историю вокруг положительного результата. Попробуйте сделать это с отрицательным. Проблема в том, что исследователи чаще всего получают именно отрицательный результат. В некотором смысле такие результаты даже более важны, чем положительные.

В этой статье я объясню, почему глубинное RL не работает. Приведу примеры, когда он всё-таки работает и как добиться более надёжной работы в будущем, на мой взгляд. Я делаю это не для того, чтобы люди перестали работать над глубинным RL, а потому что легче добиться прогресса, если все понимают наличие проблем. Легче достичь согласия, если реально говорить о проблемах, а не снова и снова натыкаться на те же грабли отдельно друг от друга.

Хотелось бы видеть больше исследований на тему глубинного RL. Чтобы сюда приходили новые люди. И чтобы они знали, во что ввязываются.

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

  • Здесь цитируются несколько научных статей. Обычно я привожу убедительные негативные примеры и умалчиваю о положительных. Это не значит, что мне не нравится научная работа. Все они хорошие — стоит прочитать, если у вас есть время.
  • Я использую термины «обучение с подкреплением» и «глубинное обучение с подкреплением» как синонимы, потому что в моей повседневной работе RL всегда подразумевает глубинное RL. Здесь подвергается критике эмпирическое поведение глубинного обучения с подкреплением, а не обучения с подкреплением в целом. В цитируемых статьях обычно описана работа агента с глубинной нейросетью. Хотя эмпирически критика может относиться также к линейным RL (linear RL) или табличным RL (tabular RL), я не уверен, что эту критику можно распространить на более мелкие задачи. Шумиха вокруг глубинного RL обусловлена тем, что RL преподносится как решение для больших, сложных, многомерных сред, где необходима хорошая аппроксимирующая функция. Именно с этой шумихой, в частности, нам нужно разобраться.
  • Статья структурирована так, чтобы двигаться от пессимизма к оптимизму. Знаю, что она немного длинновата, но буду очень признателен, если вы найдёте время прочитать её целиком, прежде чем отвечать.


Без дальнейших церемоний, вот некоторые из случаев, когда глубинное RL даёт сбой.

Глубинное обучение с подкреплением может быть ужасно неэффективным
Самый известный бенчмарк для глубинного обучения с подкреплением — игры Atari. Как показано в ставшей известной статье Deep Q-Networks (DQN), если объединить Q-Learning с нейронными сетями разумного размера и некоторыми трюками оптимизации, то можно достичь человеческих показателей в нескольких играх Atari или превзойти их.

Игры Atari игры работают на 60 кадрах в секунду. Можете сходу прикинуть, сколько кадров нужно обработать самой лучшей DQN, чтобы показать результат как у человека?

Ответ зависит от игры, поэтому взглянем на недавнюю статью компании Deepmind — Rainbow DQN (Hessel et al, 2017). В ней показано, как некоторые последовательные улучшений оригинальной архитектуры DQN улучшают результат, а сочетание всех улучшений максимально эффективно. Нейросеть превосходит результат человека в более чем 40 из 57 игр Atari. Результаты показаны на этом удобном графике.

91709eb6826b82f803fdf3c634321592.png

По вертикальной оси отложен «средний по медиане результат, нормализованный по человеческому». он вычисляется путём обучения 57 нейросетей DQN, по одной для каждой игры Atari, с нормализацией результата каждого агента, когда человеческий результат берётся за 100%, а затем вычислением среднего медианного результата для 57 игр. RainbowDQN превосходит рубеж 100% после обработки 18 миллионов фреймов. Это соответствует примерно 83 часам игры, плюс время на обучение, сколько бы они ни занимало. Это немало времени для простеньких игр Atari, которые большинство людей схватывает за пару минут.

Учтите, что 18 млн фреймов на самом деле очень хороший результат, ведь предыдущий рекорд принадлежал системе Distributional DQN (Bellemare et al, 2017), которой требовалось 70 млн фреймов, чтобы достичь результата 100%, то есть примерно в четыре раза больше времени. Что касается Nature DQN (Mnih et al, 2015), он вообще никогда не достигает 100% медианного результата, даже после 200 миллионов фреймов.

Когнитивное искажение «ошибка планирования» гласит, что завершение задачи обычно занимает больше времени, чем вы предполагали. В обучении с подкреплением есть собственная ошибка планирования — для обучения обычно требуется больше образцов, чем вы думали.

Проблема не ограничивается играми Atari. Второй по популярности тест — бенчмарки MuJoCo, набор задач в физическом движке MuJoCo. В этих задачах на входе обычно даются положение и скорость каждого шарнира в симуляции некоего робота. Хотя здесь не нужно решать задачу зрения, системам RL требуется для обучения от $10^5$ до $10^7$ шагов, в зависимости от задачи. Это невероятно много для контроля в таком простом окружении.

Статья DeepMind по паркуру (Heess et al, 2017), проиллюстрированная ниже, обучена с применением 64 воркеров на протяжении более 100 часов. В статье не уточняется, что такое «воркер», но я предполагаю, что это означает один процессор.


Это суперрезультат. Когда он впервые вышел, я был удивлен, что глубинное RL вообще сумело обучиться таким аллюрам на бегу.

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

Здесь есть очевидный контраргумент:, а что если просто игнорировать эффективность обучения? Есть определённые окружения, позволяющие легко генерировать опыт. Например, игры. Но для любого окружения где такое невозможно, RL сталкивается с огромными проблемами. К сожалению, большинство окружений попадают именно в эту категорию.

Если вас волнует только итоговая производительность, то многие проблемы лучше решаются другими методами
При поиске решений любой проблемы обычно приходится искать компромисс в достижении разных целей. Вы можете сделать акцент на действительно хорошем решении именно этой конкретной проблемы, или вы можете сделать акцент на максимальном вкладе в общее исследование. Лучшие проблемы — те, где для получения хорошего решения требуется хороший вклад в исследования. Но в реальности трудно найти проблемы, которые отвечают этим критериям.

Чисто в демонстрации максимальной эффективности глубинное RL показывает не очень впечатляющие результаты, потому что его постоянно превосходят другие методы. Вот видеоролик с роботами MuJoCo, которые управляются путём интерактивной оптимизации траектории. Правильные действия вычисляются почти в реальном времени, интерактивно, без автономного обучения. Да, и всё работает на оборудовании 2012 года (Tassa et al, IROS 2012).


Думаю, эту работу вполне можно сравнить со статьёй DeepMind по паркуру. Чем они отличаются?

Разница в том, что здесь авторы применяют управление с прогнозирующими моделями, работая с реальной моделью земного мира (физический движок). В RL нет таких моделей, что сильно затрудняет работу. С другой стороны, если планирование действий на основе модели настолько улучшает результат, то зачем мучиться с навороченным обучением по правилам RL?

Аналогичным образом можно легко превзойти нейросети DQN в Atari с готовым решением поиска по дереву методом Монте-Карло (MCTS). Вот основные показатели из работы Guo et al, NIPS 2014. Авторы сравнивают результаты обученных DQN с результатами агента UCT (это стандартная версия современного MCTS).

a0fd12cd99514b6f090bd71aec4c5e0a.png

b5952ad8d6d8eca97669f4d6c6c313a1.png

Опять же, это нечестное сравнение, потому что DQN не осуществляет поиск, а MCTS делает именно поиск по реальной модели земной физики (эмулятор Atari). Но в некоторых ситуациях вас не волнуют, здесь честное или нечестное сравнение. Иногда просто нужно, чтобы всё работало (если вам нужно полная оценка UCT, см. приложение оригинальной научной статьи Arcade Learning Environment (Bellemare et al, JAIR 2013)).

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

Опыт показывает, что за исключением редких случаев заточенные на конкретные задачи алгоритмы работают быстрее и лучше, чем обучение с подкреплением. Это не проблема, если вы разрабатываете глубинное RL ради самого глубинного RL, но лично меня расстраивает сравнение эффективности RL c… ну, с чем-нибудь ещё. Одна из причин, почему мне так понравилась AlphaGo — потому что это была однозначная победа глубинного RL, а такое происходит не очень часто.

Из-за всего этого труднее объяснять людям, почему мои задачи такие крутые, сложные и интересные, ведь часто у них нет контекста или опыта, чтобы оценить, почему же они так сложны. Существует определённая разница между тем, что люди думают о возможностях глубинного RL — и его реальными возможностями. Сейчас я работаю в области робототехники. Рассмотрим компанию, которая приходит на ум большинству людей, если вы упоминаете робототехнику: Boston Dynamics.


Эта штука не использует обучение с подкреплением. Я несколько раз встречал людей, которые думали, что здесь используется RL, но нет. Если поищите опубликованные научные работы от группы разработчиков, то найдёте статьи с упоминанием меняющихся во времени линейно-квадратичных регуляторов, решателей задач квадратичного программирования и конвексной оптимизации. Другими словами, они применяют в основном классические методы робототехники. Выходит, что эти классические техники нормально работают, если грамотно их применить.

Для обучения с подкреплением обычно нужна функция вознаграждения
Обучение с подкреплением предполагает существование функции вознаграждения. Обычно она или есть изначально, или настраивается вручную в автономном режиме и остаётся неизменной во время обучения. Я говорю «обычно», потому что бывают исключения, такие как имитационное обучение или обратное RL (когда функция вознаграждения восстанавливается постфактум), но в большинстве вариантов RL используют вознаграждение как оракул.

Важно отметить: чтобы RL правильно работало, функция вознаграждения должна охватить в точности то, что нам нужно. И я имею в виду в точности. RL раздражающе склонен к переобучению (overfit), что ведёт к неожиданным последствиям. Вот почему Atari настолько хороший бенчмарк. Там не только легко получить множество образцов, но и в каждой игре есть ясная цель — количество очков, так что никогда не придётся беспокоиться о поиске функции вознаграждения. И вы знаете, что у всех остальных та же самая функция.

Популярность задач MuJoCo объясняется теми же причинами. Поскольку они работают в симуляции, то у вас есть полная информация о состоянии объекта, что значительно упрощает создание функции вознаграждения.

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


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

Сама по себе функция вознаграждения не являлась бы большой проблемой, если бы не…

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

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

h9dchfesck8yxwcnxibb5n0pdkq.png

Цель — научиться бегать рысцой. Награда — скорость HalfCheetah (видео).

Это плавное или сформированное (shaped) вознаграждение, то есть оно возрастает с приближением к конечной цели. В отличие от разреженного (sparse) вознаграждения, которое даётся только по достижении конечного состояния цели, а в других состояниях отсутствует. Плавный рост вознаграждения часто намного проще в освоении, потому что он обеспечивает положительную обратную связь, даже если обучение не дало полного решения проблемы.

К сожалению, вознаграждение с плавным ростом может быть предвзято (bias). Как уже говорилось, из-за этого проявляется неожиданное и нежелательное поведение. Хорошим примером являются гонки на лодках из статьи в блоге OpenAI. Предполагаемая цель — прийти к финишу. Можете представить вознаграждение как +1 за окончание гонки в заданное время, и вознаграждение 0 в ином случае.

Функция вознаграждения даёт очки за пересечение чекпоинтов и за сбор бонусов, которые позволяют быстрее добраться до финиша. Как выяснилось, сбор бонусов даёт больше очков, чем завершение гонки.


Если честно, эта публикация поначалу меня немного раздосадовала. Не потому что она неправильная! А потому что мне казалось, что она демонстрирует очевидные вещи. Конечно же обучение с подкреплением даст странный результат, когда вознаграждение неверно определено! Мне казалось, что публикация придаёт неоправданно большое значение данному конкретному случаю.

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

Алгоритмы RL попадают в чёрную дыру, если им приходится более-менее догадываться об окружающем мире. Самая универсальная категория безмодельных RL — это почти как оптимизация «чёрного ящика». Таким системам только разрешают предположить, что они находятся в MDP (марковский процесс принятия решений) — и больше ничего. Агенту просто говорят, что вот за это ты получаешь +1, а за это — не получаешь, а всё остальное должен узнать самостоятельно. Как и при оптимизации «чёрного ящика», проблема в том, что хорошим считается любое поведение, которое даёт +1, даже если вознаграждение получено неправильным путём.

Классический пример не из сферы RL — когда кто-то применил генетические алгоритмы для проектирования микросхем и получил схему, в которой для окончательного дизайна был необходим один неподключенный логический вентиль.

cb149223a5dec3a7d3c9051d63a0334e.png
Серые элементы необходимы для корректной работы схемы, в том числе элемент в левом верхнем углу, хотя он ни к чему не подключен. Из статьи «An Evolved Circuit, Intrinsic in Silicon, Entwined with Physics»

Или более свежий пример — вот публикация в блоге Salesforce от 2017 года. Их целью было составление резюме для текста. Базовая модель обучалась с учителем, затем её оценивали автоматизированной метрикой под названием ROUGE. ROUGE — это недифференцируемое вознаграждение, но RL умеет работать с такими. Так что они попытались применить RL для оптимизации ROUGE напрямую. Это даёт высокий показатель ROUGE (ура!), но на самом деле не очень хорошие тексты. Вот пример.

Баттона лишили его 100-й гонки за McLaren после того, как ERS не пустила его на старт. Так завершились неудачные выходные для британца. Баттона опередили в квалификации. Финишировал впереди Нико Росберга в Бахрейне. У Льюиса Хэмилтона. В 11 гонках. Гонка. Чтобы лидировать 2000 кругов. В… И. — Paulus et al, 2017


И хотя модель RL показала максимальный результат ROUGE…

d78d17d851b470c97d9a37e98b12accd.png

…они в итоге решили использовать другую модель для составления резюме.

Ещё один забавный пример. Это из статьи Popov et al, 2017, также известной как «статья по складыванию конструктора Лего». Авторы применяют распределённую версию DDPG для обучения правилам захвата. Цель — ухватить красный кубик и насадить его на синий.

Они заставили её работать, но столкнулись с интересным случаем сбоя. Начальное подъёмное движение вознаграждается исходя из высоты поднятия красного блока. Это определяется z-координатой нижней грани кубика. В одном из вариантов сбоя модель научилась переворачивать красный кубик нижней гранью вверх, а не поднимать его.


Ясно, что такое поведение не предполагалось. Но RL это не волнует. С точки зрения обучения с подкреплением она получила вознаграждение за переворачивание кубика — поэтому будет продолжать переворачивать кубик.

Один из способов решения этой проблемы — сделать вознаграждение разреженным, давая его только после соединения кубиков. Иногда это срабатывает, потому что редкое вознаграждение поддаётся обучению. Но часто это не так, поскольку отсутствие позитивного подкрепления всё слишком усложняет.

Ещё один вариант решения проблемы — тщательное формирование вознаграждения, добавление новых условий вознаграждения и корректировка коэффициентов для уже существующих условий до тех пор, пока алгоритм RL не начнёт демонстрировать желаемое поведение при обучении. Да, возможно побороть RL на этом фронте, но такая борьба не приносит удовлетворения. Иногда она необходима, но я никогда не чувствовал, что чему-то научился в процессе этого.

Для справки, здесь одна из функций вознаграждения из статьи по складыванию конструктора Лего.

cea4f1c405600c81096b8c953d37de50.png

Не знаю, сколько времени ребята потратили на разработку этой функции, но по количеству термов и разных коэффициентов я бы сказал «много».

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

  • Коллега учит агента ориентироваться в комнате. Эпизод заканчивается, если агент выходит за границы, но в этом случае не накладывается штраф. По окончании обучения агент усвоил поведение самоубийцы, потому что отрицательное вознаграждение было очень легко получить, а положительное — слишком сложно, так что быстрая смерть с результатом 0 оказалась предпочтительнее, чем долгая жизнь с высоким риском отрицательного результата.
  • Друг обучал симулятор руки робота двигаться в направлении определённой точки над столом. Оказывается, точка была определена относительно стола, а стол не был ни к чему привязан. Модель научилась очень сильно стучать по столу, заставляя его упасть, что перемещало целевую точку — и та оказывалась рядом с рукой.
  • Исследователь рассказывал о применении RL для обучения симулятора роботизированной руки брать молоток и забивать гвоздь. Первоначально вознаграждение определялось тем, насколько далеко гвоздь вошёл в отверстие. Вместо того, чтобы взять молоток, робот забивал гвоздь собственными конечностями. Тогда они добавили вознаграждение, чтобы поощрить робота брать молоток. В итоге усвоенной стратегией для робота стало взять молоток… и бросить инструмент в гвоздь, а не использовать его нормальным способом.


Правда, всё это — истории из чужих уст, лично я не видел видеоролики с таким поведением. Но ни одна из этих историй не кажется мне невозможной. Я погорел на RL слишком много раз, чтобы верить в обратное.

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

Даже с хорошим вознаграждением бывает трудно избежать локального оптимума
Предыдущие примеры RL часто называют «хаками вознаграждения». Как по мне, это умное, нестандартное решение, которое приносит большее вознаграждение, чем предполагаемое решение от проектировщика задачи.

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

Вот одно из моих любимых видео. Здесь реализована нормализованная функция преимущества, которая обучается в среде HalfCheetah.

h9dchfesck8yxwcnxibb5n0pdkq.png

С точки зрения постороннего наблюдателя это очень, очень глупо. Но мы называем это глупым только потому что смотрим со стороны и имеем кучу знаний о том, что перемещаться на ногах лучше, чем лёжа на спине. RL не знает этого! Он видит вектор состояния, посылает векторы действий и видит, что получает некоторое положительное вознаграждение. Вот и всё.

Вот самое правдоподобное объяснение, которое я могу придумать по поводу того, что произошло во время обучения.

  • В процессе случайного исследования модель обнаружила, что упасть вперёд выгоднее, чем оставаться без движения.
  • Модель достаточно часто делала это, чтобы «прошить» такое поведение и начать падать непрерывно.
  • После падения вперёд модель узнала, что если применить достаточное усилие, то можно сделать сальто назад, которое даёт чуть больше награды.
  • Модель достаточно часто делала сальто — и убедилась, чтобы это хорошая идея, так что теперь обратное сальто «прошито» в постоянное поведение.
  • С условием постоянных сальто назад, что проще для модели — обучиться исправленному поведению и пойти по «стандартному пути» или научиться двигаться вперед, лёжа на спине? Я бы поставил на второй вариант.


Это очень смешно, но явно не то, что мы хотим от робота.

Вот ещё один неудачный пример, на этот раз в окружении Reacher (видео)

fddbmxo99tsxafisrm_sugkemzs.png

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

В обоих случаях мы видим классическую проблему разведки−эксплуатации, которая с незапамятных времён преследует обучение с подкреплением. Ваши данные вытекают из текущих правил. Если текущие правила предусматривают широкую разведку, вы получите ненужные данные и ничему не обучитесь. Слишком сильно эксплуатируете — и «прошьёте» неоптимальное поведение.

Есть несколько интуитивно приятных идей на этот счёт — внутренние побуждения и любопытство, разведка на основе подсчёта и т.д. Многие из этих подходов впервые предложили в 80-е годы или ранее, а некоторые позже пересмотрели для моделей глубокого обучения. Но насколько я знаю, ни один подход не работает стабильно во всех средах. Иногда помогает, иногда нет. Было бы неплохо, чтобы какой-то трюк разведки срабатывал везде, но я сомневаюсь, что в обозримом будущем найдут серебряную пулю такого калибра. Не потому что никто не пытается, а потому что разведка-эксплуатация очень, очень, очень, очень сложное дело. Цитата из статьи о многоруком бандите из Википедии:

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

(Источник: Q-Learning for Bandit Problems, Duff 1995)

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

Даже если глубинное RL работает, он может переобучиться до странного поведения

Глубинное обучение популярно, потому что это единственная область машинного обучения, где социально приемлемо обучаться на тестовом наборе.

(Источник)

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

Сети DQN справляются со многими играми Atari, потому что всё обучение каждой модели сосредоточено на единственной цели — добиться максимального результата в одной игре. Окончательную модель невозможно расширить на другие игры, потому что её так не обучали. Вы можете настроить обученную DQN для новой игры Atari (см. работу Progressive Neural Networks (Rusu et al, 2016)), но никакой гарантии, что такой перенос состоится, и обычно никто не ожидает этого. Это не тот дикий успех, который видят люди на предобученных признаках ImageNet.

Чтобы предупредить некоторые очевидные комментарии: да, в принципе, обучение на широком диапазоне сред может решить некоторые проблемы. В отдельных случаях такое расширение действия модели происходит само собой. Примером может служить навигация, где можно пробовать случайные локации целей и использовать универсальные функции для обобщения. (см. Universal Value Function Approximators, Schaul et al, ICML 2015). Я считаю эту работу очень многообещающей, и позже приведу больше примеров из этой работы. Но думаю, что возможности обобщения глубинного RL пока не настолько велики, чтобы справиться с разнообразным набором задач. Восприятие стало намного лучше, но у глубинного RL ещё впереди тот момент, когда появится «ImageNet для управления». OpenAI Universe пыталась разжечь этот костёр, но из того, что я слышал, задача оказалась слишком сложной, так что они добились немногого.

Пока нет такого момента для обобщения моделей, мы застряли с удивительно узкими по охвату моделями. В качестве примера (и в качестве повода посмеяться над моей собственной работой) посмотрим на статью Can Deep RL Solve Erdos-Selfridge-Spencer Games? (Raghu et al, 2017). Мы изучили комбинаторную игру для двух игроков, где есть решение в аналитическом виде для оптимальной игры. В одном из первых экспериментов мы зафиксировали поведение игрока 1, а затем обучили игрока 2 с помощью RL. При этом вы можете считать действия игрока 1 частью среды. Обучая игрока 2 против оптимального игрока 1, мы показали, что RL способен показать высокий результат. Но когда мы применили те же правила против неоптимального игрока 1, то эффективность игрока 2 упала, потому что она не распространялась на неоптимальных противников.

Авторы статьи Lanctot et al, NIPS 2017 получили похожий результат. Здесь два агента играют в лазертаг. Агенты обучены с помощью мультиагентного обучения с подкреплением. Для проверки обобщения обучение запустили с пятью случайными исходными точками (сидами). Вот видеозапись агентов, которых обучили играть друг против друга.


Как видите, они обучились сближаться и стрелять друг в друга. Затем авторы взяли игрока 1 из одного эксперимента — и свели его с игроком 2 из другого эксперимента. Если усвоенные правила обобщаются, то мы должны увидеть похожее поведение.

Спойлер: мы его не увидим.


Кажется, это общая проблема многоагентных RL. Когда агенты обучаются друг против друга, то происходит своего рода совместная эволюция. Агенты обучаются реально хорошо биться друг с другом, но когда их направляют против игрока, с которым они раньше не встречались, то эффективность снижается. Хочу отметить, что единственное различие между этими видеороликами — случайный сид. Тот же алгоритм обучения, те же гиперпараметры. Разница в поведении чисто из-за случайного характера начальных условий.

Тем не менее, есть некоторые впечатляющие результаты, полученные в среде с самостоятельной игрой друг против друга — они как будто противоречат общему тезису. В блоге OpenAI есть хорошая публикация о некоторых их работах в этой области. Самостоятельная игра также является важной частью AlphaGo и AlphaZero. Моя интуитивная догадка заключается в том, что если агенты обучаются в одинаковом темпе, то могут постоянно конкурировать и ускорять обучение друг друга, но если один из них учится намного быстрее другого, то слишком использует уязвимости слабого игрока — и переобучается. Как вы переходите от симметричной самостоятельной игры к общим мультиагентным настройкам, то становится намного сложнее убедиться, что обучение идёт на одинаковой скорости.

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

Обучение с учителем стабильно. Фиксированный датасет, проверка истинными данными. Если немного изменить гиперпараметры, функционирование не слишком изменится. Не все гиперпараметры работают хорошо, но за все эти годы найдено много эмпирических трюков, так что многие гиперпараметры демонстрируют признаки жизни во время обучения. Эти признаки жизни очень важны: они говорят, что вы на правильном пути, делаете что-то разумное — и нужно уделить больше времени.

В настоящее время глубинное RL вообще не стабилен, что очень раздражает в процессе исследований.

Когда я начал работать в Google Brain, то практически сразу занялся реализацией алгоритма из вышеупомянутой статьи Normalized Advantage Function (NAF). Я думал, это займёт всего две-три недели. У меня было несколько козырей: определённое знакомство с Teano (которое хорошо переносится на TensorFlow), какой-то опыт работы с глубинным RL, а ещё ведущий автор статьи по NAF стажировался в Brain, так что я мог приставать к нему с вопросами.

В итоге мне понадобилось шесть недель, чтобы воспроизвести результаты, из-за нескольки

© Habrahabr.ru