В этом посте я рассмотрю Deep Q Networks, подход к обучению с подкреплением, который использует нейронные сети для изучения состояний и действий. Проект является частью наностепени Udacity Deep Reinforcement Learning.

В рамках этого проекта я рассмотрю следующие темы и покажу, как реализовано Deep Q Learning для реальной игры на Unity:

  1. Как устроена сеть Deep Q Learning Network и как она обучается с использованием памяти воспроизведения.
  2. Чем сеть Deep Q Learning Network отличается от своих разновидностей, таких как Dueling Networks.
  3. Как модель обученной сети обучения Deep Q может использоваться для взаимодействия и игры в реальной среде.

Среда, используемая для этого проекта, имеет непрерывное пространство состояний, представленное в 37 измерениях, и 4 действия (влево, вверх, вправо, вниз). Цель среды - собирать желтые бананы и избегать синих бананов, которые возвращают награду +1 или -1 соответственно.

Обзор алгоритма

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

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

Мы называем это Q-Learning из-за реального алгоритма. Посмотрим на псевдокод:

На каждой итерации Q Learning мы смотрим на 5 вещей:

  • a - действие, предпринимаемое агентом в среде на временном шаге t
  • s - состояние среды на временном шаге t
  • r - немедленная награда, возвращаемая из среды после выполнения действия a
  • π - политика, используемая агентом для определения следующего действия
  • Q - долгосрочная отдача для агента, когда он выполняет действие a в состоянии s. В отличие от r, который представляет собой краткосрочное вознаграждение, Q относится к объединенному вознаграждению за все будущие состояния и действия, начиная с его текущего положения.

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

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

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

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

Используемая функция Q Value изучается с помощью нейронной сети в Deep Q Learning. Для этого проекта были реализованы две модели: обычная глубокая сеть (вверху) и дуэльная глубокая сеть (внизу). Функция Q Value представлена ​​как сумма двух различных функций: Value function V (s) и Advantage function A (s, a). Функция Value представляет действие для данного состояния, а функция Advantage используется для представления того, как одно действие в этом состоянии сравнивается со всеми другими действиями в этом состоянии. Функция Q представляет собой сумму V (s) и A (s, a).

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

И окончательное значение Q рассчитывается как указанная выше функция.

Реализация

Теперь мы рассмотрим реализацию кода агента и сети. Давайте сначала посмотрим, как эта сеть реализована с помощью PyTorch.

Выходные данные последнего слоя вычисляются двумя функциями, Value и Advantage, а его окончательное значение Q вычисляется с использованием приведенной выше формулы перед возвратом.

Следующая важная часть, которую мы рассмотрим, - это то, как проводится обучение.

Этот код следует псевдокоду, который мы рассмотрели ранее для Deep Q Networks. В игре Agent for the Banana реализованы многие важные шаги для обучения, включая обучение на основе воспроизведения опыта. Для реализации агента, а также того, как обученная модель используется для реальной игры, обратитесь к репозиторию GitHub.

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

Полученные результаты

Используя последнюю обученную модель Duel Networks, в приведенном выше эпизоде ​​было набрано 17 очков. Разные эпизоды давали разные оценки, а в некоторых случаях даже лучше.

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

При использовании метода Vanilla оценка +13 была достигнута в 250 эпизодах, в то время как Dueling Networks достигли этого показателя в 350 эпизодах.

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

Следующая работа

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

  • Настройка гиперпараметра для дуэльных сетей, чтобы получить улучшение по сравнению с обычными сетями Deep Q.
  • Попробуйте другие варианты сетей Deep Q, включая сети Double Q и алгоритм Rainbow.
  • Добавьте приоритетное воспроизведение для алгоритма Deep Q, который изменяет способ выбора сэмплов из буфера воспроизведения. Было показано, что этот метод показывает значительное улучшение по сравнению со случайной выборкой.

GitHub

Весь код этого проекта доступен на GitHub по адресу https://github.com/ravishchawla/Reinforcement-Learning-Navigation

Лицензирование, Авторы, Благодарности

Благодарим Udacity за предоставление данных и среды. Вы можете найти Лицензию на данные и другую описательную информацию в Udacity. Этот код можно использовать бесплатно.