Перейти к содержимому
ПереводыQwen, InternLM и другие

modelscope-classroom: «PPO и GRPO»

Полный перевод короткой статьи учебника ModelScope о PPO и GRPO: интуиция «осторожного учителя кулинарии», отношение вероятностей и клиппинг, зачем DeepSeek отказался от модели ценности, схема обучения DeepSeek-R1 и выбор фреймворка — с примечаниями переводчика о неточностях оригинала.

Обучение с подкреплением — ещё одна ветвь искусственного интеллекта помимо глубокого обучения, и мыслит она иначе. Несколько примеров, где применяется обучение с подкреплением:

  1. автоматический поиск пути в онлайн-играх;
  2. робот, который переносит камень;
  3. AlphaGo, играющая в го.

Основная идея обучения с подкреплением: агент выбирает действие, получает информацию от среды и по текущей награде и ожидаемой будущей награде выбирает следующее действие — и так по кругу.

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

Представьте, что вы учитесь готовить, и у вас очень осторожный учитель.

Ситуация. Вчера вы научились готовить жареный рис с яйцом, а сегодня хотите освоить новые приправы. (Модель уже предобучена, а теперь мы хотим подправить манеру её ответов.)

Ученик. Сегодня я добавлю кучу новых приправ! (Я буду менять параметры модели и сдвигать распределение её ответов!)

Учитель. Погоди, не меняй слишком много. Вчера ты положил ложку соли — вышло хорошо. Сегодня клади не больше 1,2 ложки, а не сразу две, иначе испортишь блюдо. (Не уходи далеко от текущих параметров модели, чтобы не забыть знания и не развалить обучение, — отсюда «проксимальная», то есть «ближняя», оптимизация политики.)

У классического градиента политики есть проблема: данные собирает старая политика πθold\pi_{\theta_{old}}, а обновляем мы новую политику πθ\pi_\theta.

Исправляем это с помощью выборки по значимостивыборка по значимости (importance sampling)EN importance samplingПеревзвешивание сэмплов старой политики отношением π_new / π_old — основа PPO.:

Ea∼πθold[f(a)]=Ea∼πθ[πθold(a∣s)πθ(a∣s)f(a)]\mathbb{E}_{a \sim \pi_{\theta_{old}}}[f(a)] = \mathbb{E}_{a \sim \pi_\theta}\left[\frac{\pi_{\theta_{old}}(a|s)}{\pi_\theta(a|s)} f(a)\right]

Определяем отношение вероятностей (коэффициент выборки по значимости):

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

Целевая функция PPO:

LCLIP(θ)=Et[min⁡(rt(θ)At, clip(rt(θ),1−ϵ,1+ϵ)At)]L^{CLIP}(\theta) = \mathbb{E}_t\left[\min\left(r_t(\theta)A_t,\ \text{clip}(r_t(\theta), 1-\epsilon, 1+\epsilon)A_t\right)\right]

где:

  • AtA_t — функция преимуществапреимущество (advantage)EN advantageA = r − b или A(s, a) = Q(s, a) − V(s): насколько действие лучше среднего в этой ситуации.: насколько действие ata_t лучше среднего;
  • ϵ\epsilon — параметр обрезки, обычно 0,1 или 0,2;
  • функция clip ограничивает отношение диапазоном [1−ϵ,1+ϵ][1-\epsilon, 1+\epsilon].

Когда At>0A_t > 0 (хорошее действие):

  • если rt>1+ϵr_t > 1+\epsilon: новая политика слишком сильно повысила вероятность этого хорошего действия — обрезаем;
  • если rt<1−ϵr_t < 1-\epsilon: новая политика слишком сильно понизила вероятность этого хорошего действия — тоже обрезаем.

Когда At<0A_t < 0 (плохое действие):

  • если rt>1+ϵr_t > 1+\epsilon: новая политика слишком сильно повысила вероятность плохого действия — обрезаем;
  • если rt<1−ϵr_t < 1-\epsilon: новая политика слишком сильно понизила вероятность плохого действия — тоже обрезаем.

