Перейти к содержимому
ПереводыHugging Face

Deep RL Course, юнит 8: PPO

Полный перевод теории восьмого юнита курса Hugging Face: интуиция PPO, отношение вероятностей новой и старой политики, clipped surrogate objective, шесть случаев клиппинга в таблице и полный loss PPO в стиле actor-critic.

Это перевод теоретической части юнита 8 курса Hugging Face Deep RL Course. Практика — PPO с нуля по образцу CleanRL на LunarLander и асинхронный PPO в Sample Factory для Doom — переведена на странице «Юнит 8, практика». Карта курса — в путеводителе.

В юните 6 мы изучили Advantage Actor Critic (A2C) — гибридную архитектуру, сочетающую методы на основе ценности и на основе политики. Она стабилизирует обучение, уменьшая дисперсию, с помощью:

  • актора, который управляет тем, как ведёт себя агент (метод на основе политики);
  • критика, который оценивает, насколько хорошее действие совершено (метод на основе ценности).

Сегодня мы изучим Proximal Policy Optimization (PPO)проксимальная оптимизация политики (PPO)EN proximal policy optimization (PPO)Schulman и др., 2017. Ограничивает шаг обновления «клиппингом» отношения вероятностей. — архитектуру, которая повышает стабильность обучения агента, не допуская слишком больших обновлений политики. Для этого используется отношение, показывающее разницу между текущей и старой политикой, и это отношение обрезается (clip) до диапазона [1−ϵ,1+ϵ][1 - \epsilon, 1 + \epsilon].

Так мы гарантируем, что обновление политики не будет слишком большим, а обучение будет стабильнее.

Юнит состоит из двух частей.

  • В первой части вы изучите теорию PPO и напишете агента PPO с нуля по образцу реализации CleanRL. Проверять его надёжность будем на LunarLander-v2. LunarLander-v2 — первая среда, с которой вы начинали этот курс. Тогда вы не знали, как работает PPO, а теперь можете написать его с нуля и обучить. Разве не потрясающе 🤩.
  • Во второй части мы глубже займёмся оптимизацией PPO с помощью Sample-Factory и обучим агента играть в ViZDoom (открытую версию Doom).

В оригинале здесь картинка: «Это среды, в которых вы будете обучать агентов: среды ViZDoom».

Звучит увлекательно? Начнём! 🚀

Идея Proximal Policy Optimization (PPO) в том, чтобы повысить стабильность обучения политики, ограничивая, насколько сильно меняется политика на каждой эпохе обучения: мы хотим избежать слишком больших обновлений политики.

По двум причинам:

  • Опыт показывает, что небольшие обновления политики во время обучения с большей вероятностью сходятся к оптимальному решению.
  • Слишком большой шаг при обновлении политики может привести к «падению с обрыва» (получению плохой политики) и долгому восстановлению — или к тому, что восстановиться не удастся вовсе.
flowchart LR
A["Хорошая политика"] -->|"маленький шаг"| B["Чуть лучше"]
B -->|"маленький шаг"| C["Ещё лучше"]
A -->|"слишком большой шаг"| D["Обрыв: плохая политика"]
D -.->|"собирает плохие данные"| D
Маленькие шаги обновления политики делают обучение стабильнее (в оригинале — рисунок с обрывом по мотивам статьи Джонатана Хуэя)

Поэтому PPO обновляет политику осторожно. Для этого нужно измерить, насколько текущая политика изменилась по сравнению с прежней, — через отношение текущей политики к прежней. И мы обрезаем это отношение до диапазона [1−ϵ,1+ϵ][1 - \epsilon, 1 + \epsilon], то есть убираем стимул для текущей политики уходить слишком далеко от старой (отсюда и слово proximal — «ближний»).

Clipped Surrogate Objective — обрезанная суррогатная целевая функция

Заголовок раздела «Clipped Surrogate Objective — обрезанная суррогатная целевая функция»

Вспомним, какую целевую функцию мы оптимизировали в REINFORCE:

LPG(θ)=Et[log⁡πθ(at∣st)⋅At]L^{PG}(\theta) = \mathbb{E}_t\big[\log \pi_\theta(a_t \mid s_t) \cdot A_t\big]

