想象你是一位数学老师,刚收到四十份作业。传统批改方式要求你给每份试卷打一个“绝对分”——93、75、81……为了打出可信的分数,你得先在心里装一份“完美答案”的标尺,再逐项扣分,费时费力还容易引发学生质疑。更聪明的批改方法是什么?把学生分成四人小组,只比较组内谁的解法更好:第一名的方法值得大家学习,最后一名的思路需要调整。你自始至终没有给出“100分的标准答案”,却依旧让每个学生得到了明确的改进方向。这正是GRPO(群体相对策略优化)的核心哲学:不依赖绝对评分,只依靠组内相对比较。 在AI大模型的强化学习对齐中,“作业”是模型针对同一个提示生成的多种回答,“打分”由奖励模型或规则奖励完成。传统PPO算法为了估计“未来所有可能回答的期望得分”,还要再训练一个价值模型,就像请了第二位“预言家”老师坐在旁边,不断预测“如果学生重写一遍能得几分”。这个预言家不仅难练,还占用一半显存。GRPO干脆把它辞退了:让同一提示下的一组回答互相比个高下,用组内相对优势来指导策略更新。DeepSeek R1正是靠这套“组内擂台赛”,以极高的性价比训练出了强大的推理能力。

岗位关联

掌握GRPO,你就握住了DeepSeek R1高效对齐的钥匙;在算力紧张的现实里,它往往比PPO更聪明、更省钱。

目录
  1. 可视化演示
  2. 背景痛点:价值模型是昂贵的“第二裁判”
  3. 核心思想:小组内比一比,不劳驾裁判
  4. 算法流程:四步一循环的“擂台赛”
  5. 数学原理:目标函数中的“策略比例”
  6. KL约束:给激进的学生系上安全带
  7. 实践优势:省下一半显存的“轻装行军”
  8. R1实战:DeepSeek用GRPO炼出推理尖兵
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示系统处理流水线、实时性能指标曲线及多方案对比分析,包含数据流转、吞吐延迟监控与方案评估。

本节配有交互动效(进入视口后自动加载,约 3KB)。

系统可视化 处理流程:输入→处理→模型→输出 性能监控:实时指标 P=L×T

背景痛点:价值模型是昂贵的“第二裁判”

你判了十年卷,早已厌倦打绝对分:每份卷子难度不同,你得先预设一套“完美答案”的标尺,再凭经验扣分。AI里的PPO算法也这样难伺候——除了奖励模型(裁判)给出当前回答的得分,它还额外请了一个“价值模型”当预言家,用来预测“如果换个写法,未来所有可能回答的期望总分是多少”。这份预测结果被用来计算优势,但它本身要参与训练、占显卡、掉梯度,活脱脱一个昂贵又爱抢话的第二裁判。

为什么必须请价值模型?因为强化学习的奖励常常延迟且稀疏,一个对话到底好坏,要看到最后才知道。PPO用价值模型估计当前状态的价值,从而算出优势——这个回答比平均水平好多少。问题在于,价值模型和策略模型都要从零训练,两个网络互相干扰,就像两位裁判同时举牌,谁也不服谁。

技术地说,PPO在RLHF中要同时维护四个模型:可训练的Actor(答题学生)、冻结的Reference(初版老师)、奖励模型(裁判)、价值模型(预言家)。价值模型与Actor尺寸相当,每步更新都要额外反向传播,显存和计算量将近翻倍。更头疼的是,价值模型训练不够好时,优势估计会带偏策略,训练时常震荡。

因此,PPO必须拥有一套能预测 \(V\) 的价值模型,这正是GRPO想要甩掉的最大包袱。GRPO的出发点很朴素:与其花大力气预测绝对回报,不如让同一道题下的几个学生直接互相比一比。下一节,我们就切入这个“小组评卷”的核心思想。

