OpenAI Baselines: DQN

Просмотреть код
Openai Baselines Dqn

Иллюстрация: Бен Барри (Ben Barry)

Мы открываем исходный код OpenAI Baselines — нашей внутренней разработки по воспроизведению алгоритмов обучения с подкреплением с производительностью на уровне опубликованных результатов. Мы будем выпускать алгоритмы в течение ближайших месяцев; сегодняшний релиз включает DQN и три его варианта.

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

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

Лучшие практики

Сравнение со случайным базовым решением:  в видео ниже агент выполняет случайные действия в игре H.E. R.O. Если вы увидите такое поведение на ранних этапах обучения, вас будет очень легко обмануть, заставив поверить, что агент обучается. Поэтому всегда следует проверять, превосходит ли ваш агент случайный алгоритм.

Image2 1

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

Смотрите на мир глазами своего агента:  как и в большинстве подходов глубокого обучения, для DQN мы склонны преобразовывать изображения наших сред в оттенки серого, чтобы уменьшить объем вычислений, необходимых во время обучения. Это может порождать собственные ошибки: когда мы запустили наш DQN-алгоритм на игре Seaquest, мы заметили, что наша реализация работает плохо. Осмотрев среду, мы обнаружили, что это произошло из-за того, что наши обработанные изображения не содержали рыб, как показано на этом рисунке.

Fish Img 1

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

Чтобы в будущем отлаживать подобные проблемы, Gym теперь содержит функцию play, которая позволяет исследователю легко видеть те же наблюдения, что и ИИ-агент.

Исправляйте ошибки, а затем гиперпараметры: после отладки мы приступили к калибровке гиперпараметров. В итоге мы выяснили, что настройка графика уменьшения (annealing schedule) для эпсилон — гиперпараметра, управляющего уровнем исследования, — оказывает огромное влияние на производительность. Наша финальная реализация снижает эпсилон до 0,1 за первый миллион шагов, а затем до 0,01 в течение следующих 24 миллионов шагов. Если бы наша реализация содержала ошибки, мы бы, скорее всего, подобрали другие настройки гиперпараметров, пытаясь справиться с проблемами, которые еще не диагностировали.

Дважды проверяйте свое толкование статей: В статье о DQN в журнале Nature авторы пишут: «Мы также сочли полезным ограничить член ошибки при обновлении […] в диапазоне от -1 до 1». Существует два способа интерпретировать это утверждение — ограничить целевую функцию или ограничить множитель при вычислении градиента. Первый вариант кажется более естественным, но из-за него градиент на переходах с большой ошибкой становится равным нулю, что ведет к неоптимальной производительности, как было обнаружено в одной реализации DQN. Второй вариант является правильным и имеет простое математическое толкование — функция потерь Хьюбера. Подобные ошибки можно выявлять, проверяя, соответствуют ли градиенты вашим ожиданиям — в TensorFlow это легко сделать с помощью функции compute_gradients.

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

Глубокое Q-обучение (Deep Q-Learning)

  • DQN: алгоритм обучения с подкреплением, который объединяет Q-обучение с глубокими нейронными сетями, позволяя обучению с подкреплением работать в сложных высокоразмерных средах, таких как видеоигры или робототехника.
  • Double Q Learning: исправляет склонность базового алгоритма DQN иногда переоценивать ценность, связанную с конкретными действиями.
  • Prioritized Replay: расширяет функцию буфера воспроизведения опыта (experience replay) в DQN, обучая воспроизводить воспоминания, в которых реальная награда существенно отличается от ожидаемой, что позволяет агенту корректировать свое поведение в ответ на формирующиеся неверные предположения.
  • Dueling DQN: разделяет нейронную сеть на две части — одна учится давать оценку ценности (value) на каждом шаге времени, а вторая вычисляет потенциальные преимущества (advantages) каждого действия; затем эти две составляющие объединяются для получения единой Q-функции действия-преимущества.

Чтобы начать работу, выполните следующие действия:

Python

1
pip install baselines
2
# Train model and save the results to cartpole_model.pkl
3
python -m baselines.deepq.experiments.train_cartpole
4
# Load the model saved in cartpole_model.pkl and visualize the learned policy
5
python -m baselines.deepq.experiments.enjoy_cartpole

Мы также предоставили обученных агентов, которых вы можете получить, выполнив команду:

Bash

1
python -m baselines.deepq.experiments.atari.download_model --blob model-atari-prior-duel-breakout-1 --model-dir /tmp/models
2
python -m baselines.deepq.experiments.atari.enjoy --model-dir /tmp/models/model-atari-prior-duel-breakout-1 --env Breakout --dueling

Бенчмарки

Frames seen by the agent (millions)

Мы включили iPython-блокнот, демонстрирующий производительность наших реализаций DQN в играх Atari. Вы можете сравнить производительность наших различных алгоритмов, таких как Dueling Double Q learning с Prioritized Replay (желтый), Double Q learning с Prioritized Replay (синий), Dueling Double Q learning (зеленый) и Double Q learning (красный).

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

Авторы

Шимон Сидор (Szymon Sidor), Джон Шульман (John Schulman)

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