多轮 Agent 信用分配深读:奖励「给谁」是二阶问题,「覆盖多广」才是一阶

深读 arXiv:2609.02417《Coverage, Not Targeting》:终态验证的多轮 Agent 里,验证器只暴露 k=1 步、成功却要 C=5–8 步硬前置链(V_d≈0.15);这时把奖励「对准关键步」是二阶的,把固定预算铺到覆盖全链才是一阶——shuffled 对照证明定向本身不带来收益,相位边界在 V_d*≈0.8。附我用 numpy 按附录 C 复现的两条扫描,和两笔能拿笔算完的账。

我第一次动手复现这篇论文时,结论是反的:让「集中奖励」只喂给前几个关键步,它反而比「均匀撒到每一步」学得快。我差点就把「集中更好」写进笔记。直到把训练步数从 120 拉到 400 才看到反转——集中式飞快学会它看得见的那几步,然后永远停在那里;均匀式慢半拍,却一步步把整条链补齐。我撞上的不是 bug,是这篇论文最核心的东西:在一条「缺一不可」的任务链上,你奖励了哪几步是次要的,你有没有覆盖到整条链才是主要的。

第二次翻车更隐蔽。我让验证器「按前缀」暴露步骤(前 50% 的步可见),交叉点跑到了 0.5;改成论文里的「每步独立随机暴露」后,交叉点回到 0.8 附近。差别的根源是一道几何级数——这也是本文后面会让你拿笔算完、我用蒙特卡洛核验过的地方。

今天聊的是多轮工具 Agent 训练里最老、也最容易答错的问题:一局 rollout 只在最后拿到一个 0/1,这一份奖励该怎么分到中间的十几步上? 主流做法是想办法「对准」——训一个 turn-level critic、上个过程奖励模型(PRM)、按每步进度加权,潜台词都是「把奖励放到真正立功的那一步」。Zhou et al. 这篇 Coverage, Not TargetingarXiv:2609.02417,22 页 7 图 8 表)用一组控制得极干净的实验说:在终态验证器主导的今天,这个「对准」轴是二阶的;一阶的是「覆盖」。

站内前置:强化学习为什么需要「奖励 × log 概率」、GRPO 的组归一化优势从哪来,见《为什么大模型需要强化学习》《PPO 的训练循环》;τ-bench 系评测的全景见《大模型 Benchmark 地图》;工具调用为什么是「目标函数的影子」见《模型为什么会伸手》。这篇正好接住《Agent 工程七问》里挂着的那个开放问题——「五十步的任务最后只给一个 0/1,哪一步立了功没人知道」。

名词速查

术语一句话解释
rollout一局完整的多轮轨迹:Agent 调一串工具,最后由程序判分
信用分配(credit assignment)终局那一个奖励,该算到中间哪些步头上
终态验证器(terminal verifier)只看最终世界状态(数据库/文件系统/API 台账)给一个分,过程不看
硬前置链(causal chain)一串「缺一不可」的工具调用:不先查到订单,就没法换货,长度记为 CC
GRPODeepSeekMath 提出的策略梯度变体:用一组 rollout 的均值/方差把奖励归一化成优势 AiA_i,省掉 critic
Vd=k/CV_d=k/C验证器信息密度:一条 CC 步因果链里,验证器能独立判出对错的步数 kk 占比
参与预算 kk一份奖励实际「撒」到了几个步上(participation ratio)
write-fraction一条链里真正改变世界状态的「写」步占比;「读」步不改状态
shared-rollout几个对照臂共用同一批 rollout、同一个优化器,只改奖励形状,从而隔离变量
shuffled control把「按进度集中」的权重打乱到随机步上:浓度不变、只抽掉「对准」信息
reward-to-go经典延迟奖励解法:某步拿它之后所有奖励之和,天然把终局信号往前铺
τ²-bench / BFCL V3两个多轮工具 Agent 基准:前者查数据库终态,后者每轮查后端状态

