Абстрактный

В последнее время обучение с подкреплением успешно применяется в различных задачах, таких как самоуправляемые автомобили, торговля и финансы, а также видеоигры. В этой статье мы решаем известную проблему управления роботами — проблему лунного посадочного модуля, используя Deep Q-Learning в среде OpenAI Gym LunarLander-v2. Агент-победитель может получить более 266 средних наград за 100 тестовых эпизодов. В документе также будет показано, что различные гиперпараметры, такие как размер пакета, скорость обучения и размер обновления, влияют как на скорость обучения в эпизодах, так и на производительность в наградах.

Введение

Проблема лунного посадочного модуля заключается в том, чтобы управлять двигателем ориентации огня, чтобы помочь посадочному модулю приземлиться на посадочную площадку. LunarLander-v2 — это упрощенная версия задачи в среде OpenAI Gym[1], которая требует, чтобы агент перемещался в 8-мерном пространстве состояний с шестью непрерывными переменными состояния и двумя дискретными, используя 4 действия для приземления на площадку: do ничего, запустить двигатель левой ориентации, запустить главный двигатель, запустить двигатель правой ориентации. Посадочная площадка всегда находится в координатах (0,0). Координаты — это первые два числа в векторе состояния. Если посадочный модуль удаляется от посадочной площадки, он теряет вознаграждение. Эпизод заканчивается, если посадочный модуль падает или останавливается, получая дополнительные -100 или +100 баллов. Каждая нога с контактом с землей — +10 баллов. Запуск основного двигателя — -0,3 балла за каждый кадр. Запуск бокового двигателя составляет -0,03 балла за каждый кадр. Чтобы получить стабильного и успешного агента, необходимо безопасно приземлиться на площадке со средним вознаграждением более 200 в 100 последовательных эпизодах.

В этой статье мы внедрили алгоритм Deep Q-Learning для решения проблемы с более чем 266 средними наградами в 100 тестовых эпизодах. Статья построена следующим образом: В разделе 2 мы опишем победившее решение и обсудим результаты. В разделе 3 мы рассмотрим, как различные параметры размера пакета, шагов обновления целевой сети и скорости обучения повлияют на процесс обучения агента. Затем мы обсудим некоторые неудачные попытки или подводные камни, которые мы испробовали с неутешительными результатами в разделе 4. Наконец, мы завершим статью дальнейшими улучшениями.

Глубокое Q-обучение с целевой сетью

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

Эффективное глубокое Q-обучение использует воспроизведение опыта и целевую сеть с жадной стратегией Epsilon для выбора действий для взаимодействия с окружающей средой и обновления весов нейронной сети на основе разницы между максимально возможным вознаграждением для следующего состояния и прогнозируемым значением для текущее состояние из Q-сети. На рис. 1 показано математическое представление алгоритма глубокого Q-обучения.

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

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

Чтобы сбалансировать исследование и эксплуатацию, мы используем жадную стратегию Epsilon для выбора действий на этапе обучения. Мы пробуем как затухание эпсилон на каждой итерации, так и затухание эпсилон на разных этапах, и мы обнаруживаем, что второй метод дает нам лучшую производительность. В частности, эпсилон задается на основе следующих правил: эпсилон = 0,5 для первых 50 итераций, эпсилон = 0,3 при итерации от 50 до 100, эпсилон = 0,2 при итерации от 100 до 300, эпсилон = 0,1 при итерации от 300 до 500, эпсилон = 0,05, когда итерация от 500 до 1000, и эпсилон = 0,01, когда итерация превышает 1000.

Что касается воспроизводимости, мы устанавливаем фиксированное случайное начальное число для библиотек Python, таких как numpy, tensorflow и random.

В нашем агенте-победителе, после долгих усилий по настройке параметров, мы используем два скрытых слоя с 32 и 64 измерениями соответственно. Мы обновляем целевую сеть каждые 20 шагов и оптимизируем сеть с помощью оптимизатора Adam со скоростью обучения 0,001 и размером пакета 64. Во время обучения мы отслеживаем скользящее среднее из 100 эпизодов, и если среднее вознаграждение превышает 200, мы прекращаем обучение агента. Каждый эпизод будет завершен, когда количество шагов достигнет предопределенного максимального количества шагов, 1000 здесь, или когда выполнено = True из среды тренажерного зала.

