HarnessBandit:下一步强化学习,该让哪个智能体接口来训练?

笔记日期: 2026-11-03 · 笔记作者: Zhongzhu Zhou
论文: HarnessBandit: Joint Learnability-Transferability Scheduling for Multi-Harness Agentic Reinforcement Learning
论文作者: Hongliang Wei、Xiaobing Tu、Yinggui Wang、Zhengxi Liu、Rongkun Xue、Jinkui Ren、Xiantao Zhang、Debin Zhao、Xiaopeng Fan
arXiv: 2609.13739 · 版本与日期: v1,2026-09-12

1. 同一个模型,为什么还要挑训练时使用的接口?

把语言模型放进一个能够操作文件、调用工具的智能体里,模型外面还有一层决定行为的环境:系统提示怎么写,哪些工具可以调用,参数格式是什么,报错之后怎样继续,历史记录怎样拼接。这一层通常称为 harness。这里将它称为“执行接口”,但它不只是一个函数接口,还包括整个交互循环。

即使模型权重和用户任务都相同,换一个 harness,模型实际看到的上下文、生成的工具调用和最终奖励也可能不同。因此,多接口训练不等于把同一道题机械复制几遍。它试图让一份共享权重适应多种交互方式,同时也面临一个很实际的问题:下一批昂贵的智能体轨迹,该通过哪个接口来采集?

HarnessBandit 的回答是,每一步优化只使用一个接口产生的批次,再利用这一步已经计算出来的优势和梯度,调整下一步选择各个接口的概率。它关注两个问题:这个接口当前还能不能提供有区分度的学习信号?沿着它的梯度更新,会不会与其他接口的训练方向相容?前者叫 learnability,后者叫 transferability。

这种拆分很有价值。一个接口有很多成功与失败混合的尝试,说明模型还有可学的地方;但学到的可能只是这个接口特殊的工具语法。另一个接口的梯度方向与大家接近,却可能已经没有多少奖励差异。作者用两个信号的加权平均来分配训练机会,GRPO 本身的目标函数保持不变。

先给出阅读结论:论文报告的结果支持这种调度思路值得继续研究,但还不能把它理解成“保证正迁移”或者“训练加速多少倍”。它在 PinchBench 上相对两接口混合训练只提高 1.3 个百分点,在 ClawEval 上提高了三次尝试中至少成功一次的任务数;三次都成功的任务数则只是回到基础模型水平。本文会把这些不同口径分开讨论。

这篇笔记基于完整 13 页论文及附录 A–F。实验数值来自原文表格;下面的简化推导、反例和重绘图是为理解方法而做的分析,不是新增训练实验。附录中有两处数值口径需要作者澄清,本文保留问题,不替作者补出没有报告的细节。

图 1:根据论文第 3–4 节重绘的调度流程。一个训练步只使用一个 harness;反向传播产生的梯度在优化器更新前被采样,调度信号影响后续步骤。

2. 先把任务、接口和强化学习批次分清楚

2.1 六个接口,共享同一批任务与同一个模型

论文使用 2,000 个 ClawGym 任务,与六种接口做笛卡尔积,形成 12,000 个任务—接口组合。六个接口分别是 Gemini CLI、OpenCode、Qwen Code、Pi、OpenClaw 和 Codex。训练的是同一个 Qwen3.5-2B,而不是每个接口一份独立模型。

每个任务包含用户请求、初始工作区和最终检查器。检查器给出 [0,1][0,1] 范围的奖励。接口则决定模型如何接触这个任务。若用 xx 表示任务、hh 表示接口、zz 表示完整轨迹,那么轨迹分布是 πθ(z∣x,h)\pi_\theta(z\mid x,h)。即使 xx 不变,改变 hh 仍会改变轨迹分布。

这与“数学用一个训练臂,代码用另一个训练臂”的课程学习不完全相同。这里每个臂覆盖同一个任务全集,各自维护打乱后的任务池。这样可以减少“某接口只是分到了更容易的题”这种整体混淆,但不能保证任意两个训练步恰好抽到难度相同的题。训练过程中的局部任务差异仍然存在。

多接口之间也不是只有提示词不同。一个接口的错误信息可能更容易被模型理解,另一个接口的工具格式可能更难生成。调度器可能同时在挑选学习空间、交互便利性和迁移方向。这些因素都能改变结果,不能仅凭总分上升就认定其中某一个因素起了决定作用。

2.2 为什么一题要生成多条轨迹?

对于一个选中的任务,训练器采样 GG 条轨迹,并比较它们的奖励。论文采用 leave-one-out 基线:评价第 ii 条轨迹时,用其他轨迹的平均奖励作为参照。原文还明确说不再除以组内奖励标准差。最直接的写法是

Ai=ri−1G−1∑j≠irj=GG−1(ri−rˉ),rˉ=1G∑iri.(1)A_i=r_i-\frac{1}{G-1}\sum_{j\ne i}r_j =\frac{G}{G-1}(r_i-\bar r), \qquad \bar r=\frac{1}{G}\sum_i r_i. \tag{1}