Здесь log⁡πθ(at∣st)\log \pi_\theta(a_t \mid s_t) — логарифм вероятности совершить это действие в этом состоянии, а AtA_t — преимущество: если A>0A > 0, это действие лучше других возможных в этом состоянии.

Идея была в том, что, делая шаг градиентного подъёма по этой функции (что равносильно шагу градиентного спуска по ней со знаком минус), мы подталкиваем агента совершать действия, ведущие к большей награде, и избегать вредных действий.

Но проблема в размере шага:

  • слишком маленький — обучение идёт слишком медленно;
  • слишком большой — обучение слишком нестабильно.

Идея PPO — ограничить обновление политики новой целевой функцией, обрезанной суррогатной целевой функцией (clipped surrogate objective function), которая с помощью обрезки (clip) удерживает изменение политики в небольшом диапазоне.

Эта новая функция устроена так, чтобы не допускать разрушительно больших обновлений весов:

LCLIP(θ)=E^t[min⁡(rt(θ)A^t, clip⁡(rt(θ),1−ϵ,1+ϵ)A^t)]L^{CLIP}(\theta) = \hat{\mathbb{E}}_t\Big[\min\big(r_t(\theta)\hat{A}_t,\ \operatorname{clip}\big(r_t(\theta), 1 - \epsilon, 1 + \epsilon\big)\hat{A}_t\big)\Big]

Разберём каждую часть, чтобы понять, как она работает.

rt(θ)=πθ(at∣st)πθold(at∣st)r_t(\theta) = \frac{\pi_\theta(a_t \mid s_t)}{\pi_{\theta_{old}}(a_t \mid s_t)}

Это вероятность совершить действие ata_t в состоянии sts_t при текущей политике, делённая на ту же вероятность при прежней политике.

Как видно, rt(θ)r_t(\theta) — отношение вероятностей текущей и старой политики:

  • если rt(θ)>1r_t(\theta) > 1, действие ata_t в состоянии sts_t при текущей политике вероятнее, чем при старой;
  • если rt(θ)r_t(\theta) между 0 и 1, действие при текущей политике менее вероятно, чем при старой.

Значит, это отношение вероятностей — простой способ оценить расхождение между старой и текущей политикой.

Это отношение может заменить логарифм вероятности, который мы используем в целевой функции политики. Так получается левая часть новой целевой функции: отношение, умноженное на преимущество:

LCPI(θ)=E^t[πθ(at∣st)πθold(at∣st)A^t]=E^t[rt(θ)A^t]L^{CPI}(\theta) = \hat{\mathbb{E}}_t\left[\frac{\pi_\theta(a_t \mid s_t)}{\pi_{\theta_{old}}(a_t \mid s_t)}\hat{A}_t\right] = \hat{\mathbb{E}}_t\big[r_t(\theta)\hat{A}_t\big]

(Формула из статьи Proximal Policy Optimization Algorithms.)

Но без ограничения, если совершённое действие при текущей политике намного вероятнее, чем при прежней, это приведёт к огромному шагу градиента политики и, значит, к чрезмерному обновлению политики.

clip⁡(rt(θ),1−ϵ,1+ϵ)A^t\operatorname{clip}\big(r_t(\theta), 1 - \epsilon, 1 + \epsilon\big)\hat{A}_t

Поэтому эту целевую функцию нужно ограничить, наказывая изменения, при которых отношение уходит далеко от 1 (в статье отношение может меняться только от 0,8 до 1,2).

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

Для этого есть два решения:

  • TRPOTRPO (оптимизация политики в доверительной области)EN trust region policy optimization (TRPO)Schulman и др., 2015 — шаг политики с ограничением на KL к старой политике; предшественник PPO. (Trust Region Policy Optimization, оптимизация политики в доверительной области) ограничивает обновление политики условием на KL-дивергенциюKL-дивергенция (дивергенция Кульбака — Лейблера)EN Kullback–Leibler divergenceKL(p ‖ q) = Σ p log(p / q) = H(p, q) − H(p) ≥ 0. Несимметрична, поэтому не настоящее расстояние., вынесенным за пределы целевой функции. Но этот метод сложно реализовать, и он дольше считается.
  • PPO обрезает отношение вероятностей прямо в целевой функции — своей обрезанной суррогатной целевой функцией.

