SAPO 阅读笔记:平滑策略更新的推导、实现与边界

笔记日期/作者: 2026-09-15 / Zhongzhu Zhou
阅读论文: Soft Adaptive Policy Optimization(SAPO)
论文作者: Chang Gao, Chujie Zheng, Xiong-Hui Chen, Kai Dang, Shixuan Liu, Bowen Yu, An Yang, Shuai Bai, Jingren Zhou, Junyang Lin
arXiv: 2511.20347v2,2025 年 12 月 1 日修订

1. 这次阅读要解决什么问题

我把 SAPO 理解为一个非常具体的训练问题:同一批回答已经生成出来,而训练模型又更新了几次,哪些 token 的学习信号还值得相信?这个问题并不只出现在复杂的异步系统里。只要一批 rollout 被拆成几个 minibatch,后面的更新就可能在使用旧策略生成的数据。

SAPO 用一个平滑函数替换部分硬裁剪行为。真正需要看清楚的却不是函数外形,而是它对梯度做了什么。把某个权重乘到已有 loss 上,再让自动微分穿过这个权重,通常会得到另一个算法。因此我会先把公式逐步求导,再讨论代码应该如何写。

另一条主线是“序列一致性”。若同一回答中各 token 的重要性比值都很接近,它们的平均门控可以接近一个序列级门控。但完整梯度还包含方向不同、大小不同的参数向量。标量权重接近,不足以单独证明参数更新接近。这也是本笔记独立分析的重点。

原论文包含参考文献共 9 页。这里增加的篇幅用于前置知识、手算例子、实现检查和批判性讨论。图 1 至图 6 为解释性示意或确定性公式计算,图 7 至图 9 裁自论文实验图。本轮没有训练模型,也没有把原图读数包装成精确的复现实验结果。

Figure 1(原创示意):软门控在语言模型强化学习训练流程中的位置。

这篇论文发布于 2025 年,本次是补齐现有阅读资料中的缺口,不将它描述为当天新发表的论文。已有 GRPO、GSPO 背景的读者可以从第 5 节开始;准备实现算法时,应把归一化、梯度公式和数值检查一起读。

2. 前置知识:把语言模型看成策略

在一个固定的 prompt 和已生成前缀下,语言模型给下一个 token 分配概率。状态是“prompt 加前缀”,动作是“选择哪个 token”。设回答为 y=(y1,…,yT)y=(y_1,\ldots,y_T),则链式法则给出

πθ(y∣q)=∏t=1Tπθ(yt∣q,y<t).\pi_\theta(y\mid q)=\prod_{t=1}^{T}\pi_\theta(y_t\mid q,y_{<t}).

对数把乘法变成加法:

log⁡πθ(y∣q)=∑t=1Tlog⁡πθ(yt∣q,y<t).\log\pi_\theta(y\mid q)=\sum_{t=1}^{T}\log\pi_\theta(y_t\mid q,y_{<t}).

这里的 ∇θlog⁡πθ(yt∣q,y<t)\nabla_\theta\log\pi_\theta(y_t\mid q,y_{<t}) 是一个参数空间中的向量。它告诉我们,沿什么方向改变参数可以局部提高这个已采样 token 的概率。不要把它误当成一个标量“置信度”;不同 token 的向量可能指向相反方向。

设奖励 R(y)R(y) 在本次更新中是固定标签,利用 ∇p=p∇log⁡p\nabla p=p\nabla\log p,可得到经典的似然比求导:

∇θEy∼πθ[R(y)]=∑yR(y)∇θπθ(y)=Ey∼πθ[R(y)∇θlog⁡πθ(y)].\nabla_\theta\mathbb{E}_{y\sim\pi_\theta}[R(y)] =\sum_yR(y)\nabla_\theta\pi_\theta(y) =\mathbb{E}_{y\sim\pi_\theta}[R(y)\nabla_\theta\log\pi_\theta(y)].

推导隐含了求和与求导可以交换的常规条件。如果奖励自身还通过可微计算依赖 θ\theta,则需另加奖励的导数。在通常的回答采样与外部验证器流程中,奖励被当成固定值。

减去仅依赖 prompt 的理想基线,不改变理想 on-policy 期望,因为概率之和为一,score 的期望为零。不过,从同一小组回答中估计均值,再除以同组标准差,会改变有限样本估计器的性质。工程上的组内归一化不能直接继承所有关于理想无偏基线的结论。

3. 组内优势:先把数据与归一化说清楚

对同一个问题生成 GG 个回答,奖励记作 R1,…,RGR_1,\ldots,R_G。一个带数值保护的实现可以写成