第二个等号只需要把其他轨迹的奖励和写成 Grˉ−riG\bar r-r_i。这个式子说明,优势衡量的是“比同组其他尝试好多少”,不是绝对奖励本身。全部成功的一组,奖励很高,但奖励差异为零;全部失败的一组,同样没有组内对比信号。

论文的动态采样会剔除奖励方差为零的组。这里要记住两层分布:最初生成了哪些轨迹,以及最终哪些组进入优化批次。只统计留下来的组,得到的是条件分布上的信号。它不能自动告诉我们为了找到这些组花了多少采样时间。

2.3 调度器没有改变 GRPO 的更新目标

将当前策略与采样策略的概率比记为 ρ\rho,裁剪半径记为 δ\delta,训练损失可概括为

L(θ)=E ⁣[−min⁡ ⁣(ρA,clip⁡(ρ,1−δ,1+δ)A)]+λKLDKL(πθ∥πref).(2)\mathcal L(\theta)= \mathbb E\!\left[-\min\!\left( \rho A,\operatorname{clip}(\rho,1-\delta,1+\delta)A \right)\right] +\lambda_{\rm KL}D_{\rm KL}(\pi_\theta\Vert\pi_{\rm ref}). \tag{2}

这里刻意用 δ\delta 表示裁剪范围,避免与后文调度器的探索比例混淆。HarnessBandit 改变的是这一步损失由哪个接口的数据构成。它没有做梯度投影,没有把冲突梯度删除,也没有额外创造一种任务奖励。

一个训练步的所有微批次完成反向传播后,才有用于调度的批次梯度。取样时机在优化器更新之前。这既保证信号对应完整批次,又让它与本次训练实际使用的参数状态一致。调度器并不是先免费知道六个接口当前的梯度,再挑一个最好的;它只能在已经付出一次 rollout 和反向传播成本之后,更新对被选中接口的认识。

3. Learnability:奖励有对比,不代表学习就便宜

3.1 从 token 到轨迹,再到任务组

论文的 learnability 是绝对优势的分层平均。先在每条轨迹的有效 token 上平均 ∣A∣|A|,再平均同一个任务组中的轨迹,最后平均这个接口批次中的任务组。用 Mi,tM_{i,t} 表示有效 token 掩码,可以写成

ℓi=∑tMi,t∣Ai,t∣∑tMi,t,Lh=1∣Gh∣∑g∈Gh1∣g∣∑i∈gℓi.(3)\ell_i=\frac{\sum_tM_{i,t}|A_{i,t}|}{\sum_tM_{i,t}}, \qquad L_h=\frac{1}{|\mathcal G_h|} \sum_{g\in\mathcal G_h}\frac{1}{|g|}\sum_{i\in g}\ell_i. \tag{3}

这种平均方式避免了长轨迹仅仅因为 token 多,就在调度分数中占更大权重。如果调度的基本单位是任务组,这个设计很自然。不过,调度信号的权重不一定与损失函数中所有项的权重相同,所以不能把它直接叫作梯度大小。

更准确的理解是:LhL_h 衡量当前批次里有多少奖励对比。它不直接衡量梯度方差、裁剪后还剩多少更新、工具调用要多久,也不判断这份对比是否有利于部署任务。它把方向信息全部丢掉了,因此需要另一个信号补充。

3.2 一个可以完全算清楚的二元奖励例子

假设奖励只有 0 和 1,一个任务生成 GG 次,其中 kk 次成功。由式 1 可得,成功轨迹与失败轨迹的优势分别是

Asuccess=G−kG−1,Afailure=−kG−1.(4)A_{\rm success}=\frac{G-k}{G-1}, \qquad A_{\rm failure}=-\frac{k}{G-1}. \tag{4}

将 kk 条成功轨迹与 G−kG-k 条失败轨迹的绝对优势平均,得到

L(k)=1G[kG−kG−1+(G−k)kG−1]=2k(G−k)G(G−1).(5)\begin{aligned} L(k) &=\frac{1}{G}\left[ k\frac{G-k}{G-1}+(G-k)\frac{k}{G-1}\right]\\ &=\frac{2k(G-k)}{G(G-1)}. \end{aligned} \tag{5}

论文使用 G=8G=8。此时四次成功、四次失败的组达到最大值 4/7≈0.57144/7\approx0.5714。八次都成功或八次都失败时,数值都是零。这说明这个信号天然偏好当前模型眼中的中等难度,而不是越难越好,也不是成功率越高越好。

这个上界不只适用于二元奖励。如果八个奖励都在 [0,1][0,1] 内,未缩放的 leave-one-out 绝对优势均值仍不超过这个值。理由是,绝对偏差的平均是奖励向量的凸函数,在单位立方体上的最大值可以在顶点取得;顶点就是奖励只取 0 或 1 的情况。这个结论是后面检查原文信号尺度的重要参照。

3.3 把零方差组过滤掉,会怎样改变信号?

继续做一个分析用的简化假设:每次尝试独立,以概率 pp 成功。于是 kk 服从二项分布,且

E[k(G−k)]=G(G−1)p(1−p).(6)\mathbb E[k(G-k)]=G(G-1)p(1-p). \tag{6}

代回式 5,未经过滤时的平均 learnability 为

E[L]=2p(1−p).(7)\mathbb E[L]=2p(1-p). \tag{7}

