GSPO:回答级归一化概率比与统一裁剪#

进阶5 分钟阅读查看源文件 ↗

TL;DR#

本页内容7 个部分

GSPO:几何平均 ratio 与回答级裁剪

1. 回答级评分与逐 token 裁剪#

假设一条正优势回答只有两个 token,current/old 概率比分别为 1.51.5 和 0.80.8。采用 0.20.2 的裁剪宽度时,GRPO 的第一个任务项已进入常数分支,第二个却没有。若整条回答只得到一个任务评分,是否也可以让两个位置共享裁剪判定?

GRPO 给同一回答的所有 token 相同的 advantage,却分别计算 ratio 和裁剪条件。因此,同一条回答里,部分位置的任务项可能已进入常数分支,而其他位置仍产生任务梯度。GSPO 将裁剪判定统一到回答级。

2. 回答级权重与裁剪目标#

GSPO(Group Sequence Policy Optimization)先计算一条回答内 token ratio 的几何平均,再对整条回答裁剪。所有 token 共享回答级权重与裁剪条件,但各自的 log 概率梯度仍不同。[1]

2.1 回答级归一化概率比的定义#

固定问题 qq,先看旧策略 πold\pi_{\mathrm{old}} 生成的一条回答 yiy_i。它含 TiT_i 个有效生成 token,计入终止 token,排除 prompt 和 padding。

用 πθ\pi_\theta 表示正在更新的策略,相同前缀下的 token ratio 是 ri,t=πθ(yi,t∣q,yi,<t)/πold(yi,t∣q,yi,<t)r_{i,t}=\pi_\theta(y_{i,t}\mid q,y_{i,<t})/\pi_{\mathrm{old}}(y_{i,t}\mid q,y_{i,<t})。完整回答的概率比为 ∏tri,t\prod_t r_{i,t};GSPO 对它取 TiT_i 次方根:

si(θ)=(πθ(yi∣q)πold(yi∣q))1/Ti=exp⁡ ⁣(1Ti∑t=1Tilog⁡ri,t).s_i(\theta)=\left(\frac{\pi_\theta(y_i\mid q)}{\pi_{\mathrm{old}}(y_i\mid q)}\right)^{1/T_i}=\exp\!\left(\frac1{T_i}\sum_{t=1}^{T_i}\log r_{i,t}\right).

sis_i 是 token ratio 的几何平均。计算时,先将逐 token log-ratio 之和除以回答长度,再取指数。[1]

2.2 两个 token 的回答级裁剪计算#

固定这条回答的优势为 A^=1\hat A=1,手算取 r1=1.5r_1=1.5、r2=0.8r_2=0.8,统一用 ϵ=0.2\epsilon=0.2 方便比较。这里的裁剪宽度仅供手算,实际训练需另选。

完整回答的概率比为 完整回答概率比=1.5×0.8=1.2\text{完整回答概率比}=1.5\times0.8=1.2,GSPO 的归一化概率比则为 s=1.2≈1.0954s=\sqrt{1.2}\approx1.0954,仍在区间内。因此整条回答的目标为 1.09541.0954。

逐 token clipping 的目标则为 逐 token 裁剪目标=(1.2+0.8)/2=1\text{逐 token 裁剪目标}=(1.2+0.8)/2=1。第一个 token 的任务项已进入裁剪常数分支,第二个仍有任务梯度。两种目标的取值和裁剪位置都不同。

若改为 r1=1.5r_1=1.5、r2=1.2r_2=1.2,则 s=1.8≈1.3416>1.2s=\sqrt{1.8}\approx1.3416>1.2,该正 advantage 回答的任务项整体进入常数分支。GSPO 的裁剪判定依据回答的平均 log-ratio,而非分别判断每个 token 的变化幅度。

2.3 对整条回答构造裁剪目标#

对同一个问题,old 独立生成 K>1K>1 条回答,任务评分为 RiR_i。沿用 GRPO 的组内权重 A^i=(Ri−Rˉ)/(σR+δ)\hat A_i=(R_i-\bar R)/(\sigma_R+\delta),其中 Rˉ\bar R、σR\sigma_R 是组均值与总体标准差,δ>0\delta>0 防止除零。令 0<ϵ<10<\epsilon<1 为回答级裁剪宽度,一组回答的经验目标为:

JGSPO(θ)=1K∑i=1Kmin⁡ ⁣(siA^i,clip⁡(si,1−ϵ,1+ϵ)A^i).J_{\mathrm{GSPO}}(\theta)=\frac1K\sum_{i=1}^{K}\min\!\left(s_i\hat A_i,\operatorname{clip}(s_i,1-\epsilon,1+\epsilon)\hat A_i\right).

该经验目标需要最大化。奖励、组统计和 old 固定,梯度通过 current 传播。这里的 GSPO 目标不含独立 reference KL;若另加,应说明配置。[1]

正 advantage 且 si>1+ϵs_i>1+\epsilon 时,该回答的任务项进入常数分支;负 advantage 且 si<1−ϵs_i<1-\epsilon 时也进入常数分支。该判定作用于整条回答。

