跳到主要内容

GRPO 世代 — 砍掉价值网络之后

这一章讲三件事: GRPO 怎么用一个统计量换掉 PPO 的整个价值网络,以及这个 换法自带的偏差;GSPO/CISPO 这些「GRPO 之后」的算法各在修什么病;损失聚合、 异步训练这些「工程决定」怎么反过来改变模型学到的行为。读完你能看懂 2025 年 那批算法缩写(DAPO/VAPO/Dr. GRPO)的谱系表。

1. 这一章讲什么

第 05 章留下的账:PPO 的价值函数要额外养一份模型——当前策略、参考模型、 价值网络三份权重同时在显存里,而且「从语言模型骨干训一个靠谱的价值网络」 本身没有成熟方法。2024 年 DeepSeek 在 DeepSeekMath 里给出的替代方案 GRPO (Group Relative Policy Optimization)成了推理模型时代的默认起点1

本章覆盖原书第 6 章的后半:GRPO 及其变体、实现层的三个关键决定(优势放哪、 损失怎么聚合、训练怎么异步),以及「双重正则」这个容易被忽略的真相。

2. 顶层全景与主走查

主走查:一道题,组内采样 4 条回答,奖励模型(或判对错的函数)给出 [1, 0, 1, 0] 四个分(这组数是为演示编的)。GRPO 的全部魔法在优势计算2:

组内 4 条回答的奖励:r = [1, 0, 1, 0]
均值 = 0.5
标准差 ≈ 0.577(四条里有两条不同,散布不大不小)
优势 = (个人 − 组均值) / 组内标准差
得 1 分的两条: (1 − 0.5) / 0.577 ≈ +0.87 → 推高
得 0 分的两条: (0 − 0.5) / 0.577 ≈ −0.87 → 压低

图说:「比这组同伴的平均好多少」就是优势——价值网络的工作
被一组同伴的统计量替掉了。4 条回答之后各自走 PPO 式的 clip 更新
(与上一章同一个六情况逻辑)。

每个机制在走查上的位置:第 3.1 节讲这组统计量的来历与偏差;第 3.2 节讲 「4 条之后」的更新在 GSPO/CISPO 里怎么变形;第 3.3 节讲这 4 条的损失加成 一个数时的三种算法。

3. 核心原理

3.1 GRPO:省一份模型,借一身偏差

GRPO 与 PPO 的实现差异书里总结了三条3:优势用组内统计量(不是价值函数)、 没有价值网络(省显存、少一份要训的东西)、KL 惩罚直接加在损失里(不是 从奖励里减)。直觉上,GRPO 的每一步更新都在比较「同一道题的多条答案」: 模型学着更像被标对的,更不像其余的4

代价藏在标准差(衡量一组数散布多开)里。主走查那组数是「理想情况」。

换成 [1, 1, 1, 0]——组内几乎全对——均值 0.75、标准差骤然变小,那条唯一答错的反而拿到巨大的负优势;而 [0, 0, 0, 1] 这种「只有一条蒙对」的题,恰恰是最有信息量的难题,却可能被低方差的归一化(把一组数拉到统一尺度的操作)压缩了信号5。书中引的修正叫 Dr. GRPO (GRPO Done Right):把标准差项整个去掉——代价是「几乎全错、仅一条对」的 难题被系统性降权,而那正是最该学的东西;书中还证明 Dr. GRPO 的优势与 RLOO 只差一个常数倍——这些算法本来就是一个家族6

3.2 GSPO 与 CISPO:token 级 clip 的两味新药

GRPO 之后冒出的缩写,病根是同一个:重要性采样的比值在 token 级算,而奖励 在整句级别给。一个 token 的比值跑出 [1−ε, 1+ε] 界外,它的梯度就被 clip 清成零——书里管这叫 token dropping:那些「模型原本觉得不太可能、但恰恰 是关键推理步」的稀有 token,可能永远学不会7

两味药的差别在夹谁8:

