本文主要参考论文 [1]

1 背景与问题

强化学习(RL)已经成为提升 LLM 推理能力的关键手段。目前主流是基于分组的策略优化:对每个 query 采样 GG 条回复,组内归一化 reward 得到 advantage A^\hat{A},再用 token 级重要性比率 rr 加权更新:

ri,t=πθ(yi,tq,yi,<t)πθold(yi,tq,yi,<t),A^i,t=Rimean({Rj})std({Rj})r_{i,t} = \frac{\pi_\theta(y_{i,t} \mid q, y_{i,<t})}{\pi_{\theta_{\text{old}}}(y_{i,t} \mid q, y_{i,<t})}, \quad \hat{A}_{i,t} = \frac{R_i - \text{mean}(\{R_j\})}{\text{std}(\{R_j\})}

ri,tr_{i,t} 表示当前策略相对于旧策略对第 tt 个 token 的偏好变化——r>1r>1 意味着当前策略更偏爱这个 token。GRPO 和 GSPO 是两个代表性方法,核心区别在于如何处理偏离 r=1r=1 太远的 token:

  • GRPO:token 级 PPO-clip,min(rA^,clip(r,1ε,1+ε)A^)\min(r \cdot \hat{A}, \text{clip}(r, 1-\varepsilon, 1+\varepsilon) \cdot \hat{A})rr 超出 [1ε,1+ε][1-\varepsilon, 1+\varepsilon] 的 token 梯度被截断。
  • GSPO:既然奖励是针对整条序列的,那训练也应该针对整条序列进行。它将优化粒度从 token 级 提升到序列级,基于序列总体似然来定义整条回复的重要性比率,并在序列层面进行截剪,最后再去乘上对应的 Advantage。

硬截断的代价是:rr 越界就梯度归零,不分偏了多少。r=1.01r=1.01 只偏了一丁点,和 r=100r=100 的极端离群 token 一样被完全截断无法回传梯度,大幅度降低了训练效率。SAPO则是用温度控制的软门控替代硬截断,让越界的token之间也分出差别来。


2 方法

2.1 核心公式

SAPO 的目标函数形式与 GRPO 一致,区别在于把 GRPO 中的截断操作替换为平滑的 sigmoid 门控函数。SAPO 最大化:

J=Eq,{yi}[1Gi=1G1yit=1yifi,t(ri,t)A^i,t]\mathcal{J} = \mathbb{E}_{q, \{y_i\}} \left[ \frac{1}{G} \sum_{i=1}^{G} \frac{1}{|y_i|} \sum_{t=1}^{|y_i|} f_{i,t}(r_{i,t}) \cdot \hat{A}_{i,t} \right]

其中门控函数为:

fi,t(r)=σ(τi,t(r1))4τi,tf_{i,t}(r) = \sigma(\tau_{i,t} \cdot (r-1)) \cdot \frac{4}{\tau_{i,t}}

σ\sigma 是 sigmoid,τ\tau 是温度参数。求导后得到梯度权重:

wi,t=4pi,t(1pi,t),pi,t=σ(τi,t(ri,t1))w_{i,t} = 4 \cdot p_{i,t} \cdot (1 - p_{i,t}), \quad p_{i,t} = \sigma(\tau_{i,t} \cdot (r_{i,t} - 1))

上图是正 advantage 情况,具体解读如下:

  • 左图:目标函数值随 rr 的变化。无截断的时候线性增长,硬截断则是(ε=1.0\varepsilon=1.0)到 r=2r=2 后拉平——超过就白超了,模型没有动力继续增大 rr。SAPO 软门控则逐渐趋近一个上限,rr 越大整体收益增量越小但不完全归零,τ\tau 越大趋近上限越快。

  • 右图:梯度权重 wwrr 的变化。无截断时 w=1w=1 恒定。硬截断(ε=1.0\varepsilon=1.0)在 r=2r=2 处从 1 断崖式跳到 0——边界上的 token 要么全算要么不算。SAPO 的权重是则是钟形曲线,在 r=1r=1 附近和硬截断差不多,在远离 1 的区域平滑趋向 0 但不等于0——离群 token 的梯度被大幅压缩但仍有微弱信号。

2.2 不对称的温度

SAPO 对正负 advantage 的 token 使用不同温度:

τi,t={τpos,A^i,t>0τneg,A^i,t0\tau_{i,t} = \begin{cases} \tau_{\text{pos}}, & \hat{A}_{i,t} > 0 \\ \tau_{\text{neg}}, & \hat{A}_{i,t} \le 0 \end{cases}

且设定 τneg>τpos\tau_{\text{neg}} > \tau_{\text{pos}}(如 τpos=1.0,τneg=1.05\tau_{\text{pos}}=1.0, \tau_{\text{neg}}=1.05)。原因在于梯度传播机制:

对于正 advantage(A^>0\hat{A} > 0):梯度提高采样 token 的 logit、压低所有其他 token,方向集中。

对于负 advantage(A^0\hat{A} \le 0):梯度压低采样 token、提高大量未采样 token 的 logit。一个几十万 token 的词表里,只有 1 个是最优的,其余全是"不该选的"。负梯度会把 logit 扩散到大量无关 token 上,虽然提供了一些正则化但也极易引入不稳定因素。所以负 token 的衰减要更快,让离群的负 token 更新被更快压制。

2.3 在seqence-level和 token-level之间自动切换

SAPO 虽然是 token-level级别的算法,但论文证明了SAPO在正常条件下会自动表现为序列级更新。直觉上来看,如果策略还没跑偏太多,即重要性比率约等于1时,那把 token 级门控的结果平均之后,等价于对整条回复做一次统一的加权——和 GSPO 的序列级更新一致,只是截断从硬边界换成了平滑衰减。

当这个条件不满足时——比如序列中出现少数极度离群,重要性比率过高的 token——上述平均过程不再成立,离群 token 会拖偏平均结果。此时论文里证明SAPO 算法会自动保持 token-level门控,即仅压低那几个离群 token,其余 token 的更新不受影响。


3 结论与感想

SAPO 的改进本质上就是把硬性clip改成软性clip。一个值得注意的点是一般设置τneg=1.05\tau_{\text{neg}} = 1.05τpos=1.0\tau_{\text{pos}} = 1.0,差距只有 0.05。但消融实验显示如果反过来(τneg<τpos\tau_{\text{neg}} < \tau_{\text{pos}})训练直接崩——负 token 更新的不稳定性远比想象的严重,0.05 的温差就足以决定训练成败。

另外,有关这种RL后训练改进的算法一般原文都会有很多复杂的数学推导,我这里为了博客观感没有放,感兴趣的可以去看一下原文



  1. Gao C, Zheng C, Chen X H, et al. Soft adaptive policy optimization[J]. arXiv preprint arXiv:2511.20347, 2025. ↩︎