一句话根本约束

多轮 Agent 的 per-step 奖励之所以该「均匀铺满」而不是「对准关键步」,是因为一个物理事实:终态验证器只能观测到改变世界状态的步(实测 k=1k=1),而任务成功依赖一条 C=58C=5\text{–}8 的硬前置「读链」——策略梯度要推动整条 AND 链,但验证器供不起覆盖全链的信号。

这句话是可反驳的:一旦约束消失——验证器能独立、逐步地判出每一步对错(Vd1V_d\to 1)——结论就当场反转,那时「对准」反而赢。论文在合成环境里测出反转点在 Vd0.81V_d^*\approx0.81,这正是「可反驳」的价值:它不是「均匀大法好」的信条,而是一张有坐标的相位图。

反事实崩点:换成最朴素的做法——把奖励按「进度」集中到看起来立功的那一步。它先崩在哪?硬前置链是 AND 逻辑,第一个拿不到梯度的前置步会停在随机水平(KK 选 1,正确率 1/K1/K),整条链从那里截断,后面的步做得再对也不计分。崩多少量级?真实 Agent 是 k=1,C=58k=1,C=5\text{–}8Vd0.15V_d\approx0.15,离反转点 0.81 差 5.4 倍;我在自己的玩具里测出 C=8C=8 时集中式只到 0.39、均匀式 0.66。

共同祖先:这是时序信用分配这个 1960 年代就有的老问题(Minsky)的又一次实例化——reward-to-go、资格迹、Ng et al. 1999 的 potential-based shaping、RUDDER 的回报分解,都在解「延迟奖励怎么往前传」。这篇的增量不是又造一个分配器,而是把「往哪传(targeting)」和「传多广(coverage)」两根轴用一个 shuffled 对照掰开,证明在 CkC\gg k 的区间里,后者一阶、前者二阶。用本站那副 AI 原理透镜看,它同时踩在「目标函数即命运」(你怎么度量、就得到什么;奖励形状决定你实际学到什么)和那条工程影子原理「瓶颈塑造设计」上——这里最稀缺的资源不是模型算力,是可观测的 per-step 信号,奖励该怎么塑形正是被这个稀缺量逼出来的。

先把场景摆具体:一次换货 rollout 长什么样

抽象之前先给最小具体例子。τ²-bench retail 里一道典型的「换货」题,Agent 要做的事是一条有硬数据依赖的链:

查用户(get_user_details) → 查订单(get_order_details) → 找替换商品(find_product)
→ 再读几条库存/政策 → 最后 exchange_item 一次写入数据库

关键点:前面那一串全是「读」,不改数据库;只有最后一步是「写」。 终态验证器比对的是数据库字段变化,于是它能看到进度的,只有最后那一次写入。你没法跳过查订单直接换货——论文做了静态数据流检查:成功轨迹里 100% 的终态写入参数(order id、product id)都来自前面的「读」返回值,76 个被写入消耗的标识里 94.7% 压根不在用户指令里。也就是说,这些「读」不是凑数,是物理上不可省的前置。

这就是矛盾的全部来源:因果结构是摊开的(5–8 步),可观测信号却是缩成一点的(1 步)。

flowchart TD
  A["读用户"] --> B["查订单"] --> C["找替换商品"] --> D["更多前置读"] --> E["终态写入:唯一改变 DB 状态"]
  E --> V{"终态验证器<br/>只在这里产出信号,k=1"}
  V --> U["uniform 均匀:信号摊回每一步,整条 AND 链都有梯度"]
  V --> T["per-turn 集中:压到进度步,前置读拿到 0,链在最前面截断"]
  V --> S["shuffled:压到随机步,结果和 per-turn 一样差"]

四种「信用几何」,以及为什么这个实验是干净的

论文在 τ²-bench retail 的纯数据库任务上,用 Qwen3-14B + GRPO + LoRA 对比四种分配方式。真正讲究的是它的对照设计——四个臂共用同一批 base-policy rollout、同一个优化器,连组归一化后的终端优势 AiA_i 都是同一个,只改「这份 AiA_i 怎么摊到各步」:

怎么分配同一份 AiA_i直觉里的角色缺了它会怎样(坏掉列)
binary粗糙的 0/1 结果分业界默认整组都失败时优势方差为 0,没有梯度可学
uniform连续的字段进度分,at=Aia_t=A_i 摊给每一步GRPO 标准动作链上某些步这一版没被推动
per-turn按各步进度占比 ΔSt\Delta S_t 集中,tat=Ai\sum_t a_t=A_i「聪明地对准」没进度的前置读拿 0,链覆盖不全
shuffled把 per-turn 的权重打乱到随机步对照组——它专门用来抽掉「对准」信息

两个细节让结论可信:其一,全局梯度范数裁剪(clip=1.0)在每个臂每个 epoch 都打满,于是各臂更新幅度相同、只差更新方向;其二,per-turn 其实比 uniform 多看到了信息(它知道进度发生在哪一步),所以这个对照天然偏向 per-turn——它还输,才说明问题。

必须诚实标注一个边界:这种「共用 rollout」的干净隔离只在第一次策略更新成立。一旦训练继续,各臂会采到各自的数据,几何效应就和数据采集混在一起。所以论文把「单次更新对比」作为研究对象,长程训练动力学明确划在范围外。这是克制,不是疏漏。

第一层结论:稠密是必要的,但还不充分

先看密度轴。uniform 相对 binary,在留出集的 assert-support 指标上 +0.079(5 个 seed 里 4 个为正,单尾 Wilcoxon p=0.003p=0.003),官方成功率 +5.2pp。更刺眼的是相对「未训练 base」:binary 奖励在 5 个 seed 里有 4 个把策略训得更差,uniform 则在 4/5 上变好(+0.041)。稀疏的结果分不是「弱一点」,是在匹配条件下净有害

但稠密不是万能。把同一份稠密优势按进度集中(per-turn),它在每个 seed 上都输给 uniform(均值 −0.053,0/5 为正;官方成功率 −0.063)。还有个漂亮的小结果:把稠密分三档离散化(0 / 0.5 / 1)能保留 96% 的收益(+0.076,5/5)。收益来自「整组全灭时仍然存在非退化梯度」,不来自奖励分辨率有多细。

第二层结论:是「集中度」有害,不是「对准」错了

这是全文最反直觉、也最有方法论价值的一着。如果 per-turn 输是因为它「对准了错误的步」,那把奖励打到随机步上应该更糟。结果没有:shuffled 和 per-turn 落在彼此的噪声里(shuffled − per-turn = +0.014,95% CI [0.07,+0.10][-0.07,+0.10]),俩都远低于 uniform。

翻译成人话:抽掉「哪一步真有进度」这条信息,代价是零。 这直接否证了「per-turn 是因为瞄得不够准才输」——要是瞄准则能救,打乱应该显著更差。在 CkC\gg k 时,一个孤立的奖励尖峰无论落在哪里,都只覆盖了 5–8 个因果步里的 1 个,「落在哪」是在几个同样不完整的覆盖里做二阶选择,「是不是只给一个尖峰」才是一阶的。

这个 matched-concentration shuffled control 是论文留给社区的一件工具:以后谁声称「我的 per-turn 奖励因为瞄得准所以涨点」,都该加一个「浓度相同、打到随机步」的对照;过不了这一关,涨点就可能只是覆盖广度或有效步长带来的,跟「对准」无关。

机制:两笔你能拿笔算完的账

实验结果到上面还是「论文这么说」。这部分是我自己动手的地方——我按论文附录 C 的规格写了个最小合成环境(两层 MLP 共享策略、T=12T=12 步、GRPO、硬前置链),把机制算到自己信服。论文没有放代码,所以下面是我自己的精简复现,数字是我跑出来的,不是论文原数。