На рис. 2 показаны значения вознаграждения за опыт во время обучения. Синие линии обозначают вознаграждение за каждый тренировочный эпизод, а оранжевая линия показывает скользящее среднее значение за последние 100 эпизодов. Агент продолжает учиться со временем, и значение скользящего среднего увеличивается с увеличением количества обучающих эпизодов. Среднее значение стало положительным примерно после 300 эпизодов и превысило 200 после 600 эпизодов. Даже самая низкая награда в нескольких последних скользящих окнах выше 0.

На рис. 3 показаны характеристики обученной модели для 100 эпизодов в среде лунного посадочного модуля. Вместо того, чтобы использовать эпсилон-жадность для исследования среды на этапе обучения, при тестировании мы используем прогноз обученной модели для выбора действия с максимальной вероятностью. Обученная модель хорошо работает в окружающей среде, и все награды положительные. Средняя награда за 100 тестовых эпизодов составляет 266, причем даже самая низкая награда превышает 120. Результаты показывают, что агент также очень стабилен, помогая посадочному модулю безопасно приземлиться на площадку. Только в трех испытаниях награды ниже 200.

Влияние гиперпараметров

Крайне важно проанализировать, как гиперпараметры влияют на процесс обучения и производительность агента. В этом разделе мы тестируем размер пакета, размер обновления для целевой сети и скорость обучения для нейронной сети в Deep Q-Learning. Для каждого гиперпараметра мы выбираем три значения и сравниваем минимальные эпизоды, необходимые для достижения среднего вознаграждения более 200 в последовательных 100 эпизодах. Мы обнаружили, что различные гиперпараметры оказывают существенное влияние на процесс обучения агента.

Размер партии

Мы используем разные размеры пакетов, чтобы проверить, как это влияет на процесс обучения. Как видно на рис. 4, агент с размером пакета 64 сходится быстрее, чем два других агента с размером пакета 32 и 128 соответственно. Если размер пакета слишком мал (32), потребуется около 2000 итераций, чтобы получить достаточно данных для сходимости. Однако, если размер пакета слишком велик (128), он также работает плохо, потому что больший размер пакета вызывает некоторые трудности в численной оптимизации весов сети[3], но он все равно работает лучше, чем агент с размером пакета 32.

Обновить размер

Как показано на рис. 5, мы оцениваем частоту обновления целевой сети и ее влияние на обучение. Когда размер обновления равен 10, агент обучается с более чем 1000 эпизодов для конвергенции. Лучший агент обучается с размером обновления 20, для сходимости которого требуется около 450 эпизодов. Причина может заключаться в том, что если мы будем обновлять целевую сеть слишком часто (например, размер обновления 10), это повлияет на стабильность сети, в то время как если мы будем обновлять целевую сеть реже (например, размер обновления 30), хотя обучение стабильна, модель медленно обучается из-за задержки обновления весов. Мы также обучили агента без целевой сети, и оказалось, что агент изучает более 10 000 эпизодов и до сих пор не может решить задачу. В заключение, необходимый и правильный размер обновления очень важен для успеха агента Deep Q-Learning.

Скорость обучения

Скорость обучения также играет важную роль в обучении агента. Мы тестируем три скорости обучения: 0,001, 0,0015, 0,002. На рис. 6 показано, что при скорости обучения 0,001 производительность выше, и модель сходится примерно с 450 эпизодами. По мере увеличения скорости обучения веса нейронной сети обновляются больше из-за градиентного спуска, что приводит к увеличению количества шагов обучения, чтобы найти глобальный минимум для функции потерь.

Неудачные попытки и подводные камни

Во время проекта мы столкнулись с несколькими неудачными попытками, когда пытались решить проблему. Вначале мы выбрали ванильное глубокое Q-обучение без целевой сети, что заняло много долгих часов, и модель плохо обучалась. Затем мы использовали неправильные значения для скорости обучения и выбрали неподходящий оптимизатор для нейронной сети, и получили очень плохую производительность. К счастью, мы решили их все с помощью множества экспериментов. Мы использовали Google Colab для одновременного запуска нескольких экспериментов, чтобы найти оптимальные значения для решения проблемы лунного посадочного модуля.

Ванильное глубокое Q-обучение

Мы начинаем решать проблему лунного посадочного модуля с помощью Deep Q-Learning без целевой сети, и больно смотреть, как агент учится в более чем 10 000 тренировочных эпизодов без единой положительной награды, хотя мы тестируем разные параметры. Позже мы использовали целевую сеть, чтобы решить эту проблему и добиться очень быстрой конвергенции агента с несколькими сотнями эпизодов. Целевая сеть обеспечивает более стабильную среду обучения, в которой веса сети обновляются каждые несколько шагов копией сети поведения.

