引言

我们生活在一个机器学习模型正以惊人的速度从研究实验室走向现实世界的时代。我们训练模型来诊断疾病、批准贷款和驾驶汽车。在训练实验室的可控环境中,我们使用带标签的测试集来衡量成功。我们确切地知道模型的准确率是多少,因为我们拥有标准答案 (基本事实标签) 。

但是,当你部署模型的那一刻会发生什么呢?

你将模型发布到“野外”,在那里它会遇到“用户数据”。这些数据是无标签的——如果我们有标签,我们根本就不需要模型了。根本问题在于世界是变化的。现实世界 (部署) 中的数据分布往往会偏离训练期间使用的数据分布。这种被称为协变量偏移 (covariate shift) 的现象会悄无声息地破坏模型的性能。一个基于历史数据训练的信用风险模型在经济状况变化时可能会失效,从而可能因不公平的拒绝或更高的利率而伤害弱势群体。一个针对特定人群训练的医疗模型在应用于另一群人时可能会失败。

如果我们无法计算准确率,我们要如何知道模型是否正在失效?

这就是“部署差距”,它是安全关键型机器学习中最严峻的挑战之一。一篇题为 “Suitability Filter: A Statistical Framework for Classifier Evaluation in Real-World Deployment Settings” (适用性过滤器: 现实部署设置中分类器评估的统计框架) 的新研究论文提出了一个强有力的解决方案。研究人员引入了 适用性过滤器 (Suitability Filter) , 这是一个统计框架,允许我们在不需要基本事实的情况下检测无标签数据上的性能退化。

在这篇文章中,我们将拆解适用性过滤器,解释它如何利用“适用性信号”来估计正确性,并探索决定模型是否可以安全使用的统计机制。

核心问题: 盲目飞行

在深入探讨解决方案之前,让我们先明确问题。在标准的机器学习生命周期中,有两个角色: 模型提供者 (Model Provider)模型使用者 (Model User)

  1. 提供者 在源分布 (\(D_{source}\)) 上训练模型 \(M\)。他们在一个留出测试集 (\(D_{test}\)) 上验证其效果良好。
  2. 使用者 带来了来自目标分布 (\(D_{target}\)) 的自有数据 (\(D_{u}\)) 。

如果 \(D_{source}\) 和 \(D_{target}\) 完全相同,那一切都好。但这种情况很少见。用户想知道: “这个模型在我数据上的准确率是否比你们基于测试集承诺的准确率差很多?”

由于用户的数据是无标签的,我们无法直接计算准确率。实际上,我们是在盲目飞行,寄希望于模型具有良好的泛化能力。适用性过滤器的目标是提供一个仪表盘工具,当“高度” (准确率) 降得过低时发出警报。

解决方案: 适用性过滤器

适用性过滤器是一个辅助功能,与你的分类器并存。它的工作是输出两个决定之一: 适用 (SUITABLE)不确定 (INCONCLUSIVE)

这里对“适用”的定义是严格的。如果一个模型在用户数据集 \(D_u\) 上的准确率不低于其在原始测试集 (\(D_{test}\)) 上的准确率超过特定边际 \(m\),则该模型被认为适用于该用户数据集。

在数学上,目标是验证这个不等式:

描述适用性条件的公式: 用户数据上的准确率必须大于或等于测试数据上的准确率减去边际 m。

这里,\(\mathcal{O}(x)\) 代表预言机 (真实标签) ,我们在用户数据中没有它。适用性过滤器通过三个步骤近似地验证这一点:

  1. 提取信号: 从模型对每个样本的行为中收集线索。
  2. 估计正确性: 利用这些线索猜测模型正确的概率。
  3. 统计测试: 比较测试集和用户集上的这些猜测分布,看看是否有显著下降。

让我们分解这个框架的架构。

适用性过滤器的示意图概览。展示了从分类器训练到正确性估计,最后导致测试数据和用户数据分布之间统计假设检验的流程。

Figure 2 所示,该过程并行运行。我们通过相同的管道处理带标签的测试数据 (上方路径) 和无标签的用户数据 (下方路径) ,生成“预测正确性概率” (\(p_c\)) 。然后我们比较这两个分布。

第 1 步: 适用性信号

如何在不知道答案的情况下猜测模型是否正确?事实证明,模型通常“知道”自己何时感到困惑。我们可以从模型的原始输出 (Logits 和 Softmax 概率) 中提取与准确率相关的 适用性信号 (Suitability Signals)

