📖 阅读时间:约 5 分钟 这一篇接着 RL07 往下讲:DPO 绕开了在线 RL,GRPO 则回到 RL,但砍掉了最重的 Critic。
少了 Critic,模型怎么知道自己进步了?
上一篇讲 PPO 时,我们说过一个关键角色:Critic。
Actor 负责生成回答,Critic 负责估计“这一步大概值多少分”。听起来很合理,但放到大模型 RL 里,Critic 会带来一串麻烦。
可以分成四类看:
第一,贵。
Critic 往往也是一条不轻的模型支线。到了 70B 级别,即使不完全同规模,只要 Critic 足够强,显存、通信、训练吞吐都会非常吃紧。
第二,难训。
Critic 要学会预测“当前回答未来能拿多少 reward”。但长链推理不是一步两步,前面某个中间思路到底会不会导向正确答案,很难提前估准。Critic 估错了,Actor 就会被错误信号带偏。
第三,容易滞后。
Actor 一直在更新,回答分布会变;Critic 如果跟不上,就像老师拿旧试卷标准评今天的模拟考,越到后期越可能激励不到细微进步。
第四,工程链路更复杂。
PPO 里要同时维护 Actor、Reference、Reward Model、Critic,多模型训练、显存切分、同步更新、稳定性调参都会变重。
所以 GRPO 想解决的不是“Critic 一点用都没有”,而是:能不能少养一个这么重、这么难校准的 Critic?
可以用小明和小红考试来理解。
如果模型早期很弱,Critic 给出的标准还能区分好坏;但模型越练越强,如果还总拿过去那个“老标准”当尺子,就可能出现激励变钝:小明和小红已经从 60 分进步到 85 分了,老师还按旧水平评价,很多细微但关键的进步就不容易被放大。
GRPO 的想法是:别一直拿旧 Critic 当固定标尺,改成看当前这组回答自己的平均水平。
谁比当前组内平均更好,就强化谁;谁比当前组内平均更差,就压低谁。

这就像小明、小红参加模拟考。老师不需要讲一整套复杂过程评分,只看最终答案对不对。然后每个人把自己同一道题的多次作答放在一起比较:做得比自己平均水平好的路径以后多走,做得比平均水平差的路径以后少走。
最小例子:同一道题做 8 次
假设题目是:
计算 ∈t₀¹ x² dx
模型不是只回答一次,而是对同一道题随机做 8 次。老师只看最终答案:答对给 1 分,答错给 0 分。
这 8 次结果可以压成一组 reward:
也就是 5 次答对、3 次答错。
如果是 PPO,它会问 Critic:这条回答的价值是多少?现在策略是不是比之前更好?
GRPO 的问法更直接:
在这 8 次作答里,哪几次高于组内平均?哪几次低于组内平均?

这张图对应完整闭环:同一个 prompt 采样多条回答,用规则或奖励模型打分,再做组内标准化,最后把标准化后的 advantage 放进类似 PPO 的 clipped objective 里更新策略。
核心公式:不是看绝对分,而是看“比自己这次平均好多少”
GRPO 的公式看起来有点数学,但它其实只做一件事:
把每次作答的分数,换算成“它比本组平均水平高多少 / 低多少”。
公式是:
先不看符号,直接翻译成人话:
套回小明/小红模拟考:
- rᵢ:这一次作答得分。答对是 1,答错是 0;
- :本次模拟考平均分。不是拿上个月老师的旧标准,而是看这 8 次作答自己的平均水平;
- :这组结果拉开的差距。如果大家分数差异很大,说明好坏很容易区分;如果大家都差不多,说明这组样本提供的信息少;
- ᵢ:最终训练信号。正数表示“这条路径比平均好,值得强化”;负数表示“这条路径比平均差,应该降低概率”。
为什么还要除以 ?
因为同样是“高于平均 0.2 分”,在不同班级里的含义不一样。
如果一个班大家成绩都差不多,高出 0.2 分已经很显眼;如果另一个班分数波动很大,高出 0.2 分可能没那么重要。除以标准差,本质上是在做一次“班级内部归一化”:让不同题目、不同 batch 的训练信号更可比。
再代入刚才的 8 次作答:
5 次答对、3 次答错,所以平均分是:
标准差约为 0.484。于是:
- 答对的回答:(1 - 0.625) / 0.484 ≈ +0.775;
- 答错的回答:(0 - 0.625) / 0.484 ≈ -1.291。
可以把这两个数理解成两张训练标签:
+0.775:这条推理路径比本组平均好,下一轮多学一点;-1.291:这条推理路径比本组平均差,下一轮少走一点。
所以 GRPO 的核心不是“老师给了几分”,而是“这次模拟考里,哪些做法相对更值得保留”。

