GRPO 就像一个树节点,从这里开始开枝散叶。
大语言模型的发展真是日新月异。
从 DeepSeek 横空出世以来,其在大模型后训练的创新 GRPO 一跃成为强化学习黄金范式。
GRPO 已经成为一种大模型通用的强化学习算法,能够用在广泛的后训练任务中,甚至包括让大模型玩 2048:
而就在今年,大模型后训练的研究出现了几个重磅结果,包括 Seed 团队的 DAPO,Qwen 团队的 GSPO,微软团队的 GFPO 等等,而他们无一例外都是对 GRPO 范式的改进。
看这些名字都绕晕了,GRPO 到底有什么魔力,能让各大研究团队绕着它团团转;GRPO 又有什么缺陷,各大团队都要在它身上动刀?
通过这篇文章,我们希望能够深入浅出的解释大模型后训练的原理,近期的技术进化路线,以期为读者构建一个完整的知识体系。
后训练与强化学习
很多人会觉得,强化学习是一个非常古老的概念,和全新的大模型好似格格不入。
我们先从大模型说起。
大众理解的大语言模型的概念似乎很简单,从海量数据中自监督学习出来的一个模型,能够预测文本中下一个出现的词,从而输出语言文本。
但这并不完善,这种理解只突出了大模型「预训练」的过程,而完全忽略了「后训练」这一重要过程。
简单来说,从海量数据中学习的过程称为「预训练」,预训练的结果是让模型掌握了通用语言能力,但仅仅如此,模型生成的内并不一定符合偏好;可能生成冗长、不准确的内容;可能不符合应用任务的需求。
换句话说,预训练后的大模型会说话,但不一定会「说对话」。
因此,「后训练」过程就极为重要。后训练的主要目标是强化模型在特定领域的知识和应用能力,增强了模型的适应性和灵活性,使其能够更好地满足实际应用场景中的多样化需求。
而强化学习则是在后训练中不可或缺的核心部分。关于强化学习的理解,我们可以参考先前编译的来自 Unsloth 团队的文章。
强化学习的核心是「反馈」,目标是增加好结果的出现概率,降低坏结果的出现概率。
举个例子,在吃豆人(Pacman)游戏中:如果吃掉一块饼干,反馈是加分;如果你碰到敌人,反馈是扣分。
这是最朴素的强化学习方式了。我们放到大模型训练当中,又该用什么方式给大模型加减分的反馈呢?
我们的核心目标是让大模型输出符合我们任务偏好的内容,那最简单的方式就是人类的反馈。
如果你也这么想,那你的想法和 OpenAI 不谋而合。
在训练 GPT 的时候,OpenAI 就采用了 RLHF(基于人类反馈的强化学习)的方法。在该方法中,需要训练一个 agent 来针对某个问题(状态)生成人类认为更有用的输出。
反馈有了,并非一切万事大吉了。我们通过 RLHF 获得了反馈,通过这个反馈的 Reward 作为一个绝对的标准去直接训练模型,会出现显著的激励不充分和方差过大的问题。
假如有两个模型,A 的初始能力显著比 B 强,通过直接反馈会出现:
- 模型 B 即使从 30 提升到 60,但和模型 A 的 80 相比,仍然显得很差,优化时它得到的激励仍然有限。
- 模型 A 在追求更高分时,可能出现一些激进的变化,导致 reward 有时飙升,有时迅速回落,训练过程不稳定。
PPO 的稳定策略
为了在此基础上稳定的实现 RLHF,OpenAI 构建了PPO(Proximal Policy Optimization,近端策略优化)机制,加入了Critic、CLIP 操作和 Reference Model,在保证 策略更新不过度 的同时,依旧能 高效提升性能。现在已经成为强化学习领域的 标准方法之一,几乎是 RLHF 的默认选择。
针对第一条问题,PPO 引入了 Critic:
通俗来说,我们不再只使用纯粹的 Reward 来反馈,而是设置一个「价值函数
」作为参考,训练目标从「Reward」进化成「Advantage」:
对某个动作,如果实际 Reward 超过了 Critic 的预期,就作为奖励,若低于预期则为负反馈。优化目标就变成:
也就是说,我们拥有了一个相对评估模型进步程度的新范式,而非采用绝对 Reward 反馈。引入 Critic 可以显著降低训练过程中的方差,相对于 Reward 反馈,模型进步能获得的梯度更显著。
针对第二条问题,PPO 采用了 Clip 策略:
为了避免模型变化过大导致的不稳定,Clip 策略加入了限制条件,在目标函数中可以体现:
其中,
它表示新策略相对于旧策略,在动作上的概率变化幅度。如果这个比值偏离 1 太多,就会被限制在一定的范围内,避免模型一次更新的幅度过大。
除此以外,PPO 策略采用 Reference Model 上了双保险,在损失函数中加入相对初始模型的 KL 散度,同样可以避免为了短期反馈而脱离合理的策略。
于是,PPO 的损失函数如下:
从 PPO 到 GRPO
上面的描述应该很好理解 PPO 在做什么事情。
但是 PPO 有一个严重的问题,由于价值函数是随着模型训练同时变动的,也就意味着策略模型本身和 Critic 模型(价值函数)都需要进行训练,并且 Critic 模型的大小和策略模型相同。因此会带来额外的内存和计算负担,训练成本非常高,很难进行 scale up。这可能是财大气粗的 OpenAI 玩得转并且取得领先的原因之一。
为了改善这个双模型策略的高成本问题,最简单的方法就是:去掉一个网络。
如果你一样这么想,那你和 DeepSeek 又不谋而合。
DeepSeek 在大模型训练改进的主要动机是想办法去掉 Critic 模型,为此提出了一种替代方法,也就是大名鼎鼎的组相对策略优化(Group Relative Policy Optimization, GRPO)。
PPO vs GRPO 流程算法对比
从流程算法对比中可以看出来,价值函数直接消失了。那不用价值函数,我们如何确定模型的 Advantage 呢?
GRPO 采用了一个非常合理的方法,不用「学习」一个单独的价值网络当 Critic,而是用这个模型过去多次的「考试成绩」来确定一个基准线。
对同一道题目、同一个状态,先用旧策略采样多条输出,然后把这些输出的平均 Reward 当作 baseline; 超过平均值就相当于「正向 Advantage」,低于平均值就是「负向 Advantage」。
在 GRPO 里,除了这一步,还保留了 PPO 中的 Clip 和对 Reference Model 的 KL 正则,这些都可以保障更新的稳定性。不过,KL 散度在 GRPO 的目标函数直接放在了损失函数,这降低了奖励函数的计算复杂度,并且它的计算方案能够保证进行归一化的 KL 值每次都是正值。而在 PPO 中,KL 散度放在奖励函数中。
GRPO 跟 PPO 的重要区别,主要是去掉了价值函数,同时使用策略模型的多个输出采样的奖励模型输出的多个奖励的平均值作为 Advantage 函数。
于是,我们得到了 GRPO 的损失函数:
对于 PPO 到 GRPO,知乎网友将两者在多个维度上进行了比较,如图表所示。
知乎网友@杞鋂 分享PPO与GRPO的对比
从 GRPO 开枝散叶
GRPO 在出现后迅速成为一个后训练范式的重要节点,DeepSeek 的模型成功充分证明了 GRPO 范式的有效性和优越性。也因此,后续的改进工作大多都是在 GRPO 的方法基础上进行。
那么 GRPO 到底有啥问题,各个新工作都要在它身上动刀呢?
最致命的问题,哪怕 GRPO 在 PPO 的基础上进行了改进,但在稳定性上与 PPO 方法仍然半斤八两。也就是说GRPO 仍然存在严重的稳定性问题,很容易导致训练崩溃。
根据数学中国的说法, DeepSeek 的数据足够多,多到可以完美地避开 GRPO 的稳定性缺陷。每次的策略梯度计算,只要 Batch 数据足够多,就能有效降低策略梯度的方差,就能获得比较稳定的迭代了。对于中小规模的 RL 训练,GRPO 并非一个好的选择,尤其是当每次使用的数据批量比较小的时候,它的稳定性缺陷将是致命的。
因此,最新的一些方法针对 GPRO 的不同部分进行了迭代,具体缺陷和优化方式在介绍新工作时细讲。
DAPO
首先要讲的优化范式是DAPO,这是字节、清华 AIR 在今年三月开源的算法。
使用该算法,该团队成功让 Qwen2.5-32B 模型在 AIME 2024 基准上获得了 50 分,优于同等规模的 DeepSeek-R1-Zero-Qwen-32B,同时 DAPO 版 Qwen2.5-32B 使用的训练步数还少 50%。
但是值得一提的是,DAPO 方法并没有在数学原理上有什么本质上的改变,基本优化目标仍然沿用了 GRPO 的形式,只是对 Clip 等参数和采样机制做出了改进。因此,我们把 DAPO 放在最早讨论的顺位。
在实践过程中,GRPO 存在以下几个问题:
- Token 级别的 Clip 容易导致熵崩溃:模型很快收敛到少量固定答案,导致多样性和探索能力不足(熵崩溃)。
- Batch 采样中出现奖励极端化:部分样本的奖励可能全部为 1 或 0,从而产生「零梯度」问题,削弱训练信号。
- 长序列训练的梯度分布失衡:权重分布让极少数 token 的梯度占据主导,导致许多高质量的长序列样本被忽视。
为此,DAPO 根据实践中出现的问题提出了针对性的优化:
1.Clip-Higher 机制:将 Clip 的上下限分开,研究者将较低和较高的剪辑范围解耦为 ε_low 和 ε_high,研究者增加了 ε_high 的值,以便为低概率 token 的增加留出更多空间,能够显著提升模型训练早期的熵。
2.动态采样:进行过度采样,过滤掉奖励等于 1 和 0 的提示语,只保留有效梯度的样本,提高训练效率。
3.Token 级策略梯度损失:对所有 token 一起求平均,保证长序列的所有 token 都公平地为 batch loss 做贡献,并防止长序列的优化梯度被过度缩小。
4.超长奖励调整:针对超长样本,当响应长度超过预定义的最大值时,研究者定义一个「soft 罚分」。在这个区间内,响应越长,受到的惩罚就越大,以此避免过长的响应。
因此,DAPO 的优化损失函数如下:
虽然 DAPO 依然是token 级别的重要性采样,但训练曲线和最终性能提升非常明显。
- 项目页面:https://dapo-sia.github.io/
- 论文地址:https://dapo-sia.github.io/static/pdf/dapo_paper.pdf
GSPO
大的来了。后训练领域里重要的突破是 Qwen3 使用的新方法 GSPO。
上文那么多文字一直在提及 PPO 类似方法的重要级采样均为 token 级,迭代方法一直没有突破 token 采样的限制,而GSPO 真正在原理上做出了改进。
最近 Qwen 的研究表明,使用 GRPO 训练大语言模型时存在严重的稳定性问题,往往会导致模型不可逆地崩溃。在 Qwen 团队的研究中,揭示了 GPRO 方法的严重问题:
- 在每个 token 级别应用重要性采样,会在长序列中积累高方差,导致训练不稳定。
- 这一问题在专家混合模型(Mixture-of-Experts, MoE) 中尤为严重,因为 token 级别的路由变化会加剧不稳定性。
如果说 DAPO 是在 GRPO 框架内做微调,那么 GSPO 则是直接调整了优化目标的颗粒度 ——从 token 级跳到序列级。
重要性采样的作用是:来缓解 off-policy 带来的分布差异情况,也就是说:
我们想要估计一个预期的分布,但是我们手上只有另行为模型的分布,我们就只能在行为策略下进行采样,通过这个样本,赋予重要性权重,来估计出目标策略下函数的值。
但是这种采样的前提在于多次采样,如果只有一次采样,并不能起到分布矫正的作用。问题在于大模型训练过程中,重要性采样都是 在 token 级别进行的,单个 token 进行的重要性采样是无法起到分布矫正的作用的,相反,这种采样手段反而会带来很大方差的噪声。
在训练时,奖励其实是针对整段回答打的分,比如一句话、一个完整回复都会得到一个整体评价。
但是在模型优化时,我们通常是在 token 层面进行采样和更新。于是常见的做法是:把奖励直接分摊到每一个 token 上,再逐个去调整。
这就导致了优化目标和奖励目标的颗粒度不匹配:模型可能在单个 token 上学得很用力,但这并不能完全对应整段回答的质量。
为此,Qwen 团队将 GRPO 进化为组序列策略优化(Group Sequence Policy Optimization, GSPO)。
正如其名称所暗示的,GSPO 的核心在于将重要性采样从 token 级转移至序列级,其重要性比值基于整个序列的似然度计算:
这种采样权重的设计自然地缓解了逐 token 方差的累积问题,从而显著提升了训练过程的稳定性。
因此,GSPO 的损失函数为:
- GRPO:重要性权重在 token 级,每个 token 都可能被单独裁剪。
- GSPO:重要性权重在 序列级,裁剪时直接作用于整个回答,更符合奖励信号的整体性。
此外,GSPO 对 序列级的重要性还做了 长度归一化,不同问题的回答长度差别很大,如果不归一化,importance ratio 会对长度非常敏感,造成不稳定。
最后,因为同一个序列中的所有 token 共用同一个重要性权重,一旦发生 clipping,被裁剪掉的就是 整个序列,而不是像 GRPO 那样只影响部分 token。
因此,GSPO 提出的「序列级重要性采样」显著提高了训练的稳定性,很可能会成为未来后训练强化学习的新标准。
- 论文标题:Group Sequence Policy Optimization
- 论文链接:https://huggingface.co/papers/2507.18071
- 博客链接:https://qwenlm.github.io/blog/gspo/
GFPO
在 GSPO 之后不久,微软研究员曝出一个新成果:组过滤策略优化(Group Filtered Policy Optimization,GFPO),另一种颠覆性的强化学习算法。
在 GFPO 工作中,微软研究团队指出了 GRPO 的一个关键限制:
GRPO 依赖于单一的标量奖励信号,这使得它难以联合优化多个属性,例如同时优化简洁性和准确度。
结果就是,GRPO 确实能提高准确度,但也会让响应长度大幅增加。这也导致了大模型遇到一个稍微棘手的问题,就会像陷入沉思一样长篇大论地推下去,耗时耗算力,结果却未必靠谱。
GFPO 正是为了解决这个问题而生的,它可以同时优化多个响应属性。
GFPO 是一种简单而有效的方法,可以针对想要的响应属性进行有针对性的策略优化。
GFPO 会为每个问题采样更大的候选响应组,从而扩大响应池以包含更多具有所需特性的候选响应,然后在计算策略梯度时显式地过滤这些特性,不符合目标属性的响应不进入优化。
数据过滤是一种隐式、灵活的奖励塑造形式 —— 类似于使用选择性采样来放大特定模型行为的迭代式自我改进方法。过滤机制会迭代地放大模型在目标属性上的表现,就像强化学习里的「偏好放大器」。
在此显式过滤步骤分离出所需的响应后,将在所选组内使用标准奖励来计算相对优势。
因此,GFPO 无需复杂的奖励工程,即可同时优化多个所需属性(例如长度和准确度)。
GFPO 的形式化定义如下:
GFPO 的主要干预措施是在 Advantage 估计层面,使其可与任何 GRPO 类似的方法兼容,例如 DAPO、Dr. GRPO 或带有 Dual-Clip PPO 损失的 GRPO。
- 论文标题:Sample More to Think Less: Group Filtered Policy Optimization for Concise Reasoning
- 论文地址:https://arxiv.org/abs/2508.09726
GRPO 的一些其他问题
除此以外,也有些研究者发现了 GRPO 的一些其他缺陷,或许可以为未来的研究工作提供一些新思路。
- 博客链接:https://aryagxr.com/blogs/grpo-limitations.html
缺陷 1:奖励的歧义性
复杂的推理问题通常需要多个奖励信号,因此我们会为每个评判标准单独设计奖励函数。然后,把所有奖励函数的分数加在一起,折叠成一个单一的奖励信号。
问题在于,模型根本无法知道 自己到底是因为什么行为被奖励的。虽然我们写了不同的奖励函数,但最后所有奖励依然被合并为一个标量信号。模型又怎么知道奖励是来自「答案正确」,还是「推理清晰」,还是「格式规范」呢?
即使我们调整不同奖励组件的权重,模型看到的仍然只是一个总的标量奖励。
GFPO 一定程度上改善了上述问题。
缺陷 2:标量反馈
在推理任务中,GRPO 会丢弃所有中间的文本反馈,因为传给模型的只是一个数值化的奖励信号。
举个例子,模型训练过程中会打印一些输出,每次猜测都有文字反馈,比如:
- 「字母 ‘c’ 不应该在答案里」
- 「‘n’ 不能出现在位置 3」
这些文字反馈对模型其实很有帮助,但在 GRPO 框架下完全用不上,因为它们最终都会被抽象成一个标量奖励。
缺陷 3:多轮推理
另一个瓶颈是 多轮推理 任务在 GRPO 下的表现。问题的关键在于:
在多轮对话中,每一轮的反馈都会被重新输入到基础模型的 prompt 中,从而导致 指数级分支(exponential forking),使得 GRPO 在多轮任务中的训练变得非常痛苦。见下图:
写在最后
简单总结一下,后训练的发展脉络其实很清晰。从 OpenAI 提出 PPO 的后训练方法开始,都在此基础上缝缝补补。
GRPO 是 PPO 基础上重要的更新范式,自 GRPO 起,后训练策略优化就作为大模型的一个重要研究方向进行,就像树节点一样向外延伸。
- PPO:以 token 为核心,依赖价值函数。
- GRPO:提出组优化思路,在组内对奖励做归一化,从而摆脱价值函数依赖;但仍停留在 token 级,方差依旧较大。
- DAPO:在 GRPO 基础上加入大量工程改进(如 Clip-Higher、Dynamic Sampling 等),一定程度缓解大模型 RL 的训练瓶颈,但仍停留在 token 级。
- GSPO:实现范式转变,将 off-policy 与 clip 全部提升到 序列级,显著降低方差,兼具算法简洁性与性能表现,已成为 Qwen3 RL 的核心实践框架。
- GFPO:针对同时优化多个所需属性的目标进行优化,加入数据过滤操作。
参考链接:
https://www.zhihu.com/question/12933942086/answer/1933555787759871596
https://zhuanlan.zhihu.com/p/1941902507136746342
https://blog.csdn.net/m0_74942241/article/details/150611764
https://zhuanlan.zhihu.com/p/1941902507136746342
https://mp.weixin.qq.com/s?__biz=MjM5NzEyMzg4MA==&mid=2649520693&idx=7&sn=75f3515fb8ca4abbbc9dc0de2338baa3&chksm=bff51a0e6e62b39b8ebc6ee47f28688a5397e442b754429aed46ca7752c9c83db0cd6f77a427&scene=27