GRPO 把同一个组内归一化优势分给整条响应,却仍按 token 计算重要性比率;论文认为这一步既没有完成分布校正,又把高方差噪声带进了长序列。
GSPO 改成用整条响应的似然比 si(θ) 做一次裁剪,让一条响应里的所有 token 共享同一权重。
代价是裁剪范围要缩到 3e-4 / 4e-4 量级,实验也只覆盖一个 MoE 底座的数学与代码任务。
GSPO 的出发点是让优化单元与奖励单元对齐:奖励按整条响应给,重要性比率和裁剪也应该按整条响应做。 GRPO 的 token 级权重只基于每个位置的一次采样,重要性采样需要的「多样本平均」并不成立,结果是噪声而不是校正。
目标函数保留 GRPO 的组内相对优势,只把比率换成序列似然比的几何平均:
si(θ) = (πθ(yi|x) / πold(yi|x))1/|yi|(Eq.7)。
长度归一化把不同长度响应的比率压到同一数值范围,否则少数 token 的似然变化就能让整条序列的比率剧烈波动。
梯度分析给出最直接的差别:GRPO 给每个 token 各自的权重(Eq.12),GSPO 给同一条响应的所有 token 相同权重(Eq.10)。 论文在 Qwen3-30B-A3B-Base 上报告:GSPO 训练更稳、在相同计算与 query 消耗下效果更好,并且不再需要 MoE 的 Routing Replay。
需要注意证据形态:全文只有三张图(Figure 1/3 为训练曲线,Figure 2 为平均裁剪比例柱状图),没有结果表;正文也只给「裁剪比例相差两个数量级」这样的量级描述。 具体到某个 benchmark 的最终分数,论文没有列表,页面也不替它补。
先建立两个前提:大规模 RL 首先要稳;token 级重要性采样在长序列上会累积噪声。
论文把稳定训练列为扩大 RL 计算投入的首要前提。作者观察到,以 GRPO 为代表的现有算法在训练超大模型时会出现严重的稳定性问题,甚至导致灾难性且不可逆的模型崩溃;崩溃发生后,回退到旧 checkpoint、重新调裁剪范围、延长生成长度或更换 query 都不一定救得回来(§1、§3)。
论文给出的根因不是裁剪范围没调好,而是 GRPO 的重要性采样权重用错了层级。重要性采样的目标是估计目标分布下的期望,它依赖从行为分布抽取多个样本后对权重求平均:
GRPO 却在每个 token 位置 t 上使用 πθ(yi,t|x,yi,<t) / πold(yi,t|x,yi,<t)(πold 即论文的 πθold)。这个权重只基于下一 token 分布的一次采样 yi,t,没有多样本平均,因此没有完成它声称要做的分布校正;相反,它把高方差噪声带进梯度。序列越长,噪声累积越多,再被裁剪机制放大,最终可能把训练推向崩溃(§3)。
论文把这一点上升为设计原则:优化目标的单元应该与奖励的单元匹配。既然 verifier 只对整条回答给一个分数,那么在 token 级做 off-policy 校正就没有对应的奖励粒度。GSPO 的全部改动都从这条原则推出(§3、§4.1)。
这也解释了为什么问题在长响应任务上更尖锐:token 数越多,单样本权重的噪声累积越久;模型越大、越稀疏,梯度里的小偏差越容易被放大。推断(依据:§3 明确写噪声随 response length 累积,并被 clipping 放大;§5.3 补充 MoE 稀疏激活会让 token 比率波动更大)。
两路对照:PPO 的代价是 value model,GRPO 的代价是 token 级比率;MoE 把后者的代价放大。
PPO 用旧策略采样,通过裁剪把更新限制在旧策略附近。每个 token 的优势 Ât 由另一个 value model 估计(Eq.1)。
代价:value model 通常与策略模型体量相近,带来可观的内存与计算负担;算法效果还依赖 value 估计是否可靠,而把可靠的价值模型扩展到更长响应、更复杂任务本身就更难(§2)。
GRPO 对同一个 query 采样 G 条响应,用组内归一化的奖励作为每条响应的优势,所有 token 共享这个优势(Eq.2–3)。这样就不需要 value model。
代价:重要性比率仍然是 token 级的 wi,t。论文认为这正是 §3 所说的高方差噪声来源;在 MoE 模型上,专家激活波动会让这些 token 比率进一步失真(§5.3)。
MoE 的稀疏激活带来额外的稳定性问题。论文报告:在 48 层的 Qwen3-30B-A3B-Base 上,每次 RL 梯度更新后,对于同一条 rollout 样本,新策略 πθ 激活的专家里大约有 10% 与旧策略 πold 不同;模型越深,这个现象越明显(§5.3)。
专家组合一变,token 级重要性比率就会剧烈波动。此前的做法是 Routing Replay:缓存 πold 激活的专家,在 πθ 计算重要性比率时重放同一套路由,使新旧策略共享激活网络,从而恢复 token 比率的稳定性(§5.3)。Figure 3 显示,Routing Replay 对 GRPO 的 MoE 训练正常收敛起关键作用。
但 Routing Replay 不是免费的:复用路由模式会带来额外的内存与通信开销,还可能限制 MoE 模型的实际容量(§5.3)。GSPO 的切入点就是:如果只关心序列似然,就不需要让 token 级路由保持一致。
三个公式:序列级目标、组内优势、序列似然比;再用梯度分析看清它和 GRPO 的差别。
GSPO 保留 GRPO 的组采样与组内相对优势,只把优化对象从「每个 token 的比率」换成「整条响应的比率」:
长度归一化不是为了好看。论文解释:如果不除以 |yi|,少数 token 的似然变化就能让整条序列的比率剧烈波动;不同长度响应也会需要不同的裁剪范围。归一化后,si 被压到统一的数值范围,裁剪范围才能对所有长度共用(§4.1)。论文也指出:正因为比率定义不同,两者通常相差数量级;因此两组数值不宜直接横向比较。推断
忽略裁剪,GSPO 目标的梯度是:
作为对照,GRPO 的梯度是:
论文进一步指出,GRPO 的这些不等权重不是可以忽略的小量:当 Âi > 0 时它们落在 (0, 1+ε],当 Âi < 0 时落在 [1−ε, +∞),并且会随训练累积,产生不可预测的后果。GSPO 则把同一条响应的所有 token 等权处理,直接消掉了这个不稳定性来源(§4.2)。
如果未来需要在多轮 RL 里做更细的优势分配,论文给出一个变体:保留 si(θ) 的序列级裁剪,但允许每个 token 有自己的 Âi,t。它把比率写成:
因为 πθ / sg[πθ] 的数值为 1,si,t 与 si 数值相同。论文证明:当所有 token 的 advantage 都设为 Âi 时,GSPO-token 与 GSPO 在目标、裁剪条件和理论梯度上完全相同;区别只在于前者允许逐 token 调整优势(Eq.13–17、§4.3)。论文没有报告 GSPO-token 的实验,它只是一条可扩展的接口。
下面是一个简化模拟:固定 8 个 token,令第 t 个 token 的 log 重要性比率为 δ + σ·(+1,−1,+1,−1,…)。因此 token 比率随 σ 上下波动,而序列比率 s = exp(δ) 只由整体漂移决定。两个裁剪阈值都取自 §5.1。这里的「裁掉」只按比率越界计数,不区分 advantage 符号;advantage 符号与 min 的交互未覆盖。
注:1.4918 / 0.6703 / 1.2214 / 1.3499 / 1.0000 与 8/8、4/8 是页面模拟输出,不是论文派生数字,已由下方手算块核对。
组 1:δ = 0.00,σ = 0.40。8 个 token 的 log 比率交替为 +0.40 / −0.40,所以 token 比率为 e0.4 = 1.4918 与 e−0.4 = 0.6703。序列比率 s = e0 = 1.0000。GRPO 阈值 [0.8, 1.27]:1.4918 > 1.27、0.6703 < 0.8,8/8 个 token 都被裁掉。GSPO 阈值 [0.9997, 1.0004]:1.0000 在区间内,不裁整条响应。这里的「裁掉」只按比率越界计数,不区分 advantage 符号;advantage 符号与 min 的交互未覆盖。
组 2:δ = 0.30,σ = 0.10。log 比率交替为 +0.40 / +0.20,token 比率为 e0.4 = 1.4918 与 e0.2 = 1.2214。序列比率 s = e0.3 = 1.3499。GRPO:1.4918 > 1.27 的 4 个 token 被裁,1.2214 的 4 个保留,共 4/8。GSPO:1.3499 > 1.0004,整条响应被裁掉。
口径说明:这是按 Eq.7 与 §5.1 两组裁剪范围写的页面模拟,token 序列是页面构造的对称模式,不是论文中的真实样本;它覆盖几何平均、GRPO 双侧越界、GSPO 上侧越界 / 不裁剪;GSPO 下侧越界未在手算块中列出(δ < 0 可触发)。它也不覆盖真实 token 分布、长短序列差异、advantage 采样与 reward 噪声。
工程账本:底座、采样协议、mini-batch、两组裁剪范围,以及 §5.4 的推理引擎可能性。
实验从一个 Qwen3-30B-A3B-Base 冷启动模型出发,每批 rollout 数据被切成 4 个 mini-batch 做梯度更新。评测协议是:AIME'24 用 32 次采样的平均 Pass@1;LiveCodeBench(202410–202502)用 8 次采样的平均 Pass@1;CodeForces 用 Elo rating(§5.1)。
| 项目 | 设置 |
|---|---|
| 底座 | Qwen3-30B-A3B-Base 冷启动模型 |
| AIME'24 | 平均 Pass@1,32 次采样 |
| LiveCodeBench | 202410–202502,平均 Pass@1,8 次采样 |
| CodeForces | Elo rating |
| rollout batch | 切成 4 个 mini-batch |
| GSPO 裁剪 | 左 3e-4,右 4e-4(Eq.5) |
| GRPO 裁剪 | 左 0.2,右 0.27(Eq.2,论文称经过仔细调参) |
把两组范围直接相除,GRPO 的左 / 右范围分别是 GSPO 的 0.2 / 0.0003 ≈ 666.7 倍与 0.27 / 0.0004 = 675 倍。这不是「GRPO 更宽松所以更好」:两者的比率定义不同,si 是几何平均,天然更靠近 1,因此需要更窄的区间。论文在 §4.1 指出两者通常相差数量级;因此两组数值不宜直接横向比较。推断
换个说法:GSPO 的序列比率只有落在 [1−0.03%, 1+0.04%] 内才不被裁剪。这个量级说明它裁的是「整条响应偏离旧策略」这件事,而不是逐 token 的局部波动;一条响应里只要整体似然有明显漂移,整条就被排除出梯度估计。
训练引擎(如 Megatron)与推理引擎(如 SGLang、vLLM)之间存在精度差异,实践中通常要用训练引擎重新计算旧策略下采样响应的似然。论文认为,GSPO 只用序列级似然而非 token 级似然,前者对精度差异更宽容,因此有可能直接使用推理引擎返回的似然,省掉训练引擎的重算;这在 partial rollout、多轮 RL 和训练-推理分离的框架里尤其有价值(§5.4)。
但论文没有给出精度误差、重算耗时或端到端吞吐的测量,也没有报告 GPU 小时、显存或墙钟时间。§5.4 是一段方向性论证,不是已量化的工程结果。推断(依据:§5.4 全文只写 intuitively / makes it possible,未给实验或数字)。
按 Eq.5–Eq.12 与 §5.3 重绘的对比示意;论文本身没有架构图。
先分清论文「展示了什么」与「量化了什么」,再看裁剪比例的反直觉观察。
Figure 1 是 Qwen3-30B-A3B-Base 冷启动模型在 AIME'24、LiveCodeBench、CodeForces 上的训练曲线。论文的文字结论是:GSPO 全程稳定;增加训练计算、定期更新 query set、延长生成长度都能继续带来提升;在相同训练计算与相同 query 消耗下,GSPO 的训练准确率与 benchmark 表现都好于 GRPO(§5.1)。论文没有在正文给出这些曲线的最终数值,也没有结果表。
Figure 2 是两者在 RL 训练期间平均裁剪比例的柱状图(Figure 2 caption;PDF p.5),GSPO / GRPO 柱标分别为 0.15 / 0.0013。§5.2 正文只给了一个量级描述:GSPO 与 GRPO 的裁剪比例相差两个数量级,而且调整裁剪范围不会改变这个量级差异;GSPO 裁掉更多 token、实际用于训练的 token 更少,却仍然有更高的训练效率(§5.2)。作者把这称为反直觉观察,并据此论证 GRPO 的 token 级梯度估计「噪声大、样本利用效率低」。
Figure 3 是 GRPO 在 MoE 上的消融:不开 Routing Replay 时训练无法正常收敛(Figure 3 橙线持续下滑),开启后才能正常收敛。结合 Figure 1 里 GSPO 没有使用 Routing Replay 也能稳定训练,论文得出 GSPO 从根本上解决了 MoE 专家激活波动问题的结论(§5.3)。
| 主张 | 证据 | 原文给出的量化 |
|---|---|---|
| GSPO 训练更稳、效率更高 | Figure 1、§5.1 | 曲线;正文未给最终分数 |
| GSPO 裁掉的 token 比例高两个数量级 | Figure 2、§5.2 | 「difference of two orders of magnitude」;正文无精确值;Figure 2 柱标 0.15 / 0.0013 |
| GRPO 的 MoE 训练依赖 Routing Replay | Figure 3、§5.3 | 曲线;正文称 essential |
| GSPO 不需要 Routing Replay | Figure 1、§5.3 | 文字声明;Figure 1 未使用该策略 |
读图时容易误读:「AIME'24 约 75 分、GRPO 约 70 分」「CodeForces Elo 1900+ / 1800–1900」不是正文数值,而是从 Figure 1 曲线估读的;「裁剪比例 15% / 0.13%」来自 Figure 2 柱标(0.15 / 0.0013),不是估读。页面不把这些值写成论文结论;正文可核对的量级表述是「两个数量级」,Figure 2 柱标也可核对。推断(依据:v2 没有结果表,§5.1/§5.2 正文只给训练曲线与量级描述;Figure 2 柱标给出 0.15 / 0.0013)。
论文还把 GSPO 用到了最新 Qwen3 模型的 RL 训练,并称这些优点「contributed to the remarkable improvements in the latest Qwen3 models」(摘要、§5.1)。这是作者的自述,不是受控实验:论文未报告 Qwen3 与「不用 GSPO」的对照,也未拆分 GSPO 与其他训练改动的贡献。推断(依据:摘要只有一句归因,§5.1 也没有消融或对照)。
论文自己承认的边界,加上从实验设置能看到的限制。
实验只用一个冷启动的 Qwen3-30B-A3B-Base,对照只有 GRPO;论文未报告 dense 模型、其他规模或其他 MoE 配置,也未报告与 PPO、DPO 或其他 RL 算法的直接比较。因此「GSPO 比 GRPO 更稳」有证据,「GSPO 是通用最优 RL 算法」没有证据(§5.1)。推断
三个 benchmark 都是有明确正确答案的推理任务:AIME'24(数学)、LiveCodeBench(代码)、CodeForces(竞赛编程)。论文未报告开放写作、主观对话、多轮交互等奖励更模糊的任务。GSPO-token 虽然是针对多轮 RL 等需要更细优势分配的场景提出的接口,但论文没有跑任何多轮实验(§4.3、§5.1)。
GSPO 的裁剪范围固定为 3e-4 / 4e-4,论文未报告敏感性分析;GRPO 的 0.2 / 0.27 被称为「仔细调参」后的值,但论文也未报告调参过程或方差。正文未报告误差带、seed 数或显著性检验,因此不能从图里读出稳定的置信区间(§5.1)。推断
§5.4 说 GSPO 的序列级似然对训练 / 推理引擎的精度差异更宽容,可能省掉重算;但论文未报告精度误差、重算耗时、吞吐或显存数据;Routing Replay 被去掉后省下多少内存与通信,论文也未量化。这些都是方向性判断,不是测量结果(§5.3、§5.4)。
什么时候别用:如果奖励不是「一条响应一个标量」,而是需要细粒度 credit assignment(例如多轮工具调用里每一步都该单独评价),GSPO 的序列级比率会把整条响应绑在一起;论文给出的 GSPO-token 只是接口,没有验证。反过来,如果任务短、模型密集、训练稳定,token 级噪声可能不是主要矛盾,GSPO 的收益也未必值得改动训练栈。推断(依据:论文只在长响应、MoE、可验证奖励的设置里报告收益,未覆盖上述场景)。