过滤器剔除“全失败”和“全成功”两种组,因此保留概率为

Pkeep=1−(1−p)G−pG.(8)P_{\rm keep}=1-(1-p)^G-p^G. \tag{8}

被丢弃的组贡献的 LL 恰好为零,所以在保留下来的组上重新求平均,就有

E[L∣keep]=2p(1−p)1−(1−p)G−pG.(9)\mathbb E[L\mid\mathrm{keep}] =\frac{2p(1-p)}{1-(1-p)^G-p^G}. \tag{9}

例如 G=8,p=0.1G=8,p=0.1 时,只有约 56.95% 的组被保留,但留下来的组平均 learnability 已经约为 0.316。p=0.5p=0.5 时,几乎所有组都保留,条件均值约为 0.504。只看最终批次的均值,会弱化两者在“找到有用训练组的难易程度”上的差别。

图 2:本文根据式 7–9 计算的分析示意。左图比较过滤前与保留组上的绝对优势均值,右图给出组的保留概率。假设为八次独立尝试、二元奖励,不是论文的实测曲线。

实际智能体轨迹可能高度相关,因此不能把这个独立模型直接套成实验结论。它揭示的是一个一般性问题:同样的保留组信号,可能对应很不一样的原始采样成本。一个接口要尝试很多组才能凑满批次,另一个很快就能凑满,调度器仅凭 LhL_h 看不到这个区别。

因此,我更愿意把 learnability 翻译成“当前批次中的学习对比度”,而不是“单位成本的可学习性”。要讨论效率,至少应同时记录组保留率、生成 token 数和工具执行时间。即使奖励相关优势为零,也不能说整个梯度必然为零,因为 KL 项仍可能产生更新。

4. Transferability:梯度方向相近,到底能说明什么?

4.1 先看普通梯度下降下的一阶近似

设当前选中接口的梯度是 gh=∇Lhg_h=\nabla\mathcal L_h,另一个接口的损失为 Lj\mathcal L_j。如果使用步长为 aa 的普通梯度下降,那么在当前参数附近做泰勒展开,有

Lj(θ−agh)=Lj(θ)−agj⊤gh+O(a2)=Lj(θ)−a∥gj∥∥gh∥cos⁡(gj,gh)+O(a2).(10)\begin{aligned} \mathcal L_j(\theta-a g_h) &=\mathcal L_j(\theta)-a g_j^\top g_h+O(a^2)\\ &=\mathcal L_j(\theta) -a\|g_j\|\|g_h\|\cos(g_j,g_h)+O(a^2). \end{aligned} \tag{10}

这就是梯度余弦作为迁移信号的直觉来源。两个梯度点积为正时,沿着其中一个梯度的负方向走一小步,在一阶近似下也会降低另一个损失。余弦把梯度模长除掉,强调方向是否相容,而不估计这一步具体能降低多少。

但是,从这个局部结论走到“对其他接口的任务成功率有帮助”,中间还隔着几层假设。另一个梯度必须足够新;截取的参数子空间要有代表性;优化器实际走的方向要与原始梯度接近;训练损失下降还要能够转化成任务奖励提升。论文使用的是便宜的代理信号,不是直接测量这些条件全部成立后的正迁移。

4.2 Adam 改变方向后,正余弦也可能不够

论文的优化器是 Adam。把它概括为 Δθ=−aDtmt\Delta\theta=-aD_tm_t,其中 mtm_t 是动量,DtD_t 是逐坐标自适应缩放,那么另一个损失的一阶变化真正依赖的是 gj⊤Dtmtg_j^\top D_tm_t,未必是 gj⊤ghg_j^\top g_h。

可以用一个二维反例把差别说清楚。令 gj=(1,2)g_j=(1,2)、gh=(2,−0.5)g_h=(2,-0.5),原始点积是 2−1=1>02-1=1>0。为了单独观察缩放效应,暂时令动量等于当前梯度,并取 D=diag⁡(0.1,10)D=\operatorname{diag}(0.1,10)。这时

gj⊤Dgh=(1,2)⊤(0.2,−5)=0.2−10=−9.8.(11)g_j^\top Dg_h=(1,2)^\top(0.2,-5)=0.2-10=-9.8. \tag{11}

符号反过来了。这个构造并不是说论文中一定发生了这种情况,而是提醒我们:原始梯度相容,不等于优化器实际更新方向也相容。若要验证信号解释,比较原始梯度余弦与实际更新方向的余弦会比笼统地称为“迁移能力”更有信息量。

图 3:本文构造的二维反例。左侧原始梯度点积为正,右侧逐坐标缩放后的一阶相互作用变为负值。它说明代理指标的适用条件,不是 HarnessBandit 的实测失败案例。

还有一个细节:论文取的是训练损失的梯度,其中可能包含 KL 正则项。不同接口都被同一个参考模型约束,公共正则方向就可能增加它们的相似度。这种方向当然影响实际训练,但它不能直接被解释成“某接口学到的任务能力能迁移给其他接口”。把奖励相关梯度与正则梯度的贡献分开,会让这个信号更容易解释。

4.3 梯度摘要究竟怎么压缩?

