SAPO:Soft Adaptive Policy Optimization
一、简介
基于组的强化学习用于 LLM 后训练通常依赖于重要性比率来重用轨迹跨策略更新,但在实践中这些比率在标记级别上是嘈杂的,方差在专家混合模型中尤其尖锐,其中路由异质性和长生成放大了每个标记的偏差。GRPO 的标准补救措施是硬标记裁剪:一旦标记的比率超出固定带,其贡献实际上被裁剪到零梯度,这稳定了极端步骤,但创造了一个脆弱的权衡,紧裁剪浪费样本并杀死学习信号,而松裁剪引入了离策略噪声并使优化不稳定。GSPO 将信任区域转移到序列级别以强制与序列奖励的一致性,但这引入了不同的病理:少数异常标记可以将序列比率推到裁剪带之外,导致整个序列的梯度(包括许多接近策略的、信息丰富的标记)被抑制。 软自适应策略优化(SAPO)被提出以解决这种“硬门脆性”问题,通过用温度控制的软门替代重要性比率中的裁剪:在策略点附近( r ≈ 1),梯度被保留以鼓励学习和探索;随着比率的漂移,更新被平滑衰减而不是截断,保留来自适度偏差的有用信号同时抑制高方差异常值。关键地,SAPO 被设计为序列一致但标记自适应:在经验上常见的条件下(小的策略步长和标记对数比率的序列内低分散),平均标记门集中成一个平滑的序列级门(类似 GSPO 的行为,但具有连续的信任区域),而在存在异质或异常标记时,它选择性地仅降低有害标记的权重而不是使整个序列崩溃。
二、SAPO
2.1 SAPO 目标:“分组强化学习”+重要性比率上的门控函数
SAPO 优化一个分组代理:
𝒥(θ) = 𝔼q ∼ 𝒟, yii = 1G ∼ πθold(⋅|q)
- q ∼ 𝒟:从你的提示分布中抽取的提示/查询。
- yii = 1G ∼ πθold(⋅|q): 你从行为策略(“旧”策略)中采样一组G响应。这是 GRPO/GSPO 机制:生成多个候选,组内比较,更新当前策略。
: 长度归一化,防止长生成结果仅因拥有更多 token 而主导。 - Âi, t: 优势信号(通常是组归一化的奖励);在许多组强化学习设置中,它在响应的每个 token 上是恒定的,即Âi, t = Âi。它告诉你“这个采样的整个轨迹比它的兄弟姐妹更好/更差。”
- ri, t(θ): token 级别的重要性比率:
如果r ≈ 1:当前策略在该标记处接近行为策略(接近按策略)。如果r远离1,你正在重复使用对当前模型而言实际上是非策略的标记,高方差/信任风险高。
整个新颖性在于门控函数
SAPO 门控:
其中温度参数τi, t 为:
τi, t = τpos if Âi, t > 0 else τneg
- 以x − 1为中心:所谓的“信任区域中心”是r = 1(基于策略的)。一切关键在于你当前策略与行为策略的偏差程度。
- σ(τ(x − 1)):
平滑单调门。温度τ
控制陡峭程度:
- 小τ ⇒ 温和衰减(更能容忍偏差),
- 大 τ ⇒ 鲁棒衰减(更保守)。
- 非对称温度τpos, τneg: SAPO 有意地区分正优势更新和负优势更新。
- 该因子 4/τ看起来像是一种技巧,但实际上是一种校准:它使最终梯度权重很好地归一化,使得有效权重在策略点处达到峰值 1。这就是为什么 SAPO 在r = 1 附近保留“未剪裁行为”,而与τ无关。
对 SAPO 求导得到加权策略梯度:
如果我们使用∇θr = r∇θlog πθ(⋅)对 SAPO 目标函数求导,我们得到:
其中
wi, t(θ) = 4 pi, t(θ)(1 − pi, t(θ)), pi, t(θ) = σ(τi, t(ri, t(θ) − 1)).
wi, t是一个平滑的信任区域核
p(1 − p)在p = 1/2处达到最大值。
p = 1/2发生正好当(r-1)=0$ ⇒ r = 1
因此,wi, t 在ri, t = 1为 1 时达到峰值,随着r 远离 1 而平滑衰减。 具体来说:
如果 r ≈ 1:w ≈ 1, SAPO行为就像未剪裁的目标(强学习信号)。
如果r有一定偏差:w ∈ (0, 1),你仍然在学习,但会谨慎行事。
如果r极度偏离: w → 0,SAPO 基本上会忽略这些 token,但不会出现不连续的悬崖(与硬裁剪不同)。
这就是为什么论文将 SAPO 称为连续信任区域:随着偏差增大,“信任”会持续缩小,而不是在固定的ϵ处从 1 跳变到 0。
2.2 为什么 SAPO 使用两个不同的温度τpos和τneg?
负优势 token 更新在大词汇 softmax 策略中本质上更不稳定,因为它们的梯度会分散到许多 logits(许多“未采样的”token)。因此 SAPO 通过设置τneg > τpos使负 token 门更快衰减。
数学直觉:
设模型在解码步骤t输出 logitsz ∈ ℝ|V| ,其中 zv 词汇 token v的 logit。策略是一个 softmax:
在这个步骤中采样的标记是 yt (所采取的动作)。在策略梯度 RL 中,你会用优势 Ât (或序列中所有标记共享的优势 Âi)对 log-prob 梯度进行加权:
token contribution ∝ Ât, ∇θlog πθ(yt ∣ q, y < t).
我们想要
首先回顾标准的 softmax 对数导数:
乘以Ât:
- 对于采样到的Token(v = yi, t):
Gradient = (1 − πθ(yi, t|q, yi, < t)) ⋅ Âi, t
-对于所有其他标记(v ≠ yi, t):
Gradient = −πθ(v|q, yi, < t) ⋅ Âi, t
- 1[v = yt]: 标记采样到的 token 的指示器。
- πθ(v): 模型在这个状态对 tokenv的概率分布。
- Ât:优势;符号决定是否强化或抑制采样的动作。
直觉:正负优势改变动量移动的方向
2.2.1 案例 A:Ât > 0(正向优势)
对于采样的 tokenv = yt:
Δzyt ∝ (1 − πθ(yt)), Ât > 0
所以我们增加采样 token 的 logit(使其更可能)。
对于其他每个 token v ≠ yt:
Δzv ∝ −πθ(v)Ât < 0
所以我们稍微降低了所有其他 logits。
净效应:概率质量流向采样到的标记。
2.2.2 案例 B: Ât < 0(负优势)
现在符号反转。对于采样的Token:
Δzyt ∝ (1 − πθ(yt))Ât < 0
所以我们会降低采样标记的 logit(使其可能性降低)。对于其他每个 token:
Δzv ∝ −πθ(v)Ât > 0
所以我们增加所有其他 token 的 logits。
净效应:概率质量被从采样的词元中推开,并分散到词汇表的其他部分。
2.3 为什么负向更新在 LLMs 中更不稳定?
在 LLM 强化学习中,动作空间就是词汇表:|V|非常大(通常105–106)。在某个状态下,只有一小部分标记是“合理的。”论文的观点是:
- 带有负优势时,你是在为大量“未采样”的 token 增加 logits。
- 尽管每个单独的增加都通过 πθ(v)进行了缩放,但v ≠ yt的数量如此之多,以至于更新可能会“扩散”到许多不相关的方向。
- 这种扩散在离线策略(重要性比率远小于 1)时尤其有害,此时方差已经很高。
你可以从对未采样 logits 的总体“推动”中看到这一点:
∑v ≠ ytΔzv ∝ ∑v ≠ yt( − πθ(v)Ât) = −(1 − πθ(yt))Ât.
因此,总幅度与采样 token 的幅度相当,但它分布在|V|−1坐标上,即一个非常高维的“喷雾”。对于Ât < 0,这种喷雾指向一个可能引入不稳定的方向(许多 logit 的微小增加可以以难以理解的方式改变分布,尤其是在大步长/离策略噪声下)。
2.4 SAPO 如何使用温度来控制这个:τneg > τpos
SAPO 的 token 门使用一个温度τ 来控制重要性比率rt偏离 1 时梯度衰减的速度。有效权重是一个平滑的核函数,在 r = 1处达到峰值,随着|r − 1| 的增长而缩小:
较大的τ⇒w(r)远离r = 1的衰减更快(对离策略 token 的抑制更激进)。
SAPO 设置:
- 正向优势(Ât > 0):
τ = τpos
- 负优势(Ât ≤ 0):
τ = τneg
约束:
τneg > τpos
所以当Ât < 0时,更新是“喷洒到未采样 logits”的情况,SAPO 一旦变成离线策略就更强力地衰减它,从而减少方差和早期崩溃风险。
SAPO/GRPO/GSPO 可以表示为一个单一的门控代理(统一代理),它们之间唯一的区别在于门控函数fi, t:
其中,fi, t(·)是一个特定于算法的门控函数。
GSPO 是“序列级”的,因为它用长度归一化的序列比率(几何平均数)替换了 token 比率:
然后使用si(θ)(序列内不变)的门控,而 GRPO 通过ri, t的硬裁剪对每个 token 进行门控。SAPO 则使用软门控:
所以当 r从策略点r = 1移动开时,它的梯度贡献会逐渐降低权重,而不是通过硬裁剪突然变为零。
特定于算法的fi, t。
这些算法在fi, t的选择上有所不同:
GSPO 的fi, t在序列内是标记不变的,而 SAPO 和 GRPO 是标记相关的。
对统一替代量求导得到常见的“门控 × 比率 × log 概率梯度 × 优势”形式:
针对 SAPO,特别是使用
经过训练后的优化领域已经明显超越了“只需使用 PPO”的时代。GRPO 及其后继者揭示了一种更深层次的模式:大多数实际进展来自于我们如何控制更新中的信任和方差,信任区域的位置(词元与序列),我们如何严格实施(硬裁剪与软门控),以及如何在保持探索的同时避免离策略噪声和长时程信用分配导致运行崩溃。所谓的“算法”越来越成为一种针对语言建模的几何结构、巨大词汇量、长序列以及稀疏、延迟且通常嘈杂的奖励信号进行定制的门控函数、归一化方案和稳定性调节的选择。
如果要说有什么值得传承的,那就是下一波进步将更多地来自于创造另一个缩写词,而更多地在于使这些设计轴明确和可衡量。在实验过程中,将这些方法视为一个工具箱:选择与你的奖励结构匹配的门控机制,选择与你的目标匹配的连贯性单位(局部于 token 还是全局于序列),并以能够用图表辩护的方式调整保守性。令人兴奋的是,我们仍处于早期阶段:随着可验证奖励、多模态策略和长上下文训练成为标准,这些关于截断、门控和方差控制的“小”选择将成为区分仅仅改进的模型和能够在规模化上可靠训练的系统之间的关键。