PPO: почему этот алгоритм обучает почти всё — от ботов до ChatGPT
Proximal Policy Optimization стал стандартом обучения с подкреплением: на нём OpenAI обучала манипуляторы, игровых ботов и этап RLHF в ChatGPT. Разбираем, как он устроен и почему вытеснил конкурентов.

Когда в 2017 году команда OpenAI опубликовала статью Proximal Policy Optimization Algorithms, у обучения с подкреплением была репутация капризной технологии: алгоритмы либо расходились, либо требовали тонкой ручной настройки под каждую задачу. PPO предложил компромисс — простую реализацию, устойчивость к плохо подобранным гиперпараметрам и результаты не хуже сложных методов вроде TRPO. Через несколько лет тот же PPO оказался в основе этапа RLHF при обучении InstructGPT и ChatGPT, а сегодня это дефолтный выбор в библиотеках вроде Stable-Baselines3 и TRL.
Что вообще решает PPO
Обучение с подкреплением строит политику — функцию, которая по состоянию среды выбирает действие. Агент действует, получает награду, и задача алгоритма — так сдвинуть параметры политики, чтобы суммарная награда росла. Проблема в том, как именно сдвигать.
Наивный подход — policy gradient — берёт градиент ожидаемой награды и делает шаг в его сторону. Но если шаг слишком большой, политика может резко измениться и обвалить всё, чему уже научилась: следующая порция данных собирается уже испорченной политикой, и обучение разваливается. Слишком маленький шаг — и обучение тянется бесконечно.
Предшественник PPO, TRPO¹, решал это через жёсткое ограничение: не давать новой политике отклоняться от старой больше, чем на заданную величину (по KL-дивергенции). Работало хорошо, но реализация требовала вычисления матрицы вторых производных и сопряжённых градиентов — тяжело и хрупко в коде.
Главная идея PPO проста до неприличия: если один и тот же прием — ограничение шага политики — можно реализовать через обычный клиппинг вместо матричных вычислений, зачем усложнять.
Clipped surrogate objective — сердце алгоритма
PPO вводит отношение вероятностей нового и старого распределений действий: насколько новая политика чаще или реже выбирает то же действие. Обозначим его r(θ). Если действие оказалось лучше ожидаемого (положительное преимущество, advantage), хочется увеличить его вероятность — но не бесконечно.
Ключевой трюк — обрезка (clipping). PPO берёт минимум из двух величин: обычного произведения r(θ) × advantage и того же произведения, где r(θ) зажато в коридор [1 − ε, 1 + ε]. Параметр ε обычно равен 0.1–0.2. Как только отношение вероятностей вылезает за коридор в выгодную сторону, целевая функция перестаёт вознаграждать дальнейшее движение — стимул делать огромный шаг исчезает.
Эффект тот же, что у TRPO: политика не улетает далеко от старой за один апдейт. Но вместо ограничения-множителя Лагранжа и второго порядка производных — простая операция clip, которую можно записать в одну строку на любом фреймворке.
Что ещё входит в полную целевую функцию
На практике оптимизируют не только clipped-часть. Полный loss обычно складывается из трёх слагаемых:
- Policy loss — та самая обрезанная целевая функция, отвечает за улучшение поведения.
- Value loss — ошибка предсказания ценности состояния (обычно MSE). Нужна для оценки advantage.
- Entropy bonus — награда за «разнообразие» действий, чтобы агент раньше времени не схлопнулся в детерминированную стратегию и продолжал исследовать среду.
Advantage чаще всего считают через GAE (Generalized Advantage Estimation) — способ сбалансировать смещение и дисперсию оценки с параметром λ, обычно около 0.95.
PPO против соседей по цеху
Чтобы понять, где PPO уместен, полезно сравнить его с другими семействами алгоритмов. Оговорка: границы условны, конкретные цифры зависят от задачи и реализации.
| Алгоритм | Тип | Сильная сторона | Слабое место |
|---|---|---|---|
| PPO | on-policy | Устойчивость, простой код, работает и с дискретными, и с непрерывными действиями | Неэкономно расходует данные — старые эпизоды не переиспользуются |
| TRPO | on-policy | Строгая гарантия монотонного улучшения | Тяжёлая реализация, второй порядок производных |
| SAC | off-policy | Очень эффективен по данным, хорош в непрерывном управлении | Сложнее в настройке, чувствителен к температуре энтропии |
| DQN | off-policy | Экономит данные через replay buffer | Только дискретные действия |
Ключевое различие — on-policy против off-policy. PPO обучается на данных, собранных текущей политикой, и после нескольких проходов по батчу их выбрасывает. Это делает его расточительным по числу взаимодействий со средой, зато простым и предсказуемым. Off-policy методы (SAC, DQN) переиспользуют старый опыт из буфера — данных нужно меньше, но настройка тоньше.
Почему PPO попал в RLHF
На этапе обучения ChatGPT с обратной связью от человека задача формулируется как RL: политика — сама языковая модель, действие — выбор следующего токена, награда приходит от отдельной reward-модели, обученной на человеческих предпочтениях. Здесь ценна именно устойчивость PPO: языковая модель огромна, каждый шаг обучения дорог, а резкое изменение политики легко превращает связный текст в бессмыслицу.
В RLHF к целевой функции обычно добавляют штраф за отклонение от исходной модели по KL-дивергенции — чтобы модель, гоняясь за наградой, не «сломала язык» и не начала выдавать вырожденные ответы, набирающие высокий скор у reward-модели. Это ровно та же философия сдерживания шага, что и в clipping.
Ограничения, о которых стоит знать
- PPO чувствителен к нормализации наград и advantage — без неё обучение часто нестабильно.
- Число эпох прохода по одному батчу нельзя задирать: 3–10 обычно норма, больше — и clipping перестаёт спасать от переобучения на порции.
- Для RLHF PPO сложен и капризен в железе; часть команд переходит на более простые альтернативы вроде DPO, где RL как такового нет.
С чего начать на практике
Если хотите потрогать PPO руками, не переписывая алгоритм с нуля:
- Возьмите готовую реализацию — Stable-Baselines3 для классического RL или TRL от Hugging Face для дообучения языковых моделей.
- Начните с игрушечной среды из Gymnasium (CartPole, LunarLander), чтобы убедиться, что пайплайн вообще сходится.
- Не трогайте гиперпараметры до тех пор, пока базовый прогон не заработает: дефолты в этих библиотеках подобраны разумно.
- Логируйте KL-дивергенцию между старой и новой политикой — если она резко растёт, шаг слишком большой.
¹ TRPO (Trust Region Policy Optimization) — алгоритм 2015 года, ограничивающий изменение политики областью доверия по KL-дивергенции. PPO можно считать его упрощённой и практичной версией.
Prompt-инженер: Идеальные запросы для Midjourney, ChatGPT и других моделей.
Спросить за 15 ₽Источники: Schulman et al. Proximal Policy Optimization Algorithms (arXiv), OpenAI Spinning Up — Proximal Policy Optimization
Частые вопросы
Чем PPO принципиально отличается от обычного policy gradient?
Какое значение ε брать для clipping?
Почему PPO считают неэкономным по данным?
Обязательно ли использовать PPO для RLHF?
Подходит ли PPO для непрерывного управления, например для робота?
Что делать, если обучение PPO не сходится?
Материал носит информационный характер и подготовлен редакцией «Агентуры». Он не является офертой, рекламой или индивидуальной консультацией. Упомянутые продукты, компании и торговые знаки принадлежат их правообладателям. Перед принятием решений, влекущих юридические или финансовые последствия, обратитесь к профильному специалисту.