保存六份完整梯度并不划算。作者只选最后四个 transformer block,排除 embedding 和输出 head,再从这些参数中固定抽取 65,536 个坐标。每个张量分到的采样配额与其元素数成比例。这里是坐标子采样,不是把整个梯度乘上一个稠密随机投影矩阵。

固定坐标很关键。如果这一次向量的第一个分量来自某个参数,下一次却来自另一个参数,直接点积就失去了比较意义。按张量大小分配坐标,则避免小张量和大张量被不合理地赋予相同采样量。但这只是合理的抽样设计,不能自动保证任何稀疏或高度集中的信号都能被保留下来。

假设选定子空间共有 DD 个坐标,每个坐标以相同概率 q=d/Dq=d/D 被抽中。对同一个抽样集合 II,有

E ⁣[∑k∈Igh,kgj,k]=qgh⊤gj,E ⁣[∑k∈Igh,k2]=q∥gh∥2.(12)\mathbb E\!\left[\sum_{k\in I}g_{h,k}g_{j,k}\right] =qg_h^\top g_j, \qquad \mathbb E\!\left[\sum_{k\in I}g_{h,k}^2\right] =q\|g_h\|^2. \tag{12}

点积和平方范数的期望都乘上同一个系数,这是坐标采样能够工作的一个直觉。但是余弦是随机量的比值;分子分母分别有好的期望,不等于比值本身无偏。少数坐标承载大部分梯度能量时,还可能恰好全部漏掉。

因此,应把“使用梯度摘要”与“具有某种随机投影定理的全部保证”分开。固定坐标抽样、稠密随机投影以及只看最后四层,分别引入不同的近似。论文评估的是其中一个具体配置,没有证明结果对采样维度、层范围或抽样随机种子都不敏感。

只看后四层也意味着,前面层与输出层中的冲突可能完全看不到。作者排除 embedding 和输出 head 的理由是减少 token 频率差异的影响,这有明确动机;替代方案则是跨多个层范围采样,再检查哪些部分对迁移最有预测力。不能仅因为某种参数组容易反映词频,就断言它对真实任务迁移完全无关。

4.4 分布式梯度先合并,再与其他接口的历史比较

摘要会在数据并行和上下文并行的 rank 之间合并。正确理解是先将对应原始梯度坐标相加,再对合并结果做方向比较。若先把每个 rank 的梯度都归一化,再相加,小梯度 rank 会被赋予过大的相对权重,一般不再等价于全局梯度方向。最后除不除共同的 world size,不影响余弦。

每个接口在 CPU 上保存自己的单位梯度摘要的指数滑动平均。用 mhm_h 表示这个记忆,η=0.3\eta=0.3,则

uh=g^h∥g^h∥,mh←(1−η)mh+ηuh.(13)u_h=\frac{\hat g_h}{\|\hat g_h\|}, \qquad m_h\leftarrow(1-\eta)m_h+\eta u_h. \tag{13}

当前接口的迁移分数,是它与其他已经初始化的记忆之间的余弦平均:

Th=1∣Jh∣∑j∈Jhcos⁡(g^h,mj),Jh={j≠h:mj exists}.(14)T_h=\frac{1}{|J_h|}\sum_{j\in J_h}\cos(\hat g_h,m_j), \qquad J_h=\{j\ne h:m_j\text{ exists}\}. \tag{14}

如果还没有任何其他接口的记忆,就暂时没有迁移分数,调度只使用 learnability。比较完之后再更新当前接口的记忆。需要注意,单位向量的 EMA 自身不一定还是单位向量;如果历史方向相互抵消,记忆的模长可能很小。这时重新计算余弦会放大一个本来就不稳定的方向。

这也提示了一个可测试的替代方案:不只记录方向,还记录记忆模长和最近更新时间,在方向不稳定或过期时降低其权重。但这是本文提出的进一步实验,不是原文已经证实有效的机制。对零范数摘要、零范数记忆的具体数值约定,公开公式本身也没有交代完整。

5. 两个信号如何变成下一步的选择概率?

5.1 用共享滑动窗口归一化,而不是每个接口各管各的

绝对优势与余弦的量纲不同,作者分别为它们维护最近 32 个原始观测的窗口,并做 min–max 归一化。这里的窗口跨接口共享。对某个信号 xx,公式是

x~=clip⁡ ⁣(x−min⁡Wxmax⁡Wx−min⁡Wx,0,1).(15)\tilde x=\operatorname{clip}\!\left( \frac{x-\min W_x}{\max W_x-\min W_x},0,1\right). \tag{15}

为什么不用每个接口独立归一化?因为那样会把一个总体很弱的接口的“历史最好”,与一个总体很强的接口的“历史最好”,都映射到 1,抹去跨接口比较需要的信息。共享窗口保留了这种对比,但也带来了时间变化的尺度。

原文规定,窗口不足两个数值时,把归一化结果设成 0.5。不过,两个以上的观测也可能全部相同,这时分母仍为零。究竟加一个小常数、回退到中点,还是跳过更新,需要明确说明。不同办法会产生不同的调度行为,不能在讲解时把自己的选择当成作者已给出的规则。

