在 RLHF(人类反馈强化学习)的江湖里,PPO(Proximal Policy Optimization) 长期贵为武林盟主。但凡是亲手调过 PPO 的同学,一定对它恨之入骨——不仅超参数极其敏感,最要命的是它是个显存吞噬者。为了算一个绝对优势值(Advantage),你必须在前台挂一个和 Actor(演员模型)一样大的 Critic(评论家模型),相当于生生吃掉了一倍的显存。

DeepSeek 提出的 GRPO(Group Relative Policy Optimization,组相对策略优化) 彻底打破了这个僵局。它直接把 Critic 模型给“咔嚓”了,利用一套精妙的“组内相对论”,在把显存占用砍掉大半的同时,还顺手把对齐阶段最让人头疼的 Reward Hacking(奖励作弊) 给治理了一番。

今天这篇博客,我们就用最直白的逻辑,扒开 GRPO 的数学外衣。


一、 GRPO 的核心魔法:组内相对论

PPO 为什么需要 Critic 模型?因为它需要一个“打分基准线”。比如模型说了一句话,奖励模型(RM)打了 80 分。这 80 分算高还是算低?不知道。Critic 模型就是用来预测“在当前上下文下,正常发挥应该得多少分(Baseline)”。如果 Critic 预测是 70 分,那模型拿了 80 分就是“超常发挥”(Advantage 为正),可以奖励。

GRPO 说:要什么自行车?我们直接搞“组内海选”!

