GSPO
Paper · arXiv 2025 · LLM-RL

GSPO:把重要性采样从 token 级搬回序列级

GRPO 把同一个组内归一化优势分给整条响应,却仍按 token 计算重要性比率;论文认为这一步既没有完成分布校正,又把高方差噪声带进了长序列。 GSPO 改成用整条响应的似然比 si(θ) 做一次裁剪,让一条响应里的所有 token 共享同一权重。 代价是裁剪范围要缩到 3e-4 / 4e-4 量级,实验也只覆盖一个 MoE 底座的数学与代码任务。

Chujie Zheng, Shixuan Liu, Mingze Li, Xiong-Hui Chen, Bowen Yu 等 · Qwen Team, Alibaba arXiv 2507.18071v2 ↗ 博客笔记 ↗
TL;DR · 30 秒抓住核心

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 的最终分数,论文没有列表,页面也不替它补。

3e-4 / 4e-4
GSPO 的左 / 右裁剪范围
GRPO 是 0.2 / 0.27(§5.1)
10%
48 层 Qwen3-30B-A3B-Base
每次梯度更新后专家激活变化比例
2个数量级
GSPO 与 GRPO 裁掉的 token 比例差距
Figure 2 柱标 0.15 / 0.0013;正文未给精确值
01

GRPO 的毛病不在裁剪太松,而在被裁剪的对象错了

先建立两个前提:大规模 RL 首先要稳;token 级重要性采样在长序列上会累积噪声。

论文把稳定训练列为扩大 RL 计算投入的首要前提。作者观察到,以 GRPO 为代表的现有算法在训练超大模型时会出现严重的稳定性问题,甚至导致灾难性且不可逆的模型崩溃;崩溃发生后,回退到旧 checkpoint、重新调裁剪范围、延长生成长度或更换 query 都不一定救得回来(§1、§3)。

论文给出的根因不是裁剪范围没调好,而是 GRPO 的重要性采样权重用错了层级。重要性采样的目标是估计目标分布下的期望,它依赖从行为分布抽取多个样本后对权重求平均:

Ez~πtar[ f(z) ] = Ez~πbeh[ (πtar(z) / πbeh(z)) · f(z) ]
Eq.4 · 重要性采样需要 N ≫ 1 个来自行为分布的样本,权重才能完成分布校正(§3)

GRPO 却在每个 token 位置 t 上使用 πθ(yi,t|x,yi,<t) / πold(yi,t|x,yi,<t)(πold 即论文的 πθold)。这个权重只基于下一 token 分布的一次采样 yi,t,没有多样本平均,因此没有完成它声称要做的分布校正;相反,它把高方差噪声带进梯度。序列越长,噪声累积越多,再被裁剪机制放大,最终可能把训练推向崩溃(§3)。

核心判断

奖励是序列级,优化却停在 token 级

论文把这一点上升为设计原则:优化目标的单元应该与奖励的单元匹配。既然 verifier 只对整条回答给一个分数,那么在 token 级做 off-policy 校正就没有对应的奖励粒度。GSPO 的全部改动都从这条原则推出(§3、§4.1)。

这也解释了为什么问题在长响应任务上更尖锐:token 数越多,单样本权重的噪声累积越久;模型越大、越稀疏,梯度里的小偏差越容易被放大。推断(依据:§3 明确写噪声随 response length 累积,并被 clipping 放大;§5.3 补充 MoE 稀疏激活会让 token 比率波动更大)。

02

PPO 甩掉 value model,GRPO 又引入 token 级噪声;MoE 还要额外补丁

两路对照:PPO 的代价是 value model,GRPO 的代价是 token 级比率;MoE 把后者的代价放大。

PPO

用 value model 换稳定性

PPO 用旧策略采样,通过裁剪把更新限制在旧策略附近。每个 token 的优势 Ât 由另一个 value model 估计(Eq.1)。

代价:value model 通常与策略模型体量相近,带来可观的内存与计算负担;算法效果还依赖 value 估计是否可靠,而把可靠的价值模型扩展到更长响应、更复杂任务本身就更难(§2)。

GRPO

用组内相对优势绕开 value model

GRPO 对同一个 query 采样 G 条响应,用组内归一化的奖励作为每条响应的优势,所有 token 共享这个优势(Eq.2–3)。这样就不需要 value model。

代价:重要性比率仍然是 token 级的 wi,t。论文认为这正是 §3 所说的高方差噪声来源;在 MoE 模型上,专家激活波动会让这些 token 比率进一步失真(§5.3)。

