1. Softmax-based方法从概率分布到温度调节在OoD检测领域Softmax-based方法是最早被广泛采用的技术路线之一。它的核心思想非常简单利用分类模型输出的Softmax概率分布来判断输入样本是否属于已知分布In-Distribution, ID。这种方法最大的优势在于无需修改模型结构直接利用现成的分类模型就能实现OoD检测。我曾在实际项目中测试过基础版的Softmax方法发现一个有趣的现象对于分类正确的ID样本模型往往会给出接近1.0的最大Softmax概率值而对于OoD样本这个概率值通常会明显偏低。SMOOD方法正是基于这个观察通过设定一个概率阈值来区分ID和OoD样本。比如我们可以设定阈值为0.9当样本的最大Softmax概率低于这个值时就判定为OoD。但这种方法有个明显的缺陷不同类别的ID样本可能天然具有不同的Softmax概率分布。比如在ImageNet分类任务中狗和猫这类常见类别的置信度通常高于一些细分品类。为了解决这个问题ODIN提出了两项关键改进温度缩放(Temperature Scaling)在Softmax计算中引入温度参数T公式变为def tempered_softmax(logits, temperature): exp_logits np.exp(logits / temperature) return exp_logits / np.sum(exp_logits)通过调节T值通常设为1000可以放大ID和OoD样本的概率差异。输入预处理对输入图像加入微小扰动进一步扩大概率差异。实测发现这种方法能使OoD检测的AUROC指标提升10-15个百分点。不过要注意的是温度参数的选择需要根据具体数据集进行调整。我在CIFAR-10上测试时发现T1000效果最好但在某些医疗影像数据集上T500反而更合适。2. 不确定性估计让模型学会说我不知道传统分类模型有个致命缺陷即使对完全没见过的OoD样本也总会给出一个看似自信的预测结果。不确定性方法正是为了解决这个问题而生它的核心是让模型能够量化自己的不确定程度。这类方法通常需要修改模型结构。我比较喜欢的是Learning Confidence for OOD Detection提出的双分支架构在原有分类分支旁新增一个置信度预测分支。这个分支输出一个0到1之间的置信度值c用来调整最终的预测概率调整后概率 c * 原始Softmax概率训练时模型需要同时优化分类准确率和置信度校准。具体来说对于ID样本我们期望c接近1高置信度对于OoD样本c应该趋近于0。这种设计有个妙处即使分类分支出错只要置信度够低我们仍然可以将其识别为OoD样本。另一种有趣的思路是Multiple Semantic Label Representations它彻底改变了传统的监督方式。不再使用one-hot标签而是用词向量作为监督信号。模型需要预测目标类别的语义嵌入最终用预测向量的L2范数作为OoD分数。这种方法在文本分类场景表现尤其出色我在一个新闻分类项目中使用它OoD检测F1值达到了0.89。不过要注意不确定性方法需要额外的训练成本。如果你们的模型已经部署上线可能更适合使用下一节的生成式方法。3. 生成式模型重构误差里的秘密生成式模型为OoD检测提供了全新的视角。这类方法的基本假设是经过良好训练的VAE或GAN应该能很好地重构ID样本但对OoD样本会产生较大的重构误差。我最早尝试的是最基础的VAE重构方法。在MNIST数据集上训练一个VAE后发现它对数字的重构效果很好但当输入字母时重构图像变得模糊不清。通过计算原始图像与重构图像的MSE误差可以有效地检测出非数字样本。但这种方法有个明显局限重构误差受图像质量影响太大。一张稍微模糊的ID数字可能比清晰的OoD字母产生更大的误差。为此Improving reconstruction autoencoder...提出了马氏距离的改进方案在潜在空间计算ID样本的均值μ和协方差矩阵Σ对于新样本计算其潜在向量z与μ的马氏距离def mahalanobis_distance(z, mu, sigma_inv): delta z - mu return np.sqrt(delta.T sigma_inv delta)结合重构误差和马氏距离做综合判断在实际部署中我发现这种方法对特征空间的维度非常敏感。过高维度会导致马氏距离失效建议通过PCA将维度降至50-100左右。更前沿的Out-of-distribution Detection in Classifiers via Generation则采用了主动生成策略训练一个生成模型专门产生边界样本这些样本紧贴ID数据流形但又不属于ID分布。然后训练一个二分类器来区分真实ID样本和生成的边界样本。这种方法在医疗异常检测中表现优异我在皮肤病变识别项目中用它发现了多种罕见病变类型。4. 专用分类器简单粗暴的解决方案如果说前几种方法都带着些曲线救国的意味那么分类器方法就是直击问题本质直接把OoD检测当作一个分类问题来解决。最简单的实现方式是修改模型输出层增加一个额外的OoD类别。比如原本10类分类任务变为11类10个ID类1个OoD类。这种方法看似直接但在实践中遇到两个挑战需要大量多样的OoD样本进行训练OoD样本的多样性可能导致模型偏向将其归类为OoDOOD discernment layer提出了一种更巧妙的方案在模型不同层插入多个一类SVM分类器。通过分析发现某些中间层特征对OoD特别敏感。具体实现步骤如下冻结主模型权重在各个特征层后添加SVM使用正常ID样本训练这些SVM在验证集上评估各层的OoD检测性能选择表现最好的1-3个层作为最终检测点我在工业质检系统中采用这种方法结合了三个不同深度的特征层使得对新型缺陷的检测率提升了40%。不过要注意SVM的核函数选择很关键RBF核通常效果最好但计算量较大。5. 自监督学习无监督时代的OoD检测随着自监督学习的崛起OoD检测也迎来了新的突破。这类方法最大的优势是完全不需要人工标注仅通过数据自身的结构就能学习有效的OoD检测能力。CSIContrasting Shifted Instances是我见过最巧妙的自监督OoD方法之一。它的核心思想是通过对比学习来识别分布偏移。具体来说对每个样本x生成其增强版本x常规增强再生成一个分布偏移版本x使用非常规增强如极端裁剪训练模型将x和x的特征拉近同时将x与x的特征推远测试时使用样本与其增强版本的特征距离作为OoD分数在CIFAR-100上的实验显示CSI的性能甚至超过了部分有监督方法。我特别喜欢它的一个特性对增强策略的选择非常鲁棒。无论是哪种分布偏移模型都能学到有效的区分能力。另一个值得关注的是SSDSelf-Supervised Detection方法。它先用自监督方式预训练特征提取器然后在特征空间构建马氏距离检测器。这种方法在计算资源有限时特别有用因为特征提取器可以复用现有模型。最近我在尝试将CSI思路应用到时序数据中通过设计特殊的时间序列增强策略如随机片段交换在ECG异常检测中取得了不错的效果。自监督方法的潜力还远未被充分挖掘特别是在多模态场景下。
从Softmax到自监督:OoD检测主流技术路径深度解析
发布时间:2026/6/11 12:41:04
1. Softmax-based方法从概率分布到温度调节在OoD检测领域Softmax-based方法是最早被广泛采用的技术路线之一。它的核心思想非常简单利用分类模型输出的Softmax概率分布来判断输入样本是否属于已知分布In-Distribution, ID。这种方法最大的优势在于无需修改模型结构直接利用现成的分类模型就能实现OoD检测。我曾在实际项目中测试过基础版的Softmax方法发现一个有趣的现象对于分类正确的ID样本模型往往会给出接近1.0的最大Softmax概率值而对于OoD样本这个概率值通常会明显偏低。SMOOD方法正是基于这个观察通过设定一个概率阈值来区分ID和OoD样本。比如我们可以设定阈值为0.9当样本的最大Softmax概率低于这个值时就判定为OoD。但这种方法有个明显的缺陷不同类别的ID样本可能天然具有不同的Softmax概率分布。比如在ImageNet分类任务中狗和猫这类常见类别的置信度通常高于一些细分品类。为了解决这个问题ODIN提出了两项关键改进温度缩放(Temperature Scaling)在Softmax计算中引入温度参数T公式变为def tempered_softmax(logits, temperature): exp_logits np.exp(logits / temperature) return exp_logits / np.sum(exp_logits)通过调节T值通常设为1000可以放大ID和OoD样本的概率差异。输入预处理对输入图像加入微小扰动进一步扩大概率差异。实测发现这种方法能使OoD检测的AUROC指标提升10-15个百分点。不过要注意的是温度参数的选择需要根据具体数据集进行调整。我在CIFAR-10上测试时发现T1000效果最好但在某些医疗影像数据集上T500反而更合适。2. 不确定性估计让模型学会说我不知道传统分类模型有个致命缺陷即使对完全没见过的OoD样本也总会给出一个看似自信的预测结果。不确定性方法正是为了解决这个问题而生它的核心是让模型能够量化自己的不确定程度。这类方法通常需要修改模型结构。我比较喜欢的是Learning Confidence for OOD Detection提出的双分支架构在原有分类分支旁新增一个置信度预测分支。这个分支输出一个0到1之间的置信度值c用来调整最终的预测概率调整后概率 c * 原始Softmax概率训练时模型需要同时优化分类准确率和置信度校准。具体来说对于ID样本我们期望c接近1高置信度对于OoD样本c应该趋近于0。这种设计有个妙处即使分类分支出错只要置信度够低我们仍然可以将其识别为OoD样本。另一种有趣的思路是Multiple Semantic Label Representations它彻底改变了传统的监督方式。不再使用one-hot标签而是用词向量作为监督信号。模型需要预测目标类别的语义嵌入最终用预测向量的L2范数作为OoD分数。这种方法在文本分类场景表现尤其出色我在一个新闻分类项目中使用它OoD检测F1值达到了0.89。不过要注意不确定性方法需要额外的训练成本。如果你们的模型已经部署上线可能更适合使用下一节的生成式方法。3. 生成式模型重构误差里的秘密生成式模型为OoD检测提供了全新的视角。这类方法的基本假设是经过良好训练的VAE或GAN应该能很好地重构ID样本但对OoD样本会产生较大的重构误差。我最早尝试的是最基础的VAE重构方法。在MNIST数据集上训练一个VAE后发现它对数字的重构效果很好但当输入字母时重构图像变得模糊不清。通过计算原始图像与重构图像的MSE误差可以有效地检测出非数字样本。但这种方法有个明显局限重构误差受图像质量影响太大。一张稍微模糊的ID数字可能比清晰的OoD字母产生更大的误差。为此Improving reconstruction autoencoder...提出了马氏距离的改进方案在潜在空间计算ID样本的均值μ和协方差矩阵Σ对于新样本计算其潜在向量z与μ的马氏距离def mahalanobis_distance(z, mu, sigma_inv): delta z - mu return np.sqrt(delta.T sigma_inv delta)结合重构误差和马氏距离做综合判断在实际部署中我发现这种方法对特征空间的维度非常敏感。过高维度会导致马氏距离失效建议通过PCA将维度降至50-100左右。更前沿的Out-of-distribution Detection in Classifiers via Generation则采用了主动生成策略训练一个生成模型专门产生边界样本这些样本紧贴ID数据流形但又不属于ID分布。然后训练一个二分类器来区分真实ID样本和生成的边界样本。这种方法在医疗异常检测中表现优异我在皮肤病变识别项目中用它发现了多种罕见病变类型。4. 专用分类器简单粗暴的解决方案如果说前几种方法都带着些曲线救国的意味那么分类器方法就是直击问题本质直接把OoD检测当作一个分类问题来解决。最简单的实现方式是修改模型输出层增加一个额外的OoD类别。比如原本10类分类任务变为11类10个ID类1个OoD类。这种方法看似直接但在实践中遇到两个挑战需要大量多样的OoD样本进行训练OoD样本的多样性可能导致模型偏向将其归类为OoDOOD discernment layer提出了一种更巧妙的方案在模型不同层插入多个一类SVM分类器。通过分析发现某些中间层特征对OoD特别敏感。具体实现步骤如下冻结主模型权重在各个特征层后添加SVM使用正常ID样本训练这些SVM在验证集上评估各层的OoD检测性能选择表现最好的1-3个层作为最终检测点我在工业质检系统中采用这种方法结合了三个不同深度的特征层使得对新型缺陷的检测率提升了40%。不过要注意SVM的核函数选择很关键RBF核通常效果最好但计算量较大。5. 自监督学习无监督时代的OoD检测随着自监督学习的崛起OoD检测也迎来了新的突破。这类方法最大的优势是完全不需要人工标注仅通过数据自身的结构就能学习有效的OoD检测能力。CSIContrasting Shifted Instances是我见过最巧妙的自监督OoD方法之一。它的核心思想是通过对比学习来识别分布偏移。具体来说对每个样本x生成其增强版本x常规增强再生成一个分布偏移版本x使用非常规增强如极端裁剪训练模型将x和x的特征拉近同时将x与x的特征推远测试时使用样本与其增强版本的特征距离作为OoD分数在CIFAR-100上的实验显示CSI的性能甚至超过了部分有监督方法。我特别喜欢它的一个特性对增强策略的选择非常鲁棒。无论是哪种分布偏移模型都能学到有效的区分能力。另一个值得关注的是SSDSelf-Supervised Detection方法。它先用自监督方式预训练特征提取器然后在特征空间构建马氏距离检测器。这种方法在计算资源有限时特别有用因为特征提取器可以复用现有模型。最近我在尝试将CSI思路应用到时序数据中通过设计特殊的时间序列增强策略如随机片段交换在ECG异常检测中取得了不错的效果。自监督方法的潜力还远未被充分挖掘特别是在多模态场景下。