此外,归一化后的 1 不等于绝对意义上的好。如果最近所有迁移余弦都为负,那么“最不负”的那个也会得到 1。它只是近期相对最好,不代表沿这个方向真的有利于别人。窗口中的极值移出后,同一个原始信号还可能突然换一个归一化数值,随后又被混进分数的 EMA。

5.2 相加是在权衡,不是在要求两项同时达标

两个信号都存在时,作者取等权平均,并更新接口价值:

Sh=αL~h+(1−α)T~h,α=0.5,Qh←0.7Qh+0.3Sh.(16)S_h=\alpha\tilde L_h+(1-\alpha)\tilde T_h, \qquad \alpha=0.5, \qquad Q_h\leftarrow0.7Q_h+0.3S_h. \tag{16}

只有一个信号存在时,就使用那个信号。一个容易被“joint”这个词遮住的事实是:算术平均允许互相补偿。(L~,T~)=(1,0)(\tilde L,\tilde T)=(1,0) 的分数是 0.5,比 (0.4,0.4)(0.4,0.4) 的 0.4 还高。因此,它不是要求“既可学又可迁移”的硬条件,而是在两个性质之间做软权衡。

如果希望任意一项很低都受到明显惩罚,可以考虑乘积、最小值或迁移阈值。但这些替代方法也可能对噪声过于敏感,尤其在归一化窗口不稳定时。最合理的选择取决于目标,不能凭直觉断定乘法一定优于加法。

图 4:本文绘制的分数曲面。左边是论文的等权算术平均,右边是用于比较的乘积形式。标出的两点说明,算术平均允许一个很强的信号补偿另一个很弱的信号。右图不是原文实验。

5.3 计数奖励、温度和探索下限分别负责什么?

在价值 QhQ_h 上,作者再加一个低访问次数奖励:

Uh=Qh+cnh+1,c=0.2.(17)U_h=Q_h+\frac{c}{\sqrt{n_h+1}},\qquad c=0.2. \tag{17}

然后通过温度 softmax 得到主要采样分布,再混入均匀探索:

ph=(1−ε)exp⁡(Uh/τ)∑jexp⁡(Uj/τ)+εH,τ=0.3,ε=0.15.(18)p_h=(1-\varepsilon) \frac{\exp(U_h/\tau)}{\sum_j\exp(U_j/\tau)} +\frac{\varepsilon}{H}, \qquad \tau=0.3,\quad\varepsilon=0.15. \tag{18}

前 30 步采用轮询,每个接口安排五次访问。未访问接口在选择时使用当前最大价值,避免一开始就因缺少观测而受到惩罚。进入自适应阶段之后,计数奖励偏向访问较少的接口;温度决定分布有多尖锐;均匀项则确保每个接口始终有正概率。

这个计数奖励不随全局时间增长,不是经典 UCB1 的完整置信上界形式。一个接口没有被选中时,它的计数项保持不变;与此同时,共享模型仍在被别的接口更新,它的真实效用却可能已经改变。因此这里的 bandit 更适合作为在线分配的抽象,而不是一个现成的固定奖励 regret 定理。

六个接口下,概率下限是 0.15/6=0.0250.15/6=0.025。如果某个接口一直恰好处于这个下限,平均要等 40 步才再次访问;连续 32 步没有访问的概率是 0.97532≈0.4450.975^{32}\approx0.445。真实概率至少有这个下限,因此后一个数是相应的上界,而不是论文轨迹的预测值。保留探索机会,并不保证短时间内每个记忆都会及时刷新。

5.4 EMA 记的是“本接口访问次数”,不是全局训练步数

更新率为 0.3 的 EMA,一个旧观测的权重经过约

k1/2=log⁡(0.5)log⁡(0.7)≈1.94(19)k_{1/2}=\frac{\log(0.5)}{\log(0.7)}\approx1.94 \tag{19}

次后续更新就减半。但这里的更新次数是同一个接口被再次访问的次数。若六个接口大致均匀采样,对应约 11.7 个全局训练步;如果某接口很少被访问,它的记忆可能老得多。另一边,归一化窗口的 32 个观测又是跨接口累计的,并不是每个接口各有 32 个新观测。

图 5:本文计算的时间尺度示意。左侧是一直处于最小采样概率时的未访问概率;右侧是按本接口后续访问次数计算的 EMA 权重衰减。它们都不是原文训练曲线。

这会形成一个值得研究的反馈:旧记忆参与计算今天的迁移分数,分数又决定以后选谁;长期不选的接口,记忆就继续过期。预热只能解决初次初始化,不能解决后续老化。若报告每个记忆的年龄,再比较年龄限制或衰减策略,会比只看一张余弦曲线更有解释力。

6. 把方法放回一次完整的训练流程

6.1 编号伪代码:它套在原来的训练器外面

下面是根据论文描述整理的概念伪代码,用来说明先后关系,并不是可以直接运行的训练程序。尤其是归一化分母为零等退化情况,不能在这里悄悄填入一个自选规则,再声称与原文完全一致。

算法 1:围绕现有 on-policy 训练器进行接口调度