AtPPO=Qt(s,a)−Vt(s)A^{\text{PPO}}_t = Q_t(s,a) - V_t(s)
这个优势公式的意思是:在状态 \(s\) 下采取动作 \(a\) 的实际长期回报 \(Q\),减去该状态平均回报 \(V\),差值越大说明这个动作越值得学。
  1. 动作价值 Q在某个状态 \(s\) 下采取指定动作 \(a\) 后,未来能获得的期望总奖励。
    Qt(s,a)Q_t(s,a)
  2. 状态价值 V在状态 \(s\) 下,所有可能动作的平均期望总奖励。
    Vt(s)V_t(s)
  3. 优势 A两者相减,得到“这个动作比平均好多少”的量化指标。
    At=Qt−VtA_t = Q_t - V_t

核心思想:小组内比一比,不劳驾裁判

既然绝对分难打,我们就按小组排名发“进步奖”。GRPO的操盘方式是这样的:针对每个提示词,让当前策略采样出 \(G\) 个回答,奖励模型(或规则函数)给这 \(G\) 个回答分别打分。然后,不直接拿原始分数说话,而是先算这组分数的均值 \(\mu\) 和标准差 \(\sigma\),再把每个分数变成“比平均值高或低多少个标准差”。这个变换就是组内归一化,它让“第一名”和“倒数第一”的差异一目了然,却不依赖任何试卷以外的尺度。

为什么要用标准差?因为它自动感知了这组回答之间的离散程度。如果大家水平接近,标准差小,那么谁比谁好一点点都能被放大;如果水平悬殊,标准差大,优势值就不会爆炸。这种自适应归一化相当于把每次打分都“踩在同一个相对标尺上”,天然消解了不同任务之间奖励尺度的差异。比如一道难题大家都得低分,一道简单题大家都得高分,绝对分数没法比,但相对名次可以比。

GRPO彻底删除了价值模型,只用这组归一化后的优势 \(A_i\) 指导策略更新。正优势的回答被鼓励,负优势的被抑制,就像小组里第一名被请大家模仿,最后一名被提醒“思路要改”。没有价值模型,训练中少了一整套梯度计算和风险点,稳定性自然上一个台阶。

组内归一化把一次“判卷”变成了“排名”,价值模型这个预言家就此下岗。省下的显存和算力,可以用来多做几次采样、多跑几个batch,这正是GRPO花小钱办大事的秘密所在。

Ai=ri−μσ+ϵA_i = \frac{r_i - \mu}{\sigma + \epsilon}
其中 \(r_i\) 是第 \(i\) 个回答的奖励得分,\(\mu\) 是本组所有奖励的均值,\(\sigma\) 是标准差,\(\epsilon\) 是一个防止除零的小常数。
  1. 个体奖励 \(r_i\)第 \(i\) 个回答从奖励模型或规则那里拿到的原始分数。
    rir_i
  2. 组内均值 \(\mu\)同一提示下 \(G\) 个回答得分的平均,代表本组平均水平。
    μ=1G∑j=1Grj\mu = \frac{1}{G}\sum_{j=1}^G r_j
  3. 标准差 \(\sigma\)组内分数偏离均值的平均幅度,衡量大家差距有多大。
    σ=1G∑j=1G(rj−μ)2\sigma = \sqrt{\frac{1}{G}\sum_{j=1}^G (r_j - \mu)^2}
  4. 优势 \(A_i\)原始分减去均值再除以标准差,正数代表“胜过平均水平”,负数代表“拖后腿”。
    Ai=ri−μσ+ϵA_i = \frac{r_i - \mu}{\sigma + \epsilon}

算法流程:四步一循环的“擂台赛”

GRPO的训练循环像一场班级擂台赛,每轮都重复四个动作:出题、答题、组内排名、奖励先进。第一步“出题”,是从训练数据里采样一个提示 \(q\),可能是一道数学题、一段代码需求或一句用户对话。第二步“答题”,让当前策略模型 \( \pi_\theta \) 针对 \(q\) 独立生成 \(G\) 个回答。这些回答可以来自 \(G\) 次不同的采样,也可以使用不同的温度,目的是保证多样性——如果大家都写得一模一样,排名就毫无信息量。

第三步“组内排名”,是GRPO和PPO最不同的一步。PPO拿到分数后还要跟价值模型预测的基线比较,GRPO直接把这组分数内部做归一化,得到每个回答的优势。这样得到的优势天然是“这组里谁好谁差”,不受其他提示难度影响。第四步“奖励先进”,用归一化优势构造目标函数更新策略,让好回答更可能出现、坏回答概率下降。一轮结束,换下一道题继续。

