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) до диапазона .
Так мы гарантируем, что обновление политики не будет слишком большим, а обучение будет стабильнее.
Юнит состоит из двух частей.
- В первой части вы изучите теорию PPO и напишете агента PPO с нуля по образцу реализации CleanRL. Проверять его надёжность будем на LunarLander-v2. LunarLander-v2 — первая среда, с которой вы начинали этот курс. Тогда вы не знали, как работает PPO, а теперь можете написать его с нуля и обучить. Разве не потрясающе 🤩.
- Во второй части мы глубже займёмся оптимизацией PPO с помощью Sample-Factory и обучим агента играть в ViZDoom (открытую версию Doom).
В оригинале здесь картинка: «Это среды, в которых вы будете обучать агентов: среды ViZDoom».
Звучит увлекательно? Начнём! 🚀
Интуиция PPO
Заголовок раздела «Интуиция PPO»Идея Proximal Policy Optimization (PPO) в том, чтобы повысить стабильность обучения политики, ограничивая, насколько сильно меняется политика на каждой эпохе обучения: мы хотим избежать слишком больших обновлений политики.
По двум причинам:
- Опыт показывает, что небольшие обновления политики во время обучения с большей вероятностью сходятся к оптимальному решению.
- Слишком большой шаг при обновлении политики может привести к «падению с обрыва» (получению плохой политики) и долгому восстановлению — или к тому, что восстановиться не удастся вовсе.
flowchart LR A["Хорошая политика"] -->|"маленький шаг"| B["Чуть лучше"] B -->|"маленький шаг"| C["Ещё лучше"] A -->|"слишком большой шаг"| D["Обрыв: плохая политика"] D -.->|"собирает плохие данные"| D
Поэтому PPO обновляет политику осторожно. Для этого нужно измерить, насколько текущая политика изменилась по сравнению с прежней, — через отношение текущей политики к прежней. И мы обрезаем это отношение до диапазона , то есть убираем стимул для текущей политики уходить слишком далеко от старой (отсюда и слово proximal — «ближний»).
Clipped Surrogate Objective — обрезанная суррогатная целевая функция
Заголовок раздела «Clipped Surrogate Objective — обрезанная суррогатная целевая функция»Напоминание: целевая функция политики
Заголовок раздела «Напоминание: целевая функция политики»Вспомним, какую целевую функцию мы оптимизировали в REINFORCE:
Здесь — логарифм вероятности совершить это действие в этом состоянии, а — преимущество: если , это действие лучше других возможных в этом состоянии.
Идея была в том, что, делая шаг градиентного подъёма по этой функции (что равносильно шагу градиентного спуска по ней со знаком минус), мы подталкиваем агента совершать действия, ведущие к большей награде, и избегать вредных действий.
Но проблема в размере шага:
- слишком маленький — обучение идёт слишком медленно;
- слишком большой — обучение слишком нестабильно.
Идея PPO — ограничить обновление политики новой целевой функцией, обрезанной суррогатной целевой функцией (clipped surrogate objective function), которая с помощью обрезки (clip) удерживает изменение политики в небольшом диапазоне.
Эта новая функция устроена так, чтобы не допускать разрушительно больших обновлений весов:
Разберём каждую часть, чтобы понять, как она работает.
Функция отношения
Заголовок раздела «Функция отношения»Это вероятность совершить действие в состоянии при текущей политике, делённая на ту же вероятность при прежней политике.
Как видно, — отношение вероятностей текущей и старой политики:
- если , действие в состоянии при текущей политике вероятнее, чем при старой;
- если между 0 и 1, действие при текущей политике менее вероятно, чем при старой.
Значит, это отношение вероятностей — простой способ оценить расхождение между старой и текущей политикой.
Необрезанная часть
Заголовок раздела «Необрезанная часть»Это отношение может заменить логарифм вероятности, который мы используем в целевой функции политики. Так получается левая часть новой целевой функции: отношение, умноженное на преимущество:
(Формула из статьи Proximal Policy Optimization Algorithms.)
Но без ограничения, если совершённое действие при текущей политике намного вероятнее, чем при прежней, это приведёт к огромному шагу градиента политики и, значит, к чрезмерному обновлению политики.
Обрезанная часть
Заголовок раздела «Обрезанная часть»Поэтому эту целевую функцию нужно ограничить, наказывая изменения, при которых отношение уходит далеко от 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 обрезает отношение вероятностей прямо в целевой функции — своей обрезанной суррогатной целевой функцией.
Обрезанная часть — это вариант, в котором обрезано до .
В обрезанной суррогатной целевой функции два отношения вероятностей: необрезанное и обрезанное до диапазона . Эпсилон — гиперпараметр, задающий этот диапазон обрезки (в статье ).
Затем мы берём минимум из обрезанной и необрезанной целевой функции, поэтому итоговая цель — нижняя (пессимистическая) оценка необрезанной цели.
Взять минимум из обрезанной и необрезанной цели значит, что мы выбираем либо обрезанную, либо необрезанную цель в зависимости от отношения и знака преимущества.
Визуализация обрезанной суррогатной целевой функции
Заголовок раздела «Визуализация обрезанной суррогатной целевой функции»Не волнуйтесь. Если сейчас это кажется сложным — это нормально. Но мы посмотрим, как выглядит обрезанная суррогатная целевая функция, и это поможет лучше представить, что происходит.
В оригинале здесь картинка — таблица из работы Дэниела Бика «Towards Delivering a Coherent Self-Contained Explanation of Proximal Policy Optimization» (PDF). Вот она (в работе отношение обозначено , здесь — , как в тексте курса):
| Случай | Отношение | Знак | Значение минимума | Цель обрезана? | Знак цели | Градиент |
|---|---|---|---|---|---|---|
| 1 | в | + | нет | + | есть | |
| 2 | в | − | нет | − | есть | |
| 3 | + | нет | + | есть | ||
| 4 | − | да | − | 0 | ||
| 5 | + | да | + | 0 | ||
| 6 | − | нет | − | есть |
Всего шесть разных ситуаций. Сначала вспомните, что мы берём минимум из обрезанной и необрезанной цели.
Случаи 1 и 2: отношение внутри диапазона
Заголовок раздела «Случаи 1 и 2: отношение внутри диапазона»В ситуациях 1 и 2 обрезка не срабатывает, потому что отношение внутри диапазона .
В ситуации 1 преимущество положительное: действие лучше среднего по всем действиям в этом состоянии. Значит, надо поощрить текущую политику чаще выбирать это действие в этом состоянии.
Поскольку отношение внутри диапазона, мы можем увеличить вероятность того, что политика выберет это действие в этом состоянии.
В ситуации 2 преимущество отрицательное: действие хуже среднего по всем действиям в этом состоянии. Значит, надо отучать текущую политику от этого действия в этом состоянии.
Поскольку отношение внутри диапазона, мы можем уменьшить вероятность того, что политика выберет это действие в этом состоянии.
Случаи 3 и 4: отношение ниже диапазона
Заголовок раздела «Случаи 3 и 4: отношение ниже диапазона»Если отношение вероятностей меньше , вероятность выбрать это действие в этом состоянии намного ниже, чем у старой политики.
Если, как в ситуации 3, оценка преимущества положительная (), вы хотите увеличить вероятность выбрать это действие в этом состоянии.
Но если, как в ситуации 4, оценка преимущества отрицательная, мы не хотим уменьшать ещё сильнее вероятность выбрать это действие в этом состоянии. Поэтому градиент равен 0 (мы на горизонтальном участке), и веса не обновляются.
Случаи 5 и 6: отношение выше диапазона
Заголовок раздела «Случаи 5 и 6: отношение выше диапазона»Если отношение вероятностей больше , вероятность выбрать это действие в этом состоянии при текущей политике намного выше, чем при прежней.
Если, как в ситуации 5, преимущество положительное, мы не хотим жадничать. Вероятность выбрать это действие в этом состоянии и так уже выше, чем у прежней политики. Поэтому градиент равен 0 (мы на горизонтальном участке), и веса не обновляются.
Если, как в ситуации 6, преимущество отрицательное, мы хотим уменьшить вероятность выбрать это действие в этом состоянии.
Итак, политика обновляется только по необрезанной части цели. Когда минимум — обрезанная часть, веса политики не обновляются: градиент будет равен 0.
Значит, политика обновляется, только если:
- отношение внутри диапазона ;
- отношение вне диапазона, но преимущество тянет его обратно к диапазону:
- отношение ниже диапазона, но преимущество ;
- отношение выше диапазона, но преимущество .
Вы можете спросить, почему градиент равен 0, когда минимум — обрезанное отношение. Когда отношение обрезано, производная берётся уже не от , а от или , и обе равны 0.
Подведём итог: благодаря обрезанной суррогатной цели мы ограничиваем, насколько текущая политика может отойти от старой. Мы убираем стимул выводить отношение вероятностей за пределы интервала, потому что обрезка обнуляет градиент. Если отношение или , градиент равен 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 — сочетание обрезанной суррогатной целевой функции, функции потерь ценности и энтропийного бонуса:
Здесь и — коэффициенты, — квадратичная ошибка критика, а — энтропийный бонусэнтропийный бонусEN entropy bonusДобавка c·H[π(·|s)] к цели — награда за «неуверенность» политики, чтобы она не схлопнулась раньше времени и продолжала исследовать.: он поощряет исследование, не давая политике слишком рано стать детерминированной.
Это было довольно сложно. Не спешите разобраться в этих ситуациях, глядя на таблицу и график. Вы должны понять, почему это осмысленно. Если хотите копнуть глубже, лучший источник — работа «Towards Delivering a Coherent Self-Contained Explanation of Proximal Policy Optimization» Дэниела Бика, особенно раздел 3.4.
Заключение
Заголовок раздела «Заключение»На сегодня всё. Поздравляем с окончанием юнита и практического занятия!
Лучший способ учиться — практиковаться и пробовать. Почему бы не доработать реализацию, чтобы она принимала на вход кадры?
Увидимся во второй части юнита 🔥 Продолжайте учиться и оставайтесь крутыми 🤗
Дополнительное чтение
Заголовок раздела «Дополнительное чтение»Это необязательные материалы для тех, кто хочет копнуть глубже.
Объяснения PPO
- Towards Delivering a Coherent Self-Contained Explanation of Proximal Policy Optimization — Дэниел Бик.
- What is the way to understand Proximal Policy Optimization Algorithm in RL? (Stack Overflow).
- Foundations of Deep RL Series, L4: TRPO and PPO — Питер Аббил (видео).
- Пост OpenAI о PPO.
- PPO в Spinning Up.
- Статья Proximal Policy Optimization Algorithms.
Детали реализации PPO
- The 37 Implementation Details of Proximal Policy Optimization.
- Part 1 of 3 — Proximal Policy Optimization Implementation: 11 Core Implementation Details (видео).
Выборка по значимости
- Importance Sampling Explained (видео).
Вопросы от переводчика
Заголовок раздела «Вопросы от переводчика»Словарик
Заголовок раздела «Словарик»| English | Русский |
|---|---|
| Proximal Policy Optimization (PPO) | проксимальная оптимизация политики |
| policy update | обновление политики |
| probability ratio | отношение вероятностей |
| clip, clip range | обрезка (клиппинг), диапазон обрезки |
| clipped surrogate objective | обрезанная суррогатная целевая функция |
| unclipped / clipped part | необрезанная / обрезанная часть |
| lower (pessimistic) bound | нижняя (пессимистическая) оценка |
| Trust Region Policy Optimization (TRPO) | оптимизация политики в доверительной области |
| KL divergence constraint | ограничение на KL-дивергенцию |
| value loss | функция потерь ценности (критика) |
| entropy bonus | энтропийный бонус |
| importance sampling | выборка по значимости |