先记住一句话
GRPO 的关键不是一个新 clip,而是“同一问题的多个回答互为 baseline”:比同组平均更好的回答增概率,更差的降概率。
1. 为什么想去掉 Critic
LLM PPO 需要训练一个与 actor 同量级或共享 backbone 的 value function,还要让稀疏 sequence reward 对应到每个 prefix value。若同一 prompt 能便宜地生成多条回答并自动评分,可以直接用组内比较消除 prompt 难度,省掉 critic。
2. 一次 GRPO batch
for prompt x in batch:
sample G responses y₁...yG from old policy
score rewards r₁...rG
μ, σ = mean(r), std(r)
Aᵢ = (rᵢ - μ) / (σ + ε)
recompute token log-probs under current policy
optimize clipped ratios × Aᵢ, plus optional reference KL
repeat with fresh on-policy-ish rollouts
相同 prompt 使 baseline 条件化在题目上:一道难题的“局部最好”仍可获得正 advantage,一道简单题中低于同伴的回答仍为负。
3. 目标函数看什么
ρᵢ,t(θ) = πθ(yᵢ,t|x,yᵢ,<t) / πold(yᵢ,t|x,yᵢ,<t)Lclip = E[min(ρᵢ,t Aᵢ, clip(ρᵢ,t,1−ε,1+ε) Aᵢ)]若只有 final outcome reward,常把 response-level Aᵢ 用在所有有效 completion tokens;再加 reference KL 或将 KL 写成 reward penalty。positive advantage 时 ratio 上界阻止一步暴涨;negative advantage 时相反边界阻止过度压低。
4. 与 PPO 的关系
| PPO + GAE | GRPO | |
|---|---|---|
| baseline | learned value V(s_t) | 同 prompt 的 group reward |
| advantage 粒度 | 通常逐时间步 | 经典形式多为整条 response 相同 |
| 额外模型 | critic/value | 无需 critic |
| 主要成本 | value forward/backward 与 rollout | 每 prompt 的 G 条 rollout |
| 适用 reward | dense 或 sparse | 同输入可比较的多样本 reward |
GRPO 不是“PPO 的通用升级版”。机器人 continuous-control trajectory 很长、环境样本昂贵时,为每个初态采一组完整 rollout 未必划算;critic 反而能跨状态泛化。
5. 组内标准化的边界
- 全组同分:
σ≈0,所有 advantage 接近 0,没有学习信号; - group 太小:mean/std 噪声大,单个异常 reward 支配更新;
- 二元 reward:只有组内同时有成败才有强信号,任务过难或过易都会稀疏;
- 相对而非绝对:它优化同组排序,不自动保证 calibrated value;
- 长度效应:按 token 还是按 sequence 聚合 loss,会改变长回答权重。
6. “GRPO”现在是一族实现
不同代码可能在 reward normalization、token/sequence aggregation、importance ratio、KL estimator、clipping 上不同。读配置时至少问:
- advantage 是按 prompt group、整个 batch,还是不除标准差?
- ratio 是逐 token 还是 sequence-level?loss 先 token 平均还是 response 平均?
- rollout engine 保存的 old log-prob 是否与训练端一致?
- KL 在 objective 外直接加、并入 reward,还是完全不用?
- 多次 epoch 后 rollout 有多 stale?
7. 训练失败怎样定位
| 现象 | 优先检查 |
|---|---|
| reward 不动 | zero-variance group 比例、任务难度、采样温度、verifier |
| reward 升但 eval 降 | reward hacking、长度/格式、训练集记忆 |
| KL/clipfrac 暴涨 | LR、epochs、old log-prob 精度与 rollout staleness |
| entropy 快速塌缩 | 探索不足、组内多样性、reward scale |
| loss 看似正常但不学习 | completion mask、sign、detached advantage、全组同分 |
8. 一个最小检查清单
同时画 raw reward mean/std、每题全同分比例、pass rate、response length、entropy、reference KL、clip fraction,以及 update 前 current/old ratio。若两者本应同一 policy,第一步 ratio 应非常接近 1。
9. 四个 GRPO 手算
例 1:group-relative advantages
同题 4 个 rewards=[1,1,0,0],mean=0.5,population std=0.5,所以 standardized advantages=[1,1,−1,−1]。绝对 reward 只取 0/1,也能产生正负学习信号。
例 2:全组相同没有信号
Rewards=[1,1,1,1] 时 mean=1、std=0。实现加 ε 避免除零,但 numerator 全为 0,所以 advantages 都为 0;全对题几乎不给相对 policy gradient。
例 3:ratio clipping
某正 advantage=1.5,old probability=0.10、new=0.14,ratio=1.4。ε=0.2 时 clipped contribution=1.2×1.5=1.8,小于未裁剪 2.1。
例 4:group decode 成本
128 prompts、group size G=16、平均 1024 output tokens,总 rollout=128×16×1024=2,097,152 tokens。G 从 8 翻到 16,critic 没变但 decode 近似翻倍。
“critic-free”不等于“低成本”。它减少 value model 显存与训练复杂度,却需要 G 倍候选来得到组内 baseline;在长 chain-of-thought 中,decode 往往才是主要吞吐瓶颈。
自测
1. 为什么要同一 prompt 成组采样?
这样 reward 差主要反映回答质量,而不是题目本身难度,组均值可充当 prompt-conditioned baseline。
2. 一组回答都正确会发生什么?
组内 reward 方差为零,标准化 advantage 接近零,这组几乎不给 policy gradient。
3. 为什么 ratio 在第一次 update 前应接近 1?
current policy 尚未更新,应与生成 rollout 的 old policy 相同;明显偏离通常说明 serving/training log-prob 或精度不一致。
一手资料
DeepSeekMath 提出 GRPO,以 group score 构造相对 advantage 并避免同尺寸 critic;PPO 的 clipped surrogate 来自原始 PPO 论文。