工程上,采样组数 \(G\) 通常取4到16。G太小,组内样本缺乏代表性,排名像抽签;G太大,采样成本线性上涨,收益却递减。就像小组讨论,四人组刚好够思想碰撞,十六人组容易变成一人演讲。DeepSeek R1在实践中也对G做了细致的调参,兼顾了估计方差的降低和训练的吞吐量。

整个循环简洁而高效:没有价值模型的参与,每次更新只需要策略网络、参考网络和奖励模型的前向/反向过程。用擂台赛来比喻,就是“出题—答题—亮排名—奖先进”四个动作反复进行,让模型在一次次组内切磋中变强。

o1,o2,…,oG∼πθ(⋅∣q)o_1, o_2, \dots, o_G \sim \pi_{\theta}(\cdot|q)
这个式子只是说明:所有回答都是独立地从当前策略分布中采样的,没有价值模型介入。
  1. 提示 \(q\)从数据集中取出的一个输入,是模型需要回答的问题。
    qq
  2. 策略 \(\pi_\theta\)当前模型在给定提示后,生成各候选回答的概率分布。
    πθ(⋅∣q)\pi_{\theta}(\cdot|q)
  3. 独立采样 \(G\) 次同一个提示下生成 \(G\) 个不同的回答样本。
    oi∼πθ(⋅∣q),i=1,…,Go_i \sim \pi_{\theta}(\cdot|q), \quad i=1,\dots,G

数学原理:目标函数中的“策略比例”

要更新策略,GRPO沿用PPO的“裁剪”思想,但砍掉了价值模型项。它每一步要最大化的是一个由两部分组成的目标函数:策略比例加权优势,再减去KL散度惩罚。策略比例 \( \frac{\pi_\theta(o_i|q)}{\pi_{\theta_{old}}(o_i|q)} \) 表示新策略生成某个回答的概率比旧策略高出多少。如果某个回答优势很大,我们希望这个比例变大,新策略更倾向于生成这种好回答。

但如果新策略进步过猛,概率比例可能一下冲得太高,训练就变得暴躁。所以GRPO会在比例偏离1.0太远时进行裁剪(clip),限制单次更新的幅度。这一招继承了PPO,保证了在一个batch内策略不会跳崖式变化。同时,由于优势来自组内归一化,天然被压缩在一个可预期的范围里,GRPO的裁剪压力比PPO小得多,训练更温和。

目标函数还要减去KL散度项,约束新策略不要离“参考模型”(即训练前的原始模型)太远。这个约束防止模型为了刷分而跳出正常语言的分布,去说一些“奖励黑客”式的废话。整个目标函数看起来长,但每一块都很清晰:优势负责吸引,KL负责刹车,裁剪负责限速。

这个目标函数把“组内竞争”变成了可微分的数学形式。从擂台赛的角度看,优势项是“第一名拿的奖励”,KL惩罚是“不能光学会说黑话”,裁剪则是“一次只能迈一小步”。三股力量共同把模型往“强且正常”的方向推。

J(θ)=1G∑i=1G[πθ(oi∣q)πθold(oi∣q)Ai−βKL⁡[πθ∥πref]]J(\theta) = \frac{1}{G}\sum_{i=1}^G \left[ \frac{\pi_{\theta}(o_i|q)}{\pi_{\theta_{\text{old}}}(o_i|q)} A_i - \beta \operatorname{KL}\left[\pi_{\theta} \| \pi_{\text{ref}}\right] \right]
大意为:对组内每个样本,先把“新旧策略概率比”乘上优势 \(A_i\),鼓励好样本、抑制坏样本;再减去 KL 散度惩罚,防止策略失控。
  1. 策略比例新策略生成该回答的概率除以旧策略生成的概率,衡量概率有无变大。
    πθ(oi∣q)πθold(oi∣q)\frac{\pi_{\theta}(o_i|q)}{\pi_{\theta_{\text{old}}}(o_i|q)}
  2. 优势加权将比例乘上组内优势,正优势变大、负优势变小。
    πθπθold×Ai\frac{\pi_{\theta}}{\pi_{\theta_{\text{old}}}} \times A_i
  3. KL 惩罚用 \(\beta\) 加权后从目标中扣除,防止新策略偏离参考分布过远。
    βKL⁡[πθ∥πref]\beta \operatorname{KL}[\pi_{\theta} \| \pi_{\text{ref}}]
  4. 组内平均对所有样本的贡献取平均,得到最终优化目标。
    1G∑i=1G[⋅]\frac{1}{G}\sum_{i=1}^G [\cdot]