算法夹什么思路
GSPO(Qwen 系)比值改成整句级别(长度的几何平均,防长句数值爆炸)修正的粒度对齐奖励的粒度
CISPO(MiniMax-M1)还是夹比值本身,但不丢梯度:被夹的比值只当乘数,不再参与求导每个 token 仍拿到 ∝ 优势的梯度,只是限幅

两者的出生背景相同:都是在超大规模混合专家(MoE)模型上做 RL 的团队—— token 级比值在稀疏激活的大模型上数值最不稳。书里点破:「在小型学术实验里 好处不明显」——这两个算法是规模逼出来的9

3.3 损失怎么聚合成一个数:三种算法,三种偏斜

每个 token 有损失,整批要加成一个数——除法怎么除,决定「长回答」和「短回答」 谁的声音大10。书里用两条序列给出真实算过的梯度:

策略除以什么后果(书里代码实测)
按序列(GRPO 标准)每条自己的长度短序列每个 token 的梯度 0.25,长序列只有 0.1429——短回答声音大
按 token(DAPO)批内总 token 数所有 token 梯度一致(0.0909)
固定长度(Dr. GRPO)最大生成长度两者同为 0.1429,但长回答贡献的总梯度更大

这三个数字来自书里跑出来的真实代码输出。哪一种「对」没有答案,书里的口径是 「看哪个数值更稳、方差更小」;但它直接关联到一个老熟人:长度偏差—— 第 13 章里「RLHF 让模型话痨」的病,部分就是这些除法的选择喂出来的11

3.4 GAE:价值函数时代的精细基线

PPO 那一支还在进化。GAE(Generalized Advantage Estimation)是学价值函数时 算优势的标准方法:把「单步的偏差(行话叫误差)」和「全程回报」按一个 λ 参数加权平均。

λ 是指数(越远权重衰减越快)式的调和旋钮:λ=0 退化为单步(偏差大方差小),λ=1 退化为全程回报(方差大偏差小);语言模型 微调的常用默认是 λ=0.95——因为回答短、且大家倾向不折扣的记账(γ=1)12。 实现上是一次反向扫描:终端 token 处累积器清零,天然支持多条序列打包在一起算13

3.5 工程三件事:异步、截断、双重正则

异步:理论要求「数据由当前策略生成」(on-policy),但生成和训练分跑在两套 GPU(训练用的显卡)上,推理端与训练端靠 Ray 之类的调度器传权重,完美同步做不到、 也不划算——书里的话:「所有近期的实证结果都在理论证明之外一点点」14

推理模型让这个矛盾尖锐化:一条长推理的生成能拖住整批算力(可用的计算资源),解法是序列打包 (短样本填缝)和更彻底的异步(第 07 章的难度过滤也在此现身)15

截断:生成超长被硬截断的回答拿去打分,分数会落到分布外——标准做法是只在 正常结束(EOS)的样本上打分,超长另加惩罚16

双重正则:RLHF 其实有两层刹车——PPO 内建的 clip,和 KL 缰绳。书里给了个 颠覆直觉的事实:实践中每批只走一步梯度,clip 永远不触发,真正一直在工作的是 KL。PPO 和 REINFORCE 的区别在微调场景远比在游戏里小17。监控用的指标(被夹样本的占比)也有: clip fraction(被夹样本的占比)大概率一直是 0;它不为零才需要担心。

3.6 算法谱系一页看懂

书里第 7 章还会从实践侧补一刀,这里先把第 6 章给出的几个改装名收进表格:

名字在谁身上改了什么一句话
DAPOGRPOclip 左右不对称(正方向放宽鼓励探索)+ 丢掉全对全错的题 + 按 token 聚合 + 超长软惩罚18
VAPOPPO价值函数预训练 + 长度自适应 GAE,证明价值路线没死19
Dr. GRPOGRPO去掉 std 归一(见 3.1)
ReMaxREINFORCEbaseline 专为奖励模型打分的噪音设计
TOPRREINFORCE直接夹比值(如 CISPO),正奖励不做修正、负奖励夹紧,支持异步

