MARGIN:给多智能体协作加一层运行时校准,专治“越自信越错”

把“自信”当成投票权:多智能体协作最危险的默认假设

设想你手上握着 18 个大模型,让它们对同一道编程题各写一份代码,再让一个协调器把这些答案合成一个。谁说了算?工程上最省事的做法,是让每个模型报个“我有多确定”,比如 0.9、0.6、0.4,然后按这个数字加权投票。听起来无可挑剔:越有把握的回答权重越大。

MARGIN 这篇论文要做的第一件事,就是把这个默认假设拎出来当面质问。作者在 BigCodeBench 上把 18 个基础模型的自报信心和实际通过率摆到一起,得到一个方向完全反过来的相关性:模型级平均自报信心与实际通过率负相关,皮尔逊相关系数 $r=-0.692$(95% 区间 $[-0.759,-0.514]$)MARGIN。翻成人话:一个模型越是拍胸脯说自己有把握,它答对的可能性反而越低。

相关系数还只是统计量,作者又设计了一个更贴近“协作决策”的问题:给同一个任务的两份回答,一份对一份错,如果只准你按“谁更自信”来选,你能选对吗?在 BigCodeBench 上,这个策略的正确率只有 42.37%(95% 区间 [38.99, 45.58])MARGIN。随机猜是 50%。也就是说,拿自报信心当挑人的依据,比闭着眼睛扔硬币还差。作者给这个现象起名 confidence inversion(信心倒挂)。

这里有个必须点破的反常。我们平时的直觉是“信号有噪声但方向没错”,顶多是准头差一点。信心倒挂不是准头差,是方向本身就是反的。一个反着装的仪表,读数越高的时候,真实情况往往越低;把它当成投票砝码,等于把一个反向的仪表接进了方向盘,你越相信它,就越是往错的方向开。多智能体协作真正危险的,恰恰不是某个模型偶尔说错,而是整个团队在按一个反向信号决定“该信谁”。

值得说明的是,这两个诊断数字不是从一两个模型上抠出来的。作者的实验池有 18 个基础模型,9 个走云端 API,9 个是本地 4-bit 量化部署,覆盖了 Qwen、DeepSeek、GLM 等不同家族;9 组分析条件下可用目标记录合计 18,773 条。信心倒挂是在这样一个异构池子上被观察到的,不是某个模型的个体毛病 MARGIN。也就是说,这个问题是系统性的,换一个模型池大概率还会遇到。

多智能体协作本来是为了“三个臭皮匠顶个诸葛亮”,但它把人数变成优势有一个隐含前提:系统得先知道该信谁。而最常见的那个用来决定“信谁”的信号,恰好是坏的。那能不能换成别的信号?模型内部概率(logits 或 logprobs)看起来更可信,但大量主力模型只通过闭源 API 提供服务,拿不到这些内部量;一次答案多采样几遍看一致性又太贵。于是“让模型自己用自然语言报一个信心值”,也就是 verbalized confidence(自报置信度),成了唯一能落地的路径 Geng。既然这个信号换不掉,剩下的路就只有一条:在外部把它修回来。

说到这里,这一章要处理的问题终于点名了:confidence inversion(信心倒挂),那个越自信越可能错的信号本身。既然信号本身坏在了方向上,修正就得落在外面,而不能指望模型自己变好。但“在外部修回来”远不是设一次开关,它到底该怎么做、凭什么能在不断变化的系统里一直有效,正是下一章要展开的运行时校准问题。

校准一次就能一劳永逸吗?当分布一变,现成的校准就失灵

把坏信号修成好信号,业界早有一套成熟做法:校准(calibration)。要理解它,先看一个指标。期望校准误差(ECE, Expected Calibration Error) 把预测置信度切成 M 个区间(bin),在每个区间里比较该区间平均置信度和该区间的实际正确率,再按样本量加权平均:

$$\text{ECE} = \sum_{s=1}^{M} \frac{|B_s|}{N},\big|\text{acc}(B_s) - \text{conf}(B_s)\big|$$

ECE 等于 0,说明模型说“我有 80% 把握”时,真就有 80% 是对的这个含义。

把每个 bin 的置信度画在横轴、实际正确率画在纵轴,就得到一张 reliability diagram(可靠性图)。完美校准的模型,点全落在对角线上;点落在线下方,代表系统性过度自信,也就是模型比自己以为的更没用 Ovadia。这两件事后面会一直用,这里讲透一次,之后不再重推。

问题出在:校准不是设一次就完事的开关。Ovadia 等人在 2019 年做过一个至今仍被反复引用的实验,把多种不确定性方法放到从弱到强的分布漂移下测量。结论很直白:在一个干净的验证集上校准良好,不代表漂移之后仍然校准 Ovadia。更尴尬的是,业界事实上默认的温度缩放(temperature scaling),恰恰是漂移一大就退化得最陡的那种;而计算昂贵得多的深度集成,退化得最缓。

图注:分布漂移下的 accuracy 与 ECE 对比。上排是 CIFAR-10、下排是 ImageNet,每排左列画 accuracy、右列画 ECE;横轴从左到右是漂移强度递增,每个箱线汇总该强度下 16 种 corruption 的四分位。可以清楚看到温度缩放那一列的 ECE 随漂移明显上抬,而集成方法上升最缓。Ovadia

对 MARGIN 来说,这张图把设计压力说尽了。多智能体系统跑起来之后,任务会不断换(从题解到 QA,从简单的到更难的变体),模型池也可能被替换,输入分布一直在动。任何“事先在一个固定校准集上拟合好、然后冻结”的校准器,都会在漂移里慢慢失准,而且失准的方向要命:它会继续让你过度自信。所以校准必须从“设计时的一次性动作”变成一个运行时持续重估的问题。这正是 MARGIN 自称 runtime calibration 的原因,也是它不用留出校准集、边跑边估的压力来源。

MARGIN 怎么边跑边修自信值:三段式机制,以及为什么更新必须对称

MARGIN 全名是 Multi-Agent Runtime Grading via Incremental Normalisation,直译是“通过增量归一化进行多智能体运行时打分”。它把自己塞在模型池和协调器之间,不重训任何模型,也不要一次性校准集,只靠在线观察到的对错来修正信心。

图注:MARGIN 的流水线。从每个模型的回答中捕获实际正确率估计与自报信心 (â, c),按信心值分入信心带并查找该(模型, 信心带)的历史状态,算出比率 γ 与信誉混合,得到校准后信心,最后用它做加权投票。虚线表示当前结果只有在预测被打分之后才回写。MARGIN

整条机制分三段。

第一段,按信心分带。 为什么不直接给每个模型修一个统一的修正系数,而要分带?因为“0.9 的信心”和“0.6 的信心”含义完全不同。一个模型可能在被问到难题时习惯报低,被问到简单题时习惯报高,一个数把两端拉平就会互相抵消。MARGIN 把 $[0,1]$ 切成 K 个等宽信心带,主实验取 K=3,即 $[0,\tfrac13)$、$[\tfrac13,\tfrac23)$、$[\tfrac23,1]$,然后给每个(模型, 信心带)组合单独维护一份状态,记录两个量:这一带里真实的正确率估计 $\hat{a}$,和这一带里模型平均报出的信心 $\bar{c}$。初始时两者都设成带的中心值,于是初始修正因子恰好等于 1。

第二段,对称指数滑动平均(EWMA)。 每来一条新观测,用同一个学习率 $\alpha$ 同时更新这两个量:

$$\hat{a}{i,k} \leftarrow (1-\alpha),\hat{a}{i,k} + \alpha, o, \qquad \bar{c}{i,k} \leftarrow (1-\alpha),\bar{c}{i,k} + \alpha, c$$

其中 $o$ 是这条回答到底对没对,$c$ 是当时报出的信心。主实验取 $\alpha=0.04$,等效记忆大约 $1/\alpha$ 条观测。这里最容易被忽略、也最关键的一点是:两个式子用的是同一个 $\alpha$。为什么要强行对称,后文专门讲。

第三段,比率加收缩混合。 有了两个滑动平均,就能算这一带的修正因子:

$$\gamma_{i,k} = \frac{\hat{a}{i,k}}{\bar{c}{i,k}}, \qquad \gamma^{\text{eff}}{i,k} = \frac{n{i,k}}{n_{i,k}+k_s},\gamma_{i,k} + \frac{k_s}{n_{i,k}+k_s},\gamma_{i,\cdot}$$

$\gamma$ 的含义很直观:如果某个带里实际正确率只有 0.3,而模型平均报 0.6,那 $\gamma=0.5$,意思是这一带的信心要打对折。最后把校准后信心收进 $[0,1]$:

$$\tilde{c}{i,t} = \text{clip}\big(\gamma^{\text{eff}}{i,\kappa(c_{i,t})}\cdot c_{i,t},, 0,, 1\big)$$

那个 $\gamma^{\text{eff}}$ 里的混合是什么意思?$n_{i,k}$ 是这个(模型, 信心带)上累计的观测数,$k_s$ 是收缩强度(主实验取 100),$\gamma_{i,\cdot}$ 则是这个模型横跨所有带的整体比率。当一个带的数据很少时,$\gamma_{i,k}$ 是从几个样本里估出来的,噪声大得不可信;这时混合公式把权重更多地压到模型级比率上。

举个具体的例子走一遍。假设某个模型在高信心带里平均报 0.9,但这一带的真实正确率只有 0.45,那么 $\gamma=0.45/0.9=0.5$,下一次它再报 0.9,MARGIN 就把它折算成 0.45。如果这一带刚攒了没几条观测,$\gamma$ 还不稳,混合公式就会把它往这个模型跨所有带的整体比率上拉一些,等观测多了再让它自己说话。可以看到,整个修正过程没有改模型的一个参数,也没有预先准备任何标注数据,纯粹是在线读着对错一点点攒出来的。

这一步可以借用棒球里的一个老做法来理解。一个新人打了十次击球,命中率 0.400,你不会真的认定他是个 0.400 的击球手,而是会把他往联盟平均拉一拉,等样本够了再信他自己的数字。MARGIN 干的是同一件事:某个信心带样本太少时,先把这个带的修正因子往模型自己的整体比率上靠;样本攒够了,再让这个带自己的估计说了算。$k_s=100$ 决定了“拉多少”。

再回头看那条虚线反馈环,它不是装饰。当前这条结果 $o$ 只有在预测已经被打分之后才会回写进状态。也就是说,MARGIN 更新用的永远是已经兑现的过去,它不偷看当前这道题的答案,因此可以在线运行而不会自欺。

现在说那件被专门写成一个定理的事:为什么更新必须对称。一个很自然的想法是“对错误反应更快一点”,毕竟我们想惩罚过度自信,让失败时的学习率 $\alpha_{\text{down}}$ 大于成功时的 $\alpha_{\text{up}}$,看起来更该这么做。作者用一个定理把这个念头否掉了。假设结果是独立同分布的伯努利变量,成功率是 $\theta$,那么在非对称学习率下,正确率估计的稳态期望是

$$E[\hat{a}\infty] = \frac{\alpha{\text{up}},\theta}{\alpha_{\text{up}},\theta + \alpha_{\text{down}},(1-\theta)}$$

这个式子等于 $\theta$,当且仅当 $\alpha_{\text{up}}=\alpha_{\text{down}}$。换句话说,一旦两个学习率不等,MARGIN 悄悄改变的不只是收敛快慢,而是它正在估计的那个量本身。偏差量可以精确写出:

$$\frac{|\alpha_{\text{up}}-\alpha_{\text{down}}|,\theta(1-\theta)}{\alpha_{\text{up}},\theta + \alpha_{\text{down}},(1-\theta)}$$

所以“爱对称”不是为了整洁,而是正确性前提。作者还补了实证:在 HE→BCB 和 MBPP→MBPP+ 这两条迁移上,几个非对称设置都把 ECE 推高了 MARGIN。读到这里你应该能感觉到,MARGIN 修的其实不是“某一个模型太自负”这么简单,而是“自报信心在不同模型、不同信心区间上含义本来就不一致”这件事。

修好的自信怎么变成团队答案:加权投票与辩论式协作的对照

校准完就得回协作本身。MARGIN 的聚合规则朴素得近乎理所当然:每个候选答案的得票数,不看有多少 agent 举了它,而看有多少校准后的信心堆在上面:

$$s(y) = \sum_i \tilde{c}{i,t},\mathbf{1}[y{i,t}=y], \qquad \hat{y}_t = \arg\max_y s(y)$$

其中 $y_{i,t}$ 是模型 $i$ 对第 $t$ 个任务给出的候选答案,$\tilde{c}_{i,t}$ 是这份答案经过校准后的信心,$\hat{y}_t$ 是最终选出的团队答案。

关键差别不在 agent 有多少个,而在“用什么信号决定听谁的”。多数投票数的是人头,MARGIN 数的是一份经过在线校准的信心。

要看清这个选择的分量,可以对照多智能体协作里的另一条经典路线:辩论。Du 等人 2023 年的工作让几个 agent 先各自给答案,再互相读对方的最新回答、据此修改自己,几轮之后收敛到一个共享答案,这就是 propose-critique-revise(提议、批评、修订) 循环,基线设置是 3 个 agent、2 轮 Du

图注:多智能体辩论的经典流程。三个 LLM agent 各自先给出初始答案,之后每一轮读取其他 agent 的最新回答并据此修改自己的答案,多轮之后向一个共享的最终答案收敛。Du

辩论和加权投票其实在回答同一个问题:怎么把多个 agent 的答案合成一个。区别在于用的是什么信号。辩论靠的是说服力,一个答案能不能扛住别人的质疑,谁在互相阅读里守住了阵地。有意思的是,Du 那篇论文自己就观察到一个现象:如果直接问 agent 有多确定,它们几乎都报得很高;但一旦让它们互相通信,很多 agent 会迅速倒向共识答案,而且那个共识往往更准。于是作者把“一个 agent 多难被说服”当成一个非正式的信心信号 Du。两者解决的是同一个聚合问题,但分别使用两种不同的信号:辩论用的是通信过程中的说服过程,MARGIN 用的是经校准的自报信心。区别就在于:辩论让 agent 直接争,MARGIN 则用一个经过校准的数字来分配话语权。

回到数字。把校准后的信心接回 18 模型池的协作决策,前面那个“比抛硬币还差”的问题数字,被翻了过来:

18 模型池(冷启动)ECE(越低越好)pairwise resolutionselection accuracy
HumanEval12.80 → 2.0246.53% → 81.66%94.51% → 95.33%(不显著)
MBPP17.51 → 1.9049.94% → 81.25%87.94% → 92.26%
BigCodeBench72.72 → 13.0442.37% → 63.36%13.89% → 27.87%

先看最刺眼的 BigCodeBench:那个“按更自信的选,只有 42.37% 对”的指标,抬到了 63.36%;团队选择准确率从 13.89% 升到 27.87%,大约是原值的 2.0 倍 MARGIN。另外两个 benchmark 上的 pairwise resolution 甚至冲到了 81% 以上。这里也有个要如实说的地方:BigCodeBench 的 63.36% 明显低于 HumanEval 和 MBPP 的 81% 以上,代码竞赛类的任务显然更难,但它仍然稳稳站在 50% 随机线之上。HumanEval 的选择准确率提升则是统计上不显著的,这一条作者也如实标了。