沿不利方向改变概率比时,目标保留原始项,越过另一侧阈值后仍可产生任务梯度。裁剪目标也不强制概率比保持在区间内。

3. 归一化概率比的梯度分配#

3.1 回答级目标的逐 token 梯度#

把第 ii 条回答计入组平均后的目标项记为 JiJ_i。在未进入裁剪常数分支时,∇θsi=si∇θlog⁡si\nabla_\theta s_i=s_i\nabla_\theta\log s_i,而 ∇θlog⁡si=(1/Ti)∑t∇θlog⁡πθ(yi,t∣q,yi,<t)\nabla_\theta\log s_i=(1/T_i)\sum_t\nabla_\theta\log\pi_\theta(y_{i,t}\mid q,y_{i,<t}),所以这一回答贡献:

∇θJi=siA^iKTi∑t=1Ti∇θlog⁡πθ(yi,t∣q,yi,<t).\nabla_\theta J_i=\frac{s_i\hat A_i}{KT_i}\sum_{t=1}^{T_i}\nabla_\theta\log\pi_\theta(y_{i,t}\mid q,y_{i,<t}).

同一回答的 token 共享 siA^i/(KTi)s_i\hat A_i/(KT_i)。这与 GRPO 按各自的 ri,tr_{i,t} 分配权重不同。共享系数不表示 token 梯度相同;它们仍对应不同条件概率。[1]

这里的 1/Ti1/T_i 来自几何平均的求导,不是在目标之外又除了一次长度。直接对 sis_i 求导时,已经包含这个因子。

3.2 两个 token 的梯度系数#

在 r1=1.5r_1=1.5、r2=0.8r_2=0.8、A^=1\hat A=1、ϵ=0.2\epsilon=0.2 的手算设定下,GSPO 的 s≈1.0954s\approx1.0954。省去共同的组平均因子 1/K1/K,两个 token 的 log 概率梯度各乘 s/2≈0.5477s/2\approx0.5477。

逐 token 裁剪时,第一个位置的任务梯度为零,第二个位置的系数为 第二个位置的梯度系数=0.8/2=0.4\text{第二个位置的梯度系数}=0.8/2=0.4。GSPO 在这个例子中保留两个位置的任务梯度,并让它们共用系数;各位置的梯度向量仍可不同。

因此执行时先缓存 old 的逐 token log 概率;每次更新用 current 重算 log 概率,相减后在回答内取平均,指数化得到 sis_i,最后按回答裁剪和平均。按照本文的回答等权目标,计算 sis_i 后不再额外将回答目标除以回答长度。

4. 方法比较与长度归一化的局限性#

4.1 与 GRPO、DAPO 比较#

DAPO 保留 token ratio,调整裁剪上下界、采样和聚合;GSPO 改的是ratio 的定义与裁剪单位。

此外,sis_i 已做长度归一化,其数值尺度与 token ratio 不同。裁剪宽度需要按这个尺度设置,不宜直接沿用逐 token PPO 的阈值。长度通过几何平均的导数引入 1/Ti1/T_i,不同聚合权重的比较见 Loss 平均。

4.2 长度归一化概率比的校正限制#

当 old 覆盖 current 的支持集且相关期望存在时,完整回答概率比可用作精确的换分布权重。取长度次方根一般会改变这种校正关系;回答只有一个 token 时,两者相同。 GSPO 使用长度归一化概率比构造替代目标,不能据此声称它无偏恢复了 current 下的完整回答期望。

GSPO-token 可在共享回答级裁剪判定的同时,使用逐 token 的不同梯度权重。

参考资料#

  1. Group Sequence Policy Optimization(2025). §4.1–4.3:回答权重、梯度与 GSPO-token。

补充推导#

GSPO-token 与基本 GSPO 的数值及梯度对应

若同一回答中不同位置需要不同权重,可以使用 GSPO-token。用 stop-gradient(停止梯度,记为 sg⁡\operatorname{sg})保留数值、截断对应的求导路径,并令:

si,t=sg⁡(si)πθ(yi,t∣q,yi,<t)sg⁡(πθ(yi,t∣q,yi,<t)).s_{i,t}=\operatorname{sg}(s_i)\frac{\pi_\theta(y_{i,t}\mid q,y_{i,<t})}{\operatorname{sg}(\pi_\theta(y_{i,t}\mid q,y_{i,<t}))}.

它的数值是 sis_i,导数却是 si∇log⁡πθ(yi,t∣q,yi,<t)s_i\nabla\log\pi_\theta(y_{i,t}\mid q,y_{i,<t})。把它放进逐回答、逐 token 平均的 clipped 目标,就可以使用不同的 A^i,t\hat A_{i,t}。

当回答内所有 A^i,t=A^i\hat A_{i,t}=\hat A_i 时,它与基本 GSPO 的目标数值、裁剪条件和梯度一致;优势在于可进一步细分 token 信号。[1]