# 一、PPO 解析
为了实现稳定的 RLHF,OpenAI 构建了 PPO(Proximal Policy Optimization,近端策略优化)机制,加入了 Critic、CLIP 操作和 Reference Model,在保证 策略更新不过度的同时,依旧能高效提升性能。现在已经成为强化学习领域的标准方法之一。
的一个,不再只使用纯粹的 Reward 来反馈,而是设置一个「价值函数」作为参考,训练目标从「Reward」进化成「Advantage」:对某个动作,如果实际 Reward 超过了 Critic 的预期,就作为奖励,若低于预期则为负反馈。也就是说,我们拥有了一个相对评估模型进步程度的新范式,而非采用绝对 Reward 反馈。引入 Critic 可以显著降低训练过程中的方差,相对于 Reward 反馈,模型进步能获得的梯度更显著。
第二个,PPO 采用了 Clip 策略,为了避免模型变化过大导致的不稳定,Clip 策略加入了限制条件。其中,重要性权重表示新策略相对于旧策略,在动作上的概率变化幅度。如果这个比值偏离 1 太多,就会被限制在一定的范围内,避免模型一次更新的幅度过大。
除此以外,PPO 策略采用 Reference Model 上了双保险,在损失函数中加入相对初始模型的 KL 散度,同样可以避免为了短期反馈而脱离合理的策略。
于是,PPO 的损失函数如下:
# 二、GRPO
由于 PPO 有一个严重的问题,由于价值函数是随着模型训练同时变动的,也就意味着策略模型本身和 Critic 模型(价值函数)都需要进行训练,并且 Critic 模型的大小和策略模型相同。因此会带来额外的内存和计算负担,训练成本非常高,很难进行 scale up。这可能是财大气粗的 OpenAI 玩得转并且取得领先的原因之一。
为了改善这个双模型策略的高成本问题,最简单的方法就是:去掉一个网络。于是 DeepSeek 在大模型训练改进的主要动机是想办法去掉 Critic 模型,为此提出了一种替代方法,也就是大名鼎鼎的组相对策略优化(Group Relative Policy Optimization, GRPO)。
从流程算法对比中可以看出来,价值函数直接消失了。那不用价值函数,我们如何确定模型的 Advantage 呢?GRPO 采用了一个非常合理的方法,不用「学习」一个单独的价值网络当 Critic,而是用这个模型过去多次的「考试成绩」来确定一个基准线。对同一道题目、同一个状态,先用旧策略采样多条输出,然后把这些输出的平均 Reward 当作 baseline; 超过平均值就相当于「正向 Advantage」,低于平均值就是「负向 Advantage」。在 GRPO 里,除了这一步,还保留了 PPO 中的 Clip 和对 Reference Model 的 KL 正则,这些都可以保障更新的稳定性。不过,KL 散度在 GRPO 的目标函数直接放在了损失函数,这降低了奖励函数的计算复杂度,并且它的计算方案能够保证进行归一化的 KL 值每次都是正值。而在 PPO 中,KL 散度放在奖励函数中。GRPO 跟 PPO 的重要区别,主要是去掉了价值函数,同时使用策略模型的多个输出采样的奖励模型输出的多个奖励的平均值作为 Advantage 函数。
于是,我们得到了 GRPO 的损失函数:
但是存在最致命的问题,哪怕 GRPO 在 PPO 的基础上进行了改进,但在稳定性上与 PPO 方法仍然半斤八两。也就是说 GRPO 仍然存在严重的稳定性问题,很容易导致训练崩溃。根据数学中国的说法, DeepSeek 的数据足够多,多到可以完美地避开 GRPO 的稳定性缺陷。每次的策略梯度计算,只要 Batch 数据足够多,就能有效降低策略梯度的方差,就能获得比较稳定的迭代了。对于中小规模的 RL 训练,GRPO 并非一个好的选择,尤其是当每次使用的数据批量比较小的时候,它的稳定性缺陷将是致命的。因此,最新的一些方法针对 GPRO 的不同部分进行了迭代,具体缺陷和优化方式在介绍新工作时细讲。
# 三、DAPO
DAPO,这是字节、清华 AIR 在今年三月开源的算法。但是值得一提的是,DAPO 方法并没有在数学原理上有什么本质上的改变,基本优化目标仍然沿用了 GRPO 的形式,只是对 Clip 等参数和采样机制做出了改进。
在实践过程中,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 的优化损失函数如下:
# 四、GSPO
之前方法的重要级采样均为 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 提出的「序列级重要性采样」显著提高了训练的稳定性,很可能会成为未来后训练强化学习的新标准。