Что такое GRPO (Group Relative Policy Optimization)? Как он отличается от PPO (нет Value model, усреднение по группе ответов)?
Краткий тезис
Group Relative Policy Optimization (GRPO) — это метод оптимизации политики без использования отдельной Value model («критика»), предложенный компанией DeepSeek в контексте обучения с подкреплением для языковых моделей, особенно задач рассуждения (reasoning). Вместо того чтобы предсказывать ценность состояния (advantage) с помощью нейросети-критика, GRPO генерирует несколько ответов на один промпт, усредняет их вознаграждения (reward) и использует среднее как групповой baseline. Это снижает потребление памяти и упрощает пайплайн, сохраняя эффективное обучение.
--------|-----|------| | Оценка advantage | Value model (нейросеть) | Среднее по группе ответов | | Потребление памяти | 2× (policy + value) | 1× (только policy) | | Гибкость | Требует согласованности critic | Проще, но зависит от размера группы | | Типичное применение | Любые задачи RLHF | Reasoning, кодирование, математика |
2. Нет Value model (экономия памяти)
В классическом RLHF с PPO хранятся две нейросети: policy (актор) и value (критик). Value model — это обычно та же архитектура, что и политика, но с выходом одного скаляра (ценность состояния). Во время обучения PPO выполняет два прямых прохода и два обратных, что удваивает требования к GPU-памяти. GRPO полностью избавляется от Value model — никаких дополнительных параметров. Вместо этого advantage вычисляется как смещение вознаграждения данного ответа относительно среднего по группе. Это особенно выгодно при обучении больших языковых моделей (LLM) с сотнями миллиардов параметров, где каждый лишний гигабайт памяти на критичен.
Где берётся экономия:
- Нет второго форварда — не нужно пропускать все токены через Value model.
- Меньше параметров — не надо обновлять веса критика.
- Нет буфера для advantage — значения $\hat{A}_i$ вычисляются на лету из $G$ ответов.
Единственная накладная стоимость — генерация $G$ ответов на один промпт, но это легко распараллелить на GPU (batch generation). На практике $G$ обычно выбирается в диапазоне 8–64; это меньше, чем объём данных, который потребовался бы для стабильного обучения Value model.
3. Baseline — средний reward по группе
В policy gradient advantage $A = R - b$, где $b$ — baseline. Хороший baseline уменьшает дисперсию градиентов, не смещая оценку. GRPO использует в качестве baseline среднее вознаграждение по группе ответов на тот же промпт. Это естественная оценка "как хорошо в среднем отвечает модель на данный запрос". Ответы с вознаграждением выше среднего получают положительный advantage (подталкиваются к повышению вероятности), ниже среднего — отрицательный (подавляются).
Преимущества:
- Простота — не нужно учить Value model.
- Conditonal baseline — среднее по той же выборке ответов автоматически учитывает разброс вознаграждений в конкретной ситуации. В PPO Value model часто несовершенна и даёт сглаженные оценки, а групповой baseline адаптивен.
- Снижение bias — среднее по группе несмещённо, если группа репрезентативна для политики. Но малый размер группы $G$ может увеличивать дисперсию (trade-off).
Математическая формулировка
Пусть $\pi_\theta$ — политика, $q$ — промпт, $o_i$ — $i$-й сгенерированный ответ. Вознаграждение $r_i = R(o_i, q)$. Считаем среднее $\mu = \frac{1}{G}\sum_{j=1}^{G} r_j$ и стандартное отклонение $\sigma$ (иногда без деления на $\sigma$, только вычитание среднего). Тогда loss:
$$ \mathcal{L}{GRPO}(\theta) = -\frac{1}{G} \sum{i=1}^{G} \left[ \frac{r_i - \mu}{\sigma} \cdot \frac{\pi_\theta(o_i|q)}{\pi_{\theta_{old}}(o_i|q)} \right] + [beta](/wiki/beta), [text](/wiki/text){KL}(\pi_\theta || \pi_{ref}) $$
Здесь $\pi_{ref}$ — модель до обновления (для KL-регуляризации). Коэффициент $[beta](/wiki/beta)$ контролирует дивергенцию.
Важно: В оригинальной реализации DeepSeek-R1 используется не деление на $\sigma$, а просто $r_i - \mu$ — это называется reward normalization within group в простейшей форме.
4. Упрощает PPO, особенно для reasoning
Задачи reasoning (Chain-of-Thought, математические доказательства, генерация кода) требуют генерации длинных последовательностей, и каждое действие (токен) может иметь отсроченное вознаграждение (вердикт правильности известен только после завершения всего ответа). В классическом PPO нужно для каждого токена получать оценку Value model, что:
- Утяжеляет обучение (требует большого батча для стабильности Value model).
- Value model часто сходится медленно и может давать неточные оценки для редких состояний (длинные цепочки рассуждений).
- Приходится использовать Generalized Advantage Estimation (GAE) и хранить значения для каждого временного шага.
GRPO обходит эти проблемы: advantage одинаков для всех токенов одного ответа (так как baseline — одно среднее по группе). Это допустимо, потому что в конечном итоге мы хотим увеличить вероятность всего ответа (траектории) целиком, а не отдельных токенов. Такой подход называется bandit formulation (каждый ответ — одно действие). Потери в способности учиться на промежуточных шагах компенсируются простотой, меньшим шумом и эффективностью.
Преимущества для reasoning:
- Меньше хайперпараметров — не нужно настраивать $\lambda$ для GAE, дисконтный фактор $\gamma$.
- Быстрее сходится на задачах с отсроченным вознаграждением — модель учится выбирать весь рассуждение, которое в итоге привело к правильному ответу.
- Стабильнее — отсутствие Value model исключает её рассинхрон с политикой.
Недостаток: при большом числе действий внутри ответа (сотни токенов) метод может быть менее эффективен, чем полный PPO с пошаговыми оценками. Но для LLM, где каждый ответ — это короткая-средняя последовательность (до нескольких тысяч токенов), GRPO показал себя как один из самых эффективных алгоритмов alignment.
Пет-проект для закрепления
Задача: Реализовать GRPO для обучения небольшой языковой модели (например, GPT-2 small) на задаче ответов на вопросы из датасета GSM8K (математические задачи). Использовать бинарное вознаграждение (1 — правильный ответ, 0 — неправильный). Сравнить с обучением через REINFORCE без baseline.
Инструменты:
- Python 3.10+, PyTorch, Hugging Face Transformers (GPT2LMHeadModel), Datasets
- Собственная функция reward (проверка ответа по эталону из датасета)
- Базовый PPO/GRPO (можно модифицировать пример из TRL)
Шаги:
- Загрузить датасет GSM8K (или SQuAD). Выбрать подмножество ~1000 примеров.
- Инициализировать GPT-2 small (124M).
- Для каждого батча промптов (размер $B=4$) сгенерировать $G=8$ ответов с помощью
model.generate(). - Вычислить reward для каждого ответа (например, извлечь число из ответа и сравнить с правильным).
- Вычислить $\mu$ и $\sigma$ по группе из $G$ ответов.
- Рассчитать loss:
- Лог-вероятности выбранных токенов под текущей политикой и старой (для importance sampling).
- Преимущество $\hat{A}_i = (r_i - \mu) / \max(\sigma, [epsilon](/wiki/Epsilon))$.
- PPO clip (опционально):
advantage * torch.clamp(ratio, 1-clip, 1+clip). - KL penalty относительно reference model (копия до апдейта).
- Обновить веса с помощью оптимизатора (AdamW, lr=1e-5).
- Через каждые 10 шагов оценить точность на валидационной выборке (greedy decoding).
Ожидаемый результат:
- Модель научится генерировать правильные цепочки рассуждений, постепенно повышая долю правильных ответов (baseline PPO без Value model).
- По сравнению с REINFORCE (advantage = reward без baseline) GRPO должен демонстрировать меньшую дисперсию и более быструю сходимость.
- После обучения можно увидеть, что средний reward по группе растёт, разброс между ответами уменьшается.
Связь с другими вопросами
| Вопрос | Тема |
|---|---|
| 328 | PPO — алгоритм, от которого отталкивается GRPO |
Навигация
- Предыдущий: 988
- Следующий: 990
- Индекс: 00. Индекс разборов