MoE 把 token 级比率的问题放大

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 级路由保持一致。

03

一条响应只算一个比率、只裁一次,所有 token 共享同一权重

三个公式:序列级目标、组内优势、序列似然比;再用梯度分析看清它和 GRPO 的差别。

目标函数:把 min/clip 从 token 移到响应

GSPO 保留 GRPO 的组采样与组内相对优势,只把优化对象从「每个 token 的比率」换成「整条响应的比率」:

JGSPO(θ) = Ex~D, {yi}~πold[ (1/G) Σi=1G min( si(θ) Âi, clip(si(θ), 1−εlow, 1+εhigh) Âi ) ]
Eq.5 · GSPO 目标:每条响应一个比率 si(θ),整条响应一起裁剪;原文以 1±ε 记,§5.1 给出左右不同值,本页用 εlow/εhigh 表示
Âi = ( r(x,yi) − mean({r(x,yi)}i=1G) ) / std({r(x,yi)}i=1G)
Eq.6 · 组内归一化优势;同一条响应里的所有 token 共享 Âi
si(θ) = ( πθ(yi|x) / πold(yi|x) )1/|yi| = exp( (1/|yi|) Σt=1|yi| log( πθ(yi,t|x,yi,<t) / πold(yi,t|x,yi,<t) ) )
Eq.7 · 序列重要性比率:token 似然比的几何平均;指数 1/|yi| 是长度归一化

长度归一化不是为了好看。论文解释:如果不除以 |yi|,少数 token 的似然变化就能让整条序列的比率剧烈波动;不同长度响应也会需要不同的裁剪范围。归一化后,si 被压到统一的数值范围,裁剪范围才能对所有长度共用(§4.1)。论文也指出:正因为比率定义不同,两者通常相差数量级;因此两组数值不宜直接横向比较。推断

梯度分析:GRPO 每个 token 一个权重,GSPO 整条响应一个权重

忽略裁剪,GSPO 目标的梯度是:

∇θJGSPO(θ) = E[ (1/G) Σi=1G si(θ) Âi · (1/|yi|) Σt=1|yi| ∇θ log πθ(yi,t|x,yi,<t) ]
Eq.10 · 同一条响应内,所有 token 的梯度共享系数 si(θ) Âi / |yi|

作为对照,GRPO 的梯度是:

∇θJGRPO(θ) = E[ (1/G) Σi=1G Âi · (1/|yi|) Σt=1|yi| wi,t(θ) ∇θ log πθ(yi,t|x,yi,<t) ]
Eq.12 · 每个 token 有自己的 wi,t(θ),权重在序列内不相等

论文进一步指出,GRPO 的这些不等权重不是可以忽略的小量:当 Âi > 0 时它们落在 (0, 1+ε],当 Âi < 0 时落在 [1−ε, +∞),并且会随训练累积,产生不可预测的后果。GSPO 则把同一条响应的所有 token 等权处理,直接消掉了这个不稳定性来源(§4.2)。

GSPO-token:序列级裁剪 + token 级优势

如果未来需要在多轮 RL 里做更细的优势分配,论文给出一个变体:保留 si(θ) 的序列级裁剪,但允许每个 token 有自己的 Âi,t。它把比率写成:

si,t(θ) = sg[ si(θ) ] · πθ(yi,t|x,yi,<t) / sg[ πθ(yi,t|x,yi,<t) ]
Eq.14 · sg[·] 表示只取数值、停止梯度(PyTorch 的 detach);比率数值上等于 si(θ)

因为 πθ / sg[πθ] 的数值为 1,si,t 与 si 数值相同。论文证明:当所有 token 的 advantage 都设为 Âi 时,GSPO-token 与 GSPO 在目标、裁剪条件和理论梯度上完全相同;区别只在于前者允许逐 token 调整优势(Eq.13–17、§4.3)。论文没有报告 GSPO-token 的实验,它只是一条可扩展的接口。

自己动手:token 波动 vs 序列比率

下面是一个简化模拟:固定 8 个 token,令第 t 个 token 的 log 重要性比率为 δ + σ·(+1,−1,+1,−1,…)。因此 token 比率随 σ 上下波动,而序列比率 s = exp(δ) 只由整体漂移决定。两个裁剪阈值都取自 §5.1。这里的「裁掉」只按比率越界计数,不区分 advantage 符号;advantage 符号与 min 的交互未覆盖。

GRPO · token 级裁剪 [0.8, 1.27]
—
GSPO · 序列裁剪 [0.9997, 1.0004]
—
简化模拟 · 阈值来自 §5.1
—