Оптимизатор

Чтобы обучить нейронную сеть для глубокого Q-обучения, для сравнения производительности использовались разные оптимизаторы, такие как Adam, SGD, AdaDelta и RMSProp. Оказалось, что только оптимизатор Adam обеспечивает быструю сходимость к модели, а другим для обучения требуется более 2000 эпизодов. Учитывая ограниченное время, мы не тратили много времени на настройку параметров для других оптимизаторов, но это определенно стоит попробовать в будущем.

Вначале мы установили неправильную скорость обучения как 0,01 или 0,005, и потребовалось более 8 часов, чтобы агент изучил политики. Позже мы использовали 0,001, и модель решила проблему за 40 минут. Правильная скорость обучения может обеспечить лучшую способность нейронной сети к обобщению в Deep Q-Learning. Нейронная сеть использует градиентный спуск для обновления весов для скрытых единиц, и если скорость обучения слишком велика, функция потерь застрянет в локальном минимуме, и ей потребуется все больше и больше обучающих данных, чтобы найти глобальный минимум. Если скорость обучения слишком мала, весам нужно больше шагов, чтобы найти локальный минимум.

Двойное глубокое Q-обучение

Глубокое Q-обучение использует самое высокое значение Q для расчета ошибки TD. Однако верно ли предположение, что лучшим действием для следующего состояния является действие с наивысшим значением Q? Мы знаем, что значения Q зависят от действий, которые мы предпринимаем, и состояний соседства, которые мы исследовали. Если мы возьмем наибольшее значение Q, это принесет нам проблему завышения значений Q. Двойное глубокое Q-обучение — это метод решения этой проблемы.

Когда мы реализовали алгоритм, мы допустили ошибку, на обнаружение которой ушло некоторое время. В Double Deep Q-Learning модель использует поведенческую сеть для прогнозирования значений для следующего состояния и выбора действия на основе значений Q. Затем модель использует целевую сеть для вычисления значения для следующего состояния с учетом действия из сети поведения. Наконец, модель снова использовала поведенческую сеть для текущего состояния и использовала значения из целевой сети для обновления значений Q для текущего состояния. Вначале очень сложно подумать, какую сеть использовать на каком этапе. Нам нужно использовать поведенческую сеть дважды: один для прогнозирования значений для текущего состояния, чтобы обновить значение, другой для прогнозирования значений для следующего состояния, чтобы выбрать действия с максимальным вознаграждением. Здесь мы допустили ошибку, и агенту потребовалось много времени для обучения, что намного хуже, чем победившее решение Deep Q-Learning. После проверки документа4] снова и снова мы, наконец, правильно и успешно внедрили двойное глубокое Q-обучение.

Вывод

В заключение мы заметили, что Deep Q-Learning — это мощные алгоритмы, которые могут эффективно решать сложные задачи, такие как Lunar Lander. Однако выбор правильных параметров и сетей, а также использование целевой сети и воспроизведения опыта значительно влияют на его производительность. Крайне важно настроить такие параметры, как скорость обучения для основной сети и размер обновления для целевой сети.

Для будущей работы мы хотели бы попробовать другие модели, такие как Sarsa, DDDQN, PPO и другие. Это обеспечит более наглядное сравнение эффективности различных алгоритмов. Помимо модели, мы также можем изменить структуру нейронных сетей, например, добавить слой Dropout или BatchNormalization или использовать в сети больше слоев с различными скрытыми единицами.

Ссылка:

[1] . [Онлайн]. Доступно: https://тренажерный зал. опенай . com/envs/LunarLander-v2/.

[2] V.M.K.K.D.S.A.G.I.A.D.W.M. Riedmiller, «Игра в atari с глубоким обучением с подкреплением», [On-line]. Доступно: https://www. cs. Торонто. edu/∼vmnih/docs/dqn.pdf.

[3] П. А. Адам Стоук, Ускоренные методы обучения с глубоким подкреплением, январь 2019 г.

[4] Д. С. Хадо ван Хасселт Артур Гез, «Глубокое обучение с подкреплением с двойным q-обучением», декабрь 2015 г.

Вы можете связаться со мной в LinkedIn и поставить аплодисменты статье, если считаете ее полезной!