论文精读

精读:SCAPO——用「扰动下不动」给 token 记一笔负账

SCAPO 把同一条响应在保答案 prompt 扰动下的 token 概率漂移做成 GRPO 的负向信用修正;本专栏逐列重算后发现,相对每列最强基线的余量全部落在 z<1.5,且典型修正量级与 advantage 差两个数量级

论文: Semifactual Credit-Augmented Policy Optimization
作者: Junshu Pan, Zhizhang Fu, Shulin Huang, Yiran Ding, Zifan Cheng, Wenqi Shao, Qiaosheng Zhang, Yue Zhang
arXiv: 2609.40360
SCAPO GRPO token 级信用分配 RLVR 半事实干预 因果不变性 数学推理 cs.LG

1 论文概览

一句话总结:SCAPO 给每个 token 测一个「把题目表面改写一遍、答案不变,它的概率抖动多少」的漂移值,只把抖得厉害的那部分 token 的 GRPO 优势往下压,稳定本身不加分。

核心问题:GRPO 把一条响应的 outcome advantage 均摊给每个 token,无法区分「这一步是真推理」与「这一步只是跟着 prompt 的表面特征走」。论文把后者操作化为半事实(semifactual)不稳定性——保持题目与答案不变、只改无关表面特征,看固定响应的 token 概率动多少。

“GRPO assigns the same outcome-derived advantage to every response token and may reinforce potential spurious dependence alongside useful reasoning.” —— 摘要

主要贡献:

  1. token 级敏感度画像:在冻结的 Qwen3-4B-Base 上,对 1,000 道 DAPO-Math 题各采一条响应,得到 870,586 个 token 位置的漂移值,按八类 token 分类统计(表 4)。
  2. 一个不改权重的解码侧验证:按漂移值从高到低屏蔽掉累计概率质量不超过 0.8 的候选 token,1,000 题准确率从 15.80% 升到 30.00%(附录 C 表 5),配了完整的 2×2 配对转移动向。
  3. SCAPO 算法:漂移 → 组内 z-score → 只留负部 → stop-gradient → 以 λ0=0.01\lambda_0=0.01 加进 advantage,只在训练前 N0N_0 步生效。
  4. 两个消融轴:信号来源(随机打乱 / 反事实扰动)与修正符号(负部 / 全部 / 正部),其中反事实控制是唯一低于 GRPO 的一臂。
  5. 附录 D 的有限时长分析:Lemma D.1 给出辅助梯度的上界 ∥g^λ−g^0∥≤λH\|\widehat g_\lambda-\widehat g_0\|\le\lambda H,Theorem D.2 说明该项随 N0/TN_0/T 衰减。

2 方法详解

架构:四步,只改 advantage

整个方法只动 GRPO 的 advantage 一项,重要性比、裁剪、loss 归约全部照抄:

A~i,t=Ai+λ sg⁡ ⁣(ui,t−),ui,t−=min⁡(ui,t,0)\widetilde A_{i,t}=A_i+\lambda\,\operatorname{sg}\!\left(u^{-}_{i,t}\right),\qquad u^{-}_{i,t}=\min(u_{i,t},0)

四步依次是:

  1. 构造扰动。对每道 DAPO-Math-17K 题目,用 GPT-5.5 生成 4 个保答案变体:改写(paraphrase)、轻微拼写噪声、无关场景包装、附加无关上下文。训练时预计算并冻结。
  2. 固定响应探针。同一组 G=8G=8 条响应在原始 prompt 与 4 个扰动 prompt 下各做一次 teacher forcing,取被采样 token 的概率 pi,t(0)p^{(0)}_{i,t} 与 pi,t(k)p^{(k)}_{i,t}。
  3. 组内相对稳定性。逐扰动类型对 −d(k)-\bm d^{(k)} 做组内 z-score,取四类平均后再 z-score 一次,得到 ui,tu_{i,t}。
  4. 负部修正。λ\lambda 在前 N0N_0 步取 λ0\lambda_0,之后归零。

关键创新点

