【强化学习连载 08】GRPO:像模拟考一样训练模型推理

四季读书网 1 0
【强化学习连载 08】GRPO:像模拟考一样训练模型推理

📖 阅读时间:约 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 当固定标尺,改成看当前这组回答自己的平均水平。

谁比当前组内平均更好,就强化谁;谁比当前组内平均更差,就压低谁。

【强化学习连载 08】GRPO:像模拟考一样训练模型推理-第1张图片-四季读书网
GRPO 的小明考试类比

这就像小明、小红参加模拟考。老师不需要讲一整套复杂过程评分,只看最终答案对不对。然后每个人把自己同一道题的多次作答放在一起比较:做得比自己平均水平好的路径以后多走,做得比平均水平差的路径以后少走。

最小例子:同一道题做 8 次

假设题目是:

计算 ∈t₀¹ x²   dx

模型不是只回答一次,而是对同一道题随机做 8 次。老师只看最终答案:答对给 1 分,答错给 0 分。

这 8 次结果可以压成一组 reward:

[1, 1, 0, 1, 1, 0, 0, 1]

也就是 5 次答对、3 次答错。

如果是 PPO,它会问 Critic:这条回答的价值是多少?现在策略是不是比之前更好?

GRPO 的问法更直接:

在这 8 次作答里,哪几次高于组内平均?哪几次低于组内平均?

【强化学习连载 08】GRPO:像模拟考一样训练模型推理-第2张图片-四季读书网
GRPO 组内采样与优势归一化

这张图对应完整闭环:同一个 prompt 采样多条回答,用规则或奖励模型打分,再做组内标准化,最后把标准化后的 advantage 放进类似 PPO 的 clipped objective 里更新策略。

核心公式:不是看绝对分,而是看“比自己这次平均好多少”

GRPO 的公式看起来有点数学,但它其实只做一件事:

把每次作答的分数,换算成“它比本组平均水平高多少 / 低多少”。

公式是:

ᵢ = (rᵢ - )/( + )

先不看符号,直接翻译成人话:

某次作答的相对优势=(这次得分 - 本组平均分)/ 本组分数波动幅度

套回小明/小红模拟考:

  • rᵢ:这一次作答得分。答对是 1,答错是 0;
  • :本次模拟考平均分。不是拿上个月老师的旧标准,而是看这 8 次作答自己的平均水平;
  • :这组结果拉开的差距。如果大家分数差异很大,说明好坏很容易区分;如果大家都差不多,说明这组样本提供的信息少;
  • :最终训练信号。正数表示“这条路径比平均好,值得强化”;负数表示“这条路径比平均差,应该降低概率”。

为什么还要除以 ?

因为同样是“高于平均 0.2 分”,在不同班级里的含义不一样。

如果一个班大家成绩都差不多,高出 0.2 分已经很显眼;如果另一个班分数波动很大,高出 0.2 分可能没那么重要。除以标准差,本质上是在做一次“班级内部归一化”:让不同题目、不同 batch 的训练信号更可比。

再代入刚才的 8 次作答:

[1, 1, 0, 1, 1, 0, 0, 1]

5 次答对、3 次答错,所以平均分是:

= (5)/(8) = 0.625

标准差约为 0.484。于是:

  • 答对的回答(1 - 0.625) / 0.484 ≈ +0.775
  • 答错的回答(0 - 0.625) / 0.484 ≈ -1.291

可以把这两个数理解成两张训练标签:

  • +0.775:这条推理路径比本组平均好,下一轮多学一点;
  • -1.291:这条推理路径比本组平均差,下一轮少走一点。

所以 GRPO 的核心不是“老师给了几分”,而是“这次模拟考里,哪些做法相对更值得保留”。

【强化学习连载 08】GRPO:像模拟考一样训练模型推理-第3张图片-四季读书网
PPO vs 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;最后更新策略。

【强化学习连载 08】GRPO:像模拟考一样训练模型推理-第4张图片-四季读书网
DeepSeek R1 两阶段训练流程图

这个过程最有意思的地方在于:很多长链推理行为不是人工一条条教出来的,而是在 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 基础设施工程实践

抱歉,评论功能暂时关闭!