1117 字
6 分钟
GRPO:砍掉 Critic 的 PPO 改进版

前言#

GRPO(Group Relative Policy Optimization)是 DeepSeek 团队在训练 DeepSeek-R1 等推理模型时提出的强化学习算法。它是 PPO 的一个巧妙改进:砍掉了 Critic 网络(价值函数),用同一 prompt 下多采样的组内比较来替代

本文先回顾 PPO 在 LLM 场景下的痛点,再详细推导 GRPO 的核心机制。

一、回顾:PPO 在 LLM 中的痛点#

PPO 用优势函数来指导策略更新:

A^t=Q(st,at)V(st)\hat{A}_t = Q(s_t, a_t) - V(s_t)

要计算优势,就需要一个 Critic 网络 VϕV_\phi 来估计状态价值。在 LLM 场景中,Critic 通常和 Actor(策略模型 πθ\pi_\theta一样大

问题说明
显存翻倍Critic 和 Actor 一样大,训练需要约 2× 显存
训练不稳定Critic 本身也需要训练,Critic 估计不准会导致 Actor 学歪
复杂度高需要维护两个模型,调参更复杂

GRPO 的核心问题:能不能不要 Critic?

二、GRPO:Group Relative Policy Optimization#

2.1 核心创新:用 Group 替代 Critic#

GRPO 的做法非常巧妙。对于同一个 prompt qq,从旧策略 πθold\pi_{\theta_{\text{old}}}采样 GG 个不同的输出

{o1,o2,,oG}πθold(q)\{o_1, o_2, \ldots, o_G\} \sim \pi_{\theta_{\text{old}}}(\cdot | q)

每个输出 oio_i 都能得到一个 reward rir_i(由 reward model 给出)。然后计算组内相对优势

A^i=rimean({r1,,rG})std({r1,,rG})\hat{A}_i = \frac{r_i - \text{mean}(\{r_1, \ldots, r_G\})}{\text{std}(\{r_1, \ldots, r_G\})}
TIP

这就像「在班上排名」。与其请一个专家(Critic)给每个学生打分,不如直接看排名——分数减去全班平均分,再除以标准差,就是「相对优势」。简单、高效,而且不需要额外训练一个专家模型。

同一个 prompt 下的多个输出天然构成了一个「对照组」,组内比较比绝对打分更可靠。

2.2 和 PPO 的优势计算对比#

方法PPOGRPO
优势来源Critic 估计 QVQ - V组内标准化 score
需要额外模型是(Critic)
估计方式逐 token 的 TD 误差序列级 reward 的组内排名
参数GAE 的 λ\lambdaγ\gamma组大小 GG
NOTE

PPO 用 GAE 做时序差分估计,每个 token 都有独立的优势值。GRPO 由于 reward 只在序列结束时给出,同一个输出里所有 token 共享同一个优势值 A^i\hat{A}_i

2.3 GRPO 的目标函数#

GRPO 的目标函数保留了 PPO 的 clip 机制:

JGRPO(θ)=EqP(Q),{oi}i=1Gπθold(q)[1Gi=1G1oit=1oimin(ri,t(θ)A^i,t,clip(ri,t(θ),1ϵ,1+ϵ)A^i,t)]\begin{aligned} J_{\text{GRPO}}(\theta) = \mathbb{E}_{q \sim P(Q), \{o_i\}_{i=1}^G \sim \pi_{\theta_{\text{old}}}(\cdot|q)} \Bigg[ \frac{1}{G} \sum_{i=1}^{G} \frac{1}{|o_i|} \sum_{t=1}^{|o_i|} \min\Big( &r_{i,t}(\theta) \hat{A}_{i,t}, &\text{clip}(r_{i,t}(\theta), 1-\epsilon, 1+\epsilon) \hat{A}_{i,t} \Big) \Bigg] \end{aligned}

其中:

  • ri,t(θ)=πθ(oi,tq,oi,<t)πθold(oi,tq,oi,<t)r_{i,t}(\theta) = \dfrac{\pi_\theta(o_{i,t} | q, o_{i,<t})}{\pi_{\theta_{\text{old}}}(o_{i,t} | q, o_{i,<t})}:和 PPO 一样的概率比

  • A^i,t\hat{A}_{i,t}:第 ii 个输出第 tt 个 token 的优势 —— 同一个输出里所有 token 共享同一个优势值(因为 reward 是序列级给出的)

  • 1oi\frac{1}{|o_i|}:按输出长度做平均,避免长序列占主导

  • 1G\frac{1}{G}:对 GG 个采样取平均

TIP

外层是「同一个 prompt 采样 GG 个回答」,内层是 PPO 的 clip 机制。核心区别只有一条:优势 A^i\hat{A}_i 不是 Critic 算出来的,而是这 GG 个回答互相比较出来的。

2.4 GRPO 的 KL 惩罚#

GRPO 不使用 PPO 的 reward 级 KL 惩罚,而是在损失函数中直接加入:

DKL(πθ    πref)=1oit=1oiKL(πθ(q,oi,<t)    πref(q,oi,<t))\mathcal{D}_{\text{KL}}\left(\pi_\theta \;\|\; \pi_{\text{ref}}\right) = \frac{1}{|o_i|} \sum_{t=1}^{|o_i|} \text{KL}\left(\pi_\theta(\cdot|q, o_{i,<t}) \;\|\; \pi_{\text{ref}}(\cdot|q, o_{i,<t})\right)

完整损失:

LGRPO=JGRPO(θ)+βDKL\mathcal{L}_{\text{GRPO}} = -J_{\text{GRPO}}(\theta) + \beta \cdot \mathcal{D}_{\text{KL}}
TIP

PPO 把 KL 惩罚塞进 reward 里,是「间接」约束;GRPO 把 KL 惩罚直接加在 loss 里,是「直接」约束。效果类似,但 GRPO 的方式更简洁,不需要额外调整 reward 的计算方式。

2.5 训练流程#

对于每个 prompt q:
1. 从旧策略 π_θ_old 采样 G 个输出 {o_1, ..., o_G}
2. Reward model 打分,得到 {r_1, ..., r_G}
3. 计算组内标准化优势 Â_i = (r_i - mean) / std
4. 用 GRPO 目标函数更新策略
5. 更新参考模型(定期同步或 EMA)

三、PPO vs GRPO 完整对比#

维度PPOGRPO
Critic 网络需要,和 Actor 一样大不需要
优势计算Q(s,a)V(s)Q(s,a) - V(s),用 GAE 估计组内标准化:(rimean)/std(r_i - \text{mean}) / \text{std}
显存占用约 2× Actor 大小约 1× Actor 大小(+ 采样开销)
KL 惩罚加在 reward 中直接加在 loss 中
采样方式每个 prompt 采样一次每个 prompt 采样 GG
训练稳定性依赖 Critic 的准确性依赖组内样本数量 GG
代表工作ChatGPT, InstructGPT, ClaudeDeepSeek-R1, DeepSeekMath

四、总结#

  • 核心创新:用 Group 采样替代 Critic,砍掉价值网络
  • 优势 = 组内标准化 score,简单粗暴但有效
  • 显存友好,特别适合训练大模型(省掉一个等大的 Critic)
  • KL 惩罚直接加在 loss 中,比 PPO 的 reward 级 KL 更简洁
  • 需要同一 prompt 采样 GG 次,增加了推理开销
GRPO:砍掉 Critic 的 PPO 改进版
https://biscuit0613.github.io/posts/rm/grpo/
作者
Biscuit
发布于
2026-07-15
许可协议
CC BY-NC-SA 4.0
SAGA: 用自演化目标函数加速科学发现
PPO:从策略梯度到 RLHF 的核心优化器