Abstract
作者在本文提出了一种新的OoD检测方法,不需要OoD的训练样本。检测器是一个单分类器,用原始网络的前几层的输出结果训练的。测试时使用的高维和低维的测试集,和其他先进的(state of art)方法比较,有出色的结果。
Introduction
DNN在现代软工中是不可或缺的部分,如自动驾驶、物联网、医疗等领域。深度神经网络在分类这件人类经常接触的问题上性能远超于人。
DNN在I.I.D假设下工作良好,但遇到OoD样本时往往过分自信(给出偏高的分类置信度),这阻碍了在安全要求很高的系统中DNN的可采用性。例如,训练集中没有自行车,但汽车的分类器会错分类骑自行车的人。因此分类器需要加强分辨ID和OoD的机制。以往的论文中也提到了类似地检测不同域的样本的方法,例如outlier and novelty detection。
作者接着介绍了常见的一些OoD检测方法。首先是Hendrycks和Gimpel提出的基于max-softmax的baseline。这个方法引入了阈值去辨别OoD(max-softmax低于阈值就认为是OoD)。这个方法对深度模型没有任何假设且没有使用OoD的数据进行训练。它可直接对训练好的模型使用,但是它的性能不是特别令人满意。其他的方法性能比max-softmax好,但它们有的限制了深度模型的结构;有的给定了深度特征的分布假设;有的不能应用于已经训练好的模型;有的需要OoD的训练样本去提高性能...在以上背景下,作者认为,没有上述的种种限制并且比max-softmax的性能更好依然是一个挑战。在本篇文章中,作者致力于提出一种检测手段,不需要重新训练网络,也不限制网络的结构。
现有的一些方法本质上都依赖于深度神经网络的倒数第二层。这一层的特征对于ID自身的分类非常重要,但是用于OoD检测还是比较困难,作者用图片可视化的方法证明了区分的困难性。随后作者提出了本文的方法:不基于softmax层,性能不亚于现有的先进方法,且不需要OoD数据来训练模型也不需要重训练网络。作者主要的观点是:假设存在一个潜在的空间可以将ID和OoD区分开,并且变换到这个空间的函数可以由网络的某一层良好估计。这个观点使得基于此空间特征的检测器是可以学习的。在此指导下,作者训练了第二个模型作为检测器,应用于低纬度和高维度的数据集并将其和baseline、先进的方法比较,结果在多个指标上有显著改进。
文章接下来几个部分,分别介绍了相关工作、作者的方法(如何检测OoD以及如何找到合适的潜在空间)、实验结果、实验结论和未来工作的建议方向。
Related work
首先是max-softmax的这个baseline,简单易用但是性能不理想。
然后是在此基础上改进的ODIN的方法。加入了两个额外的组成:temperature scaling和input preprocessing。temperature是用来校准softmax的值,input preprocessing用来提高ID的maximum的值。这个方法需要OoD的样本。但是实际操作时无法获得全面的OoD样本,并且Input preprocessing也会引入额外的训练时间开销(两次正向和一次反向传播)。
在ODIN的基础上进行改进,比如Lee的方法。使得深度网络分类器输出对于OoD是接近均匀分布的。这个主要的思想是训练一个分类器和一个生成器,生成器在数据流行的边界产生OoD样本,分类器则用一个特殊设计的损失函数训练:对于生成器生成的OoD更容易得到均匀分布的结果。这个方法需要昂贵的重训练开销,并且需要假设OoD的数据遍布整个数据流行的边界,但这对于高维数据是很难的。
接着作者介绍了其他人的方法。比如,DeVries and Taylor的方法:利用不确定性来检测OoD,即训练一个分类器输出uncertainty这个指标。Shalev, Adi, and Keshet&Vyas的方法:使用集成计算置信度估计。这些方法和Lee的方法一样不能直接用在训练好的原网络模型。
MC-dropout的方法也可以度量模型的不确定性,依靠多重推理计算不确定性可能并不实用。而且只能被用于有dropout层的网络模型中。此后,Geifman and EL-Yaniv使用这个方法刻画风险-覆盖曲线来对已经训练好的模型检测OoD,并且指出性能和max-softmax相似。基于不确定性的方法非常适合检测模型训练的类的边界上的混乱输入。对于非常远离ID的数据,uncertainty-based的方法的性能不好。
使用生成式的模型也是另一个检测OoD输入的重要方法。这些方法要么依赖于重建误差(reconstruction error),要么依赖于潜在表征的密度估计,或者是依赖于两者的结合。这些方法有一些不足,比如对于某些OoD数据会给出较高的ID可能性。并且,生成式模型很难在高维度的数据上进行拓展应用。
Lee等人此后提出了一种方法,基于高斯判别分析得到每个类的条件高斯分布。这产生了一个基于马氏距离的置信度来检测OoD输入。他们提出了两种方法:a):logits层前一层特征的马氏距离;b):各层马氏距离的集成模型。前者和他们之前的ODIN的方法性能差不多,后者用OoD数据对每个OoD数据集训练了一个回归模型。事实上,几个OoD的数据集就需要训练几个回归模型,这是他们第二个方法的主要的局限性。Lee还使用了对抗样本来训练回归模型,这导致检测性能的降低。此外,a和b方法中,每个类的特征的分布必须假设满足多元高斯分布,但这个假设是没有理论保证的。
接下来,作者准备介绍本文的方法,和Lee的方法有些类似:都用到了深度模型学习到的特征,但有几个重要的地方是不同的: + 没有用到logits层的特征,因为此前已经说明这一层不适合用来区分OoD和ID; + 不需要OoD的样本和对抗样本,但测试对所有的OoD数据集都适用; + 本方法找到合适的特征空间来区分OoD和ID,因此不需要依赖集成。 + 不需要假设特征满足多元高斯分布
Proposed solution
这个部分,作者介绍了他们方法的基本元素,包括对于一个具体的潜在空间检测的性能如何,如何发现这样的潜在空间、如何用输入预处理的方式加强结果等。
OoD detection
先给定如下假设: +
为了不用OoD数据进行训练,分类设定为单分类问题(One Class
Classification)。现有的许多单分类方法都可以使用,本文中作者使用的是One-class
SVM。OoD检测机制是
Finding optimal OoD discernment layer (OODL)
首先,需要找到网络
作者认为OODL往往选在较低的层,因为高层特征往往是分类的特征,和ID内的分类有关;而较低层特征是整体大概的特征,用来表征ID分布本身。那么到目前为止,实验表明了用倒数第二层有利于做ID内的分类,而OODL有利于做OoD的检测。
Input preprocessing
这是源自ODIN的方法,是用来增大max-softmax类别概率的。在本文中,作者用这个方法来增强ID的特征,这样OSVM分类器就更容易检测出ID的输入。作者还提到,即使不用输入预处理的方式,本文的方法也比其他很多方法性能要好。具体的Input
proprocessing的方法是:对于测试阶段的一个输入数据
Experiments
作者对几个ID和OoD dataset在不同的网络模型上运用了本文的方法。作者把性能和max-softmax,ODIN,MD进行了比较。正如前文所讨论的,本文的方法关注的是不用OoD数据参与分类器的训练,然而,为了遵守文献中的传统,作者还是使用了input preprocessing(需要访问OoD数据)的方法作为一个补充选项。和基于不确定度的方法的对比在附加材料中提到。作者的方法是开源可复现的。
ID datasets and models
- ID datasets包括:MNIST, CIFAR-10, CIFAR-100
- MNIST的模型:两个卷积层两个全连接层的CNN,测试集精确度99.22%
- CIFAR-10:的模型: VGG-16(by Simonyan and Zisserman 2014)和ResNet(by He et al. 2015)。测试集精度为93.56%和92.01%
- CIFAR-100的模型:同CIFAR-10,测试集精度为70.48%和69.17%
OoD datasets
作者用OoD的数据集进行测试评估,并保持ID和OoD的相同的测试规模,具体的数据集如下: + Fashion-MNIST + Omniglot + TinyImageNet + LSUN + iSUN + SVHN + Gaussian noise + Uniform noise
Evaluation metrics
本节对方法评估的指标进行说明。 + FPR at 95% TPR:FPR是
OSVM and hyper parameters
- 使用
核作为 kernel,比其他核效果好; - training error
; - temperature scale的T设置为1000,因为根据以为的paper,这是最理想的数值;
- 扰动级别
由FPR at 95% TPR来优化,随机使用20%的OoD datasets; - F-MNIST和TinyImageNet数据集用来寻找OODLs。每个ID和相应的模型都确定一个OODL;
- 用CIFAR-10和CIFAR-100训练的VGG-16模型的OODLs分别为第二个卷积层和第一个max-polling层;
- 用CIFAR-10和CIFAR-100训练的ResNet模型的OODLs分别为第13层和第9层residual layers;
- 更多的参数细节在补充材料中...
Detection results
1.对于MNIST&CUSTOM-CNN,结果如下(
可以发现,作者的方法在各个指标性能都能胜出。
2.对于CIFAR-10 and CIFAR-100 & 使用输入预处理,结果如下:
本文方法的性能在两个数据集上都胜出,同时,作者的方法有能力完全的检测出不同模型下的高维和低维的噪声。
3.对于作者的方法,不使用输入预处理和其他使用输入预处理的方法比较,结果如下图: 可以看到除了TinyImageNet for CIFAR-100,本文的方法性能都胜出。作者的方法有明显更优秀的AUROC,但detection error 和FPR at 95% TPR仅仅比ODIN的方法略好一点。有趣的是,MD的方法有时候比max-softmax更差。
Conclusion
检测DNN中的OoD inputs在安全相关的领域非常重要,比如自动驾驶和医疗领域。大部分OoD检测的方法都是基于DNN的倒数第二层提取的特征,这样的层用来区别ID的分类比较适合。与这些方法相反,本文提出的依赖于一个关键的思想,那就是寻找最适合的中间较低层作为OODL,来提供了一个容易分离ID和OoD的隐藏空间。结果指导我们训练一个单分类器检测OoD输入,不需要OoD的样本参与训练。当然,如果允许使用OoD的样本,本文的方法可以补充拓展为使用input preprocessing的改进版本。作者用几个低维和高维的数据集在不同的深度网络模型上评估了本文的方法。结果表明对于baseline和state-of-the-art的一些方法,在很多指标上都有明显进步。作者提出,他们未来的工作主要是使用一个专用的损失函数去改进OODL层提取的特征,以便更好地进行OoD检测和ID的类别的划分。