4. 作者的判断与证据

书里有证据的部分:GRPO 的实现差异出自 DeepSeekMath;Dr. GRPO 与 RLOO 的等价 有推导;三种聚合的梯度数字是书中真实运行的代码。书里给判断的部分:作者断言 「算法选择远不如数据与初始模型重要」(这句话在第 08 章还会以文献形式再出现); 以及「这些算法都能调到适配特定任务」——没有免费午餐,只有适配20

判断(我们的,不是书里的): 2024–2025 这批算法井喷,本质是同一个三角 里的滑动——「省显存(GRPO)」「保稀有梯度(CISPO)」「抗数值不稳(GSPO)」, 每个新算法都是把另外两个当牺牲品换其中一个。选型的第一步不是看论文的 基准表,是先问自己的瓶颈在三角哪个角上。 如果错,会错在: 如果某算法的主张其实是「奖励信号质量」层面的改进 (比如 DAPO 的 dynamic sampling,丢的是没有学习信号的样本),把它当优化器 层面的取舍就会错配预期。

5. 边界与局限

  • 对比表(Table 6.1)信息量有限:书里的算法对照表在正文中没有展开逐列解释, on/off-policy 的口径是「推导层面」的,实践都轻微违反;
  • 分布式系统只给架构图:learners/actors、两条队列的图有了,但同步协议(机器间对话的规矩)、 权重传输的实现全部「out of scope」21;
  • MoE 专属结论:GSPO/CISPO 的收益论证依赖大 MoE 场景,小模型上是否必要 书里明说证据不足9

6. 可带走的

  1. GRPO = PPO 减价值网络加组内相对优势;显存三份变两份;
  2. std 归一化偏袒低方差题;Dr. GRPO 删掉它,代价是难题降权——两害相权, 没有免费选项;
  3. token 级 clip 会丢稀有关键 token 的梯度(GSPO/CISPO 的病根);
  4. GSPO 把比值抬到句子级;CISPO 夹比值但保梯度——一个换粒度,一个换夹法;
  5. 损失聚合的三种除法(0.25 / 0.1429 / 0.0909)直接改变长短回答的话语权;
  6. 实践中每批一步梯度,真正生效的刹车是 KL,不是 clip;
  7. GAE 的 λ 是偏差-方差旋钮,LM 微调常用 0.95 + γ=1;
  8. on-policy 是理想,异步是现实——所有现代系统都活在「理论之外一点点」。

7. 原文地图