01  为每个接口建立独立打乱的任务池与剩余组缓冲区。
02  固定梯度采样坐标,初始化访问次数与梯度记忆。
03  初始化共享的 L/T 观测窗口与各接口价值。
04  对训练步 t = 1, ..., T 重复:
05      若 t <= 30,按轮询顺序选择接口。
06      否则计算 U、softmax 和探索下限,再采样接口 h。
07      收集只属于 h 的批次,过滤奖励零方差组。
08      按训练规则复用 h 缓冲区中合格的剩余组。
09      计算组相对优势,以及分层平均得到的 L。
10      对未改变的策略损失累积反向传播梯度。
11      取出固定坐标摘要,并在并行 rank 间合并。
12      与已初始化的其他接口记忆比较,得到 T。
13      让优化器更新共享模型参数。
14      更新共享窗口,对存在的观测做归一化。
15      融合分数,更新 Q[h]、次数与 h 的梯度记忆。
16      将调度观测与对应训练步一起保存。

“一个批次只有一个接口”不仅方便数据加载,更重要的是让批次梯度可以归因给一个臂。如果批次混合六种接口,再把总梯度称为其中某个接口的方向,就没有这么清楚的解释。

超额采样带来的剩余组按接口分别保存,则避免为了凑批次而白白丢弃已经产生的合格数据。但缓冲区存在,不等于各接口花费了完全相同的原始采样预算。还需要区分生成了多少组、打分了多少组、保留了多少组、最终优化了多少组。缓冲组的采样时刻与当前策略之间的关系,也属于理解 on-policy 数据使用时必须知道的口径。

论文使用 Polar 等训练基础设施,把不同外部 harness 的交互轨迹转化为训练器可以处理的数据。这个系统层与调度层应分开理解:前者解决如何接入工具交互、还原轨迹和掩码,后者解决下一批该请求哪个来源。调度算法本身并不替代智能体运行环境,也不解决所有轨迹重建问题。

6.2 预算相同,到底相同在哪一层?

报告配置包括:Qwen3.5-2B、四张 GPU、上下文并行度为四、150 个优化步、每批八个任务组、每组八条轨迹。Adam 学习率固定为 10−610^{-6},KL 系数 0.05,最大回复长度 8,192,最大提示长度 40,000。这些长度上限适合较长的工具交互,但也意味着单步成本会受到实际 token 数和工具耗时影响。

在每批都完整的前提下,名义上的进入优化的轨迹槽位数是

150×8×8=9,600.(20)150\times8\times8=9{,}600. \tag{20}

这只是预算计算,不代表实际只生成了 9,600 条轨迹。过滤和超额采样可能让原始生成量更多;缓冲区又会改变数据使用的时刻。即使最终轨迹数相同,也不等于 token 数、工具调用次数或墙钟时间相同。最稳妥的表述是,训练方法共享论文所述的 150 步预算。

调度器本身的持久梯度记忆则比较小。六个接口各存一个长度 65,536 的 float32 向量,共需要

6×65,536×4=1,572,864 bytes=1.5 MiB.(21)6\times65{,}536\times4=1{,}572{,}864\ \text{bytes} =1.5\ \text{MiB}. \tag{21}

这个数不包含当前摘要、通信缓冲、坐标索引或训练器本来就需要的优化器状态。每一步还要进行摘要提取、分布式合并,以及约 O(Hd)O(Hd) 的方向比较。复用已有反向传播,显然比为每个接口额外计算一份新梯度便宜;但原文没有给出足以支持“端到端快多少倍”的实测时间结果。

因此,如果关心的是训练速度,不能把“额外观测便宜”和“达到同样效果更快”混为一谈。前者是结构上的优势,后者需要报告开销、收敛曲线和一致的资源预算。本文不把相关论文的开销数字移植到 HarnessBandit 上。

7. 实验结果:适应、泛化和稳定成功是三件事

7.1 两个测试集改变的东西不同

PinchBench 有 147 个未见任务,每个任务跑一次,通过 OpenClaw 的官方环境评估。OpenClaw 在训练接口中,所以这是“新任务、熟悉接口”。ClawEval 有 161 个未见任务,每个任务三次尝试,使用它自己的原生交互循环;这个循环不在六个训练接口中,因此还包含接口变化。

第二个测试更接近跨接口泛化,但仍不能代表任意新 harness。两个测试也没有直接告诉我们,训练后六个原接口是否都同时改善。若目标是广泛部署,接口维度和任务维度都需要更完整的评估矩阵。

ClawEval 的两个成功指标尤其容易混淆。原文 Pass³ 表示三次全部成功,pass@3 表示三次中至少一次成功。前者更接近当前采样次数下的重复稳定性,后者强调给三次机会能不能找到一条成功路径。两者都值得报告,但不能统一写成没有口径的“成功率”。

方法Pinch 均分Claw 三次全成功Claw 至少一次成功Claw 均分
基础模型0.33043/16158/1610.534
两接口混合0.49332/16148/1610.490
六接口混合0.33135/16162/1610.510
HarnessBandit0.50643/16167/1610.556

表中采用原文 Table 1 的数值。HarnessBandit 相对两接口混合的 Pinch 增量是 0.506−0.493=0.0130.506-0.493=0.013,即 1.3 个百分点;相对六接口混合是 0.506−0.331=0.1750.506-0.331=0.175,即 17.5 个百分点;相对基础模型才是 17.6 个百分点。原文叙述中部分基线对应关系和 17.6 的口径不够一致,因此这里以表格逐项计算。

