PPO-RLHF 的 critic 很贵。
它要给每个 token 估计价值,要和 policy 一起训练,还会因为奖励稀疏、长度变化和分布漂移变得不稳定。
GRPO(Group Relative Policy Optimization)问了一个工程味很重的问题:如果我们为同一个 prompt 一次采样多条回答,能不能用组内相对分数当 baseline,直接去掉 critic?
DeepSeekMath 论文把这个想法用于数学推理训练,后来的 DeepSeek-R1 技术报告又把 GRPO 放到推理模型训练叙事的中心位置。
这篇文章讲清楚 GRPO 的动机、目标函数、组内优势、和 PPO/RLOO 的关系,以及它可能带来的长度和难度偏置。
读完你应该能判断:GRPO 省掉了什么、又把哪些问题转移到了采样组和奖励设计上。
一、PPO 的 critic 为什么在 LLM 上别扭
在标准 Actor-Critic 里,critic 学 \(V(s)\),用来估计某个状态之后还能拿到多少回报。
PPO 依赖这个 value baseline 降低策略梯度方差。
对语言模型来说,状态 \(s_t\) 是 prompt 加上已经生成的 prefix。
动作 \(a_t\) 是下一个 token。
最终奖励通常只在完整回答结束后才能得到。
例如数学题的 reward 来自最终答案是否正确。
例如偏好模型的 reward 来自整段回答的打分。
这让 critic 面临三个困难。
第一,reward 稀疏。
很多 token 位置没有直接监督,只能从最终结果反推。
第二,状态空间巨大。
prefix 的组合几乎无限,critic 很难泛化到所有中间状态。
第三,critic 本身是大模型。
如果 value head 共享 policy backbone,训练目标会互相干扰。
如果独立训练 value model,又多一份模型和显存。
PPO-RLHF 的四模型循环里,critic 是最容易被低估的复杂度来源之一。
GRPO 的动机就是拿掉它。
如果同一个 prompt 下采样 \(G\) 个回答,并给每个回答一个 reward,那么这一组回答天然提供了一个相对比较基线。
高于组内平均的回答,优势为正。
低于组内平均的回答,优势为负。
不需要再训练 \(Vpsi(s)\)。
二、组相对优势:用同题多样本替代价值网络
给定 prompt \(x\),从旧策略或当前策略采样一组回答:
\[ \{y_1,y_2,\ldots,y_G\}\sim\pi_{old}(\cdot\mid x) \]
奖励函数给每个回答打分:
\[ r_i = R(x,y_i) \]
GRPO 的组内相对优势通常写成:
\[ \hat A_i=\frac{r_i-\mathrm{mean}(\{r_j\}_{j=1}^{G})}{\mathrm{std}(\{r_j\}_{j=1}^{G})} \]
如果标准差接近 0,实现里会加一个很小的 \(\epsilon\) 防止除零。
示意代码如下:
# 示意:rewards 形状为 [batch, group]
import torch
def group_relative_advantage(rewards, eps=1e-6):
mean = rewards.mean(dim=1, keepdim=True)
std = rewards.std(dim=1, keepdim=True).clamp_min(eps)
return (rewards - mean) / std这段代码体现了 GRPO 的核心:优势来自同 prompt 的组内比较。
它没有 value network。
它也不需要把最终 reward 通过 GAE 逐 token 传播。
每个回答 \(y_i\) 得到一个序列级优势 \(\hat A_i\)。
训练时,回答中的每个 token 可以共享这个优势,配合 PPO 式 ratio 做更新。
这和 RLHF-PPO 的 token 级 GAE 不同。
GRPO 把 credit assignment 简化为“这整条回答比同题其它回答好还是差”。
对数学、代码这类最终答案可验证的任务,这个简化很自然。
如果一个回答答对,另一个答错,组内相对优势已经给出清楚方向。
如果奖励是偏好模型分数,组内优势也能工作,但仍受 reward model 可靠性限制。
三、GRPO 目标函数
DeepSeekMath 论文给出的 GRPO 目标保留了 PPO 的 clipped ratio 思想,并加入对 reference policy 的 KL 正则。
设第 \(i\) 个回答第 \(t\) 个 token 的 ratio 为:
\[ r_{i,t}(\theta)=\frac{\pi_\theta(a_{i,t}\mid x,a_{i,<t})}{\pi_{old}(a_{i,t}\mid x,a_{i,<t})} \]
PPO 式裁剪项为:
\[ \min\left(r_{i,t}(\theta)\hat A_i,\mathrm{clip}(r_{i,t}(\theta),1-\epsilon,1+\epsilon)\hat A_i\right) \]
再加 reference KL 惩罚,可以写成一个简化目标:
\[ \mathcal{J}_{GRPO}(\theta)= \mathbb{E}_{x,\{y_i\}} \left[ \frac{1}{G}\sum_{i=1}^{G}\frac{1}{|y_i|}\sum_{t=1}^{|y_i|} \min\left(r_{i,t}(\theta)\hat A_i,\mathrm{clip}(r_{i,t}(\theta),1-\epsilon,1+\epsilon)\hat A_i\right) -\beta D_{KL}(\pi_\theta\,\|\,\pi_{ref}) \right] \]
不同实现对 KL 项和长度归一化会有细节差异。
但结构很稳定:组内优势、PPO 裁剪、reference KL。
训练 loss 通常取负号最小化。
GRPO 没有 value loss。
没有 GAE 的 \(\lambda\)。
没有 critic 预热。
没有 value clipping。
这显著减少了 PPO 训练栈里的移动部件。
但它没有消除 PPO 的全部问题。
仍要保存 old log-prob。
仍要控制 ratio 和 clip fraction。
仍要处理 KL、长度、熵和奖励尺度。
仍要做在线采样和训练编排。
四、组采样循环长什么样
GRPO 的数据流可以画成一张组采样图。
flowchart TD
A[Prompt x] --> B[Policy 采样 G 个回答]
B --> C[奖励函数 R 逐条打分]
C --> D[组内 mean/std]
D --> E[相对优势 A_i]
B --> F[old log-prob 与 token mask]
B --> G[Reference KL]
E --> H[PPO-style clipped loss]
F --> H
G --> H
H --> I[更新 Policy]
I --> B
和上一篇 DPO 的 teacher forcing 不同,GRPO 必须在线采样。
同一个 prompt 要生成 \(G\) 条回答。
这会提高采样成本,但换来更好的同题比较信号。
\(G\) 越大,组内 mean/std 越稳定,探索覆盖越广。
\(G\) 越大,生成 token 成本也越高。
如果 \(G\) 太小,标准差估计噪声大。
如果所有回答奖励一样,优势接近 0,训练信号消失。
如果 reward 是二值正确性,组里最好同时有对有错。
这会把采样温度、模型当前能力和题目难度绑在一起。
太容易的题,组内全对,没有梯度。
太难的题,组内全错,也没有梯度。
最有训练价值的是“当前模型有一定概率做对”的题。
这也是 RLVR 数据调度很重要的原因。
五、和 PPO 的差异
| 维度 | PPO-RLHF | GRPO |
|---|---|---|
| 优势来源 | critic + GAE | 同 prompt 组内 reward 标准化 |
| 模型数量 | policy、reference、reward、value | policy、reference、reward;无 critic |
| reward 归因 | token 级 GAE | 序列级组相对优势 |
| 训练复杂度 | value loss、value clipping、GAE | group sampling、reward normalization |
| 适合场景 | 通用偏好 RLHF | 可多采样、可比较的任务,尤其 RLVR |
GRPO 不是把 PPO 完全换掉。
它保留了 PPO 最核心的 trust-region 近似:ratio 裁剪。
它去掉的是 critic 这条支线。
因此 GRPO 仍继承 PPO 的一些稳定性问题。
如果学习率太大,ratio 仍会失控。
如果 rollout 太旧,clip fraction 仍会很高。
如果 KL 系数太小,策略仍可能漂移。
如果 reward 被 hack,组内优势只会更快强化这种 hack。
不同的是,GRPO 不再需要担心 critic 学坏直接污染优势。
这对 LLM 尤其重要,因为训练一个可靠 token-level value function 本身就很难。
六、和 RLOO 的关系
RLOO(REINFORCE Leave-One-Out)也是去 critic 的思路。
Ahmadian et al. 2024 讨论了在 RLHF 中使用 REINFORCE 类方法,并用 leave-one-out baseline 降低方差。
如果同一个 prompt 采样多个回答,某条回答的 baseline 可以用其它回答 reward 的平均值。
形式上,RLOO 的优势可以写成:
\[ \hat A_i = r_i - \frac{1}{G-1}\sum_{j\neq i}r_j \]
这和 GRPO 的组内平均基线非常接近。
区别在于 GRPO 通常还会做标准差归一化,并把它放进 PPO-style clipped objective,加 reference KL。
RLOO 更强调 REINFORCE 与 leave-one-out baseline 的简洁性。
GRPO 更像“PPO 框架里把 GAE/critic 换成 group-relative advantage”。
两者共同说明一件事:在 LLM 后训练里,critic 不是唯一降方差工具。
同 prompt 多样本提供了强比较结构。
只要采样成本可接受,这个结构可以直接变成 baseline。
七、DeepSeekMath 与 DeepSeek-R1 语境
GRPO 最早被广泛讨论,主要来自 Shao et al. 2024 的 DeepSeekMath。
论文在数学推理场景中使用 GRPO,让模型通过规则奖励学习解题能力。
这里的奖励比传统偏好奖励更硬:答案对错可以由规则或解析器判断。
这类训练后来被归入 RLVR(Reinforcement Learning with Verifiable Rewards)语境。
DeepSeek-R1 技术报告进一步把大规模 RL 放到推理模型训练中心。
报告中 GRPO 是关键优化方法之一,用来在没有传统 critic 的情况下做大规模推理 RL。
需要谨慎的是,公开报告没有给出所有训练细节。
我们可以说 GRPO 在 DeepSeek-R1 叙事中处于中心位置,但不能凭空补训练数据规模、内部 reward 细节或未公开 ablation。
从方法角度看,GRPO 适合推理训练有三个原因。
第一,推理任务可以为同一题采样多条解法。
第二,最终答案常有可验证 reward。
第三,去掉 critic 降低了大模型 RL 的显存和工程复杂度。
但它也依赖足够强的采样能力。
如果模型几乎从不采到正确解,组内比较没有正样本。
如果模型已经全都答对,组内比较也没有差异。
所以课程难度、采样温度和数据筛选会决定训练信号密度。
八、长度偏置与难度偏置
GRPO 的组内标准化看起来很干净,但它不是无偏魔法。
第一个问题是长度偏置。
如果 reward 只看最终正确性,长链推理可能因为更容易到达正确答案而得到高 reward。
策略会不会学到“写更长就更可能拿分”?
这取决于 reward、格式约束、KL、长度惩罚和采样截断。
如果没有监控,模型可能产生越来越长的 reasoning trace。
第二个问题是 prompt 难度偏置。
组内标准化把每个 prompt 的 reward 转成相对分数。
这让不同题目的 reward scale 可比。
但它也可能让“难题里相对不那么差的错误答案”获得正优势。
例如一组全错时,如果 reward 有细粒度分数,最高的错误答案仍可能被强化。
如果 reward 是二值且全错,优势可能全为 0。
两种情况都会影响训练效率。
第三个问题是组内竞争偏置。
某条回答的优势不仅取决于它自身 reward,也取决于同组其它回答。
同一条回答放在不同采样组里,优势可能不同。
这增加了估计噪声。
第四个问题是标准差放大。
如果组内 reward 差异很小,除以很小的 std 会放大噪声。
实现里通常要 clamp std,或在全同 reward 时跳过样本。
这些问题促成了后续 Dr.GRPO 等变体和批评。
核心关注点包括长度归一化、难度校正、组大小、奖励尺度和 prompt 采样分布。
九、KL 约束仍然是安全带
去掉 critic 不等于可以去掉 reference KL。
GRPO 仍需要限制 policy 不要离初始模型太远。
尤其在可验证奖励场景里,reward 可能只检查最终答案。
模型可能学到奇怪格式、投机路径或利用解析器漏洞。
KL 惩罚把策略锚在 reference 附近。
reference 通常来自 SFT 或前一阶段模型。
KL 可以按 token 计算,也可以用近似形式加入 loss。
需要监控的指标包括:
- 每 token KL;
- response length;
- entropy;
- pass rate / correctness;
- reward 分布;
- clip fraction;
- 组内 reward std;
- 不同难度题目的有效样本比例。
如果 pass rate 上升但 KL 急剧升高,要警惕策略漂移。
如果 KL 稳定但 pass rate 不动,可能 \(\beta\) 太大或题目难度不合适。
如果长度持续增加,要检查 reward 是否间接奖励冗长推理。
这些内容会在 18|训练稳定性 里继续展开。
十、GRPO 的实现骨架
下面是一段极简伪代码,只表达训练结构。
# 示意:省略分布式、KV cache、padding、reference KL 细节
for prompts in dataloader:
responses, old_logp = policy.generate(prompts, n=group_size, return_logprob=True)
rewards = reward_fn(prompts, responses) # [B, G]
adv = group_relative_advantage(rewards) # [B, G]
batch = flatten_group(prompts, responses, old_logp, adv)
for _ in range(ppo_epochs):
logp = policy.sequence_logprob(batch)
ratio = torch.exp(logp.token - batch.old_logp.token)
clipped = torch.clamp(ratio, 1 - eps, 1 + eps)
pg = torch.minimum(ratio * batch.adv, clipped * batch.adv)
kl = reference_kl(policy, ref, batch)
loss = -(pg * batch.response_mask).sum() / batch.response_mask.sum()
loss = loss + beta * kl
loss.backward()
optimizer.step()
optimizer.zero_grad()这段伪代码有几个关键点。
adv 是序列级的,但广播到 token 上使用。
old_logp 来自采样时的 policy,不能用更新后的
policy 代替。
KL 仍然要 mask 掉 prompt 和 padding。
如果同一个 rollout 做多个 PPO epoch,要小心 policy drift。
如果 group 内 reward 全相同,要决定跳过、置零还是保留微小信号。
真实系统还要处理采样与训练分离。
GRPO 需要大量生成,推理吞吐是核心瓶颈。
这和 17|RL 训练基础设施 的主题直接相连。
十一、什么时候选 GRPO
适合 GRPO 的第一类场景是可验证奖励。
数学题、代码题、格式严格的工具调用任务,都可以给同一 prompt 多采样、多比较。
适合 GRPO 的第二类场景是 critic 成本不可接受。
模型太大、value head 不稳定、训练资源紧张时,去 critic 很有价值。
适合 GRPO 的第三类场景是你愿意用采样成本换训练简化。
每个 prompt 采样 \(G\) 条回答会增加生成成本。
但它省掉了 value model 和 GAE 调参。
不适合 GRPO 的场景也很明确。
如果 reward 很噪,组内相对优势会放大噪声。
如果 prompt 无法自然多采样比较,group baseline 意义变弱。
如果生成成本远高于训练成本,\(G\) 值会受到严格限制。
如果任务更像静态偏好对齐,DPO/SimPO 可能更便宜。
如果需要精细 token-level credit assignment,GRPO 的序列级优势可能太粗。
十二、和后续 RLVR 的连接
GRPO 本身是一种策略优化方法。
RLVR 是奖励来源和任务范式:奖励可验证。
两者经常一起出现,但不是同一个概念。
你可以用 PPO 做 RLVR。
也可以用 GRPO 做偏好模型奖励的 RLHF。
DeepSeekMath 和 DeepSeek-R1 让“GRPO + 可验证奖励 + 大规模采样”成为一个很有影响力的组合。
下一篇 13|RLVR 会把重点从优化器转到奖励。
核心问题会变成:什么样的任务能给可靠 reward?
答案解析、代码单测、规则验证各有什么漏洞?
为什么可验证 reward 能更直接训练推理能力?
GRPO 在这里的角色,是把这些 reward 高效转化为策略更新,同时避免 critic 成为系统瓶颈。
参考资料
- Zhihong Shao, Peiyi Wang, Qihao Zhu, Runxin Xu, Junxiao Song, Xiao Bi, Haowei Zhang, et al. 2024. DeepSeekMath: Pushing the Limits of Mathematical Reasoning in Open Language Models. arXiv:2402.03300.
- DeepSeek-AI. 2025. DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning. arXiv:2501.12948.
- Arash Ahmadian, Chris Cremer, Matthias Gallé, Marzieh Fadaee, Julia Kreutzer, Olivier Pietquin, Ahmet Üstün, Sara Hooker. 2024. Back to Basics: Revisiting REINFORCE Style Optimization for Learning from Human Feedback in LLMs. arXiv:2402.14740.
- John Schulman, Filip Wolski, Prafulla Dhariwal, Alec Radford, Oleg Klimov. 2017. Proximal Policy Optimization Algorithms. arXiv:1707.06347.
← 上一篇:11|DPO 家族 | 下一篇:13|RLVR →
同主题继续阅读
把当前热点继续串成多页阅读,而不是停在单篇消费。
强化学习与大模型后训练
从 MDP、策略梯度、PPO 等强化学习最小必要集出发,系统讲清现代大模型后训练:SFT、奖励模型、RLHF,到 DPO/IPO/KTO/ORPO/SimPO 免 RL 对齐、GRPO,再到 RLVR 可验证奖励、推理模型(o1/R1 范式)、过程奖励、奖励黑客、RL 训练基础设施与评测。全 20 篇深度博客。
【强化学习与大模型后训练】01|系列总览:从 RL 到 LLM 后训练的地图
把强化学习到大模型后训练的主线压成一张可阅读地图,区分风格对齐与能力激发,并说明 20 篇文章的依赖关系。
【强化学习与大模型后训练】06|后训练全景:SFT → RM → RLHF → 评测
把现代后训练拆成数据、目标函数、采样、奖励和评测组成的系统流水线,说明每一阶段改变模型的哪一部分。
【强化学习与大模型后训练】13|RLVR:可验证奖励如何训练推理能力
RLVR用规则或形式化验证器替代学习的奖励模型,以减少reward hacking、提高透明度,适用于数学、代码等具备ground truth的任务。