A^i=Ri−RˉsR+δ,Rˉ=1G∑iRi,sR2=1G∑i(Ri−Rˉ)2.\widehat A_i=\frac{R_i-\bar R}{s_R+\delta},\qquad \bar R=\frac1G\sum_iR_i,\qquad s_R^2=\frac1G\sum_i(R_i-\bar R)^2.

δ>0\delta>0 是这里说明工程实现时加入的保护项,不表示论文指定了某个具体常数。若奖励是 (0,1,1,0)(0,1,1,0),均值和总体标准差都为 0.50.5。忽略保护项,优势就是 (−1,1,1,−1)(-1,1,1,-1)。

一个回答内所有 token 共享该回答的优势,因此“正优势回答”不等于“每个推理步骤都正确”。算法并未提供细粒度的过程信用分配。若整组奖励相同,中心化奖励全为零,应得到零学习信号,而不是除零产生 NaN。

回答长度也会影响目标。令 mi,tm_{i,t} 是回答有效 token 的掩码,Li=∑tmi,tL_i=\sum_t m_{i,t},先对每个回答平均再对组平均:

J=1G∑i∑tmi,tℓi,tLi.J=\frac1G\sum_i\frac{\sum_t m_{i,t}\ell_{i,t}}{L_i}.

如果两条回答分别长 10 和 100 个 token,这种写法给两条回答各一半权重;把所有 token 混在一起平均,则长回答的权重约为短回答的十倍。二者都可能有合理用途,但比较不同算法时必须明确使用哪一种。

算法 1:准备一次组内训练数据。

  1. 冻结行为策略,对每个问题生成 GG 条完整回答。
  2. 保存已采样 token、回答掩码,以及生成时的行为策略 log probability。
  3. 使用事先确定的验证器评分,明确超长截断、格式错误和无效答案怎样计分。
  4. 计算组内均值、标准差和固定优势,更新模型时不让梯度穿过这些量。
  5. 对空回答作显式处理;相同奖励组保留零优势语义。
  6. loss 不包含 prompt 和 padding,并记录标准差与长度归一化的具体约定。

使用 critic 可以提供不同的方差与信用分配取舍,却增加一个要训练的模型。组内优势的优点是简单,边界是奖励缺少差异时整组几乎没有信号。更换门控函数无法消除这个边界。

4. 比值是什么,硬裁剪又裁掉了什么

在相同的已采样前缀上,记行为概率为 btb_t、当前模型概率为 ptp_t:

rt=ptbt=exp⁡(log⁡pt−log⁡bt).r_t=\frac{p_t}{b_t}=\exp(\log p_t-\log b_t).

分子分母必须对应同一 token、同一前缀。若重新生成一个新前缀再计算分子,得到的就不是这里讨论的比值。行为 log probability 也必须固定,不能在每个 minibatch 中用最新模型覆盖,否则很容易把所有比值错误地变成一。

例如从 bt=0.10b_t=0.10 变为 pt=0.12p_t=0.12,比值为 1.21.2。比值表示相对改变,不是概率本身。很小的行为概率会让比值对绝对概率的小变化敏感;在 log 空间先相减能改善算术,但非常陈旧的数据仍可能使指数溢出。

考虑常见的裁剪目标:

L(r,A)=min⁡{rA,clip⁡(r,1−ϵ,1+ϵ)A}.L(r,A)=\min\{rA,\operatorname{clip}(r,1-\epsilon,1+\epsilon)A\}.

当 A>0A>0,乘法不改变大小关系,目标等于 Amin⁡(r,1+ϵ)A\min(r,1+\epsilon);当 A<0A<0,大小关系反转,目标等于 Amax⁡(r,1−ϵ)A\max(r,1-\epsilon)。避开恰好位于边界的点,求导得到