注:1.4918 / 0.6703 / 1.2214 / 1.3499 / 1.0000 与 8/8、4/8 是页面模拟输出,不是论文派生数字,已由下方手算块核对。

手算对账:两组参数 → 裁剪结果与交互读数逐位一致(保留 4 位小数)

组 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 噪声。

04

没有额外 value model,但裁剪范围要缩到万分之一量级

工程账本:底座、采样协议、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)。

§5.1 文字设置的整理(原文没有结果表;下表只汇总训练与评测协议)
项目设置
底座Qwen3-30B-A3B-Base 冷启动模型
AIME'24平均 Pass@1,32 次采样
LiveCodeBench202410–202502,平均 Pass@1,8 次采样
CodeForcesElo 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 的局部波动;一条响应里只要整体似然有明显漂移,整条就被排除出梯度估计。

§5.4 的工程承诺还停留在「可能」

训练引擎(如 Megatron)与推理引擎(如 SGLang、vLLM)之间存在精度差异,实践中通常要用训练引擎重新计算旧策略下采样响应的似然。论文认为,GSPO 只用序列级似然而非 token 级似然,前者对精度差异更宽容,因此有可能直接使用推理引擎返回的似然,省掉训练引擎的重算;这在 partial rollout、多轮 RL 和训练-推理分离的框架里尤其有价值(§5.4)。

但论文没有给出精度误差、重算耗时或端到端吞吐的测量,也没有报告 GPU 小时、显存或墙钟时间。§5.4 是一段方向性论证,不是已量化的工程结果。推断(依据:§5.4 全文只写 intuitively / makes it possible,未给实验或数字)。

05

同一个 rollout,两条梯度路径:逐 token 加权 vs 整条响应加权

按 Eq.5–Eq.12 与 §5.3 重绘的对比示意;论文本身没有架构图。

Rollout:G 条响应 来自 π_old(·|x) reward r(x, y_i) verifier 给整条响应打分 组内归一化优势 Â_i Eq.6;同响应所有 token 共享 GRPO · TOKEN-LEVEL w_i,t = πθ(y_i,t|·) / πold(y_i,t|·) 每个 token 一次采样 → 一个权重 逐 token 裁剪 [0.8, 1.27] 同一序列里有的 token 留、有的裁 梯度:每个 token 权重不同 Eq.12 · w_i,t 在序列内不相等 高方差;长序列累积 论文认为这是崩溃来源(§3) GSPO · SEQUENCE-LEVEL s_i = (πθ(y_i|x) / πold(y_i|x))^(1/|y_i|) 整条响应一个比率;长度归一化 整条响应裁剪 [0.9997, 1.0004] 一条响应只有留 / 裁两个结果 梯度:所有 token 共享 s_i Â_i / |y_i| Eq.10 · 序列内权重相等 一条响应一个权重;噪声源被移除 论文报告训练更稳(§5.1) MoE(48 层 Qwen3-30B-A3B-Base):每次更新约 10% 专家激活变化 GRPO 依赖 Routing Replay 才能正常收敛;GSPO 不需要(§5.3,Figure 1/3)
按 Eq.5–Eq.12 与 §5.3 文字重绘的对比示意:上排共享 rollout、reward 与组内优势,下排分叉到 token 级与序列级两条梯度路径。
展开说明 ▸
  • 覆盖:Eq.5–Eq.7 的序列级目标、优势与比率;Eq.10 与 Eq.12 的梯度加权差异;§5.3 的 Routing Replay 对比。
  • 未覆盖:论文没有给出架构图;本图不包含 rollout 引擎与 verifier 的实现、GSPO-token 分支、分布式训练与精度重算细节,也不表示真实的张量流。
  • 因此这是页面按公式重绘的示意,不是原文插图的还原。箭头表示概念上的依赖关系,不是完整的控制流。
06

三张图支撑三个结论,但没有一张结果表

先分清论文「展示了什么」与「量化了什么」,再看裁剪比例的反直觉观察。

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 ReplayFigure 3、§5.3曲线;正文称 essential
GSPO 不需要 Routing ReplayFigure 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 也没有消融或对照)。

07

它解决的是「序列级奖励下的稳定性」,不是通用 RL 的全部问题

论文自己承认的边界,加上从实验设置能看到的限制。

边界一

单一底座、单一算法对照

实验只用一个冷启动的 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、可验证奖励的设置里报告收益,未覆盖上述场景)。