[控场AI]
· 15 分钟阅读· 7,674 字

McNemar检验对比机器学习模型:随机种子下的正确用法

McNemar检验对比机器学习模型:随机种子下的正确用法

问题的由来

在机器学习研究中,一个常见但容易被忽视的环节是:如何科学地证明「我提出的新方法确实优于基线模型」?很多论文会直接给出准确率对比表,比如「我们的方法达到 94.2%,基线为 92.8%」,然后宣称改进有效。但这种做法忽略了一个关键问题——这 1.4 个百分点的差异,究竟是真实的性能提升,还是随机波动带来的偶然结果?

一位 Reddit 用户提出了一个非常具体的疑问:当论文中使用了随机种子(random seeds)进行多次实验时,研究者们究竟是如何运用 McNemar 检验来比较基线方法与提出方法的?这个问题看似细节,实际上触及了机器学习实验设计中统计显著性检验的核心难点。

reddit source: Comparision of Models

McNemar 检验到底在检验什么

基本原理与历史背景

McNemar 检验由美国心理学家 Quinn McNemar 于 1947 年提出,最初用于社会科学中的前后测对比研究,例如评估某一干预措施是否改变了受试者的态度。其方法论根基可追溯至费舍尔(R.A. Fisher)在 20 世纪 20 年代奠定的实验设计理论框架——费舍尔在农业实验中率先系统化了随机化、重复和区组设计的原则,而 McNemar 检验正是将"区组消除干扰"这一思想移植到离散数据的自然延伸。此后,该检验被广泛应用于临床医学的交叉设计试验(crossover trial)和诊断性研究的一致性分析,并在 1990 年代随着计算机视觉和自然语言处理的兴起逐渐成为比较分类器性能的标准统计工具之一。

其核心思想来源于**配对设计(matched-pair design)**的统计哲学:通过消除个体差异带来的噪声,专注于两种处理方式之间的净效应。这一思路在机器学习中同样适用,因为测试集中每个样本就是天然的"配对单元",无需额外的匹配操作。

配对设计的深层逻辑在于:与其比较两个独立样本的整体均值(这会将"个体间差异"与"处理效应"混为一谈),不如在同一个体上观测两种处理的差值,从而将个体差异从误差项中剥离出去。这在统计学上等价于将组间方差转化为组内比较,大幅提高了检验的统计功效(statistical power)。正因如此,McNemar 检验在样本量有限的场景下往往比独立样本检验更为灵敏——它能在相同的测试集规模下,检测出更细微的模型差异。

McNemar 检验是一种针对配对名义数据的统计检验方法,特别适合比较两个分类器在同一测试集上的表现。它的核心思想不是比较两个模型的整体准确率,而是关注两个模型在每个样本上的分歧情况。

具体来说,对于测试集中的每一个样本,我们会得到四种可能的组合,构成一个 2×2 的列联表:

模型B正确模型B错误
模型A正确ab
模型A错误cd

其中真正有信息量的是 b 和 c 这两个单元格——即两个模型判断结果不一致的样本数量。b 表示「A对B错」的样本数,c 表示「A错B对」的样本数。而 a 和 d(两者都对或都错)在检验中被视为无关信息,因为它们无法区分两个模型的优劣。这种只关注"不一致对"的设计,使 McNemar 检验对样本量的利用极为高效,即使整体准确率接近,只要不一致样本的分布不对称,就能捕捉到显著差异。

从信息论角度理解这一设计更为直观:两个模型都答对(或都答错)的样本,对于「谁更好」这一问题不提供任何信息,将其纳入检验只会稀释信噪比。McNemar 检验通过聚焦于分歧样本,实际上是在最大化可用于区分两个模型的信息密度,这也是为什么它在测试集规模固定的情况下往往比简单的准确率差异检验更为高效。

检验统计量

McNemar 检验的统计量基于 b 和 c 的差异构建。当样本量足够时,检验统计量近似服从自由度为 1 的卡方分布:

χ² = (|b - c| - 1)² / (b + c)

其中的 -1 是连续性校正项(Yates 校正),用于改善离散数据向连续卡方分布近似时的精度。当 b 和 c 数量较小(通常 b+c < 25)时,应改用精确的二项分布检验(即将 b 视为参数 p=0.5 的二项分布下的观测值)。