∂L∂r={A,A>0, r<1+ϵ,0,A>0, r>1+ϵ,A,A<0, r>1−ϵ,0,A<0, r<1−ϵ.\frac{\partial L}{\partial r}= \begin{cases} A,&A>0,\ r<1+\epsilon,\\ 0,&A>0,\ r>1+\epsilon,\\ A,&A<0,\ r>1-\epsilon,\\ 0,&A<0,\ r<1-\epsilon. \end{cases}

所以硬裁剪有方向性。设 ϵ=0.2\epsilon=0.2,正优势 token 即使 r=0.5r=0.5 仍有梯度,负优势 token 即使 r=2r=2 也仍有梯度。不能简单说“跑出双侧区间就全部没有梯度”。有利方向上的过度更新会饱和,变差方向上的纠正信号仍被保留。

这意味着 SAPO 的差异不只是把不连续变连续:它还会在两个方向都衰减偏离中心的信号。要理解收益来自哪里,就需要把“平滑性”和“是否抑制相反方向的纠正更新”分开做消融。

5. 把 SAPO 的软门控逐步求导

定义 sigmoid 为 σ(u)=1/(1+e−u)\sigma(u)=1/(1+e^{-u})。SAPO 使用的标量函数是

fτ(r)=4τσ(τ(r−1)),τ={τpos,A>0,τneg,A≤0.f_\tau(r)=\frac4\tau\sigma\bigl(\tau(r-1)\bigr),\qquad \tau=\begin{cases}\tau_{\rm pos},&A>0,\\\tau_{\rm neg},&A\leq0.\end{cases}

优势符号决定温度,温度在求导中视作固定量。虽然名称叫 temperature,但在这个公式里 τ\tau 越大,衰减区间越窄;它更接近平滑宽度的倒数。论文受控实验采用 τpos=1.0\tau_{\rm pos}=1.0、τneg=1.05\tau_{\rm neg}=1.05,这里不把它当成所有场景的默认最优值。

求导可以拆成三步。先令 u=τ(r−1)u=\tau(r-1);再用 σ′(u)=σ(u)(1−σ(u))\sigma'(u)=\sigma(u)(1-\sigma(u));最后把链式法则中的 τ\tau 与前面的 1/τ1/\tau 抵消:

fτ′(r)=4τσ(u)(1−σ(u))τ=4σ(u)(1−σ(u))=:wτ(r).f'_\tau(r)=\frac4\tau\sigma(u)(1-\sigma(u))\tau =4\sigma(u)(1-\sigma(u))=:w_\tau(r).

接下来处理概率比值。因为行为概率 bb 不参与求导,

∇θr=∇θpb=pb∇θlog⁡p=r∇θlog⁡p.\nabla_\theta r=\frac{\nabla_\theta p}{b} =\frac{p}{b}\nabla_\theta\log p =r\nabla_\theta\log p.

把两条链连起来,一个 token 对参数梯度的贡献是

A wτ(r) r ∇θlog⁡p.A\,w_\tau(r)\,r\,\nabla_\theta\log p.

在 r=1r=1 时,σ(0)=1/2\sigma(0)=1/2,因此 wτ(1)=1w_\tau(1)=1。无论温度是多少,该点的一阶梯度都和未裁剪的目标一致。前面的 4/τ4/\tau 不是装饰,而是保证这种局部斜率匹配。

Figure 2(原创公式计算):不同温度的中心化目标和导数。

图中减去了各条曲线在中心的常数 fτ(1)=2/τf_\tau(1)=2/\tau,使其容易比较。减常数不改变梯度;若不中心化,温度带来的纵向平移容易造成目标变化很大的错觉。观察优化行为时,应先看导数,而不是单看 loss 的绝对数值。

6. 门控权重不等于完整更新系数

ww 的范围是零到一,但乘在 score 向量前的完整系数是 c(r)=rw(r)c(r)=rw(r)。例如 r=2r=2、τ=1\tau=1 时,w≈0.7864w\approx0.7864,而 c≈1.5729c\approx1.5729。它相对原始的重要性加权更新被削弱,却仍比中心处的系数一更大。

在 r=4r=4 时,这两个量约为 0.18070.1807 和 0.72280.7228;在 r=0.5r=0.5 时约为 0.94000.9400 和 0.47000.4700。小比值处更新变弱,有一部分来自比值 rr 本身,不全是门控造成的。这些数值是直接代入公式计算,属于解释性例子。

Figure 3(原创对比):正负优势下,真正乘在 score 向量前的系数;基线裁剪宽度 0.2 仅用于说明。

可以把导数改写成双曲函数:

wτ(r)=sech⁡2(τ(r−1)2).w_\tau(r)=\operatorname{sech}^{2}\left(\frac{\tau(r-1)}{2}\right).

推导方式是把 σ(u)(1−σ(u))\sigma(u)(1-\sigma(u)) 写成 1/(eu/2+e−u/2)21/(e^{u/2}+e^{-u/2})^2,再代入 cosh⁡(v)=(ev+e−v)/2\cosh(v)=(e^v+e^{-v})/2。令 d=r−1d=r-1,在中心作展开:

wτ(1+d)=1−τ2d24+O(d4).w_\tau(1+d)=1-\frac{\tau^2d^2}{4}+O(d^4).

中心附近没有一阶衰减项。因此,当比值只偏离一点点时,把温度从 1 改到 1.05,单 token 的局部权重变化很小。取 d=0.1d=0.1,二阶近似给出的差约为 0.0002560.000256。若长期训练曲线出现很大分化,可能涉及少量尾部 token、累计反馈或其他超参数相互作用,不能只用中心附近的曲线外形解释。

当 r→∞r\to\infty,系数近似 4re−τ(r−1)4r e^{-\tau(r-1)} 并趋向零;当 r→0+r\to0^+,ww 趋向有限正数,但 rwrw 仍趋向零。这没有自动给完整梯度范数设置上界,因为优势和 score 向量还可能很大,也没有显式限制新旧策略间的 KL。

KL 惩罚、梯度范数裁剪和 token 门控控制的是不同对象。KL 惩罚需要指定参考分布与惩罚系数;全局梯度裁剪在各 token 向量聚合以后才起作用;软门控则在聚合之前修改每个样本的贡献。它们可以组合,但不能互相当作同一机制的不同名字。

7. 为什么要区别对待正负优势

设词表 logit 为 zvz_v,概率为 pv=ezv/∑uezup_v=e^{z_v}/\sum_u e^{z_u},采样到的 token 为 aa。从 log⁡pa=za−log⁡∑uezu\log p_a=z_a-\log\sum_u e^{z_u} 出发,直接求导:

∂log⁡pa∂zv=1[v=a]−pv.\frac{\partial\log p_a}{\partial z_v}=\mathbf{1}[v=a]-p_v.

乘上优势以后,正优势会提高采样 token 的 logit,降低其他 token 的 logit;负优势把所有方向反转。例如概率为 (0.6,0.3,0.1)(0.6,0.3,0.1),采样第一个 token:正优势为一时,梯度为 (0.4,−0.3,−0.1)(0.4,-0.3,-0.1);负优势为负一时,为 (−0.4,0.3,0.1)(-0.4,0.3,0.1)。

Figure 4(原创计算):三个 token 的例子说明负优势把更新压力分配到哪里。

这里有一个容易被忽略的细节。未采样 token 的概率总和是 1−pa1-p_a,不随词表项数无限增长。因此“大词表”本身并不能证明负更新总范数更大。更合理的担忧是,更新压力流向了哪些替代动作、如何经过共享参数耦合,以及多步更新后会怎样累积。

我把符号不对称理解为需要实验支持的设计假设。负优势可以帮助模型减少错误答案、重复内容或奖励投机行为;如果过度削弱它,模型也可能失去纠错能力。衡量稳定性时,应同时观察模型是否还能忘掉已知错误,不能只看 loss 是否平滑。

8. 从 token 比值到序列统计量

令 zt=log⁡rtz_t=\log r_t,一个回答的长度归一化序列比值为

s=(∏t=1Trt)1/T=exp⁡(1T∑tzt),μ=log⁡s.s=\left(\prod_{t=1}^{T}r_t\right)^{1/T} =\exp\left(\frac1T\sum_tz_t\right),\qquad \mu=\log s.

相对于直接使用整条序列概率乘积,几何平均能缓解长度带来的尺度差异。但它也会掩盖抵消:(2,0.5)(2,0.5) 的几何平均为一,两个 token 却都不是 on-policy。序列统计量很有用,但不是分布失配的完整描述。

SAPO 与序列门控的联系依赖两步:比值接近一,以及回答内部 log ratio 方差小。第一步允许用 rt−1≈log⁡rt=ztr_t-1\approx\log r_t=z_t。定义

gτ(z)=sech⁡2(τz/2),V=1T∑t(zt−μ)2.g_\tau(z)=\operatorname{sech}^{2}(\tau z/2),\qquad V=\frac1T\sum_t(z_t-\mu)^2.

然后围绕均值 μ\mu 对每个 token 作二阶展开:

gτ(zt)=gτ(μ)+gτ′(μ)(zt−μ)+12gτ′′(ξt)(zt−μ)2.g_\tau(z_t)=g_\tau(\mu)+g'_\tau(\mu)(z_t-\mu) +\frac12g''_\tau(\xi_t)(z_t-\mu)^2.

对 token 平均,线性项消失,因为中心化偏差的和等于零。令 α=τ/2\alpha=\tau/2,连续求导两次得到

gτ′′(z)=α2(4sech⁡2(αz)−6sech⁡4(αz)).g''_\tau(z)=\alpha^2\bigl(4\operatorname{sech}^2(\alpha z) -6\operatorname{sech}^4(\alpha z)\bigr).

用 u=sech⁡2(αz)∈[0,1]u=\operatorname{sech}^2(\alpha z)\in[0,1] 代换,括号里成为 4u−6u24u-6u^2,其最小值为 −2-2、最大值为 2/32/3,绝对值上界为二。因此 sup⁡z∣gτ′′(z)∣=τ2/2\sup_z|g''_\tau(z)|=\tau^2/2,最终得到

∣1T∑tgτ(zt)−gτ(μ)∣≤τ24V.\left|\frac1T\sum_tg_\tau(z_t)-g_\tau(\mu)\right| \leq\frac{\tau^2}{4}V.

这条界确实有内容:它明确说明平均近似门控何时接近序列门控,而且温度也参与误差尺度。只说“方差很小”还不够,要看 τ2V\tau^2V 有多大。

同时,最开始把 r−1r-1 换成 log⁡r\log r 的误差要另算。在 ∣z∣≤d|z|\leq d 时,Taylor 余项给出 ∣ez−1−z∣≤edz2/2|e^z-1-z|\leq e^d z^2/2。当比值偏离中心较多时,不能只保留最后的方差界,却忘了前面的近似条件。

9. 平均权重接近,为什么仍不够

完整梯度并不是一组标量的平均。记 ht=∇θlog⁡pth_t=\nabla_\theta\log p_t、gt=gτ(zt)g_t=g_\tau(z_t),并令 gˉ\bar g、hˉ\bar h 分别表示 token 平均。即使先用 rt≈1r_t\approx1,两种梯度写法的差仍为

1T∑tgtht−gτ(μ)hˉ=1T∑t(gt−gˉ)ht+(gˉ−gτ(μ))hˉ.\frac1T\sum_tg_th_t-g_\tau(\mu)\bar h =\frac1T\sum_t(g_t-\bar g)h_t +(\bar g-g_\tau(\mu))\bar h.

上一节的标量 Taylor 界只控制第二项。第一项像一个权重与梯度方向之间的协方差。若不同 token 的参数梯度很大或互相抵消,平均权重的相似性不足以控制整体更新方向。

一个保守但有效的补充是 Cauchy-Schwarz 界:

∥1T∑t(gt−gˉ)ht∥≤1T∑t(gt−gˉ)21T∑t∥ht∥2.\left\|\frac1T\sum_t(g_t-\bar g)h_t\right\| \leq\sqrt{\frac1T\sum_t(g_t-\bar g)^2} \sqrt{\frac1T\sum_t\|h_t\|^2}.

它把额外需要的信息直接写了出来:除了门控波动,还要知道 score 向量的二阶大小。完整论证还应考虑被省略的比值 rtr_t。特别是聚合梯度接近零时,相对误差会很不稳定,应同时报告绝对误差和定义清楚的方向相似性。

Figure 5(原创诊断):平均门控误差与梯度误差是两个不同问题。

图中取 z=(−0.4,0.4)z=(-0.4,0.4)、τ=1\tau=1,再用一维 score 分量 (1,−1)(1,-1) 作示例。平均 log ratio 为零。近似 token 门控的均值与序列门控之差约为 0.03900.0390,小于方差界 0.040.04;但精确 SAPO 系数乘以 score 后的平均约为 −0.3763-0.3763,序列近似则是零。

这不是一个训练结果,也没有说明这种模式在真实模型中多常见。偏离幅度是中等大小,而非无穷小,因此它不否定充分限定条件下的局部近似。它说明的是,单独展示标量分布图,无法替代对向量更新的检查。

更有说服力的验证应在实际 minibatch 上比较 token 更新与序列近似更新的绝对差、余弦相似度,并按长回答、比值尾部和 MoE 路由变化分层观察。如果最容易出现失稳的样本恰好集中在近似条件不成立的尾部,那么“多数 token 条件满足”并不能解决工程上最关心的问题。

10. 怎样实现才不会悄悄改成另一个算法

最直接的实现是计算 fτ(r)Af_\tau(r)A,让梯度经过 rr。为了让中心处的 loss 更容易观察,可以使用等价的中心化形式:

f~τ(r)=4τ[σ(τ(r−1))−12].\widetilde f_\tau(r)=\frac4\tau\left[\sigma(\tau(r-1))-\frac12\right].

中心化只减去固定常数,所以不改变梯度。在 r=1r=1 时 loss 可以为零,梯度却不为零。因此看到初始 loss 接近零,不代表模型没有学习信号。优势、行为 log probability 和按优势符号选出的温度,在这一步都应视作常量。

算法 2:执行一次 SAPO 参数更新。

  1. 读取 rollout minibatch,包含固定行为 log probability、优势和回答掩码。
  2. 对保存的回答做 teacher forcing,计算当前策略在同一 token 和前缀上的 log probability。
  3. 两者相减得到 ztz_t,再计算 rt=eztr_t=e^{z_t}。
  4. 用固定优势的符号选择 τpos\tau_{\rm pos} 或 τneg\tau_{\rm neg}。
  5. 计算中心化 sigmoid 目标,乘上优势并施加回答掩码。
  6. 按每条回答有效长度平均,再按组或批次的既定约定平均。
  7. 若优化器执行最小化,则对最大化目标取负号,再反向传播。
  8. 使用事先声明的优化器与额外梯度裁剪,并记录本次更新的诊断量。

Figure 6(原创流程):固定 rollout 信息与当前策略计算在比值处汇合。

另一种写法是把 AwrAwr 整体 detach 后,作为 log⁡p\log p 的权重。它在当前参数点可以给出相同的一阶梯度,但标量目标和二阶导数未必相同。做元梯度或 Hessian 分析时,这个差异不能忽略。

一个看起来合理却不等价的表达式是直接使用 Aw(r)rA w(r)r,并让梯度穿过全部变量。求导后会多出 rw′(r)rw'(r) 项,得到 A(w(r)+rw′(r))∇rA(w(r)+rw'(r))\nabla r;原始目标需要的是 Aw(r)∇rAw(r)\nabla r。类似地,若行为模型与当前模型共用可求导参数,或者 padding 也参与平均,也会在没有明显报错的情况下改变算法。

算法 3:先做最小数值核验。

  1. 固定一个行为 log probability,选几组当前 log probability,使比值分别小于、等于和大于一。
  2. 在当前 log probability 上做对称有限差分,估算最小化 loss 的导数。
  3. 与解析值 −Arw(r)-Arw(r) 对比,覆盖两种优势符号及两种温度。
  4. 检查 r=1r=1 时导数为 −A-A,零优势时导数为零。
  5. 分别检查同奖励组、空掩码和不等长回答,确认归一化没有混淆。
  6. 加入极端 log ratio,提前发现溢出、下溢以及错误的静默截断。

如果使用 detach 权重的一阶梯度形式,可以考虑在 log 空间计算有效权重。一个有用恒等式是

log⁡w(u)=log⁡4−softplus⁡(u)−softplus⁡(−u),u=τ(r−1).\log w(u)=\log4-\operatorname{softplus}(u)-\operatorname{softplus}(-u), \qquad u=\tau(r-1).

它来自两个 logistic 分母的展开。这个式子有助于看清数值范围,但不是完整的生产实现:计算 r=ezr=e^z 本身仍可能溢出。直接 clamp 会改变目标,应明确记录拒绝陈旧 batch 或稳定化处理的规则,而不是把改变藏在数值修复里。

10.1 把一个不等长回答组算到底

下面把优势、温度、长度平均和导数连在一起。这是人为构造的小例子,目的在于检查实现约定,而不是模拟真实模型的完整参数梯度。

假设同一问题得到两条回答,奖励分别为一和零。使用总体标准差并忽略保护项,优势为 A1=1A_1=1、A2=−1A_2=-1。第一条回答有两个有效 token,比值为 (1,2)(1,2);第二条回答有三个有效 token,比值为 (0.5,1,4)(0.5,1,4)。组大小 G=2G=2,温度分别为 1 和 1.05。

如果暂时把每个当前 log probability 当成单独的标量坐标,最小化 loss 对该坐标的导数是

∂L∂log⁡pi,t=−AiGLi ri,twτi(ri,t).\frac{\partial\mathcal L}{\partial\log p_{i,t}} =-\frac{A_i}{G L_i}\,r_{i,t}w_{\tau_i}(r_{i,t}).

这不是说实际网络能独立改变每个概率,而是先核对进入网络反向传播之前的外部系数。参数梯度还需要再乘各个 score 向量并相加。

回答/优势token 比值门控权重SAPO loss 导数硬裁剪 loss 导数
第一条/正1.01.000000-0.250000-0.250000
第一条/正2.00.786448-0.3932240.000000
第二条/负0.50.9341400.0778450.000000
第二条/负1.01.0000000.1666670.166667
第二条/负4.00.1576110.1050740.666667

硬裁剪一列使用说明性参数 ϵ=0.2\epsilon=0.2,与温度实验的官方超参数没有混用。第一行的 −0.25-0.25 来自 −1/(2×2)-1/(2\times2)。第二条回答在中心处则是 1/(2×3)1/(2\times3),不能因为同样 r=1r=1 就把它也写成 0.250.25。

这个表显示三个不同现象。正优势且比值为二的 token 在硬裁剪下失去有利方向的更新,而 SAPO 仍保留部分信号。负优势且比值为 0.5 的 token 已经降低了错误回答的概率,硬裁剪停止继续降低;SAPO 仍有较弱更新。负优势且比值为四的 token 需要纠正,硬裁剪保留很强的纠正系数,SAPO 则把它显著衰减。这三种情况不能用同一个“区间外 token”标签概括。

若改成所有五个 token 统一平均,第一条回答的每个系数会从除以四变为除以五,第二条会从除以六变为除以五。这样即使门控公式完全相同,优化的相对权重也已经改变。排查复现差异时,我会先核对这一点,再比较训练曲线。

本轮实际执行了 36 组关于当前 log probability 的有限差分检查,覆盖三种优势值、两种温度和六个比值;解析导数与数值导数的最大绝对误差约为 3.91×10−103.91\times10^{-10}。另用 500 组确定随机种子的数值例子检查标量方差界,未出现超界。这些检查能发现公式或实现的符号错误,但不是对模型训练稳定性、泛化能力或序列梯度等价性的实验验证。

11. 关键设计:理由、替代方案和失败边界

设计采用理由可比较的替代方案需要检查的边界
token 级门控保留异质回答中局部有用的信号整个回答共用权重没有解决过程信用分配
sigmoid 目标使局部导数连续硬裁剪或其他平滑函数同时改变两侧纠正更新
正负温度分开分别控制两类反馈共享或自适应温度负反馈过弱可能妨碍纠错
组内优势无需训练 criticvalue baseline 或过程奖励相同奖励组缺少信号
按回答平均平衡不同长度的回答全部有效 token 平均实际长度权重不同
复用 rollout分摊生成成本每步重新采样旧前缀分布仍可能失配

最后一行尤其容易被误解。token 比值只校正“在已观察到的前缀下选择该动作”的相对概率,并未完整校正由行为策略生成的前缀分布。使用整条轨迹的重要性比值会引入不同的方差问题。实践中的 SAPO 是一个训练替代目标,不能因此自动称为新策略完整轨迹回报的无偏估计。

12. 怎样读论文实验图

受控实验从基于 Qwen3-30B-A3B-Base 的 cold-start checkpoint 出发,用数学问题训练,一批 rollout 分成四个 minibatch 更新。比较对象包含 SAPO、GSPO,以及带 routing replay 的 GRPO。下图保留论文原始曲线;它支持观察走势,不支持把像素估读当作精确排行榜数值。

Figure 7(paper Fig. 4):原论文数学训练的奖励与验证曲线。

值得注意的是时间结构:几条曲线先共同改善,之后才明显分化。只比较最后一个 checkpoint,会把算法收益与基线是否提前崩溃混在一起。我希望同时看到最好 checkpoint、固定更新步数、固定生成 token 预算,以及固定真实时间预算下的结果。能够稳定训练更久本身有价值,但与早期样本效率不是同一个指标。

Figure 8(paper Fig. 5):原论文正负温度关系的消融曲线。

图中比较负温度高于、等于和低于正温度。它说明这组设置下温度关系值得重视,但不构成普遍最优结论。结合前面中心附近权重变化较小的计算,我更希望看到按比值尾部、优势幅度和 token 类型分层的梯度统计。图中未给出误差带,因此仅凭这些曲线无法估计不同随机种子的崩溃时间方差。

Figure 9(paper Fig. 6):原论文 Qwen3-VL 训练奖励与聚合验证分数。

多模态对比使用 Qwen3-VL-30B-A3B,每批 rollout 分成两个更新 minibatch。评估涉及 AIME25、LiveCodeBench v6、ZebraLogic 和 MathVision。不同评估用不同采样次数估计 Pass@1,不能把它读成 Pass@k:平均多次单次回答的对错,是在估计“一次采样成功”的概率;“多次中至少一次成功”则是另一个事件。

聚合分数还依赖任务权重。若任务分数为 aja_j、权重为 λj\lambda_j,总分 ∑jλjaj\sum_j\lambda_j a_j 提高时,某个子任务仍可能退步。合理报告应保留任务分项、解码参数、评估 prompt、样本数量和污染检查;一条聚合曲线无法还原这些信息。

13. 局限性与复现条件

loss 可以写得很短,但复现实验不能只保存这几行公式。需要明确初始 checkpoint、问题和奖励分布、优化器、学习率计划、组大小、回答长度限制、更新 batch、采样温度、路由策略以及评估方式。引用另一篇算法的超参数配置有助于追溯,却不能替代一份完整、带版本的实验配置。

验证器自身也可能出错。答案抽取歧义、截断以及奖励投机都会造成错误优势。把错误奖励导出的梯度变平滑,并不会让奖励变正确。训练目标、数据质量和评估器仍是三个需要分别负责的问题。

展示出来的实验也不等于永不崩溃的保证,或覆盖任意模型规模的普遍结论。它的价值在于说明一个值得进一步控制变量验证的方向。本轮只进行了公式与说明性例子的本地计算,没有运行论文的模型训练。

14. 独立批判性分析

14.1 标量到向量的论证需要补强

最主要的理论疑问是平均门控与完整参数梯度之间还差一项。第 9 节把这个协方差式残差写了出来。可操作的改进,是给定 score 向量范数与权重关联的条件,建立完整向量误差界,再在真实 minibatch 上分别测量各误差项。

我尤其希望知道近似在哪些样本上失效。如果只有少数很长、奖励绝对值很大或路由变化剧烈的回答导致明显梯度方向偏离,整体 token 直方图仍可能非常集中。对尾部做分层统计,比只展示总体分布更接近实际失稳问题。

14.2 平滑性与双向抑制混在一起

硬裁剪保留某些区间外的纠正信号,而 SAPO 的平滑权重会双向衰减。要区分机制,可以比较四组:有方向的硬裁剪、有方向的平滑裁剪、双向平滑衰减,以及局部斜率和宽度匹配的其他平滑函数。

各组应使用相同调参预算,并报告正负学习信号被移除的比例。如果只比较两条 loss,就无法判断收益主要来自连续性、强正则化还是改变了正负更新的相对权重。改进建议是把这些因素拆成明确可单独开关的实验变量。

14.3 大词表不是负梯度更大的充分解释

softmax 导数确实把负更新压力分配到很多未采样 token,但这些 token 的概率总和有界。不能从词表项数多,直接推出总 logit 梯度范数更大。

更具体的实验应联合记录概率集中度、参数 score 范数、MoE 路由切换、优势符号和绝对值,并控制策略滞后。这样才能区分负优势本身、少量难例以及行为/训练分布偏差的影响。论文给出的符号解释提供了直觉,但仍有相当部分因果链需要测量。

14.4 公平比较需要给基线重新调参的机会

相同超参数不意味着各算法都处在同样有利的位置。一个新目标可能只是更能适应某套设置。应同时提供“共享配置”和“相同搜索预算分别调参”两类比较,明确生成 token、优化步数、验证器调用和墙钟时间成本。

崩溃也应预先定义。例如验证分数低于历史最好值多少、持续多少次评估才算崩溃,而不是看完曲线后临时挑选阈值。再配合多个随机种子,才能判断某种温度是否稳定地延后崩溃,而不只是一次运行碰巧走得更远。

14.5 保守更新也有代价

稳定却学得很慢,不一定是更好的训练。需要一起跟踪单位生成 token 的收益、达到目标分数的时间、回答长度、策略熵,以及对已知错误的抑制能力。

尤其当负优势温度很高时,模型可能缺少必要的负反馈。建议准备一组专门的纠错探针:在明确知道某类行为错误后,观察它是否真正减少。这样的测试能揭示聚合奖励曲线不容易显示的保守性代价。

15. 我会怎样设计下一步实验

我会先从较小模型和可审计的数学任务集合开始,把训练、开发和最终评估问题提前分好。保持同一套 loss 实现,控制路由行为、归一化、采样与数据,只改变门控函数。

算法 4:把质量、稳定性和成本一起比较。

  1. 固定开发集用于调参,保留完全未用于选配置的评估集。
  2. 给每种算法相同配置搜索次数与随机种子数量。
  3. 记录 rollout token、更新 token、优化步数、验证器调用和实际耗时。
  4. 记录优势正负、比值分位数、rw(r)rw(r) 分位数、零优势组、回答长度与梯度范数。
  5. 抽样计算 token 梯度与序列近似梯度的绝对误差和方向相似性。
  6. 报告各任务 Pass@1 及不确定性、崩溃时间,以及最好与最终 checkpoint 的差异。
  7. 主动增加 rollout 滞后或回答长度,检验方法声称要处理的失效边界。

这是一份后续复现计划,不是已经完成的实验,也不预设一定会获得多少收益。它要区分三件事:优化变得更平滑、更新变得更保守,以及异质样本中的有用信息确实被更好利用。

16. 结论

我认为 SAPO 最有吸引力的地方,是它对组内策略目标作了一个小而可解释的修改。导数能够精确推出来,数值行为可以低成本核验,也能在 token 与序列两个尺度上分析。

实现思路值得重视;更宽泛的稳定性和序列等价性,则需要条件与证据。下一步最有价值的验证,是同时测量完整更新向量、被丢弃的学习信号、训练成本和最终任务质量,而不是只看一条平滑的奖励曲线。

参考资料与证据说明

本次来源检查日期为 2026-09-15。本文与英文稿讨论同一组问题,中文采用独立组织的解释方式;数学例子只用于核验推导,原论文实验与本轮计算已分别注明。