这也是 GRPO 对大模型训练有吸引力的地方:它没有完全抛弃 PPO 的稳定更新思想,仍然会用 ratio、clip 这类机制控制策略别一步迈太大;它主要砍掉的是 Critic 这条重支线,用组内相对优势来替代 Critic 给出的 value baseline。
为什么数学和代码任务最适合 GRPO?
GRPO 的前提是:每条回答得有相对可靠的 reward。
数学和代码正好满足这个条件。
数学题有标准答案,1/3 就是对,1/2 就是错。
代码题可以跑测试用例,通过就是正反馈,不通过就是负反馈。
所以这类任务有三个优势:
- 答案可验证:最终对错能自动判断;
- 奖励便宜:不需要大量人工偏好标注;
- 探索有效:同一道题多采样几次,容易出现有对有错的分布。
但如果题目变成“写一封让客户满意的邮件”,就没那么适合。什么叫满意?语气、结构、信息完整度都可能影响判断,reward 噪声会大很多。
GRPO 用的是组内相对比较。如果 reward 本身不稳定,组内排名就会变成“用不准的尺子量差距”。
DeepSeek R1 怎么用 GRPO 练长链推理?
DeepSeek R1 的训练可以简化成两段。
第一段:冷启动 SFT
先用少量高质量长链推理样本,让模型学会基本格式:题目怎么读、推理怎么展开、答案怎么给。
第二段:GRPO 强化学习
对每道数学题或代码题,模型采样多条回答;规则验证器检查最终答案;同组 reward 做标准化;得到每条回答的 advantage;最后更新策略。

这个过程最有意思的地方在于:很多长链推理行为不是人工一条条教出来的,而是在 reward 驱动下涌现出来的。
比如模型会逐渐学会:
- 做到一半发现不对,回头换路径;
- 给出答案前再验算一次;
- 对同一个问题尝试不同推导方式;
- 在复杂题里写更长的中间推理链。
老师没有逐字告诉小明“你应该先假设、再验证、再反思”。老师只告诉他哪次答案对、哪次答案错。为了提高正确率,小明会逐渐保留那些更容易得到正确答案的思考习惯。
工程取舍:省显存,但不免费
GRPO 的好处很直接:去掉 Critic,显存压力小了,训练系统也简单了。
但代价也明确:它需要更多采样。
PPO 可以一条回答配一个 Critic 估值;GRPO 需要同一个 prompt 采样一组回答,组大小常见是 8 或 16。它省下了 Critic 的显存和维护成本,但把一部分压力转移到了采样吞吐上。
更关键的是,GRPO 有一个死区:组内方差为零。
如果一道题太简单,小明 8 次全做对;或者一道题太难,小明 8 次全做错。组内没有差异,就没有相对排名;没有相对排名,GRPO 就学不到东西。
常见工程做法是:
- 过滤全对/全错组:只用组内有区分度的样本更新;
- 混合难度采样:让 batch 里既有能做出的题,也有能拉开差距的题;
- 动态调整组大小:方差太小时增加采样数;
- 引入连续奖励:不要让 reward 只有 0/1,适当增加分辨率。
小结一下:
PPO 像给每个学生配一个专职老师实时估分;GRPO 像让小明同一道题多做几次,用当前模拟考平均分决定该强化哪条思路。
这就是它能支撑 DeepSeek R1 这类长链推理训练的关键原因:当模型开始“想得更久”,Critic 会变得昂贵且难训;而组内比较,反而成了一个更简单、更可扩展的训练信号。
「老许漫谈AIInfra」 · 持续关注 AI 基础设施工程实践