Так обновления политики не бывают слишком резкими.

(В оригинале здесь две картинки: формула PPO и схема «PPO против GRPO» из статьи DeepSeekMath. На схеме видно: у PPO есть модель ценности, которая оценивает каждый шаг, у GRPO её нет — вместо неё группа ответов на один вопрос и сравнение наград внутри группы.)

GRPO происходит из статьи DeepSeekMath команды DeepSeek.

  1. Модель ценности (Value Model) в PPO поначалу неточна и обучается одновременно с моделью политики (Policy Model), что может вызывать нестабильность обучения.
  2. Дополнительная модель ценности усложняет инженерию крупномасштабного обучения и увеличивает расход ресурсов.
  3. Людям проще судить об относительных величинах, чем об абсолютных. Поэтому точно оценить ответ абсолютным баллом при разметке трудно, а RL-обучению нужно только относительное преимущество — значит, проще заменить оценку выборкой.

Главная идея GRPO — заменить абсолютную оценку относительным преимуществом внутри выборки. Приведём процесс обучения DeepSeek с GRPO:

  1. Сначала собирают немного качественных данных для холодного старта (несколько тысяч примеров) и дообучают на них модель DeepSeek-V3-Base — получается модель A.
  2. Модель A обучают с GRPO, чтобы у неё проявилась способность к рассуждениям; сошедшаяся модель — B.
  3. Модель B генерирует качественные данные для SFT; их смешивают с качественными данными других областей, сгенерированными DeepSeek-V3, — получается качественный датасет.
  4. На этом датасете обучают исходную DeepSeek-V3-Base — модель C.
  5. С моделью C снова проходят шаг 2, но уже на данных всех областей; сошедшаяся модель — D, это и есть DeepSeek-R1.
  6. Данными, на которых обучали модель C, дистиллируют маленькие модели — и это тоже работает очень хорошо.

Приведём ключевые места из статьи:

Функция ценности в PPO обычно — ещё одна модель того же размера, что и модель политики, а это огромная нагрузка на память и вычисления. Кроме того, при RL-обучении функция ценности служит базовой линией (baseline) при вычислении преимущества, чтобы снизить дисперсию. А в контексте больших языковых моделей оценку от модели награды обычно получает только последний токен, и это может усложнять обучение функции ценности, точной на каждом токене. Чтобы решить эту проблему, как показано на рисунке 4, мы предлагаем оптимизацию политики с групповой относительностью (GRPO): она убирает нужду в дополнительной аппроксимации функции ценности, как в PPO, а в качестве базовой линии использует среднюю награду нескольких выборочных ответов на один и тот же вопрос. Точнее, для каждого вопроса qq GRPO выбирает из старой политики πθold\pi_{\theta_{old}} группу ответов {o1,o2,…,oG}\{o_1, o_2, \dots, o_G\} и оптимизирует модель политики, максимизируя следующую цель:

JGRPO(θ)=E[q∼P(Q), {oi}i=1G∼πθold(O∣q)]1G∑i=1G1∣oi∣∑t=1∣oi∣{min⁡[πθ(oi,t∣q,oi,<t)πθold(oi,t∣q,oi,<t)A^i,t, clip(πθ(oi,t∣q,oi,<t)πθold(oi,t∣q,oi,<t),1−ϵ,1+ϵ)A^i,t]−β DKL[πθ ∥ πref]}\mathcal{J}_{GRPO}(\theta) = \mathbb{E}\Big[q \sim P(Q),\ \{o_i\}_{i=1}^{G} \sim \pi_{\theta_{old}}(O \mid q)\Big] \frac{1}{G}\sum_{i=1}^{G}\frac{1}{|o_i|}\sum_{t=1}^{|o_i|}\left\{\min\left[\frac{\pi_\theta(o_{i,t} \mid q, o_{i,<t})}{\pi_{\theta_{old}}(o_{i,t} \mid q, o_{i,<t})}\hat{A}_{i,t},\ \text{clip}\left(\frac{\pi_\theta(o_{i,t} \mid q, o_{i,<t})}{\pi_{\theta_{old}}(o_{i,t} \mid q, o_{i,<t})}, 1-\epsilon, 1+\epsilon\right)\hat{A}_{i,t}\right] - \beta\,\mathbb{D}_{KL}\left[\pi_\theta \,\|\, \pi_{ref}\right]\right\}