KL约束:给激进的学生系上安全带

组内比较给了模型明确的方向,但方向对了不代表步子可以迈得太大。我们手里还有一份“参考模型”——通常是精调前的基座模型,它代表“一个正常人会怎么说话”。GRPO要求新策略不能离参考模型太远,否则模型会越来越“嗨”,生成一堆机器味儿十足、甚至钻奖励漏洞的回答。

KL散度是数学上衡量两个概率分布差异的工具。当新策略在某个回答上的概率与参考模型几乎一致时,KL接近0;一旦新策略开始疯狂偏好某个答案,KL就会飙升,给目标函数扣分。超参数 \(\beta\) 控制这个安全带的松紧:\(\beta\) 大,模型很乖但进步慢;\(\beta\) 小,模型胆子大但不靠谱。DeepSeek R1在训练中把 \(\beta\) 调到一个合适值,让模型既有勇气开拓高难度推理路径,又不至于脱离正常表达。

相比PPO需要动态调整KL系数,GRPO的做法更直接:把KL惩罚写在每个样本的损失里,与策略项相加。这样不需要维护额外的“KL buffer”,也不需要自适应系数调度器,实现简洁且稳定。对小白来说,可以理解为“每个学生每次答题后都要做一次‘是否违背校规’检查,违规就扣分”。

可以说,组内比较给了模型“要不要变”的信号,而KL约束告诉了模型“最多能变多少”。在GRPO中,去掉KL约束就像让学生自由讨论但没有老师把关,最后容易讨论出一堆奇怪结论。DeepSeek R1宁可牺牲一点点探索空间,也要保住模型的“人味儿”。

KL⁡[πθ∥πref]=Eo∼πθ[log⁡πθ(o∣q)πref(o∣q)]\operatorname{KL}\left[\pi_{\theta} \| \pi_{\text{ref}}\right] = \mathbb{E}_{o \sim \pi_{\theta}}\left[ \log \frac{\pi_{\theta}(o|q)}{\pi_{\text{ref}}(o|q)} \right]
KL散度越大,说明新策略与参考模型的输出概率分布差异越大;差异越离谱,惩罚越重。
  1. 期望算子对策略 \(\pi_\theta\) 生成的所有回答求平均。
    Eo∼πθ\mathbb{E}_{o \sim \pi_{\theta}}
  2. 对数概率比计算新策略和参考模型在同一个回答上概率之比的对数。
    log⁡πθ(o∣q)πref(o∣q)\log \frac{\pi_{\theta}(o|q)}{\pi_{\text{ref}}(o|q)}
  3. 整体含义若两边概率总是相等,比值恒为1,对数恒为0,KL=0;差异越大,KL为正且越大。
    KL⁡≥0\operatorname{KL} \geq 0

实践优势:省下一半显存的“轻装行军”

价值模型是PPO里最重的背包。去掉它,显存占用直接减少约一半。对于动辄几十亿甚至上千亿参数的大模型,省下的这一半显存意味着什么?可以加大批量、加长序列、提高吞吐,或者在同样卡数下训练更大的模型。GRPO把强化学习从“三人负重越野”变成了“一人轻装快跑”。

除了显存,训练时间也大幅缩短。PPO每步更新需要价值模型额外反向传播,还要用GAE(广义优势估计)累积多步时序差分;GRPO只需要策略网络和参考网络的前向,奖励模型打分,优势直接在组内算完。梯度链路短了,每一步都更快。更重要的是,价值模型的消失消除了“策略和价值两个网络互相干架”的不稳定因素,训练曲线更平滑,超参数也更耐造。

