[控场AI]
· 11 分钟阅读· 5,802 字

三次运行不是样本量:AI评测里的重复次数误区与可计算法则

三次运行不是样本量:AI评测里的重复次数误区与可计算法则

多数投票的错判率有闭式解,重复次数应计算而非继承。

文章指出,机器学习评测中"跑三次""五个随机种子"这类民间常数从未被推导。作者给出一个精确法则:若单次运行出错概率为 p 且运行可交换,则 N 次严格多数投票的错判率为二项尾概率 E(N,p)=P(Binomial(N,p)>=ceil(N/2)),无需正态性或渐进假设。由此得出多个反直觉结论:全票一致策略随 N 增加反而更差(p=0.10 时从 0.2710 升至 0.6513);均值阈值与多数投票属于不同数学体制;偶数 N 在同一算力下可能优于其上的奇数 N。文章区分估计 p 与保证决策正确两种相反需求,其交点 p* 约为 0.40。在固定预算下,题目与重复的最优分配由方差比 tau^2/sigma^2 决定,而 tau^2 可测却几乎无人报告。

一个被跳过的问题

如果你随机打开一篇比较两个模型、两个智能体或两种提示词的论文,翻到描述实验运行次数的部分,几乎总能读到同一句话:"我们跑了三次",或者"我们使用了 5 个随机种子"。然后请继续往下找——找那句说明这个数字到底买到了多少误差控制的话。

它不在那里。

这不是粗心,而是一件缺失的测量工具。整个领域花了十年回答"一次评测需要多少个题目":序贯停止规则、功效分析、项目反应理论、方差分解。这些问题都有成熟的答案。但重复轴(同一配置跑几次)却始终停留在两个民间常数上——N=3 或 N=5——没有任何推导过程。N=3 是一种习惯,不是一次计算。

更让人不舒服的是,这个计算只需要三行。

rss source: Three runs is not a sample size. It is a decision rule — and its error is exactly computable.

重复次数存在一条可精确计算的法则

假设单次运行得出错误结论的概率为 p,且 N 次运行之间是可交换的(exchangeable,即顺序不影响结果),那么对这 N 次运行做严格多数投票后仍然错误的概率,就是一个二项分布的尾概率:

E(N, p) = P(Binomial(N, p) >= ceil(N/2))

没有渐进近似,没有正态性假设,也没有任何"在什么区间内成立"的前提。它和符号检验(sign test)用的是同一套算术——这本身就是一个提示:这个对象有多普通,以及它在这里被使用得有多稀少。

当 p = 0.10(对一个随机性评测来说,这种单次分歧率完全正常)时,那些民间常数对应的错误率如下:

规则N=3N=5N=10
严格多数0.028000.008560.000147
全票一致0.2710—0.6513
any-of(任一通过)0.0010—1.000e-10
均值阈值0.3085—0.05692

全票一致:越加运行反而越糟

这张表里有两行比那些熟悉的列更值得关注。

第一个反直觉结论:要求全票一致时,增加运行次数会让结果变差。 N=3 时错误率 0.2710,N=10 时反而升到 0.6513。原因是要求所有运行一致,相当于把 N 次失败机会"与"在一起:只要任何一次出现分歧,整个判定就失败。所以"我们只接受全票一致的结论"这个策略根本不是保守选项——过了某个 N 之后,它比抛硬币的补集还差。如果你的评测框架里有 --require-unanimous 这个开关,它有代价,而且没人报过价。

any-of 规则(任一通过即判为通过)在这张表里表现为另一个极端:p=0.10 时 N=3 的错误率仅 0.0010,N=10 更降到 1.000e-10。它的数学直觉是——只要有一次运行"没出错",整个判定就成立,因此错误要求全部 N 次同时出错,概率是 p 的 N 次方量级,随 N 几何式坍塌。这与全票一致恰好构成镜像:全票一致要求避免任何一次失败,概率按 1 的补集累积;any-of 要求避免全部失败,概率按 p 的幂递减。两者都不同于严格多数投票,后者的错误率是二项分布的尾概率,随 N 的下降速度介于两者之间。选择哪条规则,本质上是在选择"错误从哪里进来":多数规则把错误摊在所有接近一半的票型上,any-of 把错误压到"全军覆没"这一种罕见事件上,而全票一致则把错误放大到"任何一次不一致"这个越来越常见的事件上。这三条曲线在同一个 p 下永不相交,但在不同 p 区间里,最优规则会悄然换人。

平均分数是另一套法则,不是更安全的法则

第二个结论:从多数投票切换到均值阈值,等于换了一套数学体制。 any-of 会以几何速度坍塌(0.0010 → 1.000e-10,在一个跨度内下降了十个数量级),而均值阈值规则只下降五倍(0.3085 → 0.05692)。把"多数票"换成"平均分",是因为觉得后者"更稳健"——但这一换,你依赖的整套误差机制都变了。

还有一个细节值得留意:在相同算力成本下,偶数的 N 比它上面那个奇数 N 更好。p=0.10 时,N=3 错误率 0.0280,N=4 是 0.00370,而 N=5 是 0.00856。这把"平局怎么算"从一个实现细节升级成了一个有明确代价的设计决策——"我们把平局计为失败"是一条策略,而你现在可以算出它值多少钱。

可交换性(exchangeability) 是这里唯一的结构性假设,值得单独说明。它指的是:把 N 次运行的顺序任意打乱,结果的联合分布不变——换言之,第 1 次运行和第 2 次运行之间没有系统性的先后差异,运行编号不携带任何信息。这一条比"独立同分布"更弱:独立同分布必然可交换,但可交换允许运行之间存在相关性(例如共享同一批随机种子池、同一台机器、同一天的数据快照)。正因为只要求可交换,二项尾概率才能在不假设独立性的情况下成立——投票的错判率只依赖于"每次运行出错的边际概率相同、且没有任何一次运行被系统性地特殊对待"。反过来,如果存在顺序效应(比如第一次运行因缓存冷启动而系统偏慢),可交换性就被破坏,那个闭式解也随之失效。因此在实际评测里,随机化运行顺序、或对每份配置都重新抽样种子,是让这条法则可用的必要前提。

两种需求,在某个可测点上相交

多跑几次的理由有两种,而它们的方向恰好相反:

  • 估计需求:你想知道 p,即单次运行与自身产生分歧的速率。更多重复能收窄它,并且在 p 较小时代价很低。
  • 决策需求:你想让多数票判定本身是对的。这对应上面的尾概率,并且在 p 接近 1/2 时急剧变贵——此时单次运行接近抛硬币,而一堆抛硬币的多数票也不会好到哪里去。

这两条曲线会相交。在这篇博文所依据的研究中,交点是通过网格定位的:p = 0.35 时估计需求占主导,p = 0.40 时决策需求占据主导,因此 p* = 0.40——这是由两侧相邻格子共同佐证的,而非拟合出来的。在交点以下,多跑几次来测量 p 能买到你真正需要的东西;在交点以上,怎么测都救不了你,因为决策本身就是那个绑定成本。

这就给出一条可用规则:在决定"多跑几次"意味着什么之前,先看你测得的 p 落在 p* 的哪一侧。

当题目和重复在争夺同一份预算

如果一笔固定的算力预算既可以买更多题目,也可以买更多重复,最优解不是口味问题。设单题目方差为 sigma^2,单重复(重采样)方差为 tau^2,边界就是:

N* = sqrt( a * sigma^2 / (b * tau^2) )

它对预算是无标度的,对应的 AM-GM 最优解是 Var* · B = (sqrt(a*tau^2) + sqrt(b*sigma^2))^2。两个值得记住的推论:

  • 这条边界是方差之比,不是偏好。 如果你说不出 tau^2——也就是"同一配置在不同重复之间的方差"——你就说不出该跑几次重复。这个量是可测的,但几乎没有人报告它。
  • 边界上的整数性很重要。 把 N 显式取整数后,在连续解落在 1 到 2 次运行之间的区间里,最优点会从 N*=1 移到 N*=sqrt(2)——而这恰恰就是人们在"跑一次还是两次"上争论不休的那个预算区间。

还有第三个旋钮:题目的难度/规模 T。在 128x 的跨度上,两个输入项表现为 tau^2(T) = c_tau / T 和 sigma^2(T) = sigma_inf^2 + c_sig / T,于是得到一个内点三旋钮最优解 (T*, N*),而不是角点解。

这里的 N* = sqrt( a * sigma^2 / (b * tau^2) ) 来自一个经典的最优分配问题:总预算 B 被拆成 a·N(重复侧成本)与 b·T(题目侧成本)两部分,而最终估计量的总方差约为 sigma^2 / (N·T) + tau^2 / N 的形式,对其做拉格朗日优化即得该平方根法则。它的形状本身就是结论:最优重复次数只取决于两种方差的比值,而与预算绝对大小无关——预算翻倍会同时抬高题目数和重复数,但不会改变二者的比例。这解释了一个常见困惑:为什么"我们机器更强了所以多跑几次"从来不是充分理由,除非 tau^2/sigma^2 本身发生了变化。AM-GM 那一行给出的是这个约束下的最小可达方差与预算乘积,它是一个下界,任何分配方案都不可能比它更优。整数性那一条则提醒:连续解落在 1 与 2 之间时,取整会跳到 1 或 2,而这两个整数对应的实际取舍("跑一次赌一把"对"跑两次取平均")恰好是实践中最常争论、也最容易被直觉带偏的区间。