(В оригинале — картинка с этой формулой.)

… Групповой относительный подход GRPO хорошо согласуется со сравнительной природой моделей награды: модели награды обычно обучают на датасетах сравнений разных ответов на один и тот же вопрос. Заметим также, что GRPO не добавляет штраф KL в награду, а регуляризует, добавляя KL-расхождение между обучаемой и референсной политикой прямо в функцию потерь, — это не усложняет вычисление A^i,t\hat{A}_{i,t}. В отличие от штрафа KL в PPO, мы оцениваем KL-расхождение следующей несмещённой оценкой (Schulman, 2020):

DKL[πθ ∥ πref]=πref(oi,t∣q,oi,<t)πθ(oi,t∣q,oi,<t)−log⁡πref(oi,t∣q,oi,<t)πθ(oi,t∣q,oi,<t)−1\mathbb{D}_{KL}\left[\pi_\theta \,\|\, \pi_{ref}\right] = \frac{\pi_{ref}(o_{i,t} \mid q, o_{i,<t})}{\pi_\theta(o_{i,t} \mid q, o_{i,<t})} - \log\frac{\pi_{ref}(o_{i,t} \mid q, o_{i,<t})}{\pi_\theta(o_{i,t} \mid q, o_{i,<t})} - 1

(В оригинале — картинка с этой формулой; это оценка k3оценка KL «k3»EN k3 KL estimatorρ − log ρ − 1, где ρ = π_ref / π_θ: несмещённая оценка KL(π_θ ‖ π_ref) по сэмплу, всегда ≥ 0. В verl — kl_loss_type=low_var_kl., она всегда неотрицательна.)

… Для каждого вопроса qq из старой модели политики πθold\pi_{\theta_{old}} выбирается группа ответов {o1,o2,…,oG}\{o_1, o_2, \dots, o_G\}. Затем модель награды оценивает ответы, давая GG соответствующих наград r={r1,r2,…,rG}\mathbf{r} = \{r_1, r_2, \dots, r_G\}. После этого награды нормируют: вычитают среднее по группе и делят на стандартное отклонение группы. Контроль по результату даёт нормированную награду в конце каждого ответа oio_i, и преимущество всех токенов ответа A^i,t\hat{A}_{i,t} полагается равным нормированной награде: A^i,t=r~i=ri−mean(r)std(r)\hat{A}_{i,t} = \tilde{r}_i = \frac{r_i - \text{mean}(\mathbf{r})}{\text{std}(\mathbf{r})}, после чего политику оптимизируют, максимизируя цель из формулы выше.

GRPO снял огромные затраты на разметку данных для дообучения с подкреплением, упростил требования к формату датасета и само обучение — это одна из важных причин, почему DeepSeek-R1 так прогремела.

Выберите подходящий вам фреймворк. Несколько хороших открытых вариантов:

  • SWIFT: поддерживает предобучение (PT), SFT, RLHF, мультимодальные модели, Megatron, дистилляцию, GRPO, отбор с отклонением (rejection sampling) и др.;
  • veRL: крупномасштабное RL-обучение, особенно в связке Megatron + Ray;
  • OpenRLHF: аналог veRL, крупномасштабное RL-обучение, особенно Megatron + Ray;
  • TRL: фреймворк сообщества Hugging Face, прост в использовании, подходит для небольшого RL-обучения.