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

Оглавление

  • Введение в тренажерный зал Open AI
  • Проблема с тележкой
  • Q-обучение
  • Выполнение
  • Что дальше и другие ресурсы

Введение в тренажерный зал OpenAI

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

Для начала вам необходимо установить Python 3.5+. Просто установите тренажерный зал с помощью pip:

pip3 install gym

И вы можете идти.

Проблема с тележкой

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

OpenAI обеспечивает следующую динамику этой проблемной среды:

Столб прикреплен к тележке, которая движется по рельсам без трения. Система управляется приложением силы +1 или -1 к тележке. Маятник начинается вертикально, и цель состоит в том, чтобы предотвратить его падение. Награда +1 предоставляется за каждый временной шаг, в течение которого шест остается в вертикальном положении. Эпизод заканчивается, когда шест отклоняется от вертикали более чем на 15 градусов или тележка перемещается более чем на 2,4 единицы от центра.

Случайный запуск тележки показан ниже:

Q-обучение

Суть Q-обучения состоит в том, чтобы оценить значение для каждой возможной пары состояний и действий (а), получив вознаграждение. Представьте следующий график, где агент в настоящее время находится в состоянии S0 и имеет два варианта действий: действие A1, которое приведет к S1, и действие A2, что приведет к S2. Переход к S1 даст награду +5, а переход к S2 даст награду -5. S1 — хорошее состояние, в то время как S2 — плохое состояние. Если агент выполняет действие A1, q-значение S0 будет положительным, а для действия A2 — отрицательным. (Q(S0,A1) › 0) и (Q(S0,A2) ‹ 0)

Обновление значения q выполняется в соответствии со следующим уравнением:

Новое значение q (S,A)-кортежа зависит от его старого значения q, немедленного вознаграждения, полученного за действие, и максимального значения q, достижимого в следующем состоянии. Таким образом, значение q (S, A)-пары косвенно зависит от значений q всех ее преемников, что показано в уравнении обновления выше. Повторно запуская эпизоды одной и той же проблемы, мы можем обновить значения q всех пар (S, A). Затем мы получаем таблицу, называемую Q-таблицей, в которой состояния и действия отображаются в соответствующие Q-значения, так что для любого состояния лучшее действие можно выбрать, просто выбрав самое высокое q-значение. для этого состояния.

Выполнение

Внедрить Q-learning на CartPole легко и просто. Единственный момент, о котором нужно позаботиться, — это дискретизация пространства состояний, поскольку среда представляет собой непрерывный поток состояний, нам нужно дискретизировать состояния, чтобы составить Q-таблицу. Код, прикрепленный ниже, вдохновлен этой записью в блоге @tuzzer и моего друга Isaac Patole.

Дискретизация пространства состояний.

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

  • x (position of cart) ∈ [-4.8, 4.8]
  • v (velocity of cart) ∈ [-3.4*10^38, 3.4*10^38]
  • theta (angle of pole) ∈ [-0.42, 0.42]
  • w (anglular velocity of pole) ∈ [-3.4*10^38, 3.4*10^38]

Как мы видим, пространства скоростей чрезвычайно велики. Из поста @tuzzer я обнаружил, что достаточно уменьшить его до 6 дискретных значений. Таким образом, уменьшая тета до интервала theta ∈ [0,6], а w до w ∈ [0,12]. Ссылаясь на сообщение @tuzzer, я отказался от функций x и v. Мотивация этого заключается в том, что вероятность того, что тележка покинет среду на левой или правой границе всего за 200 временных шагов (после 200 шагов среда автоматически перезагружается), довольно мала, и в результате уменьшение размерности более достойно.

Альфа, эпсилон и гамма обучения

Есть также альфа и эпсилон, которые обозначают скорость обучения и скорость исследования. Я использовал ε-жадную политику, которая вместо того, чтобы всегда выбирать наилучшее действие в состоянии, выбирается случайное действие с вероятностью ε. Это способствует исследованию и, следовательно, заставляет агента посещать все пространство состояний, чтобы искать все возможные варианты, вместо того, чтобы зацикливаться на неоптимальной политике. Ставка дисконтирования «гамма» предназначена для наказания долгосрочных вознаграждений, чтобы сосредоточиться на краткосрочных вознаграждениях. Поскольку здесь цель состоит в том, чтобы выжить как можно дольше, гамма была установлена ​​​​на 1.

Адаптивные курсы обучения и изучения

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

Дальнейшее объяснение и ресурсы

Спасибо Мэттью Чену и Исааку Патоле за их блоги, реализации и пояснения, которые сделали этот блог возможным. Я буду писать больше руководств и блогов по обучению с подкреплением и глубокому обучению, поэтому следите за мной, чтобы оставаться в курсе.

Код Github для этого блога — https://github.com/sanjitjain2/q-learning-for-cartpole/blob/master/qlearning.py

Чтобы прочитать об этом дальше,

Оригинальный блог Мэттью Чана:



Курс Дэвида Сильвера по обучению с подкреплением: