Skip to content

OOD / Distribution Shift

OOD (Out-of-Distribution) 指模型在训练数据分布之外的数据上进行推理的现象。当输入数据的分布 $P(X)$ 与训练分布显著偏离时,模型性能通常会急剧下降。Distribution Shift (分布偏移) 是机器学习系统在实际部署中面临的最核心挑战之一。

核心概念

分布偏移的主要类型

类型定义示例
Covariate Shift (协变量偏移)$P(X)$ 变化,$P(YX)$ 不变
Concept Shift (概念偏移)$P(YX)$ 变化,$P(X)$ 不变
Label Shift$P(Y)$ 变化,$P(XY)$ 不变
Domain Shift (领域偏移)$P(X)$ 和 $P(YX)$ 均可能变化

OOD Detection (分布外检测)

OOD 检测旨在识别输入是否属于训练分布,通常与分类任务结合:

  • 密度方法: 使用流量模型或自编码器估计 $P(X)$,低密度区域标记为 OOD
  • 分类方法: 利用 softmax 置信度、能量函数 (Energy Score) 或欧氏距离判断 OOD
  • 距离方法: 基于特征空间中与训练样本的距离(如 MMD、Mahalanobis 距离)
  • 梯度方法: 利用输入梯度大小或梯度一致性检测 OOD

关键论文与技术

论文作者年份核心贡献
"A Survey on Out-of-Distribution Detection"Yang et al.2021OOD 检测全面综述,系统分类为密度/重建/分类/距离/梯度/能量基方法
"Energy-based Out-of-distribution Detection"Liu et al.2020 (NeurIPS)提出能量分数替代 softmax 置信度进行 OOD 检测
"Maximum Softmax Probability"Hendrycks & Gimpel2017基线方法:使用最大 softmax 概率检测误分类和 OOD 样本
"ODIN"Liang et al.2018 (ICLR)温度缩放 + 输入扰动提升 OOD 检测
"Domain Adversarial Neural Networks (DANN)"Ganin et al.2016 (JMLR)对抗性领域自适应框架

领域自适应与泛化

  • Domain Adaptation (DA): 利用标注的源域数据和无标注/少标注的目标域数据,学习跨域共享表示
  • Domain Generalization (DG): 更困难的设定——在训练时无法见到目标域,要求模型学习不变的特征表示
  • 常见 DG Benchmarks: PACS、VLCS、Office-Home、TerraIncognita、DomainNet

重要框架与工具

  • OpenOOD: 综合性 OOD 检测基准测试框架
  • PyTorch-OOD: OOD 检测方法统一实现库
  • MMD (Maximum Mean Discrepancy): 核方法衡量分布差异

与相关概念的关系

  • OOD Detection vs Anomaly Detection: OOD 检测关注分布差异,异常检测关注稀有/异常样本;两者方法重叠但目标不同
  • OOD vs Calibration: 良好校准的模型有助于更可靠的 OOD 检测
  • OOD vs Robustness: 对抗鲁棒性关注局部扰动,OOD 关注全局分布差异
  • DA vs Transfer Learning: 领域自适应是迁移学习的子集,专注解决分布偏移问题

实际应用与挑战

  • 医疗 AI: 不同医院的设备、操作流程导致影像分布差异
  • 自动驾驶: 不同城市、天气、时段的视觉环境差异
  • 推荐系统: 用户行为和商品库随时间变化
  • 核心挑战: 实际分布通常未知且动态变化,难以预先识别和适配

Sources

  • Yang et al., "Generalized Out-of-Distribution Detection: A Survey" (2021)
  • Liu et al., "Energy-based Out-of-distribution Detection" (NeurIPS 2020)
  • Hendrycks & Gimpel, "A Baseline for Detecting Misclassified and Out-of-Distribution Examples in Neural Networks" (ICLR Workshop 2017)
  • Ganin et al., "Domain-Adversarial Training of Neural Networks" (JMLR 2016)
  • OpenOOD: https://github.com/Jingkang50/OpenOOD

AI Knowledge Base — 持续积累