Эпоха 4 · Архитектуры и масштаб · 2017

33 PPO

Proximal Policy Optimization Algorithms · Schulman, Wolski, Dhariwal, Radford, Klimov · OpenAI
🟥 читать целиком~1.5 чоригинал ↗
Суть за 20 секунд. Простой надёжный policy-gradient: clipped surrogate objective не даёт политике уходить далеко за обновление — стабильность уровня TRPO без его сложности. Дефолт deep RL и, главное для канона, RL-движок RLHF (выравнивание ChatGPT/Claude).

Контекст

Policy-gradient методы RL нестабильны: большой шаг обновления может разрушить политику, и восстановиться трудно. TRPO это лечил жёстким ограничением на KL между новой и старой политикой, но был сложен (оптимизация второго порядка). Шульман и др. упрощают.

Идея и механизм

Вместо жёсткого ограничения — clipped surrogate objective. Считаем отношение вероятностей новой и старой политики и «обрезаем» его, не давая обновлению уходить далеко от старой политики. Это позволяет несколько эпох SGD на одном собранном батче (sample-эффективнее) при простой реализации первого порядка.

обучение с подкреплением Clipped surrogate: «пессимистичная» граница

Отношение вероятностей действия при новой и старой политике:

rt(θ) = πθ(at | st)πθ_old(at | st)

Целевая функция берёт минимум из обычного и «обрезанного» вариантов (Â — оценка преимущества действия):

LCLIP = E[ min( rt Ât,  clip(rt, 1−ε, 1+ε) Ât ) ]

Разберём по знаку преимущества:

  • Â > 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) граница
rL (Â>0) 1+ε clip: дальше — без выгоды
При хорошем действии (Â>0) выгода растёт с r, но «обрезается» после 1+ε — политике незачем меняться слишком резко.
Аналогия. Поводок с ограничителем. Политику тянет в сторону действий, которые сработали (большая награда), но поводок (clip) не даёт ей рвануть слишком далеко за один рывок — иначе она «забудет» всё, чему научилась, и улетит в хаос. Маленькие уверенные шаги вместо одного прыжка в неизвестность.

Почему это важно

Надёжно, просто, мало гиперпараметров → дефолтный алгоритм deep RL. И, что критично для этого канона, PPO — RL-движок RLHF: именно им InstructGPT/ChatGPT (#44) оптимизируют LLM под reward-модель человеческих предпочтений. Нюанс: сама статья про локомоцию и Atari — связь с RLHF появилась позже как downstream-применение.

Связи

← вырастает из18. DQN (Atari)

DQN открыл deep RL по value-функции (учим Q). PPO — другая ветвь, policy-based (учим политику напрямую), которая лучше работает для больших/непрерывных политик. Обе растут из успеха deep RL; для LLM пригодилась именно policy-ветвь.

→ движок для44. InstructGPT (RLHF)

В RLHF языковая модель — это политика, reward-модель — награда, и PPO оптимизирует LM максимизировать награду с KL-штрафом к исходной модели. Скромная RL-статья 2017-го оказалась несущей деталью того, что превратило LLM в ассистента.

↔ упрощается в51. DPO

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.