作者使用了多种与模型无关的信号 (适用于任何分类器) 。一些常见的例子包括:

  • 最大置信度 (Maximum Confidence) : 分配给某个类别的最高概率。如果模型以 99.9% 的置信度预测“猫”,那么它比以 51% 的置信度预测“猫”更有可能是正确的。 最大置信度 (conf_max) 的公式。

  • 熵 (Entropy) : 不确定性的度量。如果概率均匀分布在所有类别中,则熵很高 (不确定性高) 。 置信度熵 (conf_entropy) 的公式。

  • 能量 (Energy) : 源自原始 Logits (Softmax 层之前) 的指标,通常用于检测分布外数据。 能量计算公式。

其他信号包括 Logits 的标准差、前两个预测之间的边际以及交叉熵损失 (针对预测标签计算) 。

第 2 步: 预测正确性估计器 (\(C\))

拥有一堆信号固然很好,但我们需要将它们组合成一个单一的、可解释的数字: 正确性概率 (\(p_c\))

为此,研究人员训练了一个单独的、较小的模型,称为 预测正确性估计器 (\(C\))

  • 训练数据: 为了训练 \(C\),模型提供者需要一个特定的数据集,称为 \(D_{sf}\) (适用性过滤器数据集) 。这是一个从源分布中提取的带标签留出集,与训练集和测试集分开。
  • 方法: 对于 \(D_{sf}\) 中的每个样本,提供者计算适用性信号,并检查主模型 \(M\) 是否实际正确 (因为 \(D_{sf}\) 有标签) 。
  • 模型: \(C\) 通常是一个逻辑回归模型。它以信号向量为输入,输出一个 0 到 1 之间的值,代表 \(M\) 正确的估计概率。

一旦训练完成,\(C\) 就可以应用于 任何 输入,无论我们是否有标签。我们将其应用于测试数据 (\(D_{test}\)) 和用户数据 (\(D_{u}\)) ,以获得正确性概率向量。

定义测试和用户数据集正确性概率向量的公式。

第 3 步: 统计非劣效性检验

现在我们有了两个数字列表: 测试集的估计正确性概率和用户集的估计正确性概率。

如果我们简单地对这些列表求平均值,我们会得到两个数据集的 估计准确率

定义 mu_source 和 mu_target 为预测正确性期望值的公式。

然而,对于安全关键型部署,仅仅比较平均值是不够严谨的。我们需要考虑样本量和方差。我们需要进行统计检验。

作者采用了 非劣效性检验 (Non-Inferiority Testing) 。 与标准的“差异”检验 (检查 \(A \neq B\)) 不同,非劣效性检验检查的是“A 是否不比 B 差超过边际 \(m\)”。

我们设定假设如下:

假设设置: H0 假设目标比源减去边际 m 更差。H1 假设目标优于或等于源减去边际 m。

  • 原假设 (\(H_0\)): 用户 (目标) 数据上的性能比测试 (源) 数据差 超过 允许的边际 \(m\)。 (即: 模型 不适用 )。
  • 备择假设 (\(H_1\)): 用户数据上的性能大致相当或更好 (在边际内) 。 (即: 模型 适用 )。

过滤器使用 Welch t 检验 来比较分布。

Welch t 检验统计量的公式。

如果该检验的 p 值低于显著性水平 (\(\alpha\),通常为 0.05) ,我们拒绝原假设并宣布模型 适用 (SUITABLE) 。 如果 p 值很高,我们无法确认适用性,过滤器返回 不确定 (INCONCLUSIVE)

可视化决策

下方的密度图完美地阐释了这一概念。

标题为“适用性过滤器”的密度图。它显示了测试数据 (蓝色) 、不适用用户数据 (红色) 和适用用户数据 (绿色) 的不同曲线。虚线显示平均值。

  • 蓝色曲线: 测试数据上的正确性概率分布。
  • 红色曲线: 一个发生了显著偏移的用户数据集。曲线向左推移 (正确性概率较低) 。蓝色和红色虚线之间的距离很大,可能超过了边际 \(m\)。测试在这里会失败。
  • 绿色曲线: 一个适用的用户数据集。它与蓝色曲线有显著重叠。均值差异很小,落在“适用性边际”内。

校准的挑战

上述框架依赖于一个巨大的假设: 正确性估计器 (\(C\)) 必须是准确的。

如果 \(C\) 持续高估正确性概率,我们可能会误以为模型表现良好,而实际上它正在失效。这就是所谓的 校准误差 (Calibration Error)

论文利用 \(\delta\)-校准的概念从理论上分析了这一点。

通过 delta 项将预期预测正确性与真实准确率联系起来的公式。

如果我们的估计器是完美校准的 (\(\delta = 0\)) ,那么我们正确性概率的期望值正好等于真实的准确率。然而,实际上,估计器经常会发生漂移,特别是当应用于可能与源分布不同的目标分布时。

边际调整