主题原书章原文位置
GRPO 的来历与两个好处6.1.5 GRPOtext/14-ch06-01-6-1-5-group-relative-policy-optimization-grpo.txt:7(搜「DeepSeekMath」) · text/14-ch06-01-6-1-5-group-relative-policy-optimization-grpo.txt:13(搜「Avoiding the challenge」)
组内相对的直觉与样本数6.1.5 GRPOtext/14-ch06-01-6-1-5-group-relative-policy-optimization-grpo.txt:66(搜「more like the answers marked as correct」)
std 偏差与 Dr. GRPO6.1.5 GRPOtext/14-ch06-01-6-1-5-group-relative-policy-optimization-grpo.txt:72(搜「low variation」) · text/14-ch06-01-6-1-5-group-relative-policy-optimization-grpo.txt:84(搜「GRPO Done Right」) · text/14-ch06-01-6-1-5-group-relative-policy-optimization-grpo.txt:110(搜「scaled equivalence」)
token dropping 与 GSPO6.1.6 GSPOtext/15-ch06-01-6-1-6-group-sequence-policy-optimization-gspo.txt:32(搜「token dropping」) · text/15-ch06-01-6-1-6-group-sequence-policy-optimization-gspo.txt:63(搜「geometric mean」) · text/15-ch06-01-6-1-6-group-sequence-policy-optimization-gspo.txt:95(搜「sequence-level importance ratios」)
CISPO 夹权重保梯度6.1.7 CISPOtext/16-ch06-01-6-1-7-clipped-importance-sampling-policy-optimiz.txt:7(搜「stop-gradient」) · text/16-ch06-01-6-1-7-clipped-importance-sampling-policy-optimiz.txt:33(搜「bias-variance tradeoff」) · text/16-ch06-01-6-1-7-clipped-importance-sampling-policy-optimiz.txt:39(搜「large-scale MoE」)
三种聚合与梯度数字6.2.2 Loss Aggregationtext/19-ch06-02-6-2-2-loss-aggregation.txt:99(搜「seq_1_losses」) · text/19-ch06-02-6-2-2-loss-aggregation.txt:206(搜「0.25」) · text/19-ch06-02-6-2-2-loss-aggregation.txt:212(搜「numerical stability」)
bandit vs MDP 分框6.2.2 Loss Aggregationtext/19-ch06-02-6-2-2-loss-aggregation.txt:224(搜「MDP (token-level) view」) · text/19-ch06-02-6-2-2-loss-aggregation.txt:230(搜「bandit (sequence-level) view」)
异步系统6.2.3 Asynchronicitytext/20-ch06-02-6-2-3-asynchronicity.txt:20(搜「leaners」) · text/20-ch06-02-6-2-3-asynchronicity.txt:33(搜「sequence-level packing」)
GRPO 实现三差异6.2.5 GRPOtext/22-ch06-02-6-2-5-group-relative-policy-optimization.txt:83(搜「rather than using a learned value function」) · text/22-ch06-02-6-2-5-group-relative-policy-optimization.txt:89(搜「adds the KL penalty directly to the loss」)
RLOO 实现6.2.5 GRPOtext/22-ch06-02-6-2-5-group-relative-policy-optimization.txt:113(搜「Leave-one-out baseline」)
GAE6.3.1 GAEtext/23-ch06-03-6-3-1-generalized-advantage-estimation-gae.txt:7(搜「bias-variance tradeoff」) · text/23-ch06-03-6-3-1-generalized-advantage-estimation-gae.txt:89(搜「undiscounted credit assignment」)
双重正则6.3.2 Double Regularizationtext/24-ch06-03-6-3-2-double-regularization.txt:7(搜「two types of regularization」) · text/24-ch06-03-6-3-2-double-regularization.txt:25(搜「KL distances penalties predominate」)
DAPO/VAPO 等后续6.3.3 Further Readingtext/25-ch06-03-6-3-3-further-reading.txt:25(搜「DAPO」) · text/25-ch06-03-6-3-3-further-reading.txt:28(搜「VAPO」)