实践中,多家实验室的对比实验表明:在同等预算下,GRPO在多数推理基准上能达到或超过PPO的效果,尤其在数学和代码这类“答案可验证”的任务上表现抢眼。需要注意的是,GRPO的性能上限依然依赖奖励信号的质量和组内采样的多样性——如果奖励模型本身有偏,组内比较也只是“在错误的标尺里排名”。

正如全班同时做一道题,老师不再需要请一位“估值员”坐在旁边预言“如果重写能得几分”,省下的精力自然可以用来多讲几道题。GRPO用组内排名替代价值模型,用规则奖励、可验证信号代替复杂价值网络,把强化学习训练拉回了“轻装行军”的舒适区。

MPPO=Mactor+Mreference+Mreward+Mvalue;MGRPO=Mactor+Mreference+MrewardM_{\text{PPO}} = M_{\text{actor}} + M_{\text{reference}} + M_{\text{reward}} + M_{\text{value}}; \quad M_{\text{GRPO}} = M_{\text{actor}} + M_{\text{reference}} + M_{\text{reward}}
这个式子直接展示了显存构成的差异:PPO有四项占显存,GRPO少了一项价值模型,因此更轻巧。
  1. PPO 显存构成四个网络都要加载,其中价值模型与Actor同尺寸。
    MPPO=Mactor+Mreference+Mreward+MvalueM_{\text{PPO}} = M_{\text{actor}} + M_{\text{reference}} + M_{\text{reward}} + M_{\text{value}}
  2. GRPO 显存构成价值模型缺席,只保留策略、参考和奖励模型。
    MGRPO=Mactor+Mreference+MrewardM_{\text{GRPO}} = M_{\text{actor}} + M_{\text{reference}} + M_{\text{reward}}
  3. 实际收益\(M_{\text{value}}\) 常占单模型显存的20%-50%,省去后训练规模和速度同步受益。
    MGRPO<MPPOM_{\text{GRPO}} < M_{\text{PPO}}

R1实战:DeepSeek用GRPO炼出推理尖兵

DeepSeek R1的故事,是GRPO最亮眼的实战名片。R1在推理数据上使用GRPO进行强化学习,通过大量“可验证奖励”来提供监督:数学题看最终答案是否正确,代码看能否编译运行,逻辑题看结论是否符合条件。这类奖励不需要训练奖励模型,直接用规则判断,和GRPO的组内比较天然兼容——因为答案是客观的,组内排名立刻就能区分优劣。

为了让模型更安全、更自然,R1还引入了一些“附加纪律”奖励:比如回答中混用中英文会扣分,输出有冗长重复会扣分。这些规则打分与组内相对优势完美配合,因为相对化处理屏蔽了不同规则之间分值的 scale 差异,模型只需要学会“在这组回答里做到最好”,而不必猜绝对分到底几分。

R1的实验结果很惊艳:经过GRPO强化后,模型在AIME数学竞赛、代码生成等推理任务上的准确率大幅提升,甚至赶上了此前需要巨大算力的模型。更关键的是,这套路线可以复现、成本可控,让开源社区也能在百亿级模型上尝试。R1的成功说明:GRPO不是魔法,而是把强化学习从“算力怪兽”变成了“日常可用的跑步机”。

从R1经验看,GRPO的成功离不开三件事:高质量的规则奖励、适度的KL约束、合理的采样组数。三者配合,既让模型快速提升推理能力,又守住了语言自然性和安全底线。这也给了后来者一个明确的模仿路径:给GRPO装上“可验证标尺”,它就能帮你高效炼出推理尖兵。

Var⁡(1G∑i=1GAi)=σA2G\operatorname{Var}\left( \frac{1}{G}\sum_{i=1}^G A_i \right) = \frac{\sigma_A^2}{G}
这里借用统计常识说明:组内优势的平均值方差随着组数 \(G\) 增大而降低,所以增大分组能换来更稳定的优势估计,但代价是采样成本。
  1. 组内平均优势把同一提示下 \(G\) 个优势值取平均,是策略更新的依据之一。
    Aˉ=1G∑i=1GAi\bar{A} = \frac{1}{G}\sum_{i=1}^G A_i
  2. 方差公式平均值方差等于总体方差除以样本数,G 越大波动越小。
    Var⁡(Aˉ)=σA2G\operatorname{Var}(\bar{A}) = \frac{\sigma_A^2}{G}
  3. 实践启示DeepSeek R1在选择组数时要平衡方差下降和算力开销,故通常取 8 左右。
    G≈8G \approx 8

