Эпоха 6 · Генеративка и системы · 2024

59 GRPO

DeepSeekMath: Pushing the Limits of Mathematical Reasoning… · Shao и др. · DeepSeek-AI · 2024 (алгоритм GRPO; движок RL в DeepSeek-R1)
🟧 оригинал выборочно~1.5 чоригинал ↗
Суть за 20 секунд. PPO без критика. Для промпта сэмплим ГРУППУ из G ответов, каждому — награда; advantage считаем относительно среднего по группе (нормируя). Отдельная value-сеть (половина стоимости PPO) не нужна — группа сама себе baseline. Так RL для LLM становится вдвое дешевле по «тяжёлым» сетям; это ядро reasoning-обучения DeepSeek (#53, R1) и открытый рецепт того, что стоит за o1-подобным рассуждением (#58).

Контекст

RLHF (#44) крутит PPO (#33), а PPO держит отдельную value/critic-сеть — она оценивает ожидаемую награду (baseline), чтобы снизить дисперсию advantage. На масштабе LLM критик по размеру сопоставим с самой политикой: это ×2 память и compute на RL-стадии. Дорого.

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

Убрать критика. Для каждого промпта старая политика сэмплит группу из G ответов; каждый получает награду (reward-модель или проверяемая награда — математика, код). Baseline — среднее награды по группе; advantage каждого ответа — насколько он лучше среднего (с нормировкой на разброс). Дальше — тот же клиппованный surrogate и KL к референсу, что в PPO, но advantage групповой-относительный. Отдельная value-сеть не нужна: сравнение нескольких ответов на один вопрос и есть оценка baseline.

обучение с подкреплением Групповой advantage вместо критика

Сэмплим G ответов \( o_1,\dots,o_G \) на промпт, награды \( r_1,\dots,r_G \). Advantage — относительно группы:

\[ A_i = \frac{r_i - \mathrm{mean}(r_1,\dots,r_G)}{\mathrm{std}(r_1,\dots,r_G)} \]

Цель — клиппованный PPO-суррогат с этим advantage плюс KL к референсной модели (\( \rho_i = \pi_\theta(o_i)/\pi_{\text{old}}(o_i) \)):

\[ \mathcal{J}(\theta) = \mathbb{E}\Big[\min\big(\rho_i A_i,\ \mathrm{clip}(\rho_i,\,1-\epsilon,\,1+\epsilon)\,A_i\big)\Big] - \beta\,\mathrm{KL}\!\left(\pi_\theta \,\Vert\, \pi_{\text{ref}}\right) \]

Сравните с PPO (#33): там advantage считает отдельная value-сеть (через GAE). GRPO заменяет её среднем по группе — положительный advantage у ответов выше среднего, отрицательный у тех, что ниже. Клип не даёт большим шагам разносить политику, KL держит рядом с референсом. Критик исчез, а стабилизаторы PPO остались.

Python GRPO: advantage из наград группы
def grpo_advantages(rewards):                  # rewards: [G] — награды ответов на ОДИН промпт
    mu, sd = rewards.mean(), rewards.std() + 1e-6
    return (rewards - mu) / sd                  # относительно среднего по группе — без критика

# обновление политики: тот же клип+KL, что в PPO, но A — групповой
# loss = -min(rho*A, clip(rho,1-eps,1+eps)*A) + beta*KL(pi||ref)
промпт G ответов r=0.9r=0.2r=0.7r=0.4 baseline =среднее группы A = r − baselineапдейт (без критика) выше среднего → усилить · ниже → ослабить
Несколько ответов на один промпт награждаются; среднее по группе служит baseline; advantage каждого — отклонение от среднего. Отдельная value-сеть PPO больше не нужна.
Аналогия. Вместо того чтобы держать отдельного судью-оценщика (критика), который заранее говорит «этот ответ стоит столько-то», просто просим ученика решить задачу несколькими способами и сравниваем их между собой: те, что вышли лучше среднего по своей же пачке, — усиливаем, те, что хуже, — ослабляем. Группа ответов на один вопрос сама себе точка отсчёта — судья не нужен.

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

GRPO удешевил RL для LLM (нет критика — вдвое меньше «тяжёлых» сетей и памяти) и стал рабочей лошадкой reasoning-RL: DeepSeekMath → R1 и волна открытых reasoning-моделей. Это открытый, воспроизводимый рецепт того, что делает o1-подобное рассуждение (#58) — из закрытого фронтира в общедоступный инструмент.

Связи

← упрощает33. PPO

GRPO — это PPO без value-сети: тот же клиппованный surrogate и KL, но advantage берётся из среднего по группе сэмплов, а не из отдельного критика. Стабилизаторы PPO сохранены, самая дорогая деталь убрана.

← движок для58. o1 / test-time compute

Reasoning, которым славится o1, выращивают RL — и GRPO стал открытым таким движком: наградой за верный ответ он учит модель длинным самопроверяемым цепочкам. То, что o1 показал закрыто, GRPO дал воспроизвести.

↔ иначе упрощает RLHF51. DPO

Обе снимают сложность RLHF, но по-разному: DPO убирает RL целиком (classification на парах, офлайн), GRPO оставляет online-RL, но убирает критика. Отсюда разделение ролей: DPO — дешёвое preference-выравнивание, GRPO — reasoning с проверяемыми наградами, где важен онлайн-сэмплинг.

Вопросы пытливого ума

Почему критика можно выкинуть без потери — он же снижал дисперсию?

Критик нужен как baseline, вычитаемый из награды для снижения дисперсии policy-gradient. Но если насэмплировать несколько ответов на один промпт, их средняя награда — уже хороший, несмещённый baseline для этого промпта. Группа заменяет обученную value-сеть, экономя половину памяти и compute — и часто работает не хуже, особенно с проверяемыми наградами.

Тогда чем GRPO отличается от REINFORCE с baseline?

По сути это policy gradient с групповым baseline, но с двумя деталями от PPO: клип отношения вероятностей (чтобы большой шаг не разнёс политику) и KL к референсу (чтобы не уехать далеко от разумной модели). Плюс нормировка advantage на разброс группы делает его относительным и устойчивым. Это «REINFORCE, укреплённый стабилизаторами PPO, но без критика».

Где GRPO слаб?

Групповой baseline требует сэмплить несколько ответов на промпт — это стоит инференса на каждом шаге RL. Оценка advantage грубее, чем у обученного критика, и шумит на маленьких группах. И как всякий RL с наградой, GRPO чувствителен к её качеству: на «мягких» задачах без проверяемой награды нужна хорошая reward-модель со всеми её рисками (reward hacking, sycophancy — см. #44).

Что читать в оригинале

Читать выборочно: из DeepSeekMath (arXiv 2402.03300) — вывод цели GRPO и мотивацию «зачем убирать критика» (главная ценность); из отчёта R1 — как GRPO разворачивают в reasoning на проверяемых наградах. Полезно читать сразу после PPO (#33), чтобы видеть, что именно убрано и что сохранено.