
Содержание статьи
Томас Симонини

Эта статья является частью курса глубокого подкрепления из Tensorflow?️. Проверьте приложение здесь.
В последних двух статьях о Q-обучении и глубоком Q обучении мы работали с алгоритмами обучения с подкреплением на основе ценностей. Чтобы выбрать, какое действие выполнить с учетом состояния, мы выполняем действие с высоким Q-значением (максимальное ожидаемое вознаграждение, которое я получу в каждом состоянии). Как следствие, в обучении на основе ценностей политика существует только благодаря этим оценкам ценности действия.
Сегодня мы изучим технику обучения с подкреплением на основе политики, называемой градиентами политики.
Мы внедрим двух агентов. Первый научится держать штангу в равновесии.

Вторым будет агент, который научится выживать во враждебной среде Doom, собирая здоровье.

В методах, основанных на политике, вместо того, чтобы изучать функцию ценности, указывающую нам, какова ожидаемая сумма вознаграждений с учетом состояния и действия, мы изучаем функцию политики, отражающей состояние к действию (выбираем действия без использования функции ценности).
Это означает, что мы пытаемся напрямую оптимизировать нашу функцию политики π, не беспокоясь о функции значения. Мы непосредственно параметризируем π (выберем действие без функции значения).
Конечно мы можем использовать функцию значения для оптимизации параметров политики. Но функция значения не будет использоваться для выбора действия.
В этой статье вы узнаете:
- Что такое градиент политики, его преимущества и недостатки
- Как это воплотить в Tensorflow.
Зачем использовать методы на основе политики?
Два типа политики
Политика может быть детерминированной или стохастической.
Детерминированная политика – это политика, отражающая состояние и действия. Вы предоставляете ему состояние, и функция возвращает действие, которое необходимо выполнить.

Детерминированные политики используются в детерминированных средах. Это среда, где предпринимаемые действия определяют результат. Нет неопределенности. Например, когда вы играете в шахматы и перемещаете свою пешку с A2 на A3, вы уверены, что ваша пешка переместится на A3.
Не считая того, стохастическая политика выводит распределение вероятности по действиям.

Это означает, что вместо того, чтобы быть уверенным в осуществлении мер а (например, слева) есть вероятность, что мы возьмем другой (в этом случае 30%, что мы возьмем на юг).
Стохастическая политика используется, когда среда неопределенна. Мы называем этот процесс частично наблюдаемым процессом принятия решений Маркова (POMDP).
В большинстве случаев мы будем использовать этот второй тип политики.
Преимущества
Но Deep Q Learning – это действительно здорово! Зачем использовать методы обучения с подкреплением на основе политики?
Использование градиентов политики имеет три основных преимущества.
Конвергенция
Во-первых, методы на основе политики обладают лучшими свойствами конвергенции.
Проблема с методами, основанными на ценностях, состоит в том, что они могут испытывать большие колебания во время обучения. Это объясняется тем, что выбор действия может резко измениться при сколь угодно небольшом изменении оцененных значений действия.
С другой стороны, с градиентом политики мы просто следим за градиентом, чтобы найти лучшие параметры. Мы видим плавное обновление нашей политики на каждом шагу.
Поскольку мы придерживаемся градиента, чтобы найти наилучшие параметры, мы гарантированно сходимся к локальному максимуму (наихудший случай) или глобальному максимуму (наилучший).

Градиенты политики более эффективны в пространстве действий с большим измерением
Второе преимущество состоит в том, что градиенты политики более эффективны в пространствах действий с большим размером или при использовании непрерывных действий.
Проблема с глубоким Q-обучением состоит в том, что их прогнозы назначают оценку (максимальное ожидаемое будущее вознаграждение) для каждого возможного действия на каждом шагу времени, учитывая текущее состояние.
Но что, если у нас есть бесконечная возможность действий?
Например, с самостоятельно управляющим автомобилем в каждом состоянии вы можете иметь (почти) бесконечный выбор действий (поворот колеса на 15°, 17,2°, 19,4°, сигнал…). Нам нужно будет вывести Q-значение для каждого возможного действия!
С другой стороны, в методах на основе политики вы просто корректируете параметры напрямую: благодаря этому вы начнете понимать, каким будет максимум, а не вычислять (оценивать) максимум на каждом шагу.

Градиенты политики могут учить стохастические политики
Третье преимущество состоит в том, что градиент политики может усвоить стохастическую политику, а функции значений нет. Это имеет два результата.
Одно из них состоит в том, что нам не нужно внедрять компромисс между исследованиями/эксплуатацией. Стохастическая политика позволяет нашему агенту исследовать пространство сословий, не выполняя всегда одинаковых действий. Это объясняется тем, что выводит распределение вероятности по действиям. Как следствие, он обрабатывает компромисс исследования/использования без жесткой кодировки.
Мы также избавляемся от проблемы восприятия псевдонимов. Восприятие – это когда мы имеем два состояния, которые кажутся (или на самом деле) одинаковыми, но требуют различных действий.
Давайте возьмем пример. У нас есть умный пылесос, и его цель – высасывать пыль и не убивать хомяков.

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

