想象你开了一家餐厅,想弄清楚顾客到底爱吃哪道菜。传统做法是请一位昂贵的“美食评论家”(Critic)坐在后厨,对每一道菜从头到尾品尝并给出绝对分数——“这道菜 7.8 分,那道菜 6.5 分”。可这位评论家不仅收费高昂(占用了大量显存和算力),而且口味飘忽不定,今天觉得咸,明天觉得淡,分数忽高忽低,导致你迟迟不敢改菜单。 这时候,一位叫 GRPO 的“品鉴团主理人”提出了新思路:与其迷信一个人的绝对评分,不如每轮端出同一道菜的 4 个候选版本,请一组普通食客当场试吃、互相比较、直接投票——“这版比那版好”,“这版最差”。不需要评论家,也不需要绝对分数,只需要“相对比较”。这就是群体相对策略优化(Group Relative Policy Optimization)的核心智慧:用组内相对排序替代个体绝对打分,省掉 Critic 模型,大幅降低显存与训练复杂度。DeepSeek 正是靠这一招,让大模型在数学推理、代码生成等任务上对齐人类偏好,同时训练成本大幅下降。
掌握 GRPO,你就能在实战中用更低显存、更简流程完成大模型 RLHF 对齐,这正是大模型微调与对齐方向工程师的核心竞争力。
可视化演示
动态演示GRPO群体相对策略的核心机制,通过基础/核心/应用/扩展四种模式展示关键概念与交互流程。
本节配有交互动效(进入视口后自动加载,约 3KB)。
GRPO群体相对策略:GRPO GRPO核心思想与PPO的架构 群体采样与组内相对排序机制 核心机制可视化 GRPO群体相对策略整体架构与关键组件
PPO 两大消耗
在 GRPO 登场之前,业界主流是 PPO(近端策略优化)。可以把 PPO 想象成一家“米其林评审制”餐厅:每做一道新菜,都要专门聘请一位美食评论家(Critic 价值模型)全程坐在厨房里,对每一道菜的未来表现做绝对预测——“这道菜最终能得 8 分”。这套流程有两个致命消耗:第一,这位评论家本身是一个非常庞大的神经网络,和厨师(策略模型)一样吃显存;第二,评论家的口味极不稳定,今天觉得咸,明天觉得淡,给出的绝对分数波动巨大,让训练过程摇摇晃晃。
为什么 PPO 非要请评论家?因为它想知道“这道菜到底比平均水平好多少”,必须先估计一个“平均线”。可问题是,这个大模型的“平均线”极难预测,评论家要不停猜、不停修,浪费大量算力。GRPO 的洞察是:要判断好坏,何必预测绝对分数?直接看同一桌食客的相对反应就够了。 于是 GRPO 干脆辞退了这位昂贵且善变的评论家,把它的活交给了“群体比较”。这一刀砍下去,显存占用大幅下降,训练流程也精简了一大截——这正是 DeepSeek 能在有限算力下完成大规模对齐的秘密武器。
要理解 GRPO,必须先理解它替掉了什么。PPO 的完整损失由四个部分组成:策略梯度项、价值函数损失、熵奖励项和 KL 惩罚项。其中价值函数损失正是为了训练那位“评论家”。GRPO 将这一项整体删除,公式中对价值的依赖全部消失,只凭策略自身采样和奖励模型的组内比较完成优化。
借用品鉴团隐喻:GRPO 就是“去掉评论家、直接让食客互相比”的极简主义。省下的显存可以塞下更大的厨师团队(模型参数),动荡的绝对分数换成了稳定的相对比较——这就是它成为新范式的第一块基石。
- G 个采样样本对同一个问题 q,旧策略采样出 G 条不同回答 o_i,构成一个“品鉴组”。
- 概率比率新旧策略在每条回答上的概率之比,表示“这次更新的步子迈了多大”。
- 裁剪函数将比率限制在 [1-ε, 1+ε] 内,防止单条样本让策略一步迈太大。
- KL 惩罚项β 控制惩罚强度,约束新策略别离旧策略太远。
品鉴团采样
假设现在要为一道招牌菜研发新配方。旧方法是一次只做一个版本,端给评论家打分;GRPO 则是一次性做出 4 个版本(A/B/C/D),请来一组食客同时试吃、当场投票。这批“同时被端上桌”的菜品,就是“品鉴团”——在强化学习里,它叫组内采样(Group Sampling)。
具体做法是:对同一个提示(Prompt),从当前策略模型中采样出 G 条不同的回答,例如 G=4 或 G=8。这 G 条回答构成一个组。组里的每个成员都面对同一个问题,因此它们的生成难度、任务背景完全一致,只有策略本身的概率分布和采样随机性带来差异。这就像同一锅汤分装成 4 个小碗,只是每碗加的配菜分量稍有不同,食客们有了可比较的基准。
为什么强调“同组同任务”?因为不同任务间的分数分布差异极大——有的问题大家都能答对,有的问题谁都答不好。如果拿一个问题的高分去和另一个问题的低分做绝对比较,就像拿红烧肉的咸度和冰淇淋的甜度比“谁更优秀”,毫无意义。只有在同一组内比较,分数才有参照系。这也解释了为什么组大小(group size)是关键超参:组太小,比较样本不足;组太大,训练吞吐量下降。
组内相对分
食客们吃完 4 个版本后,谁来给出分数?GRPO 用奖励模型(Reward Model)扮演“大众点评”。奖励模型为组内每一条回答打一个绝对分,但请注意——这些绝对分本身不重要,重要的是它们之间的相对次序。在训练时,GRPO 完全不看“这条回答得了 7.2 分”这种绝对信息,而是看它在组内排在什么位置。
这就是“组内相对分”的精髓:用排序代替打分。好比品鉴会上,食客们不说“这道菜 8 分”,只说“这道比那道好吃”或者“这版最差”。训练目标也因此从“逼近一个绝对分数”变成“让得分高的回答概率更大,得分低的回答概率更小”。
这种相对化处理带来了一个巨大的隐性收益:奖励模型的绝对分通常有偏差(有的模型偏爱长答案,有的偏爱短答案),但这些偏差在组内比较时会被自动抵消。因为同一组内的回答都承袭了同样的奖励模型偏差,互相一减,偏差就消失了。这就像用同一个秤称不同的菜,秤本身准不准无所谓,只要每次都偏得一样,比较结果依然可靠。
优势计算
有了组内相对分之后,接下来要回答的问题是:“这一条回答到底比组内平均水平好多少?” 这个差值就是优势函数(Advantage Function)。GRPO 计算优势的公式非常简洁——调用组内均值与标准差做归一化。
这个公式可以这样理解:把组内所有奖励分数的平均值当作“基准线”,每条回答的奖励减去这条基准线,得到的差值再除以组内标准差,相当于把这个差值换算成“几个身位”的优势。若 A_i 为正,说明该回答胜过组内平均水准,是“好评菜”,训练时要加大它的出现概率;若 A_i 为负,说明它是“差评菜”,要降低概率。
标准化后的优势值天然具有“方差控制”能力:哪怕某一组整体分数偏高或偏低,经过均值相减、标准差归一后,数值都在一个相对稳定的区间内。这正是 GRPO 不需要 Critic 模型却依然保持训练稳定的核心机制。
- 组内均值同一组 G 条回答奖励分数的平均,即“品鉴团平均口味线”。
- 分子差值某条回答的奖励与均值的差,代表“超出平均多少”。
- 分母标准差组内分数的离散程度,用于消除不同组之间的尺度差异。
- 归一化优势差值除以标准差,得到无量纲的相对优势值。
KL 防漂移
策略更新最怕什么?最怕“步子太大,扯着蛋”。如果厨师一听食客说“B 版好吃”,立刻把整个配方全部推翻重来,很可能下一轮所有食客又都觉得 B 版难吃了——这就是策略漂移(Policy Drift)。为了防止新策略偏离旧策略太远,GRPO 引入了 KL 正则化(KL Divergence Penalty)。
KL 散度衡量的是两个概率分布之间的“距离”。如果新策略和旧策略在每条回答上的概率几乎一致,KL 值接近 0,惩罚很小;如果新策略大幅改变了各回答的概率分布,KL 值变大,惩罚随之加重。这就好比给厨师设定了一条规则:每一轮只能微调配方——“可以多放半克盐,但别把整道菜换成甜品”。
在实际训练中,β 通常取 0.01 到 0.1 之间的值。值得注意的是,KL 惩罚与裁剪机制是一对“双保险”:裁剪限制单步更新幅度,KL 惩罚抑制累积漂移。有了这双重保护,策略模型才能像一位稳健的厨师长那样,每轮只根据食客反馈微调一点,既持续进步,又不至于反复“翻车”。
- 对数概率比计算新策略相对旧策略在每条回答上的对数变化量。
- 期望运算按新策略的采样分布求平均,得到整体偏离程度的度量。
- 惩罚系数 β控制“允许偏离多远”,β 越大,策略更新越保守。
策略更新
品鉴团投票完成、优势值计算完毕、KL 散度也在约束着漂移——现在到了最后一步:真正更新策略模型的参数。GRPO 的策略更新目标函数借鉴了 PPO 的裁剪技术,但完全去掉了价值网络:
这里的 min 操作像一个“保守的财务主管”:当比率 r_i 落在裁剪区间内时,正常取该比率乘优势;当比率超出裁剪范围时(说明这一步想走太远),就用裁剪后的边界值兜底。这样一来,任何单条回答都没有能力把策略权重推向极端。
更新完成后,新一轮品鉴会再次开始:旧策略变成上一轮的新策略,重新采样、重新投票、重新计算优势。这个循环稳定而简洁,每一步都只沿着“食客相对偏好”的方向小幅前进。
- 概率比率 r_i(θ)新旧策略在回答 o_i 上的概率之比。
- 裁剪操作若 r_i 超出 [1-ε, 1+ε],则压缩到边界,防止单样本主导。
- min 取小在原比率和裁剪比率之间取较小者,保证更新方向保守。
- 负号与平均目标函数取负平均,使梯度上升时能提高优势为正的回答的概率。
超参调优
GRPO 的超参调优如同调试一座精密天平:学习率、裁剪阈值 ε、组大小 G、KL 惩罚系数 β,每一个都要互相配合,才能保持训练的稳定与高效。
学习率是最敏感的旋钮。学习率过大,策略更新一步跨太远,KL 惩罚来不及拉住,训练直接发散;学习率过小,训练进度缓慢,浪费算力。实践中通常采用 warmup + 余弦退火策略:初期以小学习率“预热”让模型稳定起步,中后期逐步衰减。裁剪阈值 ε 控制着单步更新允许的最大偏差,常用范围在 0.01 到 0.2 之间,ε 越小训练越稳但收敛越慢。组大小 G 则关乎比较的统计质量:G=4 是性价比极高的默认值(DeepSeekMath 的成功实践证明),G 更大时优势估计更准,但采样成本随之上升。KL 系数 β 负责平衡“服从反馈”与“保持记忆”,β 过大模型学不进新偏好,β 过小则容易灾难性遗忘。
调参的最终目标是找到一组“稳中求进”的参数组合。就像品鉴会的主理人需要根据食客的耐心、菜品的复杂度、厨师的熟练度,灵活调整试吃轮次、投票方式和菜品数量。没有放之四海皆准的最佳值,只有不断实验、观察 KL 曲线和奖励曲线的变化,才能找到适合自己任务的配置。
前沿视野
GRPO 的出现,不只是对 PPO 的一次小修小补,而是整个 RLHF 范式的转向。它证明了“去掉 Critic、纯靠组内相对比较”也能学习到高质量的人类偏好对齐,甚至在数学推理、代码生成上超越了 PPO。这项技术还带来连锁效应:由于省去了价值模型的显存开销,训练时可以装载更大的策略模型或更长的上下文,这让“长思维链”(Long Chain-of-Thought)的强化学习成为可能——DeepSeek 正是借助 GRPO 训练出了能够在超长推理路径中自我反思和纠错的模型。
从更广的视角看,GRPO 呼应了强化学习中一个古老的智慧:相对排序比绝对估计更稳健。绝对估计需要建立一个完美的“价值度量衡”,而相对排序只需要一个“两两比较器”。无论是推荐系统、机器人控制还是大模型对齐,只要存在“多候选比较”的场景,群体相对优化思想就有一席之地。未来,GRPO 还可能与课堂学习(Curriculum Learning)、多任务迁移等策略结合,演化出更强大的对齐引擎。
AI 应用场景
大模型 RLHF 对齐训练
阶段:模型对齐与偏好优化
解决的问题:传统 PPO 需要同时加载策略模型、价值模型(Critic)和奖励模型,显存开销极大,单卡很难训练 7B 级别以上的模型。GRPO 去掉 Critic 后,显存占用显著下降,训练流程也大幅简化,让中小团队也能在自己的 GPU 服务器上完成强化对齐。
具体案例:某开源团队要对一个 7B 模型做“有用性对齐”。原先用 PPO 需要 4 张 A100 才跑得动,改用 GRPO 后仅需 2 张 A100,训练速度提升约 40%。他们设置组大小 G=4,KL 系数 β=0.05,对同一指令采样 4 条回答做组内比较,一周内就让模型响应质量逼近商业 API 的水平。
数学与代码推理优化
阶段:推理能力强化
解决的问题:数学题和代码题天然拥有“标准答案”,但解题路径多样。GRPO 对同一道题采样多个候选答案,通过与真实答案比对获得奖励,并在组内计算相对优势,从而引导模型学习更优的推理路径。
具体案例:DeepSeekMath 论文中的经典实践:对同一数学问题采样 4 种解题过程,用最终答案正确性作为奖励信号,通过 GRPO 更新策略。经过两轮训练,模型在竞赛数学基准上的准确率从 30% 提升到 50% 以上,而同样的采算资源下 PPO 只能提升不到一半。
Python 演示
import numpy as np class SimpleGRPO: def __init__(self, num_params=8, lr=0.01, beta=0.05, groups=4): self.theta = np.zeros(num_params) self.lr = lr self.beta = beta self.groups = groups self.old_theta = self.theta.copy() def sample_logits(self): return self.theta + np.random.randn(self.groups, len(self.theta)) * 0.1 def old_logits(self): return self.old_theta + np.zeros((self.groups, len(self.theta))) def compute_advantages(self, rewards): mean_r = rewards.mean() std_r = rewards.std() + 1e-6 return (rewards - mean_r) / std_r def compute_kl(self): diff = self.theta - self.old_theta return 0.5 * float(diff @ diff) def update_step(self, rewards): logits = self.sample_logits() old_logits = self.old_logits() adv = self.compute_advantages(rewards) ratio = np.exp((logits - old_logits).sum(axis=1)) clipped = np.clip(ratio, 0.8, 1.2) loss = -np.mean(np.minimum(ratio * adv, clipped * adv)) kl = self.beta * self.compute_kl() grad = np.zeros(len(self.theta)) for i in range(self.groups): if ratio[i] * adv[i] <= clipped[i] * adv[i]: grad += adv[i] * logits[i] else: grad += adv[i] * (0.8 if adv[i] > 0 else 1.2) grad = grad / self.groups - self.beta * (self.theta - self.old_theta) self.theta -= self.lr * (grad + np.random.randn(len(self.theta)) * 1e-3) self.lr = max(0.001, self.lr * 0.995) if __name__ == "__main__": np.random.seed(42) model = SimpleGRPO() true_best = np.array([1.0, 0.5, -0.3, 0.8, 0.2, -0.6, 0.4, 0.1]) for step in range(200): rewards = np.array([np.dot(model.theta, true_best) + np.random.randn() * 0.1 for _ in range(model.groups)]) model.update_step(rewards) if step % 40 == 0: kl_val = model.compute_kl() print("step", step, "mean_reward", round(rewards.mean(), 3), "kl", round(kl_val, 4))
model.sample_logits()从当前策略 θ 的邻域采样出 G 组 logits,对应“一桌端出 4 个菜品版本”。compute_advantages(rewards)对组内奖励做均值方差归一化,输出每条回答的相对优势,对应“组内相对比较”。ratio = np.exp((logits - old_logits).sum(axis=1))计算新旧策略概率比 r_i,它是裁剪机制的基础。clipped = np.clip(ratio, 0.8, 1.2)将比率限制在 [0.8, 1.2],模拟 ε=0.2 的裁剪操作,防止一步更新过猛。loss = -np.mean(np.minimum(ratio * adv, clipped * adv))这正是 GRPO 目标函数的核心项。grad = grad / self.groups - self.beta * (self.theta - self.old_theta)在策略梯度基础上叠加 KL 惩罚梯度,抑制策略漂移。
常见误区
误区“GRPO 既然是相对比较,肯定不需要奖励模型了,直接让人类投票就行。” 不少学习者误以为 GRPO 是纯人类反馈,不需要任何自动评分机制。
正解GRPO 并没有取消奖励模型。它依然依赖一个训练好的 Reward Model 为每条回答打一个初始分数,只是这些分数只在组内进行比较,不再与一个全局价值基准做绝对比较。奖励模型是该拿的“大众点评分”,GRPO 砍掉的是那位“昂贵的评论家”(Critic 价值模型),二者不是一回事。
为何常见:因为“群体相对”这个词容易让人联想到纯比较、无打分,再加上许多博客标题强调“去掉 Critic”,读者便误以为奖励模型也被去掉了。
误区“组内优势做过均值归一化,所以每组一定有一半正优势、一半负优势。” 有人把均值归一化与排序混为一谈,误认为每个组内的正负分布是严格均等的。
正解均值归一化只是让组内奖励减去均值,因此所有优势之和为 0,但不代表必然有正有负——当组内所有奖励完全相同时,所有优势都是 0;当大部分奖励都高于均值时,也可能出现多个正值和少量负值,分布的稀疏程度取决于奖励的离散度。
为何常见:人们拿“正态分布中间有正有负”的直觉套用到任意样本上,忽略了均值归一化只保证中心化,不保证排序的均匀性。
误区“KL 惩罚越强,策略越稳定,模型训练越安全,所以 β 越大越好。” 许多初学者把稳定性当成唯一追求,恨不得把 β 调得很大。
正解KL 惩罚强度若过大,模型会被“焊死”在旧策略附近,几乎学不到新的偏好信息。理想状态是“既能吸收反馈,又不至于忘本”——实践中 β 需要配合学习率一起调,观察奖励曲线和 KL 曲线折中平衡。这就像是教育学生:纪律太严会扼杀创造力,纪律太松会走偏方向,合适才是关键。
为何常见:稳定性是训练中最容易感知的指标(loss 不炸),而“学得不够多”是隐蔽的,导致人们偏好安全的极端。
误区“组越大,相对比较越精准,那我直接设 G=64 不是更好吗?” 有些人认为组大小只影响统计质量,没有上限。
正解组大小增大确实让优势估计更准,但同时也意味着每步采样成本线性增长,训练吞吐量显著下降。实践中 G=4 是一个性价比极高的默认值(DeepSeekMath 使用 G=4 已超越 PPO),再增大收益逐渐递减。组大小还和奖励模型质量、KL 惩罚系数存在交互,并非独立变量。
为何常见:人们容易陷入“更多样本 = 更好”的直觉,忽略了强化学习中采样成本与步数效率的权衡。
面试题
Q1. GRPO 相比 PPO 最核心的改动是什么?
- A.删除了价值模型 Critic← 正确答案
- B.增加了奖励模型
- C.用决策树代替神经网络
- D.取消了策略梯度
答案:A。GRPO 的核心就是“辞退评论家”——不再训练 Critique 价值模型,改用组内相对比较计算优势。奖励模型依然保留,决策树和取消策略梯度都毫无根据。
Q2. GRPO 中的“组”指的是什么?
- A.同一个提示采样多条回答← 正确答案
- B.多个不同提示的集合
- C.多个训练数据批次
- D.多个策略参数分组
答案:A。GRPO 的品鉴组是对同一问题 q 采样出的 G 条回答,这样组内成员的生成难度和任务背景一致,相对比较才有意义。不同提示、不同批次都不是“组”的定义。
Q3. 优势函数 A_i 的正负表示什么?
- A.优于还是劣于组内均值← 正确答案
- B.奖励是否大于零
- C.模型是否收敛
- D.采样概率是否均匀
答案:A。A_i = (r_i - mean) / std,分子是与组内均值之差,所以正负代表第 i 条回答在组内的相对位置。它和绝对零值无关,也谈不上收敛。
Q4. 某组四条回答的奖励为 [2, 1, 3, 2],对这条组内奖励做均值归一化后,它们的均值是多少?
- A.0← 正确答案
- B.1
- C.2
- D.0.75
答案:A。四个数之和为 8,均值为 2。每条奖励减去 2 后变为 [0, -1, 1, 0],新数组总和为 0,因此归一化后均值为 0。标准差只改变量纲,不改变均值位置。
Q5. GRPO 中 KL 惩罚的主要作用是什么?
- A.防止新策略偏离旧策略太远← 正确答案
- B.提升奖励模型的泛化能力
- C.增大采样多样性
- D.代替裁剪机制
答案:A。KL 散度度量新旧策略分布的距离,惩罚它本质上是给策略更新套缰绳。它不作用于奖励模型,多样性是采样函数的职责,KL 也不能替代裁剪——二者是双保险,不是替代关系。
Q6. GRPO 中裁剪阈值 ε 设置的过大会导致什么?
- A.单步更新幅度太大← 正确答案
- B.训练速度一定变快
- C.KL 损失必然减少
- D.采样数量自动增加
答案:A。ε 控制概率比率裁剪范围,ε 越大允许更新幅度越大,策略漂移风险越高。它不直接控制 KL,也不会自动改变采样量。
Q7. GRPO 的优势值为什么要在组内除以标准差?
- A.消除不同组之间的尺度差异← 正确答案
- B.让优势值一定为正数
- C.让奖励模型更快收敛
- D.减少采样时的随机噪声
答案:A。除以标准差等价于 Z-score 标准化,能消除不同组的奖励分布尺度差异,让优势值在组间可比。它不保证正负,也与奖励模型收敛无关。
Q8. 关于组内相对比较,下列说法正确的是?
- A.顺带抵消了奖励模型的系统性偏差← 正确答案
- B.必须要保证各组奖励均值相同
- C.一定产生一个正优势值成员
- D.替代了奖励模型的全部功能
答案:A。同一组共享同一奖励模型,若奖励模型有系统性偏差(如偏爱长答案),所有组内成员都受到影响,相对比较时这些偏差互相抵消。组内分数不必一致,也不一定必有正值。
Q9. 下列关于 GRPO 与 PPO 训练成本的比较,正确的是?
- A.GRPO 降低了显存占用← 正确答案
- B.GRPO 训练速度必定更慢
- C.PPO 不需要价值模型
- D.两者显存占用完全相同
答案:A。GRPO 砍掉 Critic 价值模型,省下大量显存,还能提升吞吐。相同批次下 GRPO 通常更快,PPO 必须依赖价值模型,“完全相同”显然错误。
Q10. GRPO 使用哪些机制共同保证策略更新的稳定性?
- A.概率比率裁剪← 正确答案
- B.组内均值方差归一化← 正确答案
- C.扩大学习率加速收敛
- D.KL 散度惩罚← 正确答案
答案:ABD。裁剪(A)限制单步比率幅度,组内归一化(B)稳定优势量纲,KL 惩罚(D)约束累积漂移,三者是 GRPO 的稳定性三支柱。扩大学习率(C)恰恰是破坏稳定性的操作。