一个推翻习惯认知的结果

下面这个结果值得贴在墙上。在题目规模跨越 256x 的范围内,单次运行的错误判定率几乎不变:

  • T=16 时是 0.531
  • T=4096 时是 0.534

当两个模型几乎打平时,买更多题目并不能让单次运行的判定变得可靠。无论测试集多大,单次错误率都维持在约二分之一。原因在于:运行之间变化的那个东西,不是靠增加题目就能平均掉的那种测量噪声。"更大的测试集"和"更多随机种子"不是替代品;在这条轴上,它们甚至不在同一个话题里。

上面两个数字都来自研究自带的测量工具,而且这个形态并非高斯数据生成过程的假象:在一个固定版本的公开基准(UCI Concrete Compressive Strength,sha256 d7d8bd08…)上,tau^2(T) 按 1/T 下降,log-log 斜率为 -0.961,与理论预测的 -1 吻合。

实测,而不是假设

这条法则只有在它的输入可测时才有用,所以该研究选择测量而不是假设。在一个合成的随机优化任务上,输入测得为 sigma^2 = 4.930063e-04 和 tau^2 = 2.044068e-04。在真实的随机优化运行中,实测的 p 从 0.0065 一直跨到 0.5790——五个格子里有 90 倍的跨度,其中四个都高于 0.10。

这个跨度本身就是整项工作的论据。当 p = 0.0065 时,跑三次已经很慷慨,诚实的做法是把钱花在题目上;当 p = 0.5790 时,跑三次几乎无用,而且没有任何合理的 N 能拯救基于该比较做出的决策。同一条民间常数在某个格子里是对的,在另一个格子里错了一个数量级——区分两者的,只是一个没人测量的数字。

可以从周一开始做的事

  1. 测量 p——单次运行得出不同结论的速率。如果论文里没有这个数字,那这篇论文并没有做出它看起来做出的那个声明。
  2. 有意识地选择聚合规则,包括平局处理,并说明"平局"意味着什么。
  3. 用这条法则计算 N,而不是继承它;如果题目和重复在争同一份预算,请给出 tau^2。

复现

这项研究以可以端到端运行的包的形式发布:

bash reproduce.sh          # 完整:重建、重算、出图、校验(约 95 秒)
REPRODUCE_QUICK=1 bash reproduce.sh   # 校验已提交产物(约 25 秒)

验证器会核对的判定在 README 中列出,运行时也会打印出来:VALIDATE 46/46、RESULT: PASS,两个植入对照全部 ALL PLANTS CAUGHT。这里的 46 是一个整数计数(对每一项声明做一次检查,每一项都挂在手稿中的具体声明上),不是统计阈值。这个包自己的双向契约是:它重新生成的每个文件在第二次运行时都逐字节一致(37 个已提交文件,用 sha256 校验;只排除运行日志,README 中已说明)。我在本机跑了两次来验证这一点,而不是只读说明:结果逐文件一致。

精确那一臂由两条独立的计算路径交叉验证,在 147 个格子上一致到 1.447e-13,另外还有一次 20 万次试验的蒙特卡洛。参考文献层包含 108 条引用条目(门槛是 100)。

边界说明,因为它约束了上面每一个数字。 实证那一臂是一个受控工具:一个合成的随机优化加上一个固定版本的公开基准,而不是对已发表论文的普查。平 p 的反例、90 倍跨度和 -0.961 的斜率,都是这些测量的属性;但算术不是——二项尾概率对任何你测得出的 p 都成立。论文中的每个数字都由渲染它的构建脚本从已提交产物中解析;构建在检测到漂移时拒绝运行,旁边还有它自己的植入对照——这才是值得用来要求期刊的那种"可复现"。

完整论文发表于 SILICON SCIENCE: Computer Science,一份由 AI 运营的同行评审期刊:投稿以 issue 形式到达,评审公开,每篇发表论文都附带复现脚本和数据说明。 论文链接:How Many Runs Does a Claim Need?

#AI评测重复次数#N=3 误差#多数投票错误率#二项分布尾概率#eval runs#全票一致陷阱#tau^2 重采样方差#AI benchmark 复现
分享:

相关推荐