Согласно алгоритму RL, основанному на ценностях, мы изучаем квазидетерминированную политику («стратегия жадных эпсилонов»). Как следствие, наш агент может потратить много времени, прежде чем найти пыль.
Кроме того, оптимальная стохастическая политика будет случайным образом двигаться влево или вправо в серых состояниях. Как следствие, он не застрянет и с высокой вероятностью достигнет целевого состояния.

Недостатки
Конечно, градиенты политики имеют один большой недостаток. В большинстве случаев они сходятся к локальному максимуму, а не к глобальному оптимуму.
Вместо глубокого Q-Learning, не всегда пытающегося достичь максимума, градиенты политики сближаются медленнее, шаг за шагом. Их тренировка может занять больше времени.
Однако мы увидим, что есть решение этой проблемы.
Поиск политики
У нас есть политика π, имеющая параметр θ. Это π выводит распределение вероятностей действий.
Прекрасно! Но как мы узнаем, хороша ли наша политика?
Помните, что политика может рассматриваться как проблема оптимизации. Мы должны найти лучшие параметры (θ), чтобы максимизировать функцию оценки J(θ).
Есть два шага:
- Измерьте качество π (политики) с помощью функции оценки политики J(θ)
- Используйте подъем градиента политики, чтобы найти лучший параметр θ, который улучшает наше π.
Основная идея здесь состоит в том, что J(θ) расскажет нам, насколько хорошо наше π. Повышение градиента политики поможет нам найти лучшие параметры политики, чтобы максимизировать выбор хороших действий.
Первый шаг: функция оценки политики J(θ)
Чтобы определить, насколько хорошо наша политика, мы используем функцию, называемую целевой функцией (или функцией оценки политики), которая вычисляет ожидаемое вознаграждение от политики.
Три метода все равно хорошо работают для оптимизации политик. Выбор зависит только от среды и целей, которые вы ставите.
Во-первых, в эпизодической среде мы можем употреблять начальное значение. Вычислите среднее значение отдачи от первого шага (G1). Это совокупная скидка за весь эпизод.

Идея проста. Если я всегда начинаю в каком-то состоянии s1, какое общее вознаграждение я получу от этого исходного состояния до конца?
Мы хотим найти политику, которая максимизирует G1, потому что это будет оптимальная политика. Это связано с гипотезой вознаграждения, объясненной первой статьей.
К примеру, в Breakout я играю в новую игру, но я потерял мяч после уничтожения 20 кирпичей (конец игры). Новые эпизоды всегда начинаются в том же состоянии.

Я вычисляю оценку с помощью J1(θ). Ударить 20 кирпичей – это хорошо, но я хочу улучшить счет. Для этого нужно улучшить распределение вероятностей моих действий, настроив параметры. Это происходит на шаге 2.
В непрерывной среде мы можем использовать среднее значение, поскольку не можем полагаться на конкретное исходное состояние.
Каждое значение состояния теперь взвешивается (поскольку некоторые встречаются больше, чем другие) по вероятности наступления соответствующего состояния.

В-третьих, мы можем использовать среднее вознаграждение за время. Идея состоит в том, что мы хотим получить наибольшее вознаграждение за время.

Второй шаг: повышение градиента политики
У нас есть функция оценки политики, которая говорит нам, насколько хороша наша политика. Теперь мы хотим найти параметр θ, максимизирующий эту функцию оценки. Максимизация функции оценки означает поиск оптимальной политики.
Чтобы максимизировать функцию оценки J(θ), нам нужно произвести градиентный подъем параметров политики.
Градиентный подъем представляет собой обратный градиентный спуск. Помните, что градиент всегда указывает на самое крутое изменение.
При градиентном спуске мы берём направление наиболее крутого уменьшения функции. При градиентном подъеме берём направление наиболее крутого роста функции.
Почему градиентный подъем, а не градиентный спуск? Потому что мы используем градиентный спуск, когда есть функция ошибки, которую мы хотим минимизировать.
Но функция оценки не является ошибкой! Это функция оценки, и поскольку мы хотим максимизировать оценку, нам нужен градиентный подъем.
Идея состоит в том, чтобы найти градиент к текущей политике π, которая обновляет параметры в направлении наибольшего увеличения, и выполнить итерацию.
Ладно, теперь давайте реализуем это математически. Эта часть немного сложна, но важно понять, как мы достигаем формулы градиента.
Мы хотим найти лучшие параметры θ*, которые максимизируют оценку:

Нашу функцию оценки можно определить как:

Что является общим итогом ожидаемого вознаграждения по данной политике.
Теперь, поскольку мы хотим произвести градиентный подъем, нам следует различить нашу функцию оценки J(θ).
Нашу функцию оценки J(θ) можно также определить как:

Мы написали функцию таким образом, чтобы показать проблему, с которой мы сталкиваемся.
Мы знаем, что параметры политики изменяют то, как выбираются действия, и, как следствие, какие вознаграждения мы получаем, какие состояния мы будем видеть и как часто.
Таким образом, может быть сложно найти изменения в политике, чтобы обеспечить улучшение. Это связано с тем, что производительность зависит от выбора действий и распределения состояний, в которых эти выборки сделаны.
На оба этих параметра влияют параметры политики. Воздействие параметров политики на действия легко найти, но как найти влияние политики на государственное распределение? Функция среды неизвестна.
Как следствие, мы сталкиваемся с проблемой: как оценить ∇ (градиент) относительно политики θ, когда градиент зависит от неизвестного влияния изменений политики на распределение состояния?
Решением будет использование теоремы о градиенте политики. Это обеспечивает аналитическое выражение для градиента ∇ J(θ) (производительности) в отношении политики θ, которое не предусматривает дифференцировку распределения состояний.
Итак, посчитаем:


Помните, что мы в ситуации стохастической политики. Это означает, что наша политика выводит распределение вероятностей π(τ;θ). Он выводит возможность выполнения этой серии шагов (s0, a0, r0…), учитывая наши текущие параметры θ.
Но дифференцировать функцию вероятности трудно, если мы не можем превратить ее в логарифм. Это значительно упрощает дифференциацию.
Здесь мы воспользуемся хитростью отношения правдоподобия, заменяющего полученную дробь на журнал вероятности.

Теперь давайте превратим суммирование обратно в ожидание:

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

Этот градиент политики говорит нам, как мы должны смещать распределение политики через изменение параметров θ, если мы хотим получить более высокий балл.
R(tau) похож на скалярную оценку значения:
- Если R(tau) высок, это означает, что в среднем мы совершали действия, приводящие к высокому вознаграждению. Мы хотим увеличить вероятность увиденных действий (увеличить вероятность выполнения этих действий).
- Кроме того, если R(tau) низкий, мы хотим снизить вероятность увиденных действий.
Этот градиент политики заставляет параметры двигаться больше всего в направлении, способствующем действиям, имеющим наивысшую отдачу.
Градиенты политики Монте-Карло
В нашем блокноте мы используем этот подход для разработки алгоритма градиента политики. Мы используем Монте-Карло, потому что наши задачи можно разделить на эпизоды.
Initialize θfor each episode τ = S0, A0, R1, S1, …, ST: for t <-- 1 to T-1: Δθ = α ∇theta(log π(St, At, θ)) Gt θ = θ + Δθ
For each episode: At each time step within that episode: Compute the log probabilities produced by our policy function. Multiply it by the score function. Update the weights
Но мы сталкиваемся с проблемой с этим алгоритмом. Поскольку мы вычисляем R только в конце эпизода, мы усредняем все действия. Даже если некоторые из действий были очень плохими, если наша оценка достаточно высока, мы будем оценивать все действия как хорошие.
Итак, чтобы иметь правильную политику, нам нужно много образцов… что приводит к медленному обучению.
Как улучшить нашу модель?
В следующих статьях мы увидим некоторые улучшения:
- Actor Critic: гибрид между алгоритмами, основанными на ценностях и алгоритмами на основе политики.
- Проксимальные градиенты политики: гарантирует, что отклонение от предыдущей политики остается относительно небольшим.
Давайте реализуем это с помощью Cartpole и Doom
Мы сняли видео, где реализуем a Агент градиента политики с Tensorflow, который учится играть в Doom ?? в среде Deathmatch.
Вы можете получить прямой доступ к тетрадям в репозитории Deep Reinforcement Learning Course.
Котловик:
Дум:
Это все! Вы только что создали агента, который учится выживать в среде Doom. Прекрасно!
Не забудьте реализовать каждую часть кода самостоятельно. Очень важно попытаться изменить код, который я вам дал. Попытайтесь добавить эпохи, изменить архитектуру, изменить скорость обучения, использовать более жесткую среду… и так далее. Веселитесь!
В следующей статье я расскажу о последних усовершенствованиях глубокого Q-обучения:
- Фиксированные Q-значения
- Приоритетное воспроизведение опыта
- Двойной DQN
- Дуэльные сети
Если вам понравилась моя статья, пожалуйста, нажмите кнопку ? ниже столько раз, сколько вам понравилась статья поэтому другие люди увидят это здесь на Medium. И не забудь следовать за мной!
Если у вас есть какие-либо мнения, комментарии, вопросы, не стесняйтесь оставлять комментарии ниже или отправлять мне электронное письмо: hello@simoninithomas.com или твиты @ThomasSimonini.



Продолжайте учиться, оставайтесь замечательными!
Курс глубокого подкрепления с Tensorflow?️
? Программа обучения
? Видео версия
Часть 1: Введение в учебу с подкреплением
Часть 2: более глубокое погружение в обучение с подкреплением с помощью Q-Learning
Часть 3: Введение в Deep Q-Learning: давайте поиграем в Doom
Часть 3+: Улучшение в глубоком обучении Q: двойной DQN на дуэли, повторение приоритетного опыта и фиксированные Q-цели
Часть 4: Введение в градиенты политики с Doom и Cartpole
Часть 5: Введение в методы Advantage Actor Critic: давайте поиграем в Ежа Соника!
Часть 6: Проксимальная оптимизация политики (PPO) из Sonic the Hedgehog 2 и 3
Часть 7: Обучение на основе любопытства стало легким Часть I