图 6:根据原文 Table 1 重绘。左边是 PinchBench 均分,右边分开显示 ClawEval 的三次全部成功和至少一次成功。论文没有提供重复训练种子的误差范围,因此没有自行添加误差条。

ClawEval 的至少一次成功,相对六接口混合增加了五个任务,对应 5/161≈3.115/161\approx3.11 个百分点;相对基础模型增加九个任务。但三次全成功仍是 43 个任务,与基础模型持平。更准确的结论是:采样覆盖面提高了,相对混合训练损失的重复稳定性有所恢复;不能据此说所有可靠性指标都超过基础模型。

两种混合基线也说明,适应训练环境不等于获得更通用的能力。两接口混合在 PinchBench 上进步很大,在 ClawEval 上却退步;六接口混合保留了更多 ClawEval 采样覆盖,却几乎丢掉 PinchBench 增益。HarnessBandit 在这次报告中取得更好的折中,但表格本身还不能区分贡献主要来自纯接口批次、动态分配,还是两个信号的具体组合。

7.2 分类结果不是全面上涨

附录 B 中,相对 OpenClaw–Codex 混合,skills 类从 0.367 提高到 0.676,integrations 从 0.191 提高到 0.364;memory 却从 0.913 降到 0.637,CSV analysis 从 0.433 降到 0.352。coding 则由 0.673 小幅下降到 0.661。

图 7:根据附录 B 计算的分类分数变化,基线为 OpenClaw–Codex 混合训练。不同类别的样本量并未全部给出,不能把这些柱子等权平均后当成整体分数增量。

这使得“0.506 比 0.493 高”变成一个需要结合工作负载的问题。如果部署的是高度依赖记忆的助手,memory 类的退步可能比均分的小幅提高更重要。如果主要处理工具集成任务,新的分配也许更合适。当前调度器优化的是训练代理信号,并没有显式接收部署类别权重,也没有最差类别不能退步的约束。

六接口混合在 writing 类的报告值为零,也应按具体实验来理解。它说明这一配置在这些评估任务和这次运行上取得零分,不等于模型普遍失去了写作能力。单次尝试、小类别和有限样本都可能放大波动。原文给出了部分样本数,例如 coding 为 14、CSV 为 26,但不足以仅凭分类均分重建完整统计不确定性。

7.3 调度器诊断能支持哪一层解释?

原文的归一化信号汇总中,Pi 的 learnability 约为 0.75,而 transferability 约为 0.49;OpenCode 约为 0.62 与 0.60;OpenClaw 约为 0.55 与 0.59;Qwen Code 约为 0.53 与 0.37。这些观测与“在本地学习空间和跨接口相容性之间权衡”的设计意图相符,但还没有直接证明高迁移分数会导致更大的测试奖励增量。

报告的平均选择概率更偏向 OpenCode 和 OpenClaw,大约为 0.21 与 0.18。到了最后一个时刻,OpenClaw 的概率为 0.204,Pi 为 0.197,OpenCode 为 0.184。终点概率与累计访问次数回答的是不同问题:前者决定接下来怎么抽,后者记录此前实际抽过多少次。因此,Pi 在最后概率很高,完全可以同时具有相对较低的历史访问次数。

图 8:根据附录 F 重绘。左边是最后时刻的概率,右边是原文列出的累计次数。概率和为 1,次数和却是 148;这里保留报告值,没有强行补成 150。

梯度相似度图还不是一张同时测量的对称矩阵。当前接口的梯度与其他接口不同时刻的 EMA 比较,即使余弦函数对两个固定向量是对称的,这种跨时刻观测也不必对称。原始余弦接近零并反复变号时,应把它看作较弱、带噪声的方向证据;经过 min–max 拉伸成 [0,1][0,1] 后,不能忘记原来的绝对尺度很小。

8. 局限与需要澄清的数值口径

目前的训练证据集中在一个较小模型、一个有限任务集合和较短训练周期。它还没有证明对更大模型、不同奖励定义、不同接口集合或多个独立训练种子都成立。两个评估集提供了有价值的分布变化,却没有覆盖所有可能的部署环境。

更重要的是,对照设计还不能完整识别两个信号的因果作用。均匀随机选择但保持纯接口批次,可以把“批次变纯”与“自适应分配”分开;轮询纯批次可以减少选择随机性;只用 learnability、只用 transferability 的版本,可以检验两者是否真的缺一不可。相关的多领域课程论文有它自己的实验,但不能把那些实验当成 HarnessBandit 在接口维度上的消融。

读附录时,有两处尤其需要保留疑问。

第一处是 learnability 的尺度。 附录 D 的原始曲线大致处于 0.60–0.95。按照论文最直接描述的条件——奖励在 [0,1][0,1]、八条轨迹、未缩放的 leave-one-out 优势——式 5 给出的组内绝对优势均值上界约为 0.5714。过滤不能突破每个组自身的上界。因此,实际记录的优势定义、奖励变换、聚合方式或绘图尺度,需要补充说明。这里不能直接断言训练无效,但也不能假装公式与曲线已经完全对应。