Footnotes

  1. 出处:「6.1.5 Group Relative Policy Optimization (GRPO)」第 7 段(text/14-ch06-01-6-1-5-group-relative-policy-optimization-grpo.txt:7,搜「introduced in DeepSeekMath」)与第 16 段(text/14-ch06-01-6-1-5-group-relative-policy-optimization-grpo.txt:16,搜「Saves memory」)。

  2. 出处:「6.2.5 Group Relative Policy Optimization」第 1 段的伪代码(text/22-ch06-02-6-2-5-group-relative-policy-optimization.txt:38,搜「std_grouped_rewards」)。公式为组内均值/标准差归一化;演示数字 [1,0,1,0] 为编造。

  3. 出处:「6.2.5 Group Relative Policy Optimization」第 77 段(text/22-ch06-02-6-2-5-group-relative-policy-optimization.txt:77,搜「core differences」)。

  4. 出处:「6.1.5 Group Relative Policy Optimization (GRPO)」第 66 段(text/14-ch06-01-6-1-5-group-relative-policy-optimization-grpo.txt:66,搜「more like the answers marked as correct」)。

  5. 出处:「6.1.5 Group Relative Policy Optimization (GRPO)」第 72 段(text/14-ch06-01-6-1-5-group-relative-policy-optimization-grpo.txt:72,搜「low variation in answer correctness」)。

  6. 出处:「6.1.5 Group Relative Policy Optimization (GRPO)」第 84 段(text/14-ch06-01-6-1-5-group-relative-policy-optimization-grpo.txt:84,搜「Dr. GRPO」)与第 110 段(text/14-ch06-01-6-1-5-group-relative-policy-optimization-grpo.txt:110,搜「scaled equivalence」)。

  7. 出处:「6.1.6 Group Sequence Policy Optimization (GSPO)」第 32 段(text/15-ch06-01-6-1-6-group-sequence-policy-optimization-gspo.txt:32,搜「token dropping」)。

  8. 出处:「6.1.6 GSPO」第 44 段(text/15-ch06-01-6-1-6-group-sequence-policy-optimization-gspo.txt:44,搜「single importance weight per response」)与「6.1.7 CISPO」第 7 段(text/16-ch06-01-6-1-7-clipped-importance-sampling-policy-optimiz.txt:7,搜「clips the importance weights」)。

  9. 出处:「6.1.7 CISPO」第 39 段(text/16-ch06-01-6-1-7-clipped-importance-sampling-policy-optimiz.txt:39,搜「large-scale MoE」)。原文:token 级比值在大 MoE 上不稳,这些算法「particularly impactful on large-scale models, but less studied…within smaller, academic experiments」。 2

  10. 出处:「6.2.2 Loss Aggregation」第 7 段(text/19-ch06-02-6-2-2-loss-aggregation.txt:7,搜「three main strategies」)。

  11. 出处:「6.2.2 Loss Aggregation」第 99 段(text/19-ch06-02-6-2-2-loss-aggregation.txt:99,搜「seq_1_losses」)与第 206 段(text/19-ch06-02-6-2-2-loss-aggregation.txt:206,搜「0.25」)。

  12. 出处:「6.3.1 Generalized Advantage Estimation (GAE)」第 7 段(text/23-ch06-03-6-3-1-generalized-advantage-estimation-gae.txt:7,搜「bias-variance tradeoff」)与第 89 段(text/23-ch06-03-6-3-1-generalized-advantage-estimation-gae.txt:89,搜「undiscounted credit assignment」)。

  13. 出处:「6.3.1 GAE」第 89 段(text/23-ch06-03-6-3-1-generalized-advantage-estimation-gae.txt:89,搜「packing-friendly」)。

  14. 出处:「6.2.3 Asynchronicity」第 7 段(text/20-ch06-02-6-2-3-asynchronicity.txt:7,搜「substantially slows」)。

  15. 出处:「6.2.3 Asynchronicity」第 33 段(text/20-ch06-02-6-2-3-asynchronicity.txt:33,搜「sequence-level packing」)。

  16. 出处:「6.1.8 Comparing Algorithms」第 33 段(text/17-ch06-01-6-1-8-comparing-algorithms.txt:33,搜「out-of-distribution」)。

  17. 出处:「6.3.2 Double Regularization」第 25 段(text/24-ch06-03-6-3-2-double-regularization.txt:25,搜「KL distances penalties predominate」)与第 13 段(text/24-ch06-03-6-3-2-double-regularization.txt:13,搜「far less meaningful」)。

  18. 出处:「6.3.3 Further Reading」第 25 段(text/25-ch06-03-6-3-3-further-reading.txt:25,搜「4 modifications」)。

  19. 出处:「6.3.3 Further Reading」第 28 段(text/25-ch06-03-6-3-3-further-reading.txt:28,搜「VAPO」)。

  20. 出处:第 6 章导语第 49 段(text/09-fm-this-chapter-covers.txt:49,搜「tuned to fit a specific task」)。

  21. 出处:「6.2.3 Asynchronicity」第 33 段(text/20-ch06-02-6-2-3-asynchronicity.txt:33,搜「out of scope」)。