半事实而不是反事实。反事实扰动改答案,漂移里混着「本来就该变」的成分;半事实扰动保答案,剩下的漂移才被解释成伪依赖。这个区分不只是措辞——消融里把扰体换成改答案的版本后,平均分从 17.65 掉到 11.68,比 GRPO 的 12.63 还低。

固定响应而不是重新生成。探针 teacher-force 的是已经被采样出来的那条响应,不在扰动 prompt 下重新采样。这让漂移只反映「这条响应在别的世界里概率会变多少」,不需要过程标注、不需要外部奖励模型,也让成本压到训练时长的 1.8%。

只罚不奖。u−=min⁡(u,0)u^{-}=\min(u,0) 配合 stop-gradient,保证 A~≤A\widetilde A\le A。设计理由写得很直白:稳定不等于正确,所以稳定不该拿额外信用。

与基线方法的区别

把五个基线的损失写成同一模板对位(表 6 的超参 + §4.1 的描述):

方法改的是哪一层具体形式
GRPO序列级 advantageAi=(Ri−μR)/(σR+ϵA)A_i=(R_i-\mu_R)/(\sigma_R+\epsilon_A),token 均摊
GSPO重要性比序列级比值与裁剪(ϵ\epsilon 为 3 ⁣× ⁣10−43\!\times\!10^{-4} 量级)
SAPO硬裁剪换成与 advantage 有关的软门控
CF-GRPO信用来源靠 mask 推理片段做反事实,token 权重限 [0.5,4.0][0.5,4.0]
FIPOtoken 权重用折扣未来 KL 重加权
SCAPOadvantage 的加项加 −λsg⁡(c)-\lambda\operatorname{sg}(c),c=(−u)+c=(-u)_+,限 $[0,\ \lambda\cdot\max

SCAPO 与 CF-GRPO 都在做 token 级信用,差别在漂移从哪来:CF-GRPO 靠遮掉推理片段(输出侧归因),SCAPO 靠改 prompt(输入侧干预)。与 FIPO 的差别是 FIPO 重加权、SCAPO 加常数项且带梯度截断。

3 实验结果

主要指标

Qwen3-4B-Base 训练 600 步、Qwen3-1.7B-Base 训练 1,000 步,rollout batch 128 题、每题 8 条、最长 16,384 token。表 1 的 AIME 2024–2026(三年合并,90 题 × 16 样本):

  • 4B:GRPO 22.08 → SCAPO 27.71(+5.63)
  • 1.7B:GRPO 7.71 → SCAPO 11.88(+4.17)

摘要里「在全部评测基准上超过 GRPO」这句按表 1 逐格核过,11 列在两个尺度上都成立,没有例外。

与 SOTA 的对比:逐列看,headline 挑的是最弱的那个基线

+5.63 这个数字的对位是 GRPO,而在 4B 的 AIME 列上,GRPO 的 22.08 是五条基线里最低的(GSPO 23.47 / SAPO 24.03 / CF-GRPO 22.64 / FIPO 25.42)。换成「每列各自最强的基线」重算一遍:

列(4B)最强基线SCAPO 余量题数z 区间
AIME 24–26FIPO 25.42+2.2990×160.62–1.45
AMC 23–25SAPO 65.45+0.20127×160.06–0.15
HMMT 25–26FIPO 15.28+0.8963×160.20–0.47
BRUMO 25FIPO 35.00+2.7130×160.42–0.99
SMT 25FIPO 28.18+2.1353×160.44–1.03
Omni-MathGSPO 38.71+0.712821×11.08–1.51
MinervaFIPO 44.49−1.11272×1−0.73–−0.52
OlympiadFIPO 57.57−0.75674×1−0.78–−0.56
NoOp-AIMECF-GRPO/FIPO 21.74+1.8790×160.51–1.18
ThinkBench-AIMEFIPO 23.89+2.22360×41.20–2.81
GPQA-DiamondGSPO 41.92+0.53198×240.21–0.50

1.7B 侧的同款重算:最强基线清一色是 SAPO,余量落在 +0.29(GPQA)到 +2.97(Olympiad)之间,AIME 上 +1.88(z 0.51–1.19)。

z 区间按配对差分 sd ∈ [0.15, 0.35]、nn 取题数(不是样本数)算。逐列最强基线的余量,没有任何一列越过 z≈1.5,多数在 1 以下。

这里还藏着第二重挑选:FIPO 在 4B 是最强基线(Avg 38.64),在 1.7B 却是最弱的一条(17.73,低于 GRPO 的 17.86);SAPO 反过来。「最强基线」本身是规模的产物,而五条基线没有一条跑过第二次,也没有 seed、标准差或置信区间的任何一处报告。

消融:三条都在 GRPO 之上,只有反事实控制在之下

表 2(1.7B,五个竞赛基准平均):

变体Avg相对 GRPO
GRPO12.63—
随机打乱修正13.65+1.02
反事实扰动11.68−0.95
正部修正14.05+1.42
全符号修正15.65+3.02
SCAPO(负部)17.65+5.02

把修正值在同一条响应内随机打乱、破坏 token 对齐,仍然比 GRPO 高 1.02。这一行论文只在正文里一句带过,它说明收益里有一块来自「给 advantage 注入 token 级异质性」本身,与对齐到半事实敏感度无关。反事实控制是唯一低于 GRPO 的一臂,方向性确实有信息。两者合起来看,对齐部分的净贡献约 4.0 分,但这一列没有误差棒。

顺带一句:正部修正(给稳定 token 加奖)也比 GRPO 高 1.42,而论文的设计理由正是「稳定性不该拿额外信用」。消融没有支持这条理由,只支持了「负部比正部更划算」。

诊断实验:全篇证据最硬的一块,也是唯一配了 2×2 的那块

附录 C 表 5 给了配对转移动向:98 / 60 / 202 / 640。净 +142/1000,McNemar(带连续校正)χ2≈75.9\chi^2\approx75.9。这个量级的证据在全篇其他地方都找不到——它是唯一的配对口径结果,也是唯一能自己支撑自己的结论。

五处我自己核过的账

(一)λ0=0.01\lambda_0=0.01 与 advantage 的典型量级差两个数量级。 G=8G=8、二元奖励下,kk 条对时 μ=k/8\mu=k/8、σ=μ(1−μ)\sigma=\sqrt{\mu(1-\mu)},于是 k=1k=1 时 A+=2.646A^+=2.646,k=4k=4 时 A+=1.000A^+=1.000,k=7k=7 时 A+=0.378A^+=0.378,k=0k=0 或 88 时 σ=0\sigma=0、A≡0A\equiv0。而 uu 是组内 z-score,u−u^- 的典型值 E[u−]≈−0.40E[u^-]\approx-0.40、尾部到 −2∼−3-2\sim-3,乘 λ0=0.01\lambda_0=0.01 后典型修正 −0.004、极端 −0.03。相对 ∣A∣|A|:在 k=7k=7 的组上是 1.1%(极端 7.9%),在 k=1k=1 的组上是 0.15%。论文附录 D 自己的上界也随 λ\lambda 线性:∥g^λ−g^0∥≤λH\|\widehat g_\lambda-\widehat g_0\|\le\lambda H。取 0.01 意味着辅助梯度被压到 HH 的 1%,而主表报的是 AIME 上相对 GRPO 涨 25.5%(22.08→27.71)。这两个尺度论文从未放在同一张表里,也没有 λ0\lambda_0 或 N0N_0 的扫描——表 2 只消融了信号来源与符号。0.01 是落在平台上还是峰的左侧,无从判断。

(二)A≡0A\equiv0 的那部分组,论文一个字没写。 正文只讨论了 Ai>0A_i>0 与 Ai<0A_i<0 两种情形。按诊断面板 15.8% 的单样本准确率、G=8G=8 估算,k=0k=0 的组约占 (1−0.158)8≈25%(1-0.158)^8\approx25\%——四分之一的 prompt 组在 GRPO 下梯度恒为零,SCAPO 是它们唯一的梯度来源,且这个梯度是纯惩罚(A~=λu−≤0\widetilde A=\lambda u^-\le0)。这一块既没被量化,也没被单独消融。它也是「小修正为什么能有大效果」最说得通的候选解释。

(三)漂移指标只依赖概率比,而表 4 缺了排除混淆所需的那一列。 把定义式化简:

d=2tanh⁡ ⁣(∣log⁡p(0)−log⁡p(k)∣2)=2 ∣1−p(k)/p(0)∣1+p(k)/p(0)d=2\tanh\!\left(\frac{|\log p^{(0)}-\log p^{(k)}|}{2}\right)=\frac{2\,|1-p^{(k)}/p^{(0)}|}{1+p^{(k)}/p^{(0)}}

dd 是比值 r=p(k)/p(0)r=p^{(k)}/p^{(0)} 的单调函数,与绝对概率无关。高概率 token 的 rr 上界被 1/p(0)1/p^{(0)} 卡死,dd 天然小;低概率 token 的 rr 动态范围大,dd 天然大。表 4 报了八类的平均 dtd_t,恰恰没有报每类的基线概率 ptp_t——而「反思标记 2.74×、数字 0.37×」这个分类结论要站住,必须排除「两类基线概率本就不同」。方向上是吻合的:math symbol + number + whitespace 合计 48.64% 的词位,相对均值 0.47 / 0.37 / 0.44,全在 1 以下;reflection + discourse 合计 2.97%,2.74 / 2.32,全在 2 以上。但 Word(40.92%)的 1.53 与 Punctuation(6.75%)的 1.19 都大于 1,单靠基线概率解释不完。缺的不是结论,是那一列。

(四)两个 OOD 集与训练干预同族,唯一的真 OOD 列余量最小。 训练用的四类扰动里就有「无关场景包装」和「附加无关上下文」,而 NoOp-AIME 是无操作干扰项变体、ThinkBench-AIME 是输入扰动变体——OOD 三组里有两组测的是它自己优化的那个方向。剩下的 GPQA-Diamond 是真跨域,余量也正好是全表最小的两格:+0.53(4B,z 0.21–0.50)与 +0.29(1.7B)。

(五)扰动的地基没被验过。 4 类扰动 × 17K 题 ≈ 68K 次 GPT-5.5 生成,prompt 模板里带参考答案。论文声明这些扰动「保持题目与答案不变」,却没有报任何校验通过率——没有人工抽查,没有自动核对,没有「多少条被判为改了答案而丢弃」。反事实消融说明他们有能力生成改答案的版本,也就是说校验的机器是现成的。扰动还贯穿整轮训练保持不变,策略在变而扰动不更新。

4 个人分析

亮点

把因果不变性落成了一个可逐 token 计算的量。 以往「伪相关」研究停在数据集级或样本级,SCAPO 把它压到了 token 级且成本可控(teacher forcing + 组内 z-score,1.8% 训练时长)。这个落法与用什么下游算法无关,光是这张敏感度画像就能单独用。

半事实 / 反事实的消融设计值得抄。 很多「用干预做监督信号」的论文只报一个「加上就好」的数字,本篇把信号换成改答案的版本后数字掉到基线以下——这是唯一能区分「信号真有信息」与「加扰动就好」的那一臂。

附录 C 表 5 的 2×2 配对表。 全篇唯一一处给出转移矩阵的表格,也是唯一能自己做统计检验的结果。一篇讲「token 级敏感度」的论文,把证据最硬的那块放在附录的动机实验里,读的时候要留意这个位置。

局限性

headline 与最强的那把尺子对不上。 +5.63 的对位基线在该列上排名最末;换成逐列最强基线,4B 侧有两列是负的(Minerva −1.11、Olympiad −0.75),其余全部落在 z<1.5。加上五条基线无一条重跑、无 seed、无误差棒,这个方法的真实余量在当前的证据等级下是不可分辨的。

机制强度与效果强度之间差两个数量级,中间没有桥。 典型修正 −0.004 对上 ∣A∣|A| 的 0.378–2.646。论文给了上界(Lemma D.1)却没有给 HH 的量级,也没有 λ0\lambda_0 扫描。要补的其实只是一张表:λ0∈{0.001,0.01,0.1,1}\lambda_0\in\{0.001,0.01,0.1,1\} 与 N0∈{60,120,240}N_0\in\{60,120,240\} 的网格。

动机里最好的那个用法没进产品,也没和产品对撞。 dd-filtered decoding 不改权重就拿到 +14.2 分,比训练侧的 +5.63 大 2.5 倍。论文既没有把它用在训练后模型的评测上,也没有「GRPO + dd-filtered decoding」这一臂。§4.4 的 1.8% 是 teacher-forced 探针的成本(整段并行、只在前 20% 步内),不能外推到解码滤波——后者按附录 C.2 的写法,每步都要对全词表在 4 个扰动下各算一次分布,约 5 倍解码开销。

该报的两个量没报。 按表 4 的漂移排序,SCAPO 直接压的就是反思标记(2.74×)与语篇连接词(2.32×)。那么训练后模型的响应长度、反思标记频率、连接词密度必然变了,而全文没有一处这类统计。这三个量是「收益是不是来自一个廉价方向」最直接的判据。

对大模型领域的影响

token 级信用分配这一族从 2025 年起一直在换信号源:熵、置信度、资格迹、未来 KL、片段遮蔽归因。SCAPO 加进来的是第四种——输入侧干预下的稳定性。这一路的好处是不依赖过程标注与外部奖励模型,代价是多一套「扰动生成器」的前置依赖(本篇是 GPT-5.5,68K 次生成)。

更值得留意的是它把「鲁棒性」从评测指标搬成了训练信号。以往鲁棒性是训完再测的东西,本篇证明它可以在训练中被逐 token 地塑形——即使最终的量级存疑,这条路径本身对 RLVR 是有价值的。

5 实践启示

可以借鉴的技术

  1. 半事实探针本身:改 prompt、保答案、teacher-force 固定响应、取概率比的对数差。这一套与下游算法正交,能直接挂到数据筛选、样本打分、评测集分拣上。d=2tanh⁡(∣Δlog⁡p∣/2)d=2\tanh(|\Delta\log p|/2) 这个有界形式比绝对差更稳,值得单独抄。
  2. 组内双重 z-score:先逐扰动类型标准化再平均,之后再标准化一次。它把「绝对抖动多大」换成「在这组 token 里排第几」,对小量纲信号是必要的。
  3. 负部 + stop-gradient 的组合:信号只做减项、不参与梯度回传。任何「拿一个外部诊断量去修正 RL 优势」的做法都可以先套这个保险。
  4. 有限时长 schedule 与它的上界:定理 D.2 的 mT/Tm_T/T 衰减给了「干预多久」一个可写的理由。代价是 λ0\lambda_0 与 N0N_0 都没扫。
  5. 反事实那一臂:把你构造的「正向信号」换成语义相反的同类版本,看它是不是掉到基线以下。这是成本最低的一条归因检验。

潜在应用场景

  • 数学与代码 RLVR:成本 1.8%、只需预计算 4 个扰动 prompt,接入门槛确实低。建议先在自己的池子上量一下零方差组占比——如果你的池子上 k=0k=0 的组远多于 25%,SCAPO 起作用的通路就在那里。
  • 鲁棒性优先的训练:NoOp / ThinkBench 这类输入扰动集上余量最大(+1.87 / +2.22),与机制同源。若目标本来就是抗干扰,这条路的性价比高于刷竞赛分。
  • 数据侧复用:漂移画像不必进 RL。按 token 类目的漂移排序(表 4)可以直接用来做 SFT 数据清洗、反思标记密度控制、或者给「哪些位置的监督该保留」定权重。
  • 别直接照搬的两个地方:GPQA-Diamond 上相对最强基线只有 +0.53 / +0.29,跨域迁移没有证据;λ0=0.01\lambda_0=0.01 没有扫描,换基座时这个值要自己重扫。

相关精读