账一:k<Ck<C 时,「一次更新覆盖全链」的概率恒等于零

合成环境里 T=12T=12 步,其中 CC 步因果必要,一份集中奖励只够撒到 kk 个步上。问:这一次更新,整条 CC每一步都拿到非零梯度的概率是多少?

这是个不放回抽样:从 TT 步里选 kk 步给奖励,要正好把 CC 个因果步全包进去。记 PcoverP_{\text{cover}} 为「整条链全覆盖」的概率:

Pcover={(kC)/(TC),kC0,k<CP_{\text{cover}}=\begin{cases}\binom{k}{C}\Big/\binom{T}{C}, & k\ge C\\[4pt] 0, & k<C\end{cases}

当预算 kk 比链长 CC 小的时候,上面那个组合数根本不存在,概率恒为零,不是「小」,是零。脚本核验(T=12T=12):

C=8,k=1: P(全覆盖)=0.0000  期望覆盖因果步比例=0.125
C=8,k=3: P(全覆盖)=0.0000  期望覆盖因果步比例=0.375
C=3,k=3: P(全覆盖)=0.0045  期望覆盖因果步比例=1.000
C=6,k=3: P(全覆盖)=0.0000  期望覆盖因果步比例=0.500

注意 C=3,k=3C=3,k=3 那行:即便预算恰好等于链长,随机撒中全链也只有 0.0045,因为还要赌它别撒到那 TC=9T-C=9 个非因果步上。而真实 Agent 是 k=1,C=58k=1,C=5\text{–}8——单次更新在结构上不可能覆盖整条链,跟你瞄得多准没有任何关系。 uniform 为什么没这问题?它把信号给全部 TT 步,CC 个因果步一个不落,覆盖概率恒为 1。

账二:为什么反转点偏偏在 0.8 这么高——一道几何级数

第二笔账解释「验证器得看多全,集中才开始划算」。假设每个因果步独立地以概率 qq(就是 VdV_d)被验证器看对,取链长 C=10C=10(和下面第二条扫描一致)。硬前置链会在第一个没被看到的步处截断,那么从链头连续可见的长度 LL 满足 P(Lj)=qjP(L\ge j)=q^j,于是可打通的链占比期望是

E[LC]C=1Cj=1Cqj=q(1qC)C(1q).\frac{\mathbb E[L_C]}{C}=\frac{1}{C}\sum_{j=1}^{C} q^j=\frac{q(1-q^C)}{C(1-q)}.

这是个等比级数,我用 20 万次蒙特卡洛核验,解析解和模拟逐位相等:

q=0.25: 解析(1/C)Σq^j=0.033  蒙特卡洛=0.033
q=0.50: 解析=0.100           蒙特卡洛=0.100
q=0.75: 解析=0.283           蒙特卡洛=0.283
q=0.80: 解析=0.357           蒙特卡洛=0.357
q=0.90: 解析=0.586           蒙特卡洛=0.586

看明白这张表,就看懂了反转点为什么高得反直觉:每步看对 75%,听着很靠谱,可一条 AND 链只能打通 28%——因为链是被「第一个盲点」卡死的,短板以几何级数放大。要追上一个「覆盖全链、但每步信号弱」的 uniform 基线,qq 得到 0.8 往上。这正是论文实测交叉点 Vd0.81V_d^*\approx0.81(状态依赖链;独立步链约 0.95)的来历。我第二次翻车(把「随机暴露」错写成「按前缀暴露」导致交叉点跑到 0.5)就是栽在这道级数上:按前缀暴露没有「中间出盲点」,几何截断机制就不存在了。

我亲手跑的两条扫描

把上面两笔账接进一个真在学习的小模型(T=12T=12,共享两层 MLP,GRPO,400 次更新,全局 clip=1.0,每条 rollout 的信用总量都归一到 Ai|A_i|,保证臂之间只差形状)。第一条固定预算 k=3k=3、扫因果链长 CC(16 个 seed,集中式我故意给它最优待遇——只喂前 kk 个因果步):

 C   uniform  concentrated(k=3)  gap(conc-unif)
 1   1.000      1.000              +0.000
 2   1.000      1.000              +0.000
 3   1.000      1.000              +0.000
 4   0.922      0.797              -0.125
 6   0.854      0.562              -0.292
 8   0.656      0.391              -0.266
10   0.538      0.325              -0.213
12   0.427      0.255              -0.172

相位边界精确落在 C=k=3C=k=3:链塞得进预算时两者打平,链一超出预算集中式就单调落后,C=6C=6 时差到 −0.292。第二条固定 C=10C=10、扫验证器密度 VdV_d(20 个 seed,targeted 臂只在随机暴露的步上拿独立局部信号):

 Vd   uniform  targeted  gap(targ-unif)  几何上界 (1/C)Σq^j
0.00  0.380    0.010     -0.370          0.000
0.25  0.380    0.025     -0.355          0.033
0.50  0.380    0.135     -0.245          0.100
0.75  0.380    0.350     -0.030          0.283
0.90  0.380    0.515     +0.135          0.586
1.00  0.380    0.785     +0.405          1.000

uniform 一条横线(它本来就覆盖全链,验证器看不看得见每步与它无关),targeted 随覆盖度单调爬升,两者在 0.75→0.90 之间交叉——和论文 0.81 的交叉点、以及「targeted 的分数纯粹随覆盖增长、uniform 持平」的 Fig.4b 机制,定性一致。这两笔账和两条扫描,就是我相信这个结论不是话术的原因。

为什么真实 Agent 逃不出低 VdV_d:write-fraction 天花板

你可能会想:那把验证器做密一点不就行了?在「没有 oracle 标签、也没有学习型逐帧标注」的前提下,论文给出一个结构性上限,断了这个便宜:

Vdwrite-fractionV_d\le \text{write-fraction}

道理很硬:一个靠「世界状态变化」打分的验证器,只能归因改变状态的步;一次「读/查询」返回了信息但没留下状态增量,它对那个事先未知的目标有没有帮助,验证器是瞎的——除非你喂 oracle 标签或训一个判官模型。论文普查了主流多轮工具 Agent 基准,没有一个天然高 VdV_d

基准验证器形态VdV_d
τ²-bench查最终数据库状态(终态)0.12–0.20(实测)
BFCL V3 多轮每轮查后端状态,但只在「写」步触发≈0.4(实测,5–6 步里中位看 2 步)
SWE-bench打完补丁跑测试(终态)k=1k=1(评分代码解析可得)
WebArena / OSWorld查最终页面/系统状态k=1k=1(评分代码解析可得)
AppWorld终态单测结构性偏低
ToolSandbox轨迹里程碑部分覆盖
ScienceWorld模拟器逐步打分高,但不是工具域

连「每轮都查」的 BFCL V3 都只有 0.4,离 0.81 的反转点还差一半。这带来一个视角转换:PRM、turn-level critic 这些方法的真正作用,不是「免费的流式验证器」,而是在花钱填 write-fraction 挖下的观测坑——它们把有效 VdV_d 抬上去,代价是标注/训练一个会犯错的判官,并且这个判官如果也只把信号集中到少数步,照样继承同样的覆盖风险。

相位图与边界:什么时候这套结论成立、什么时候失效

flowchart TD
  Q{"验证器能独立判出因果链的多少?V_d = k/C"}
  Q -->|"V_d 小于约 0.8:终态验证器的常态(tau2=0.15,BFCL=0.4)"| LOW["覆盖优先:固定预算均匀铺全链,任何集中都是覆盖赌博"]
  Q -->|"V_d 接近 1:逐帧打分 / 有靠谱过程验证器"| HIGH["定向才划算:信号已覆盖全链,集中只是传导已有覆盖"]
  REAL["真实工具 Agent:读操作不改状态,V_d 被 write-fraction 锁死在低位"] -.结构上落在.-> LOW

论文的扎实之处在于它把「什么时候该 null」也预测并验证了,而不是只报喜:

  • 能力地板:Qwen3-4B 上对比是 null,因为它只有 24% 的 rollout 能走完整条前置链(14B 约 70%)。链都走不完,任何信用几何都没东西可覆盖——这是完成度问题,不是链变短了。跨家族的 Llama-3.1-8B 同理(基线成功率 2%,只有 50% 的写入参数来自它自己的读,属于「走了链但没消费」),甚至 Llama-3.3-70B 在同任务上 0/32。
  • 信号分辨率门:telecom 域稠密信号的中间料太薄,臂间拉不开,也是 null。
  • 跨家族复现:在 BFCL V3 上用工具特化的 ToolACE-2-8B(Llama-3.1 家族),集中式仍输:汇总 32 个预注册 seed,Δ=0.048\Delta=-0.048t=6.54t=-6.54,29/32 为负),独立 20-seed 复现自身显著(−0.054)。
  • 剂量反应:固定总信用量,覆盖从 1 步扩到 checker 可见步再到全部工具调用,劣势单调收窄、到全链覆盖归零(−0.048 → −0.017 → +0.010);把集中式学习率翻倍、让它的更新 KL 比 uniform 高两个数量级,仍然 −0.024——这不是步长问题,是覆盖问题。
  • 经典解药的重新解释:reward-to-go(某步拿它之后所有奖励之和)能追平全链覆盖。论文点破原因:纯终态奖励下 reward-to-go 本来就是常数、本来就是均匀分配;它赢,是因为它恢复了前缀覆盖,而不是因为它「瞄得更准」。这跟共同祖先那一节正好闭环。

落到工程:给 Agent 设计奖励时怎么用

灰度地说,这不是「永远均匀、过程奖励无用」,而是一张可判别的决策表:

  1. 先量 VdV_d,再决定奖励形状。 数两件事:成功轨迹的硬前置链长 CC(用数据流回溯,别数总步数注水),验证器能独立判对错的步数 kkVd=k/CV_d=k/C 明显低于 0.8——默认把固定预算均匀铺到全链,别上精巧的 per-turn 权重。
  2. 想主张「我的定向分配有用」,先过 shuffled control。 加一条「浓度相同、打到随机步」的臂;如果它和你的聪明定向差不多,你的收益来自覆盖或步长,不来自定向,写论文/做复盘时别把功劳记错。
  3. 想抬高 VdV_d,只有三条真路径:让更多步改变可判状态(把「读」的中间产物落进可校验的状态)、上学习型判官(PRM/critic,承担它自己的偏差)、或用 oracle 标签。单纯把同一个终态信号「重新分配」是抬不动 VdV_d 的。
  4. 对照实验务必 within-run paired。 论文测到同一批训练好的适配器换个评测 batch,assert-support 能漂 +0.061/−0.042/+0.112/+0.159——这漂移量级和信用几何效应本身一样大。跨 run 比大小在这种评测预算下不可靠,让对照臂共享 rollout、在同一个 batch 里评。
  5. 模型够不到能力地板时别折腾奖励。 前置链都走不完整(如小模型 24% 完成率),先补 grounding/能力,信用分配是链能走完之后才有的议题。

小结

  • 根本约束:终态验证器只看得见「写」(k=1k=1),成功却靠一条 5–8 步的硬前置「读链」(CC);梯度要覆盖整条 AND 链,信号供不起——所以 CkC\gg k 时覆盖是一阶、定向是二阶。
  • 崩点:固定预算集中在 k<Ck<C 时,单次更新覆盖全链的概率恒为 0;硬前置链把「每步 75% 可见」放大成「整条只通 28%」(等比级数),反转点因此高到 Vd0.81V_d^*\approx0.81,而真实工具 Agent 被 write-fraction 按在 0.15。
  • 可带走:量 VdV_d → 低于 0.8 就均匀铺全链 → 任何「定向更优」的主张先过同浓度 shuffled control → 想破局去抬 VdV_d(可校验状态 / 学习型判官 / oracle),而不是把同一个终态奖励换个分法。

收尾(可动手:10 分钟跑一遍相位边界)

不用 GPU、不用训大模型,纯 numpy 就能亲手摸到那条边界:建一条 T=12T=12 的硬前置链,让一个小 MLP 用 GRPO 学,对比「均匀」和「只喂前 kk 步」,把 CC 从 1 扫到 12——你会亲眼看到交叉点正好落在 C=kC=k。核心更新逻辑不到二十行:

# 伪代码 + 可运行骨架:GRPO 一次更新,w[i,t] 是摊给第 i 条 rollout 第 t 步的信用
R   = chain_reward(actions, causal_steps)      # 硬前置链:从链头连续对的长度 / C
A   = (R - R.mean()) / (R.std() + 1e-8)        # GRPO 组归一化优势
# uniform:  w[i,t] = A[i]/T        每一步都给 -> 覆盖全链
# concentrated: w[i,t] = A[i]/k    只给预算内的 k 步 -> k<C 时链覆盖不全
for t in range(T):
    grad_logits[t] = sum_i w[i,t] * (onehot(action[i,t]) - prob[i,t])
# 反向传播更新共享策略;全局梯度范数 clip 到 1.0,保证两臂只差方向不差幅度

成本:pip install numpy 约 2 分钟,跑完整条 CC 扫描在笔记本上约 1–2 分钟。跑完你会得到和本文一致的那张表:CkC\le k 打平、C>kC>k 后均匀式单调领先。用一次亲手跑换一个坐标——以后再看到任何「turn-level 奖励 / PRM / 信用分配」论文,你第一反应不再是「它的分配器巧不巧」,而是先问「它把有效 VdV_d 抬到了 0.8 以上吗,覆盖全链了吗」。


诚实的提醒(这篇里比较软的地方)

  • 两笔手算(组合恒零、几何级数)是严格的,脚本核验过,读者可直接复算;但两条 numpy 扫描是我按附录 C 规格写的精简复现,不是作者原实现(论文未放代码):我用的是单隐藏层 16 宽 MLP、400 次更新、16–20 seed,绝对数值(如 uniform 在 C=8C=8 为 0.656)是我这套玩具的数,论文的真实模型数字是 Qwen3/ToolACE 上的 +0.079、−0.053、Vd0.81V_d^*\approx0.81 等,两者只做定性机制对齐,不做数值等同。
  • 我的 VdV_d 扫描交叉落在 0.75–0.90,和论文 0.81 同区间,但这是区间吻合不是精确复现;论文的 0.81 来自 32 个 paired seed、状态依赖链的完整设置,我的玩具用单隐藏层 16 宽 MLP、每组 10 条 rollout,参数更省。
  • 真实模型上的所有数字(τ²-bench、BFCL、ToolACE、各 seed 数与显著性)都出自论文原文、正文带链,我没有 GPU 复现这些大模型实验;论文最关键的方法学限制——shared-rollout 隔离只在第一次策略更新严格成立、长程训练动力学未覆盖——我在正文单独标了,没替它打包票。
  • 「write-fraction 天花板」对纯读任务成立;像 ScienceWorld 这种模拟器逐帧给分、或有人写了稠密里程碑校验的环境(ToolSandbox)确实能拿到更高 VdV_d,那时结论应按相位图右侧处理,本文不主张「均匀万能」。

参考来源

arXiv 论文

工程实践

站内相关