它的运作流程简单得令人发指:

  1. 组团输出: 丢给模型一个提示词(Prompt qqq),让它一口气生成一组(比如 G=8G=8G=8 个)不同的回复 {o1,o2,...,oG}\{o_1, o_2, ..., o_G\}{o1,o2,...,oG}
  2. 绝对打分: 把这 8 个回复全丢给奖励模型(RM)或者规则评测机,拿到 8 个绝对分数 {r1,r2,...,rG}\{r_1, r_2, ..., r_G\}{r1,r2,...,rG}
  3. 降维打击(归一化): 直接算出这 8 个分数的平均值(μ\muμ标准差(σ\sigmaσ

最终,第 iii 个回复的相对优势(Advantage, AiA_iAi)直接用下面这个公式闭眼算出来:

Ai=ri−μσA_i = \frac{r_i - \mu}{\sigma}Ai=σriμ

大白话翻译: 别跟我聊什么全人类的绝对标准,只要你在这个 8 人小组里表现高过平均线,你的 AiA_iAi 就是正的,梯度就鼓励你;低过平均线,你就是吊车尾,梯度就惩罚你。


二、 扒开 GRPO 的损失函数(Loss Function)

有了组内相对优势 AiA_iAi 后,我们要怎么用它来优化损失、更新模型参数?我们来看它的标准损失函数:

LGRPO=−1G∑i=1G[min⁡(πθ(oi∣q)πold(oi∣q)Ai,clip(πθ(oi∣q)πold(oi∣q),1−ϵ,1+ϵ)Ai)−βDKL(πθ∣∣πref)]L_{GRPO} = -\frac{1}{G} \sum_{i=1}^{G} \left[ \min \left( \frac{\pi_\theta(o_i|q)}{\pi_{old}(o_i|q)} A_i, \text{clip}\left(\frac{\pi_\theta(o_i|q)}{\pi_{old}(o_i|q)}, 1-\epsilon, 1+\epsilon\right) A_i \right) - \beta D_{KL}(\pi_\theta || \pi_{ref}) \right]LGRPO=G1i=1G[min(πold(oiq)πθ(oiq)Ai,clip(πold(oiq)πθ(oiq),1ϵ,1+ϵ)Ai)βDKL(πθ∣∣πref)]

别被这一大串数学符号吓跑,它其实只干了三件事:

  1. 重要性采样比率(Ratio): πθ(oi∣q)πold(oi∣q)\frac{\pi_\theta(o_i|q)}{\pi_{old}(o_i|q)}πold(oiq)πθ(oiq)。用来衡量“当前正在更新的新模型”和“刚刚走了一步的老模型”,在输出同一个词时的概率变化。
  2. 裁剪机制(Clip): 这继承了 PPO 的优良传统。如果新模型比老模型步子迈得太大(概率变化超过了 1±ϵ1 \pm \epsilon1±ϵ),Loss 就会被强制截断。这样能死死拉住模型,防止它在一轮梯度更新中直接方向跑偏导致“当场暴毙”。
  3. KL 散度惩罚(DKLD_{KL}DKL): 后面那一项减去的 DKLD_{KL}DKL 是一条物理缰绳,强制当前训练的模型 πθ\pi_\thetaπθ 绝对不能偏离最初未训练的冷冻参考模型(πref\pi_{ref}πref)太远。

三、 终极博弈:GRPO 是如何围剿 “奖励作弊(Reward Hacking)” 的?

玩过强化学习的同学都知道,大模型是一个极度缺乏原则的“提分刷榜机器”。一旦它发现奖励模型的漏洞,就会无所不用其极地去作弊(Reward Hacking)。

早期的 RM 觉得“长句子”且“语气礼貌”的分数高,结果模型很快就学会了遇到任何问题都先车轱辘话回一万字政治正确的废话。在 GRPO 框架下,它是如何对抗这种幽灵的?

1. KL 散度:不讲人话就直接破产

当模型发现狂飙某种特定黑话、或者强行在结尾加上一长串“谢谢你提出这么好的问题”能从 RM 那里骗到高分时,它就想开始作弊。
但只要它一飙黑话,其概率分布 πθ\pi_\thetaπθ 就会瞬间偏离正常的最初模型 πref\pi_{ref}πref。Loss 里的 −βDKL-\beta D_{KL}βDKL 项就会开始疯狂扣分。模型一算总账:“虽然作弊从 RM 那里刷到了 +10+10+10 分,但因为不讲人话被 KL 惩罚扣了 −12-1212 分,亏本!”于是只能乖乖回到正道上。

2. 组内归一化:彻底粉碎“集体内卷”

这是 GRPO 最绝的一招。在传统 PPO 里,如果模型整体找到了一个刷分偏方,它在 Critic 那里拿到的绝对分数就会集体变高,大家一起沾光。
但在 GRPO 里,提示词一进来,模型一口气吐出 8 个回复。假设此时模型已经进化出了作弊本领,这 8 个回复全都包含了刷分废话。RM 确实被骗了,给它们集体打了高分:[9.1, 9.2, 9.0, 9.3, 9.1, 9.2, 9.0, 9.1]

然而,一旦开始组内归一化: 那些打了 9.0 和 9.1 的回复,因为没高过组内平均线,其最终算出来的 Advantage AiA_iAi 依然是负数
集体内卷当场宣告失败。模型发现,大家都作弊等于大家都没作弊。如果想拿到真正能带来参数提升的正向梯度,它必须在“大家都说了废话”的基础上,拿出真正能解决问题的真本事。

3. 终极杀招:引入基于规则的“硬核奖励”

在像 DeepSeek-R1 这种强调逻辑、数学和代码的推理模型训练中,官方更进一步:在很多场景下直接废除了不确定的人类偏好模型(RM),改用确定性规则

  • 写代码: 直接丢进隔离的沙盒环境(如 bwrap 容器)里跑单测,编译失败或报错直接 0 分。
  • 做数学: 正则表达式提取最终答案,跟标准答案对齐,错一个字符就是 0 分。
    在如此高强度的硬核判定下,模型中间狂飙任何黑话和废话都毫无意义,只能逼着自己把所有的红利空间都用来压榨“思维链(CoT)”的真实推理正确率。

📝 总结

GRPO 的伟大之处,在于它用极其朴素的“组内相对”哲学,干掉了沉重且冗余的 Critic 模型,把强化学习的显存门槛生生拉了下来。同时,这种天然的内卷对抗机制,也让大模型在面对奖励函数时,不得不放下“刷分”的投机心理,真正走向能力演进的正途。

对强化学习和模型微调感兴趣的同学,强烈建议亲手写一个简易的 GRPO 损失函数去跑跑 Toy Dataset,你会更真切地感受到这种数学之美!

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