AI 应用场景

场景一:大模型RLHF对齐(云端训练大模型)

阶段:模型训练与对齐

解决的问题:传统RLHF使用PPO时,价值模型会带来近一倍显存开销和额外的调参负担,训练不稳定。GRPO用组内相对优势替代价值模型,大幅降低对齐成本,让中小团队也能跑起强化学习。

具体案例:某团队用7B模型做问答偏好对齐,将PPO切换为GRPO后,单卡训练吞吐提升约1.8倍,同时Helpful评分持平;由于少了一个价值模型,训练中的loss波动也明显减小。

场景二:数学与代码推理能力强化

阶段:推理能力训练

解决的问题:数学和代码任务存在“标准答案”,可用规则自动判定对错。GRPO天然适合这类可验证奖励:把一个提示的G个回答放在一起排名,正确答案快速凸现,无需人工标注偏好。

具体案例:DeepSeek R1在数学推理数据上使用GRPO,结合“答案是否正确”的规则奖励,在AIME数学基准上的准确率大幅提升,且训练成本远低于PPO方案。

场景三:安全对齐与规则约束

阶段:安全性与价值观对齐

解决的问题:安全对齐往往需要同时满足“有用”和“无害”两个指标,传统奖励模型难以精确建模。GRPO可以把“是否拒绝有害请求”“是否输出合规内容”做成规则奖励,在组内差分中强化安全偏好。

具体案例:某企业客服大模型在安全对齐阶段引入GRPO,并设计“拒绝回答违法违规请求”的规则奖励。经过三轮迭代,模型在安全基准测试上的违规率下降40%,同时任务完成率保持稳定。

Python 演示

python53 行
import numpy as np class SimpleGRPO:    def __init__(self, num_actions=5, group_size=8, lr=0.05, beta=0.01):        self.num_actions = num_actions        self.group_size = group_size        self.lr = lr        self.beta = beta        self.probs = np.ones(num_actions) / num_actions     def sample_group(self):        # 按当前策略采样一组动作(回答)        actions = np.random.choice(            self.num_actions, size=self.group_size, p=self.probs        )        return actions     def reward(self, action):        # 模拟奖励函数:动作越接近2越优        return 1.0 - 0.3 * abs(action - 2)     def update(self):        # 一次GRPO迭代:采样、打分、归一化、更新策略        actions = self.sample_group()        rewards = np.array([self.reward(a) for a in actions])         # 组内相对优势        mean_r = rewards.mean()        std_r = rewards.std() + 1e-6        advantages = (rewards - mean_r) / std_r         # 将优势累加到对应动作上,作为伪梯度        grad = np.zeros(self.num_actions)        for a, adv in zip(actions, advantages):            grad[a] += adv         # 简化策略更新:logits = log旧概率 + 学习率 * 梯度 - KL正则        logits = np.log(self.probs + 1e-8) + self.lr * grad        logits -= self.beta * (self.probs - 1.0 / self.num_actions)        self.probs = np.exp(logits)        self.probs /= self.probs.sum()        return advantages def main():    grpo = SimpleGRPO(num_actions=5, group_size=8, lr=0.05, beta=0.01)    print("初始策略:", np.round(grpo.probs, 3))    for _ in range(100):        grpo.update()    print("最终策略:", np.round(grpo.probs, 3))    print("最佳动作概率:", round(float(grpo.probs[2]), 3)) if __name__ == "__main__":    main()
目的:这是一个教科书级的GRPO迷你实现,展示了“采样→奖励→组内归一化→策略更新”四个核心步骤,不依赖任何深度学习框架。
  1. actions = np.random.choice(self.num_actions, size=self.group_size, p=self.probs)模拟对同一个提示采样 \(G\) 个回答。
  2. self.reward(a)模拟“可验证奖励”:动作越接近2,奖励越高,就像数学题的正确答案。
  3. mean_r = rewards.mean()算出组内平均奖励 \(\mu\),对应“组内平均水平”。
  4. advantages = (rewards - mean_r) / std_r组内归一化,得到相对优势 \(A_i\)。
  5. grad[a] += adv把正优势累加到对应动作上,好动作获得“推力”。
  6. logits = np.log(self.probs + 1e-8) + self.lr * grad在旧概率的对数空间加梯度,完成一次概率更新。
  7. logits -= self.beta * (self.probs - 1.0 / self.num_actions)加入一个向均匀分布收缩的正则项,模拟KL约束。
  8. self.probs /= self.probs.sum()归一化成合法概率分布。

