33 PPO
Контекст
Policy-gradient методы RL нестабильны: большой шаг обновления может разрушить политику, и восстановиться трудно. TRPO это лечил жёстким ограничением на KL между новой и старой политикой, но был сложен (оптимизация второго порядка). Шульман и др. упрощают.
Идея и механизм
Вместо жёсткого ограничения — clipped surrogate objective. Считаем отношение вероятностей новой и старой политики и «обрезаем» его, не давая обновлению уходить далеко от старой политики. Это позволяет несколько эпох SGD на одном собранном батче (sample-эффективнее) при простой реализации первого порядка.
обучение с подкреплением Clipped surrogate: «пессимистичная» граница
Отношение вероятностей действия при новой и старой политике:
Целевая функция берёт минимум из обычного и «обрезанного» вариантов (Â — оценка преимущества действия):
Разберём по знаку преимущества:
- Â > 0 (действие хорошее): хотим увеличить r, но clip ограничивает выгоду при r > 1+ε — нет стимула уходить далеко.
- Â < 0 (плохое): хотим уменьшить r, clip ставит пол на 1−ε.
Минимум выбирает более пессимистичную оценку → консервативные шаги без явного KL-ограничения. Простая формула первого порядка заменяет тяжёлую оптимизацию TRPO.
PyTorch Clipped лосс PPO
import torch
def ppo_loss(logp, logp_old, adv, eps=0.2):
ratio = torch.exp(logp - logp_old) # π_new / π_old
clipped = torch.clamp(ratio, 1 - eps, 1 + eps)
return -torch.min(ratio * adv, clipped * adv).mean() # пессимистичная (min) граница
Почему это важно
Надёжно, просто, мало гиперпараметров → дефолтный алгоритм deep RL. И, что критично для этого канона, PPO — RL-движок RLHF: именно им InstructGPT/ChatGPT (#44) оптимизируют LLM под reward-модель человеческих предпочтений. Нюанс: сама статья про локомоцию и Atari — связь с RLHF появилась позже как downstream-применение.
Связи
DQN открыл deep RL по value-функции (учим Q). PPO — другая ветвь, policy-based (учим политику напрямую), которая лучше работает для больших/непрерывных политик. Обе растут из успеха deep RL; для LLM пригодилась именно policy-ветвь.
В RLHF языковая модель — это политика, reward-модель — награда, и PPO оптимизирует LM максимизировать награду с KL-штрафом к исходной модели. Скромная RL-статья 2017-го оказалась несущей деталью того, что превратило LLM в ассистента.
RLHF на PPO сложен (отдельная reward-модель + нестабильный RL). DPO показывает, что того же результата можно достичь без RL — простым classification-лоссом. PPO задал планку, которую DPO обошёл по простоте.
Вопросы пытливого ума
Чем PPO лучше TRPO, если идея «не уходить далеко» одна и та же?
TRPO накладывает жёсткое KL-ограничение и решает задачу второго порядка (conjugate gradient, произведения с гессианом) — сложно и дорого. PPO достигает похожей стабильности простым клиппингом в обычном first-order objective: легко реализуется, работает со стандартным SGD/Adam и допускает несколько эпох на батче. Победила простота, а не теоретическая строгость.
Почему именно clip, а не KL-штраф в лоссе?
Вариант с адаптивным KL-штрафом в статье тоже есть, но клиппинг проще и устойчивее: не нужно подбирать и подстраивать коэффициент штрафа. Clip напрямую ограничивает изменение политики геометрически, без тонкой настройки. На практике clipped-версия стала стандартом именно за робастность «из коробки».
Статья про роботов — как она стала основой выравнивания ChatGPT?
PPO — это общий оптимизатор политики, ему всё равно, что политика — это языковая модель, а награда — оценка человеческих предпочтений. RLHF просто подставил LLM в роль политики, reward-модель — в роль награды, добавил KL-штраф к референсу. Авторы 2017-го и не подозревали, что их алгоритм для ходьбы роботов будет выравнивать диалоговых ассистентов — типичный сюжет, как фундаментальный метод находит неожиданное применение.
Что читать в оригинале
Короткий и практичный — читать целиком; clipped objective стоит понять точно, он лежит в основе выравнивания LLM.