错误被压下去多少,又在哪里翻车:实验数字与它自己的短板

先看分布漂移这条线。MARGIN 的设计目标就是在漂移下压住过度自信,所以最该看的是原始信心与校准后信心的 ECE 对比:

迁移Raw ECEMARGIN ECE
HumanEval → BigCodeBench66.7912.99
MBPP → BigCodeBench66.7911.89
MMLU STEM → MMLU-Pro business18.702.85
GSM8K → MATH26.163.45
HumanEval → HumanEval+8.573.57
MBPP → MBPP+17.963.07

拿两条最狠的看:从 HumanEval 或 MBPP 切到 BigCodeBench,原始 ECE 高达 66.79,MARGIN 把它压到了 12.99 和 11.89,降幅都超过 50 个百分点 MARGIN。GSM8K→MATH 和 MMLU 跨域也都在下降。连“同任务加难”(HE→HE+、MBPP→MBPP+)这种更温和的漂移,MARGIN 也严格改善。

这些数字意味着什么?原始信心在跨任务时几乎完全失效,66.79 的 ECE 等于说模型报出的把握和真实正确率差了十万八千里;而 MARGIN 把误差拉回十几甚至个位数。这不是“榜单上多刷了几分”,而是把一个原本不能用的信号重新变成能用的。作者还和 5 个在线校准基线做了对比:滑窗直方图、衰减直方图、滑窗准确率替换、滑窗准确率相乘、在线 Platt 缩放。在两条编码迁移(HE→BCB、MBPP→BCB)上 MARGIN 全胜,分别比在线 Platt 好 2.33 和 1.53 个百分点;在 MMLU 漂移的 5 组对比里胜出 4 组,另一组(对在线 Platt)区间跨越零点,作者判定为不显著 MARGIN

但一篇诚实的解读不能只报喜。论文自己承认了两个翻车点,而且这两个正好划出了它的边界。

第一个是冷启动。上面那张表是“已经有一份校正、需要跨任务迁移”的场景;如果历史是空的,让 MARGIN 从零开始估计,它在 BigCodeBench 上反而输给了在线 Platt(差 3.79 分)、滑窗直方图(差 7.98 分)以及两个滑窗准确率变体,只赢过衰减直方图 MARGIN。作者的解释是:“迁移一份已有的校正”和“从空历史里估计”不是一回事。这个坦白很重要,它意味着 MARGIN 的强项是热启动下的鲁棒迁移,而不是凭空冷启。

第二个是反馈来源。MARGIN 的更新全靠观察到的对错。如果把部署场景改成“只有被协调器选中的那个模型的答案才会被验证”,那么另外一些模型永远收不到反馈,它们的信心状态就再也没法更新。作者报告,在这种只有选中模型收到反馈的设置下,MARGIN 在 BigCodeBench 迁移上的 ECE 会上升 30 到 34 个百分点 MARGIN。尽管它在这些基线里仍是绝对 ECE 最低的,但这个退化幅度说明:反馈是一种实打实的运行要求,不能想当然。探索式抽查、周期性校验、离线纠正,都是作者留出的 future work。

一句话总结这一章:MARGIN 吃数据,也吃反馈。它在“已有校正、需要跨任务迁移”的场景里稳,在“从零冷启动”上和简单在线基线互有胜负,在“反馈只喂给一个模型”时会明显退化。

这层校准能嵌进怎样的多智能体协作:独立、单轮,还得持续拿到对错反馈

到这里可以给 MARGIN 一个清楚的定位了。它不是某个 agent 框架,也不是某个模型,而是一层校准底座:插在模型池和协调器之间,不重训,把“该信谁”从一个想当然的常数变成一个可以持续重估的运行时量。它想说的是,只要 confidence 没先校准,后面的加权、路由、辩论都会被过度自信的 agent 错误主导。