常见误区

误区我听说GRPO去掉了价值模型,那奖励模型是不是也可以不要?直接在生成的句子里比一比哪个顺眼就行了。

正解GRPO去掉的是价值模型,不是奖励模型。价值模型用来预测未来期望回报,奖励模型(或规则奖励)负责给当前回答打原始分。组内比较只是把这些原始分做归一化,如果没有奖励信号,模型连“哪个回答好”都不知道,更谈不上相对优势。可以说,奖励模型是裁判,价值模型是多余的预言家,GRPO只是开除了预言家。

为何常见:宣传中常强调“去掉价值模型”,很多人误以为连奖励都可以省,其实“价值”和“奖励”是两个完全不同的概念,前者需要学习,后者来自外界反馈。

误区某回答的优势是2,另一个是0.5,那么前者的概率提升应当是后者的4倍,因为奖励差4倍。

正解优势已经经过组内标准差归一化,是相对指标,并不等价于更新步长。实际更新中,策略概率还要乘以新旧策略比例,并经过裁剪限制;同时KL惩罚也会踩刹车。因此优势大只代表“方向”更明确,不代表“步子”要更大。把优势当步长会导致一次更新过猛,策略直接崩坏。

为何常见:直觉告诉自己“做得越好就应该改得越多”,但强化学习对步长极其敏感,小幅多步远比大步一步可靠。

误区统计学上讲样本越多估计越准,那我干脆把分组G设成64或128,反正采样又不要钱。

正解增大G确实降低了优势估计的方差,但采样成本线性上涨,每一个样本都要走一遍策略前向和奖励计算。而且同一个提示下的回答多样性是有限的,G超过一定值后边际收益迅速递减。工程经验是G取4~16,DeepSeek R1也常在8附近,要根据任务难度和算力预算权衡。

为何常见:大家容易只盯着“方差降低”的好处,忽略采样本身的时间和显存成本,遗忘了成本和收益的平衡。

误区既然GRPO的优势是组内相对值,大小有界,模型不会跑偏,那就干脆把KL惩罚去掉,让模型更自由探索。

正解组内比较只告诉模型“这组里谁更好”,并不约束模型输出是否还是正常的自然语言。如果没有KL约束,策略可能为了刷正优势而不断输出同一类重复句式,或者故意制造“形式正确但内容荒谬”的回答来骗奖励。KL约束把新策略牢牢拴在参考模型(正常语言分布)附近,保障了“跑得快却不脱轨”。

为何常见:“相对有界”会给人一种“已经安全”的错觉,但优势只反映组内差异,不反映绝对合理性,安全护栏仍需另配。

面试题

Q1. GRPO中最核心的改进是什么?

单选题 · easy

  • A.引入价值模型
  • B.去掉价值模型← 正确答案
  • C.增加奖励模型
  • D.增大采样规模

答案:B。GRPO的关键是彻底移除价值模型(critic),改用组内相对优势。它并没有去掉奖励模型,也没有强行增大采样规模。就像老师辞退“预言家”裁判,只靠小组排名就完成评价。

Q2. GRPO中“组内相对优势”的正确计算方式是什么?

单选题 · easy

  • A.直接使用原始奖励
  • B.奖励减组内均值再除标准差← 正确答案
  • C.奖励除以历史最大奖励
  • D.对奖励取自然对数

答案:B。GRPO对同一提示的G个奖励求均值μ和标准差σ,然后计算 \( (r_i-\mu)/(\sigma+\epsilon) \)。这相当于把组内分数标准化,比原始分数更有可比性,也天然抵御了任务间打分尺度差异。