为了解决这个问题,作者提出了一种实用的修正方法。如果我们能够估计校准误差 (估计器的“偏差”) ,我们就可以调整边际 \(m\) 来进行补偿。

假设我们知道我们的估计器倾向于 高估 用户数据的准确率。为了确保安全,我们实际上需要提高通过测试的难度。我们基于在测试集和一小部分用户数据样本上观察到的经验估计误差 (\(\Delta\)),计算一个新的边际 \(m'\)。

调整后的边际 m’ 等于 m 加上 delta_test 减去 delta_user 的公式。

Figure 3 可视化了这种调整机制。

展示边际调整的图表。对角线代表完美的准确率对齐。调整将边际 m 移动到 m’ 以考虑估计误差。

  • 左图 (适用) : 估计误差将感知到的准确率拉离了对角线 (真实值) 。通过将 \(m\) 调整为 \(m'\),我们有效地将接受标准与现实重新对齐。
  • 右图 (不适用) : 即使进行了调整,用户数据仍然落在阈值之下,正确地将模型识别为不适用。

这种调整对于保持 有界假阳性率 (Bounded False Positive Rate) 至关重要。研究人员证明,通过这种修正,错误地将糟糕模型标记为“适用”的概率被严格控制在显著性水平 \(\alpha\) 之内。

实验结果: 它有效吗?

为了验证适用性过滤器,研究人员使用了 WILDS 基准测试 进行了大量实验。WILDS 是专门为测试分布偏移 (例如,不同年份的卫星图像、不同医院的医学图像) 而设计的数据集集合。

对准确率下降的敏感度

最重要的问题之一是: “过滤器的敏感度如何?”如果模型的准确率下降 1%,过滤器能注意到吗?5% 呢?

FMoW-WILDS (卫星图像) 数据集上的结果总结在 Figure 4 中。

条形图显示了不同准确率差异下的“适用”决策。随着准确率差异 (用户 - 测试) 变为正值 (绿色条) ,决策变为 100% 适用。当其降为负值 (红色条) 时,决策变为不适用。

这张图表本质上是过滤器的“敏感度概况”:

  • 右侧 (绿色) : 当用户数据上的准确率高于或等于测试数据 (准确率差异 \(\ge 0\)) 时,过滤器几乎总是返回 适用 。 这很好;我们希望接受好的模型。
  • 左侧 (红色) : 当准确率差异降至 -3% 以下 (意味着模型在用户数据上的表现差 3%) 时,“适用”决策的百分比降至 0% 。 过滤器捕捉到了 每一个 显著退化的实例。
  • 过渡区: 在 -3% 到 0% 之间的小窗口内,存在一些不确定性。这在统计测试中是预期的;如果没有巨大的样本量,很难以高置信度检测出微小的差异。

哪些信号重要?

研究人员还分析了哪些“适用性信号”实际上起到了关键作用。是复杂的“熵”计算更重要,还是简单的“最大置信度”就足够了?

利用 SHAP (SHapley Additive exPlanations) 值,他们对估计器 \(C\) 使用的信号重要性进行了排名。

SHAP 概要图。主要特征包括 logit_max, energy, 和 margin_loss。

Figure 8 所示,最具预测性的信号是:

  1. logit_max: 原始最大输出值。
  2. energy: 分布的能量得分。
  3. conf_max: Softmax 置信度。

有趣的是,像 logit_mean (Logits 的平均值) 这样的信号影响非常小。这一洞察对从业者很有价值: 如果你需要实现这个过滤器的轻量级版本,你可能只需要计算前 3 或 4 个信号,而不是全部。

结论与启示

“适用性过滤器”代表了向负责任的机器学习部署迈出的重要一步。它使我们从“部署并祈祷 (deploy and pray) ”的方法论转向了一个严格的、基于统计的监控框架。

主要收获:

  1. 无标签评估: 我们可以利用适用性信号,在没有基本事实标签的情况下估计性能退化。
  2. 统计严谨性: 通过使用非劣效性检验,我们可以控制假阳性 (接受糟糕模型) 的风险。
  3. 适应性: 该框架是模块化的。根据领域的不同,你可以替换不同的分类器、不同的信号,甚至不同的统计测试 (如等效性测试) 。

对于进入该领域的本科生和硕士生来说,这篇论文强调了一个至关重要的教训: 模型训练只是战斗的一半。 在动态的现实世界环境中监控、评估和拒绝模型的能力,是将编程项目与生产级 AI 系统区分开来的关键。

适用性过滤器为 AI 创建“可审计的服务水平协议 (SLA)”提供了蓝图。在未来,模型提供者可能不仅承诺“99% 的准确率”,而且会逐日、逐数据集地验证模型是否仍然适用于你的特定需求。