但“能嵌进去”是有条件的。摊开整套机制看,MARGIN 其实默默假定了三件事:各个 agent 相互独立,回答是单轮的,而且每个 agent 都能持续拿到自己答案的对错反馈。也就是说,它能校准的是独立、单轮回答、并且能持续获得正确性反馈的那类多智能体协作。上一节已经见过第三条失效的样子,反馈一旦只喂给被选中的模型,校准就明显退化。这一节剩下的两道边界,恰好对应前两个条件。

把它放进更大的方法谱系里看,会更能看清它的边界。校准这条线上还存在另一条截然不同的路线:训练时就修。AlignVQA 就是这一端的代表,它先用一个名为 AlignCal 的可微损失把 specialized agent 训成“信得准”的,再利用辩论式的多轮交互继续修正,最后取多数票 AlignVQA

图注:AlignVQA 的两段式框架。第一阶段由 specialized agents(Chain-of-Thought / Search-Augmented / SelfAsk / GENREAD)各自用 AlignCal 损失微调后产出候选;第二阶段 generalist agents 按候选分布初始化立场,接收 for / against 论证来修正自身立场与信心,最后取多数票。AlignVQA

AlignVQA 和 MARGIN 都把“校准是多 agent 选择的前提”当作核心论点,只是一个把修校准写进了训练梯度、代价是必须能重训;另一个只在推理时估计、代价是需要持续的对错反馈。它们不是谁取代谁,而是同一个目标在谱系的两端。

第二道边界来自多 agent 之间的通信。MARGIN 的整个加权逻辑默认各 agent 相互独立,它们的信心是可以分开估计、再加起来用的。CAGE-Cal 指出这个默认并不总成立:同一个 vote share,在不同通信拓扑下代表的可靠性是不同的,通信会把多个 agent 拉向同一个错误答案,制造出伪共识。解决方案是构造匹配的两套图,一套是通信后的依赖图,一套是假设不通信的反事实图,用两者的差分估计通信诱导的偏差 CAGE-Cal

图注:CAGE-Cal 的架构。同一个 vote share 在不同通信拓扑下可能代表不同可靠性;CAGE-Cal 构造匹配的 observed graph 与 IID counterfactual graph 两套图,共享编码器后用两者的差分(Δh)估计校准后的 panel confidence,并可用于拓扑选择。CAGE-Cal

这不是 MARGIN 的 bug,而是它的假设前提之外。当 agent 在投票前先通信、被诱导出伪共识时,加权之前的校准本身就已经被污染了,MARGIN 修不了这一层。再往外一步还有第三道边界:MARGIN 校准的是“单次回答的正确率”,报的是 step-level 的 ECE。而在真正的 agent 任务里,失败往往发生在轨迹中间,一步工具调用错了,后面的推理全歪。HTC 这类工作把校准信号从最终答案抬到整条执行轨迹的 48 维过程特征上 HTC,而 UQ taxonomy 那篇更进一步论证了 step-level 校准并不等价于 trajectory-level 校准 UQ taxonomy。这两篇只用一句话点到即可,它们指向的都是 MARGIN 明确没有覆盖的更远处的抽象层。

所以 MARGIN 的价值与边界可以同时说清:它把“该信谁”变成一个能一边跑一边重估的运行时量,而不是一次性的承诺;它的边界恰好落在“agent 之间不再独立”和“任务从单轮回答变成多步轨迹”这两个方向上。这也正是它最该被记住的地方:多智能体系统想要人多力量大,第一个要回答的从来不是“用几个 agent”,而是“凭什么相信这个 agent 说自己有把握”。信心不先校准,人数再多也只是把错误放大得更整齐。

想深入可以读原文:MARGIN: Runtime Confidence Calibration for Multi-Agent Foundation Model Coordination — arXiv:2605.22949

参考文献

MARGIN:给多智能体协作加一层运行时校准,专治“越自信越错”