Q3. KL惩罚在GRPO中的作用是什么?

单选题 · easy

  • A.让模型更发散
  • B.防止新策略偏离参考模型← 正确答案
  • C.加速采样过程
  • D.替代奖励模型

答案:B。KL散度约束新策略不要离参考模型太远,相当于给激进的策略系上安全带。它防止模型为了刷奖励而输出退化语言、钻规则漏洞,与优势项共同保证“既有方向又不出轨”。

Q4. 与PPO相比,GRPO节省了哪一类模型?

单选题 · mid

  • A.生成模型
  • B.奖励模型
  • C.价值模型← 正确答案
  • D.参考模型

答案:C。PPO需要策略、参考、奖励、价值四个模型,其中价值模型用于估计绝对优势。GRPO用组内差分替代价值模型,因此省去的是价值模型,而奖励模型和参考模型仍然保留。

Q5. 若某提示的4个回答奖励为 [0.5, 0.8, 0.6, 0.1],则该组内优势为正的回答有几个?

单选题 · mid

  • A.1个
  • B.2个← 正确答案
  • C.3个
  • D.4个

答案:B。组内均值 = (0.5+0.8+0.6+0.1)/4 = 0.5。归一化后,大于0.5的奖励对应正优势,只有0.8和0.6两个。说明该组有一半回答“高于平均水平”,另一半低于平均水平。

Q6. GRPO目标函数中的“策略比例”指的是什么?

单选题 · mid

  • A.新旧策略参数之比
  • B.新策略生成该回答概率除以旧策略概率← 正确答案
  • C.奖励模型的置信度
  • D.组内采样次数之比

答案:B。策略比例 \(\pi_\theta(o_i|q)/\pi_{\theta_{old}}(o_i|q)\) 衡量新策略在生成该回答上的概率相对旧策略变化了多少。它乘以优势后,正优势会引导比例变大,提升该回答的生成概率。

Q7. 关于GRPO与PPO的优势估计,下列说法正确的是哪一项?

单选题 · hard

  • A.两者都依赖价值模型
  • B.两者都使用GAE累积折扣回报
  • C.GRPO用组内归一化,PPO用价值函数基线← 正确答案
  • D.两者都使用时序差分求优势

答案:C。PPO的优势来自价值函数预测基线,往往配合GAE;GRPO则直接用同提示下G个奖励的均值和标准差做归一化,省去价值模型和时序差分链。GAE是PPO常用的组件,并不是GRPO的必需品。

Q8. 下列哪些奖励信号适合直接用于GRPO的可验证奖励?

多选题 · mid

  • A.数学答案是否正确← 正确答案
  • B.代码是否编译通过← 正确答案
  • C.文本情感打分(主观)
  • D.语言是否中英混用← 正确答案

答案:ABD。可验证奖励指规则可判定的信号,如数学答案、代码编译、语言一致性。主观情感打分通常需要训练奖励模型,不属于“直接可验证”。GRPO最好搭配明确、低成本的规则奖励,这也是DeepSeek R1采用的做法。

Q9. GRPO相比PPO的实践优势包括哪些?

多选题 · hard

  • A.显存占用更低← 正确答案
  • B.训练过程更稳定← 正确答案
  • C.一定得到更高准确率
  • D.训练速度更快← 正确答案

答案:ABD。GRPO去掉价值模型,显存降低、速度变快,也避免了策略与价值网络相互干扰,稳定性提升。但效果是否更高取决于奖励质量和任务性质,不能保证“一定更好”,C过于绝对。

Q10. DeepSeek R1使用GRPO的实践要点包括哪些?

多选题 · extreme

  • A.使用可验证奖励← 正确答案
  • B.设置KL惩罚系数平衡能力与安全← 正确答案
  • C.必须使用价值模型
  • D.采样组数需要调参← 正确答案

答案:ABD。R1大量使用规则可验证奖励(数学答案、代码编译),并引入KL惩罚约束策略不偏离正常表达;采样组数G影响优势估计方差和算力开销,需要调参。GRPO的核心就是不需要价值模型,故C错误。