В апреле компания OpenAI провела двухмесячный конкурс под названием Ретро-конкурс, в ходе которого участники должны были разработать агента, способного хорошо работать на невидимых специально созданных сценах Sonic the Hedgehog. эм>. Агенты были ограничены 100 миллионами шагов на этапе и 12 часами времени на виртуальной машине с 6 ядрами E5–2690v3, 56 ГБ ОЗУ и одним графическим процессором K80.

OpenAI предоставил три базовых агента: JERK (Just Enough Retained Knowledge), Rainbow DQN (Deep Q Network) и PPO (Proximal Policy Optimization). JERK — это базовый алгоритм без нейронной сети. Rainbow DQN и PPO — хорошо известные алгоритмы, которые достигли сверхчеловеческого уровня игры для большинства игр Atari 2600. Однако в «Сонике» ни один из трех агентов не приблизился к человеческим характеристикам. В то время как у людей средний балл составлял 7438,2, у самого высокого агента (Joint PPO) средний балл был 3127,9. Другими словами, было много возможностей для улучшения.

Когда я начал соревнование в мае, я очень мало знал об обучении с подкреплением. Я просмотрел лекции Дэвида Сильвера и только начал читать книгу Саттона и Барто. Я запускал несколько сред и базовых агентов в OpenAI Gym, но никогда не разрабатывал агент. Таким образом, я знал, что не готов к соревнованиям. Тем не менее, я должен был присоединиться после просмотра этого короткого видео:

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

В первую неделю единственными частями кода, которые я изменил в базовой версии Rainbow DQN, были числа. (Другими словами, я настроил гиперпараметры). Мне был знаком только один гиперпараметр: скорость обучения, и случайное изменение гиперпараметров не улучшало производительность агента. Таким образом, ко второй неделе я отказался от этого подхода и начал читать статьи по Rainbow DQN.

Среди семи статей меня больше всего заинтриговала статья Prioritized Experience Replay. Простая идея выборки с приоритетом вместо случайной выборки привела к ошеломляющему улучшению производительности. Кроме того, в документе было много предложений по возможным вариантам и улучшениям. Таким образом, я решил сосредоточиться на улучшении памяти опыта. В статье основное внимание уделялось приоритизации выборки, поэтому я решил сосредоточиться на сборе и удалении, других аспектах воспроизведения опыта.

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

Конкурс завершился вчера (5 июня). Мне не удалось попасть в топ-10 ни с одним из моих агентов, и я до сих пор не могу определить лучшего агента из-за высокой дисперсии оценок. Тем не менее, я добился своей цели. Мой агент смог найти сбой в пользовательской сцене и использовал его, чтобы обойти трудоемкие части сцены.

Несмотря на то, что теперь я понимаю алгоритм работы агента, я все еще так же взволнован, наблюдая, как агент находит ошибку, как и до начала конкурса. Я продолжу разработку агентов для других сред OpenAI Gym Retro. Всегда есть время для дополнительного (подкрепления) обучения и поиска ошибок!

Я хотел бы искренне поблагодарить команду OpenAI за проведение этого замечательного соревнования. С помощью Retro Contest я был мотивирован узнать о DQN, реализовать свои идеи и протестировать их, а также познакомиться с замечательными полезными людьми, также заинтересованными в обучении с подкреплением. Спасибо!

Первоначально опубликовано на сайте www.endtoend.ai 5 июня 2018 г.