首页 >  AI教程资讯 > 科普向:一文解构大模型后训练,GRPO和它的继任者们的前世今生

科普向:一文解构大模型后训练,GRPO和它的继任者们的前世今生

2025-09-12 09:36:20 | 来源: AICG工具箱

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(ProximalPolicyOptimization,近端策略优化)机制,加入了Critic、CLIP操作和ReferenceModel,在保证策略更新不过度的同时,依旧能高效提升性能。现在已经成为强化学习领域的标准方法之一,几乎是RLHF的默认选择。

针对第一条问题,PPO引入了Critic:

通俗来说,我们不再只使用纯粹的Reward来反馈,而是设置一个「价值函数

」作为参考,训练目标从「Reward」进化成「Advantage」:

对某个动作,如果实际Reward超过了Critic的预期,就作为奖励,若低于预期则为负反馈。优化目标就变成:

也就是说,我们拥有了一个相对评估模型进步程度的新范式,而非采用绝对Reward反馈。引入Critic可以显著降低训练过程中的方差,相对于Reward反馈,模型进步能获得的梯度更显著。

针对第二条问题,PPO采用了Clip策略:

为了避免模型变化过大导致的不稳定,Clip策略加入了限制条件,在目标函数中可以体现:

其中,

它表示新策略相对于旧策略,在动作上的概率变化幅度。如果这个比值偏离1太多,就会被限制在一定的范围内,避免模型一次更新的幅度过大。

除此以外,PPO策略采用ReferenceModel上了双保险,在损失函数中加入相对初始模型的KL散度,同样可以避免为了短期反馈而脱离合理的策略。

于是,PPO的损失函数如下:

从PPO到GRPO

上面的描述应该很好理解PPO在做什么事情。

但是PPO有一个严重的问题,由于价值函数是随着模型训练同时变动的,也就意味着策略模型本身和Critic模型(价值函数)都需要进行训练,并且Critic模型的大小和策略模型相同。因此会带来额外的内存和计算负担,训练成本非常高,很难进行scaleup。这可能是财大气粗的OpenAI玩得转并且取得领先的原因之一。

为了改善这个双模型策略的高成本问题,最简单的方法就是:去掉一个网络。

如果你一样这么想,那你和DeepSeek又不谋而合。

DeepSeek在大模型训练改进的主要动机是想办法去掉Critic模型,为此提出了一种替代方法,也就是大名鼎鼎的组相对策略优化(GroupRelativePolicyOptimization,GRPO)。

PPOvsGRPO流程算法对比

从流程算法对比中可以看出来,价值函数直接消失了。那不用价值函数,我们如何确定模型的Advantage呢?

GRPO采用了一个非常合理的方法,不用「学习」一个单独的价值网络当Critic,而是用这个模型过去多次的「考试成绩」来确定一个基准线。

对同一道题目、同一个状态,先用旧策略采样多条输出,然后把这些输出的平均Reward当作baseline;超过平均值就相当于「正向Advantage」,低于平均值就是「负向Advantage」。

在GRPO里,除了这一步,还保留了PPO中的Clip和对ReferenceModel的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模型在AIME2024基准上获得了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都公平地为batchloss做贡献,并防止长序列的优化梯度被过度缩小。

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进化为组序列策略优化(GroupSequencePolicyOptimization,GSPO)。

正如其名称所暗示的,GSPO的核心在于将重要性采样从token级转移至序列级,其重要性比值基于整个序列的似然度计算:

这种采样权重的设计自然地缓解了逐token方差的累积问题,从而显著提升了训练过程的稳定性。

因此,GSPO的损失函数为:

GRPO:重要性权重在token级,每个token都可能被单独裁剪。

GSPO:重要性权重在序列级,裁剪时直接作用于整个回答,更符合奖励信号的整体性。

此外,GSPO对序列级的重要性还做了长度归一化,不同问题的回答长度差别很大,如果不归一化,importanceratio会对长度非常敏感,造成不稳定。

最后,因为同一个序列中的所有token共用同一个重要性权重,一旦发生clipping,被裁剪掉的就是整个序列,而不是像GRPO那样只影响部分token。

因此,GSPO提出的「序列级重要性采样」显著提高了训练的稳定性,很可能会成为未来后训练强化学习的新标准。

论文标题:GroupSequencePolicyOptimization

论文链接:https://huggingface.co/papers/2507.18071

博客链接:https://qwenlm.github.io/blog/gspo/

GFPO

在GSPO之后不久,微软研究员曝出一个新成果:组过滤策略优化(GroupFilteredPolicyOptimization,GFPO),另一种颠覆性的强化学习算法。

在GFPO工作中,微软研究团队指出了GRPO的一个关键限制:

GRPO依赖于单一的标量奖励信号,这使得它难以联合优化多个属性,例如同时优化简洁性和准确度。

结果就是,GRPO确实能提高准确度,但也会让响应长度大幅增加。这也导致了大模型遇到一个稍微棘手的问题,就会像陷入沉思一样长篇大论地推下去,耗时耗算力,结果却未必靠谱。

GFPO正是为了解决这个问题而生的,它可以同时优化多个响应属性。

GFPO是一种简单而有效的方法,可以针对想要的响应属性进行有针对性的策略优化。

GFPO会为每个问题采样更大的候选响应组,从而扩大响应池以包含更多具有所需特性的候选响应,然后在计算策略梯度时显式地过滤这些特性,不符合目标属性的响应不进入优化。

数据过滤是一种隐式、灵活的奖励塑造形式——类似于使用选择性采样来放大特定模型行为的迭代式自我改进方法。过滤机制会迭代地放大模型在目标属性上的表现,就像强化学习里的「偏好放大器」。

在此显式过滤步骤分离出所需的响应后,将在所选组内使用标准奖励来计算相对优势。

因此,GFPO无需复杂的奖励工程,即可同时优化多个所需属性(例如长度和准确度)。

GFPO的形式化定义如下:

GFPO的主要干预措施是在Advantage估计层面,使其可与任何GRPO类似的方法兼容,例如DAPO、Dr.GRPO或带有Dual-ClipPPO损失的GRPO。

论文标题:SampleMoretoThinkLess:GroupFilteredPolicyOptimizationforConciseReasoning

论文地址: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中,从而导致指数级分支(exponentialforking),使得GRPO在多轮任务中的训练变得非常痛苦。见下图:

写在最后

简单总结一下,后训练的发展脉络其实很清晰。从OpenAI提出PPO的后训练方法开始,都在此基础上缝缝补补。

GRPO是PPO基础上重要的更新范式,自GRPO起,后训练策略优化就作为大模型的一个重要研究方向进行,就像树节点一样向外延伸。

PPO:以token为核心,依赖价值函数。

GRPO:提出组优化思路,在组内对奖励做归一化,从而摆脱价值函数依赖;但仍停留在token级,方差依旧较大。

DAPO:在GRPO基础上加入大量工程改进(如Clip-Higher、DynamicSampling等),一定程度缓解大模型RL的训练瓶颈,但仍停留在token级。

GSPO:实现范式转变,将off-policy与clip全部提升到序列级,显著降低方差,兼具算法简洁性与性能表现,已成为Qwen3RL的核心实践框架。

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

本文来自微信公众号“机器之心”(ID:almosthuman2014),作者:关注大模型的,经授权发布。