3. 数学基础
OOD(Out-of-Distribution)检测与异常场景挖掘,本质上是在回答一个概率问题:当前输入样本是否来自训练分布。要工程化地解决这个问题,必须掌握五块数学基石——概率分布、密度估计、距离度量、不确定性量化与风险最小化。它们分别回答“数据长什么样”“如何刻画正常”“如何度量偏离”“模型有多确信”“如何做取舍”。本节把它们串成一条可落地的推理链。
一、概率分布:把“正常”写成可计算的形状
概率分布描述随机变量取值的规律。连续场景用概率密度函数 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 距离:考虑几何结构,对分布支撑不重叠更稳健。
四、不确定性量化:区分“不知道”与“不确定”
不确定性分两类:偶然不确定性(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 等指标评估,再结合业务代价曲线选点。
六、案例:工业质检中的五步落地
以表面缺陷检测为例:正常产品图像经 CNN 提取 512 维特征 → 用 GMM 拟合正常特征分布 → 对每个新样本计算负对数似然作为 OOD 分数 → 用 MC Dropout 估计认知不确定性做二次过滤 → 按漏检代价 10 倍于误报的代价曲线选阈值。该流程把五块数学基础串成闭环,既保证召回,又控制误报。