Обрезанная часть — это вариант, в котором rt(θ)r_t(\theta) обрезано до [1−ϵ,1+ϵ][1 - \epsilon, 1 + \epsilon].

В обрезанной суррогатной целевой функции два отношения вероятностей: необрезанное и обрезанное до диапазона [1−ϵ,1+ϵ][1 - \epsilon, 1 + \epsilon]. Эпсилон — гиперпараметр, задающий этот диапазон обрезки (в статье ϵ=0,2\epsilon = 0{,}2).

Затем мы берём минимум из обрезанной и необрезанной целевой функции, поэтому итоговая цель — нижняя (пессимистическая) оценка необрезанной цели.

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

Визуализация обрезанной суррогатной целевой функции

Заголовок раздела «Визуализация обрезанной суррогатной целевой функции»

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

В оригинале здесь картинка — таблица из работы Дэниела Бика «Towards Delivering a Coherent Self-Contained Explanation of Proximal Policy Optimization» (PDF). Вот она (в работе отношение обозначено pt(θ)p_t(\theta), здесь — rt(θ)r_t(\theta), как в тексте курса):

СлучайОтношение rt(θ)r_t(\theta)Знак AtA_tЗначение минимумаЦель обрезана?Знак целиГрадиент
1в [1−ϵ,1+ϵ][1 - \epsilon, 1 + \epsilon]+rt(θ)Atr_t(\theta) A_tнет+есть
2в [1−ϵ,1+ϵ][1 - \epsilon, 1 + \epsilon]−rt(θ)Atr_t(\theta) A_tнет−есть
3<1−ϵ< 1 - \epsilon+rt(θ)Atr_t(\theta) A_tнет+есть
4<1−ϵ< 1 - \epsilon−(1−ϵ)At(1 - \epsilon) A_tда−0
5>1+ϵ> 1 + \epsilon+(1+ϵ)At(1 + \epsilon) A_tда+0
6>1+ϵ> 1 + \epsilon−rt(θ)Atr_t(\theta) A_tнет−есть

Всего шесть разных ситуаций. Сначала вспомните, что мы берём минимум из обрезанной и необрезанной цели.

В ситуациях 1 и 2 обрезка не срабатывает, потому что отношение внутри диапазона [1−ϵ,1+ϵ][1 - \epsilon, 1 + \epsilon].

В ситуации 1 преимущество положительное: действие лучше среднего по всем действиям в этом состоянии. Значит, надо поощрить текущую политику чаще выбирать это действие в этом состоянии.

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

В ситуации 2 преимущество отрицательное: действие хуже среднего по всем действиям в этом состоянии. Значит, надо отучать текущую политику от этого действия в этом состоянии.

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

Если отношение вероятностей меньше 1−ϵ1 - \epsilon, вероятность выбрать это действие в этом состоянии намного ниже, чем у старой политики.

Если, как в ситуации 3, оценка преимущества положительная (A>0A > 0), вы хотите увеличить вероятность выбрать это действие в этом состоянии.

Но если, как в ситуации 4, оценка преимущества отрицательная, мы не хотим уменьшать ещё сильнее вероятность выбрать это действие в этом состоянии. Поэтому градиент равен 0 (мы на горизонтальном участке), и веса не обновляются.

Если отношение вероятностей больше 1+ϵ1 + \epsilon, вероятность выбрать это действие в этом состоянии при текущей политике намного выше, чем при прежней.

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

Если, как в ситуации 6, преимущество отрицательное, мы хотим уменьшить вероятность выбрать это действие в этом состоянии.

Итак, политика обновляется только по необрезанной части цели. Когда минимум — обрезанная часть, веса политики не обновляются: градиент будет равен 0.

Значит, политика обновляется, только если:

  • отношение внутри диапазона [1−ϵ,1+ϵ][1 - \epsilon, 1 + \epsilon];
  • отношение вне диапазона, но преимущество тянет его обратно к диапазону:
    • отношение ниже диапазона, но преимущество At>0A_t > 0;
    • отношение выше диапазона, но преимущество At<0A_t < 0.

Вы можете спросить, почему градиент равен 0, когда минимум — обрезанное отношение. Когда отношение обрезано, производная берётся уже не от rt(θ)⋅Atr_t(\theta) \cdot A_t, а от (1−ϵ)⋅At(1 - \epsilon) \cdot A_t или (1+ϵ)⋅At(1 + \epsilon) \cdot A_t, и обе равны 0.