第二处是训练计数。 附录 F 列出的访问次数为 32、26、24、24、21、21,合计 148,并使用了预热后 148 个观测的表述。可是总训练步数为 150,预热为 30,按字面理解预热后应剩 120 步。也许选择事件、有效更新和日志观测并不是同一种计数,但原文没有把它们明确连起来。不能为了让账面整齐,凭空补两个步骤或重新解释预热长度。

另一些较小的说明空缺包括:归一化窗口极差为零时的处理、摘要或 EMA 模长为零时的处理、缓冲轨迹的年龄,以及调度平均与损失平均的精确关系。这些不一定都会造成实际故障,但它们决定一个概念方法能否变成无歧义的数值配方。

9. 独立批判性分析:真正值得验证的是分配假说

9.1 两个便宜信号的组合很合理,但中间链条很长

我认为论文最有价值的地方,是把“这里还有学习对比”与“这个方向可能帮助别人”拆开,并且尽量复用已有训练计算。它比仅仅按奖励高低挑接口更符合强化学习的特点:奖励高可能已经饱和,奖励差异大可能仍有改进空间,而方向相容可能避免只适应一个特殊交互协议。

但从这两个数到长期泛化,中间经过了过滤后的条件统计、部分参数梯度、历史 EMA、窗口归一化和自适应优化器。单独看每一步都能找到工程理由,合在一起却不能自动保证分数仍忠实预测最终收益。这是代理指标组合常见的问题:组件都合理,不等于组合后的解释已经成立。

更直接的验证方式,是在训练过程中记录当时的分数,再用固定小型探针集观察受控更新之后的变化。先问余弦是否预测其他接口损失下降,再问损失下降是否预测任务奖励改善。即使相关性并不完美,也能定位真正的瓶颈是在摘要、过期方向,还是训练目标与评估目标之间。

9.2 最需要的消融,应把周边系统固定住

我会先做一组严格控制批次结构的比较:保持任务池、组过滤、纯接口批次、优化器和接受轨迹预算一致,只改变选择策略,分别使用均匀随机、轮询、只看 learnability、只看 transferability,以及两者融合。每种策略运行多个训练种子,才能判断收益是不是来自稳定的分配规律,而不是偶然抽到了更顺利的轨迹。

第二组实验只改变迁移观测。比较无年龄限制与年龄限制的记忆、原始梯度与实际更新方向、只看后四层与其他层范围、坐标采样与合适的随机投影。不要把这些改动一次性塞进一个“增强版”,否则即使结果更好,也不知道原来的哪一项近似最有问题。记忆模长、观测年龄和实际余弦绝对值都应一起展示。

第三组实验才回答效率问题。除了按优化步数对齐,也按生成 token 或墙钟预算对齐,并报告从请求组、工具会话、已评分组、保留组到优化轨迹的完整数量变化。如果一个接口保留下来的信号很好,却需要大量无效尝试,按步数最优的调度不一定按成本最优。进一步设计“预期效用除以预期资源成本”值得尝试,但那是新的研究假说,不是本文现有结果。

9.3 覆盖面与可靠性应该有不同的验收条件

ClawEval 相对六接口混合增加五个成功任务,看起来方向不错,但只有总数不足以做配对显著性判断。需要知道具体哪些任务从失败变成功、哪些任务退步;同样,两个模型都拥有 43 个三次全成功任务,也不意味着是同样的 43 个任务。总数可能掩盖能力的交换。

对于真实智能体,某些工具操作失败的代价很高,这时重复稳定性可能比三次中偶尔一次成功更重要。更完整的报告应保留任务级配对结果、尽可能增加重复尝试、展示类别回退,并与多个训练种子的波动一起看。当前调度信号没有直接编码这些部署偏好,因此不能把它的分数理解成通用的产品可靠性目标。

最后,“bandit”在这里主要提供在线选择的组织方式。它不是新的 regret 保证,也不是 lossless 的训练替换,更不是推理阶段的加速算法。改变训练接口分布会改变最后学到的模型。其有吸引力的主张是:利用便宜的本地对比与跨接口方向观测,可能比固定混合更有效地使用有限的 RL 更新预算。

10. 结论

HarnessBandit 把多接口适应问题转化为训练预算如何分配的问题。纯接口批次让梯度可以归因;绝对优势描述当前批次的奖励对比;梯度摘要与历史记忆提供方向相容性的估计;平滑价值、计数奖励和探索下限决定后续接口选择。报告的实验中,这个组合在熟悉接口的新任务与新接口的新任务之间取得了有价值的折中。

阅读这篇论文时,最应该抓住的不是某个放大的百分比,而是代理信号成立的条件:过滤之后的优势并不包含完整采样成本,历史局部梯度不等于当前优化器的完整更新方向,至少成功一次也不等于稳定成功。下一步最有说服力的证据,是纯批次控制消融、完整资源账目、多训练种子,以及对附录信号尺度和计数定义的澄清。

参考资料与延伸阅读

本文八张图均为本笔记绘制。数据重绘图标明了来源表格或附录;分析示意图明确给出假设,不代表新增训练或复现实验结果。