这里的零假设(H₀)是:b 和 c 在总体中相等,即两个模型犯错的方向是对称的,没有哪个模型系统性地优于另一个。当 p 值小于设定的显著性水平(如 0.05)时,我们拒绝零假设,认为两个模型的预测错误模式存在统计学上不可忽视的非对称性,进而推断它们的整体性能存在显著差异。需要注意的是,卡方近似的精度依赖于 b+c 足够大(通常要求不低于 25),否则应优先采用基于二项分布的精确 p 值,许多统计软件(如 R 中的 mcnemar.test() 函数)可以自动处理这一切换。如果 p 值小于设定的显著性水平(如 0.05),我们就有理由认为两个模型的表现存在统计学上的显著差异。

随机种子带来的复杂性

深度学习中随机性的多重来源

深度学习中的随机种子控制多个随机性来源:权重初始化(如 He 初始化或 Xavier 初始化中的随机分量)、数据加载时的批次打乱顺序、Dropout 层的神经元随机失活,以及某些优化器(如 Adam)中的随机梯度估计。这些随机性共同决定了模型最终收敛到损失曲面的哪个局部最优点。

值得特别说明的是,这些随机性来源在对模型性能的影响上并不等价。权重初始化的随机性影响最为深远:它决定了梯度下降的起始位置,进而影响优化轨迹和最终收敛点。在非凸的深度学习损失曲面上,不同初始化点可能导致模型收敛到质量差异显著的局部极值——这也是 He 初始化、Xavier 初始化等有理论依据的初始化方案被广泛采用的根本原因。He 初始化针对 ReLU 激活函数设计,通过将权重方差设为 2/n(n 为输入神经元数量)来保证各层激活值的方差在前向传播中保持稳定;Xavier 初始化则适用于 Sigmoid 或 Tanh 等饱和激活函数,采用均匀分布或正态分布并根据输入输出维度调整方差范围。这些方案通过控制各层激活值的方差来缩小不同初始化点之间的性能差距,但无法完全消除随机性带来的波动。

值得一提的是,随机性来源之间还存在交互效应:在某些架构中,批次打乱顺序与权重初始化的随机性会产生协同影响——特别是在课程学习(curriculum learning)或数据增强策略下,样本呈现顺序与初始梯度方向的配合可能使收敛路径产生显著分叉。此外,现代 GPU 的并行浮点运算本身也会引入不确定性,即使固定了 PyTorch 或 TensorFlow 的随机种子,若不同时设置 torch.backends.cudnn.deterministic = True,计算结果仍可能因硬件调度的差异而无法完全复现——这一"隐性随机性"在实验可复现性讨论中常被忽略,却是实践中随机种子无法完全消除波动的重要原因之一。

Dropout 的随机性具有正则化效果,其工作机制是在训练时以概率 p 随机将神经元输出置零,迫使网络学习冗余的分布式表征。在推理阶段,Dropout 通常被关闭,通过期望化近似(将每个神经元的输出乘以保留概率 1-p)来等效还原训练时的集成效果,因此对最终预测的影响主要体现在训练动态和泛化能力上,而非直接的预测差异。数据批次打乱顺序的随机性影响最小,但在小批量随机梯度下降(SGD)中,不同的样本呈现顺序会影响参数更新路径的方差,进而微妙地影响最终收敛点。

研究表明,即使架构和超参数完全相同,不同随机种子训练出的模型可能在准确率上产生 0.5% 到 2% 的自然波动——这一波动幅度有时与论文声称的"改进幅度"处于同一数量级,这正是统计检验不可或缺的根本原因。

核心矛盾

这里正是提问者困惑的关键点。标准的 McNemar 检验假设我们比较的是两个确定性模型在单一固定测试集上的预测结果。但现代深度学习实验中,模型训练往往依赖随机种子——不同的种子会导致不同的权重初始化、数据打乱顺序、dropout 模式等,最终产生多个略有差异的模型实例。

这就产生了一个根本性的矛盾:McNemar 检验处理的是模型预测的差异,而随机种子引入的是模型训练本身的变异性。 这两种不确定性来源在概念上是不同层次的。前者是"给定这两个训练好的模型,它们的预测行为是否有系统性差异"——这是一个关于预测分布的问题;后者是"在训练过程的随机性下,这两种算法的期望性能是否不同"——这是一个关于算法泛化能力的问题。将两者混淆可能导致结论的错误解读:用单次种子的 McNemar 检验结果来声称算法层面的优越性,在逻辑上是不充分的。

从贝叶斯视角来审视这一矛盾会更加清晰:单次种子下的 McNemar 检验实际上是在对"模型参数已固定"这一条件下的预测差异做推断,而研究者真正希望论证的是边际化掉训练随机性后的算法期望性能差异——这两个推断目标对应截然不同的统计模型,混淆它们相当于在错误的条件概率分布上做积分。

研究中的常见做法

在实际论文中,研究者通常采用以下几种策略来协调这一矛盾:

方法一:固定种子的单次配对检验

最简单直接的做法是为基线和提出方法各自固定一个种子,训练出两个确定性模型,然后在同一测试集上运行 McNemar 检验。这种方法严格符合 McNemar 检验的原始假设,但缺点也很明显——它只反映了某一个特定种子下的结果,无法说明性能提升在不同随机初始化下是否稳定。

方法二:多种子重复 + 独立的统计框架

更严谨的论文会用多个随机种子(如 5 个或 10 个)分别训练两个模型,得到多组准确率,然后使用配对 t 检验或 Wilcoxon 符号秩检验来比较两组准确率的分布。

值得注意的是,配对 t 检验假设两组差值服从正态分布,适用于样本量较大(通常 n>30)或可假设正态性的场景;而 Wilcoxon 符号秩检验是其非参数替代方案,不对分布形态做假设,仅要求差值的分布是对称的——它通过对差值的绝对值进行秩排序,再检验正差值与负差值的秩和是否对称来评估两者的差异。在机器学习的多种子实验中,由于重复次数通常只有 5 到 10 次,样本量极小,正态性假设难以通过 Shapiro-Wilk 等检验加以验证,因此 Wilcoxon 检验往往是更保守也更稳健的选择。

**置换检验(permutation test)**作为分布无关的替代方案值得额外说明。其核心思路是:如果零假设成立(两种方法没有差异),那么将两组结果的标签随机互换后,所得统计量的分布应与原始统计量相近。通过大量随机置换(通常 1000 到 10000 次)构建零假设下的经验分布,再观察原始统计量落在该分布的哪个位置,即可估计 p 值。置换检验的优势在于它直接从数据中构建参考分布,无需任何参数假设,尤其适合样本量小且分布未知的场景,但每次检验需要完成数千次重复计算,计算成本相对较高,在资源受限的实验环境中需权衡取舍。值得注意的是,当重复次数 n 极小(如 n=5)时,置换检验能够枚举的排列数量有限(2⁵=32 种),理论上可达到的最小 p 值受限于 1/32≈0.031,这意味着在极少重复次数下即使置换检验也难以达到 0.01 的显著性水平,研究者应对此保持清醒认识。

需要注意——这种情况下用的通常已经不是 McNemar 检验了,因为检验对象从「单样本的预测分歧」变成了「多次运行的准确率序列」。

方法三:混合报告

一些论文会同时报告两种结果:用 McNemar 检验说明在代表性种子下模型间的样本级差异,同时用多种子的均值±标准差来展示稳定性。这种做法兼顾了统计严谨性和实用性。

如何正确选择检验方法

明确检验的目标

关键在于想清楚自己要回答什么问题:

  • 如果问题是「这两个具体训练出来的模型,在预测行为上是否有显著差异」,那么 McNemar 检验是合适的,此时应固定种子并使用同一测试集。
  • 如果问题是「我的方法在整体上是否比基线更优,考虑到训练的随机性」,那么应该用多种子重复实验,配合配对 t 检验或非参数检验。

一个务实的建议

对于大多数研究场景,建议采取组合策略:

  1. 用多个随机种子(建议至少 5 个)分别训练基线和提出方法
  2. 报告每个模型的准确率均值和标准差,用配对检验评估整体差异的显著性
  3. 对于其中一个代表性种子(比如中位数表现的那一次),额外运行 McNemar 检验,展示模型在样本级别的预测分歧模式
  4. 明确在论文中说明所用的检验方法、显著性水平和多重比较校正(如有必要)

这样既能回应审稿人对统计严谨性的要求,也能清楚地说明性能提升的来源与稳定性。

容易被忽视的陷阱

在应用统计检验时,还有几个常见错误需要警惕。

多重比较问题:如果同时比较多个模型或多个数据集,需要进行多重比较校正,否则会系统性地高估显著性。Bonferroni 校正是最保守的方案,将显著性阈值除以比较次数(如进行 5 次比较时阈值从 0.05 降至 0.01);Benjamini-Hochberg FDR(假发现率)校正则更为宽松,它控制的是所有显著结果中假阳性的比例而非每次检验的错误率,在探索性研究中更为常用。

两种校正方法的选择反映了不同的风险偏好与控制目标。Bonferroni 校正基于**族错误率(Family-Wise Error Rate, FWER)**的控制逻辑——它保证在所有比较中至少出现一次假阳性的概率不超过 α,因此极为保守,在比较次数多时会大幅削弱检验功效,导致真实差异难以被发现。这种"宁可错过真实效应也不容许一次误判"的保守立场,在药物临床试验等高风险决策中是合理的,但在机器学习基准测试中往往过于严苛。Benjamini-Hochberg FDR 校正则采用更宽容的视角:它通过将 p 值从小到大排序后逐步比较来确定拒绝域,允许一定比例(通常设定为 5% 或 10%)的假阳性混入显著结果。在机器学习消融实验或多数据集基准测试中,FDR 校正通常是更实用的选择,因为研究者更关心"显著结果中有多大比例是真实的"而非"是否完全排除了一切误判"。遗憾的是,机器学习论文中多重比较校正的使用仍不够普遍,这是该领域统计实践的一个系统性弱点。

近年来兴起的自适应假设检验框架(如 AdaPT 方法)尝试将协变量信息融入 FDR 控制过程,以在保持错误率约束的同时提升功效——这一方向在基因组学中已有成熟应用,但尚未被机器学习社区广泛采纳,代表了未来统计实践的一个潜在发展方向。

测试集的独立性:McNemar 检验要求两个模型在完全相同的测试集上评估,任何测试集的不一致都会使检验失效。

统计显著 ≠ 实际显著:即使 p 值很小,如果实际改进幅度微不足道(例如 0.1%),其工程价值仍然有限。统计结论需要结合实际业务场景来解读。这一区分在统计学上对应**统计功效(statistical power)与效应量(effect size)**的差别——前者衡量发现真实差异的能力,后者衡量差异本身的实践意义。

在机器学习语境下,效应量可以用多种指标量化:准确率的绝对提升幅度、Cohen's d(标准化均值差,其计算方式为两组均值之差除以合并标准差,通常 d<0.2 为小效应,d=0.5 为中等效应,d>0.8 为大效应)、或者 McNemar 检验中 b 和 c 的不对称程度。一个统计上高度显著(p<0.001)但效应量极小(如 Cohen's d < 0.1)的结果,往往意味着研究者拥有一个非常大的测试集,能够以极高精度检测出微小差异——但这个差异在实际部署中可能毫无意义。反之,效应量大但 p 值不显著的结果,则可能是样本量不足导致的检验功效不够,值得通过扩大实验规模来进一步验证。

理解统计功效与效应量之间的张力,有助于研究者在"我的结果是否值得信任"和"我的结果是否值得关注"这两个层面分别作出判断,而不是将 p 值作为唯一裁判。在报告结果时,同时呈现效应量指标(如 Cohen's d 或准确率绝对提升幅度的置信区间)已逐渐成为心理学、医学等严格量化领域的规范要求,机器学习社区也在向这一方向缓慢靠拢。值得注意的是,美国心理学会(APA)自 2001 年起已在其出版手册中明确要求论文报告效应量,而 NeurIPS、ICML 等顶级机器学习会议的审稿指南也开始越来越多地强调实验结果的统计可靠性,这一规范化趋势正在深刻改变该领域的评审文化与论文写作标准。

小结

随机种子与 McNemar 检验的搭配问题,本质上反映了机器学习实验设计中一个更深层的议题:如何在算法的随机性和统计推断的确定性假设之间取得平衡。理解每种检验方法的适用前提,比机械地套用公式更为重要。

对于研究者而言,与其纠结于「论文里都怎么做」,不如从「我要证明什么」出发,选择真正匹配研究问题的统计工具,并在论文中透明地报告方法细节。

核心要点

  • McNemar 检验聚焦于两个模型的预测分歧样本,而非整体准确率差异,这使其在固定测试集上比独立样本检验更具统计功效
  • 随机种子引入的不确定性与 McNemar 检验的适用前提存在概念层次上的错位:前者是算法层面的变异性,后者处理的是确定性模型的预测差异
  • 多种子实验应优先使用配对 t 检验或 Wilcoxon 符号秩检验;当重复次数少(n<30)且无法验证正态性时,Wilcoxon 检验或置换检验是更稳健的选择
  • 置换检验在极少重复次数(如 n=5)时,理论上可达到的最小 p 值受限于排列数量,研究者应了解这一内在约束
  • 多重比较场景下,FWER 控制(Bonferroni)适合高风险决策,FDR 控制(Benjamini-Hochberg)适合机器学习探索性实验
  • 统计显著性(p 值)与实践显著性(效应量)需同时报告,p 值极小但 Cohen's d 极小的结果,统计上可信但实践上可能无意义
  • GPU 并行计算引入的隐性随机性(如 cuDNN 的非确定性算法)可能在固定软件种子后仍造成结果波动,实验可复现性需同时控制硬件层面的随机性
分享:

相关推荐