Подведём итог: благодаря обрезанной суррогатной цели мы ограничиваем, насколько текущая политика может отойти от старой. Мы убираем стимул выводить отношение вероятностей за пределы интервала, потому что обрезка обнуляет градиент. Если отношение >1+ϵ> 1 + \epsilon или <1−ϵ< 1 - \epsilon, градиент равен 0.

flowchart TB
Q1{"Знак преимущества A_t"} -->|"A_t > 0: действие лучше среднего"| P["Тянем r_t вверх, но не выше 1+ε"]
Q1 -->|"A_t отрицательно: действие хуже среднего"| N["Тянем r_t вниз, но не ниже 1−ε"]
P --> P2["r_t выше 1+ε: градиент 0 (случай 5)"]
N --> N2["r_t ниже 1−ε: градиент 0 (случай 4)"]
Шпаргалка к таблице: клиппинг останавливает только «слишком рьяное» движение в выгодную сторону

Итоговая функция потерь PPO в стиле actor-critic — сочетание обрезанной суррогатной целевой функции, функции потерь ценности и энтропийного бонуса:

LtCLIP+VF+S(θ)=E^t[LtCLIP(θ)−c1LtVF(θ)+c2 S[πθ](st)]L_t^{CLIP+VF+S}(\theta) = \hat{\mathbb{E}}_t\Big[L_t^{CLIP}(\theta) - c_1 L_t^{VF}(\theta) + c_2\, S\big[\pi_\theta\big](s_t)\Big]

Здесь c1c_1 и c2c_2 — коэффициенты, LtVF=(Vθ(st)−Vttarg)2L_t^{VF} = \big(V_\theta(s_t) - V_t^{targ}\big)^2 — квадратичная ошибка критика, а SS — энтропийный бонусэнтропийный бонусEN entropy bonusДобавка c·H[π(·|s)] к цели — награда за «неуверенность» политики, чтобы она не схлопнулась раньше времени и продолжала исследовать.: он поощряет исследование, не давая политике слишком рано стать детерминированной.

Это было довольно сложно. Не спешите разобраться в этих ситуациях, глядя на таблицу и график. Вы должны понять, почему это осмысленно. Если хотите копнуть глубже, лучший источник — работа «Towards Delivering a Coherent Self-Contained Explanation of Proximal Policy Optimization» Дэниела Бика, особенно раздел 3.4.

На сегодня всё. Поздравляем с окончанием юнита и практического занятия!

Лучший способ учиться — практиковаться и пробовать. Почему бы не доработать реализацию, чтобы она принимала на вход кадры?

Увидимся во второй части юнита 🔥 Продолжайте учиться и оставайтесь крутыми 🤗

Это необязательные материалы для тех, кто хочет копнуть глубже.

Объяснения PPO

Детали реализации PPO

Выборка по значимости

Проверьте себя по юниту 84 вопроса
1 Что показывает отношение rt(θ)=1,3r_t(\theta) = 1{,}3?
2 При ϵ=0,2\epsilon = 0{,}2, At=1A_t = 1 и rt=1,5r_t = 1{,}5 чему равна обрезанная цель min⁡(rtAt, clip(rt,0,8,1,2)At)\min(r_t A_t,\ \mathrm{clip}(r_t, 0{,}8, 1{,}2) A_t)?
3 В каких случаях таблицы градиент равен нулю?Можно выбрать несколько ответов
4 Чем PPO проще TRPO?
EnglishРусский
Proximal Policy Optimization (PPO)проксимальная оптимизация политики
policy updateобновление политики
probability ratio rt(θ)r_t(\theta)отношение вероятностей
clip, clip range ϵ\epsilonобрезка (клиппинг), диапазон обрезки
clipped surrogate objectiveобрезанная суррогатная целевая функция
unclipped / clipped partнеобрезанная / обрезанная часть
lower (pessimistic) boundнижняя (пессимистическая) оценка
Trust Region Policy Optimization (TRPO)оптимизация политики в доверительной области
KL divergence constraintограничение на KL-дивергенцию
value lossфункция потерь ценности (критика)
entropy bonusэнтропийный бонус
importance samplingвыборка по значимости