3. 数学基础

OOD(Out-of-Distribution)检测与异常场景挖掘,本质上是在回答一个概率问题:当前输入样本是否来自训练分布。要工程化地解决这个问题,必须掌握五块数学基石——概率分布、密度估计、距离度量、不确定性量化与风险最小化。它们分别回答“数据长什么样”“如何刻画正常”“如何度量偏离”“模型有多确信”“如何做取舍”。本节把它们串成一条可落地的推理链。

核心主线:训练分布 Pin(x) → 密度/距离打分 s(x) → 阈值 τ → 判定 in/out → 用风险函数选择 τ,使误报与漏报的加权代价最小。

一、概率分布:把“正常”写成可计算的形状

概率分布描述随机变量取值的规律。连续场景用概率密度函数 p(x),离散场景用概率质量函数 P(X=x)。工程中最常用的三类假设是:高斯分布(单峰、参数少、易估计)、混合高斯 GMM(多峰、可拟合多模态正常数据)、以及非参数分布(如 KDE 核密度估计,不假设形状)。

关键认知是:OOD 检测并不需要知道真实分布,只需要一个能对 in-distribution 打高分的代理分布。因此我们常用特征空间中的分布拟合,而非原始像素空间。例如在 ResNet 倒数第二层特征 z 上拟合高斯:

# 在特征空间拟合多元高斯(in-distribution)
mu = z_in.mean(dim=0)                 # 均值向量
cov = torch.cov(z_in.T) + 1e-6 * I    # 协方差 + 正则
inv_cov = torch.linalg.inv(cov)
# 马氏距离平方作为 OOD 分数
score = (z - mu) @ inv_cov @ (z - mu).T

二、密度估计:从数据到分数

密度估计分参数化与非参数化两条路。参数化方法(高斯、GMM)假设分布形式,用最大似然估计参数;非参数方法(KDE、直方图)直接用样本构造密度。深度生成模型(VAE、Normalizing Flow、扩散模型)则学习隐空间密度,是当前主流方向之一。

工程上要区分似然值与归一化分数。原始似然受维度、尺度影响大,直接比较不可靠。常见做法是取对数似然 log p(x),或做温度缩放、z-score 标准化。下表对比几种密度估计路线:

方法分布假设优点局限典型 OOD 分数
多元高斯单峰闭式解、快无法拟合多模态马氏距离
GMM多峰灵活、可解释需选 K、易过拟合负对数似然
KDE无参数不假设形状O(N²)、带宽敏感核密度值
Normalizing Flow可逆映射精确似然训练难、维度受限log p(x)
VAE / 扩散隐变量高维可扩展似然近似、易高估 OOD重构误差 + KL

三、距离度量:偏离程度的几何表达

距离度量把“偏离正常”变成可比较的数值。常用度量包括:欧氏距离、余弦相似度、马氏距离、KL 散度、Wasserstein 距离。选择取决于特征空间的性质:

  • 欧氏距离:适合各向同性、尺度一致的特征,简单但对量纲敏感。
  • 余弦相似度:关注方向而非幅值,适合归一化嵌入,广泛用于语义 OOD。
  • 马氏距离:考虑协方差结构,能消除特征相关性,是高斯假设下的最优度量。
  • KL / JS 散度:衡量两个分布的差异,适合分布级对比,但不对称、对零概率敏感。
  • Wasserstein 距离:考虑几何结构,对分布支撑不重叠更稳健。
实践建议:先用余弦相似度做快速基线,再用马氏距离或 KNN 距离提升;若特征维度高且样本少,优先降维(PCA/UMAP)后再度量,避免“维度灾难”导致距离集中。

四、不确定性量化:区分“不知道”与“不确定”

不确定性分两类:偶然不确定性(aleatoric)来自数据本身噪声,无法通过更多数据消除;认知不确定性(epistemic)来自模型知识不足,可通过增加数据降低。OOD 检测主要关注认知不确定性。

量化手段包括:softmax 置信度、熵、MC Dropout、深度集成、贝叶斯神经网络、温度缩放。其中 softmax 置信度最廉价但常过度自信,MC Dropout 与集成更可靠但推理成本高。一个实用组合是:

# 认知不确定性近似:MC Dropout 多次前向
logits = [model(x, training=True) for _ in range(T)]
probs = softmax(torch.stack(logits), dim=-1)
mean_p = probs.mean(0)
entropy = -(mean_p * log(mean_p)).sum(-1)      # 总不确定性
mutual_info = entropy - (-(probs*log(probs)).sum(-1)).mean(0)  # 认知不确定性

五、风险最小化:把分数变成决策

有了 OOD 分数 s(x),还需阈值 τ 才能判定。阈值选择本质是风险最小化:定义误报(把 in 判成 out)代价 CFP 与漏报(把 out 判成 in)代价 CFN,最小化期望风险:

R(τ) = C_FP · P(s > τ | in) · π_in
     + C_FN · P(s ≤ τ | out) · π_out

其中 πin、πout 是先验比例。当 CFN 远大于 CFP(如自动驾驶漏检障碍物),应降低 τ 提高召回;反之在推荐过滤中可提高 τ 保精度。工程上常用 ROC-AUC、FPR@95TPR、AUPR 等指标评估,再结合业务代价曲线选点。

常见误区:① 直接用 softmax 最大值当 OOD 分数,忽略其过度自信;② 在原始像素空间做密度估计,维度灾难导致所有样本都“稀疏”;③ 只调阈值不看代价,导致线上误报率不可接受;④ 把偶然不确定性误当 OOD 信号,噪声样本被大量误判。

六、案例:工业质检中的五步落地

以表面缺陷检测为例:正常产品图像经 CNN 提取 512 维特征 → 用 GMM 拟合正常特征分布 → 对每个新样本计算负对数似然作为 OOD 分数 → 用 MC Dropout 估计认知不确定性做二次过滤 → 按漏检代价 10 倍于误报的代价曲线选阈值。该流程把五块数学基础串成闭环,既保证召回,又控制误报。

OOD 检测的数学推理链:从分布到风险决策 ① 概率分布 P_in(x) 高斯 / GMM 刻画“正常”形状 ② 密度估计 log p(x) / KDE / Flow 输出似然分数 ③ 距离度量 马氏 / 余弦 / KL 量化偏离程度 ④ 不确定性 熵 / MC Dropout 认知 vs 偶然 OOD 分数 s(x) 似然 / 距离 / 不确定性融合 阈值 τ 判定 s(x) > τ → OOD,否则 in-dist ⑤ 风险最小化 R(τ) C_FP·FPR·π_in + C_FN·FNR·π_out 代价反馈调 τ 五块基石闭环:分布 → 密度 → 距离 → 不确定性 → 风险决策