Out-of-distribution Detection系列专栏(三)

目录

前言

Enhancing the reliability of out-of-distribution image detection in neural networks

Motivation

Temperature Scaling

Input Preprocessing

Evaluation Metrics


前言

这是OOD检测系列专栏的第三篇文章,也是对于OOD检测后续的发展非常重要的一种方法。由于其不需要额外的训练或者finetune,因此可以很容易的与其他各种技术相结合。这种方法在后续的研究中被称为ODIN。

Enhancing the reliability of out-of-distribution image detection in neural networks

可以观察到一个有趣的现象,做OOD研究的相关文章,题目实在是太长了,都得换好几行。本文中提出的方法被称为ODIN,是Out-of-DIstribution detector for Neural networks的简写。我第一次看到这个简写来源的时候是一脸疑惑的,但是这并不影响ODIN成为OOD检测研究领域的一个绝妙思想。

Motivation

在上一篇文章中,也就是Max-Softmax方法中,作者已经指出,传统的卷积神经网络是可以用来做OOD检测的,并且取得了不错的效果,这说明了按照有监督方式训练得到的分类网络会赋予ID样本更高的置信度,而赋予OOD样本相对较低的置信度。基于这个实验观察,ODIN想要达到的目的就是:在Max-Softmax的基础上,用一些技巧使得模型对ID样本的置信度显著提高,而对OOD样本的置信度仅有小幅度提高。如果能实现这样的目的,那就拉大了ID数据与OOD数据之间的置信度差异,从而增强模型的OOD检测能力。ODIN包含了两种技巧,一种是Temperature Scaling,另一种是Input Preprocessing。下面分别介绍这两种技巧。

Temperature Scaling

我们用f(x)=(f_1(x),f_2(x),f_3(x),...,f_N(x))来表示一个分类网络,其中x代表的是输入图像。对于一个N分类问题,卷积网络最后的输出层维度将会是N,对应输出f_1(x)f_N(x)N个实数值。为了使得输出有着概率分布的形式,我们通常会使用Softmax激活函数进行映射,使得每个实数值介于0到1之间并且和为1,代表输入x属于各个类别的概率。这个映射函数可以写成以下的形式:

S_i(x;T)=\frac{\exp(f_i(x)/T)}{\sum_{j=1}^{N}\exp(f_j(x)/T)}

在上述表达式中,T就是我们说的temperature。如果令T=1,那就是我们常见的Softmax激活函数。S_i(x;T)表达的是输入样本x属于类别i的置信度或者说是概率。在OOD检测中,我们取Softmax输出的最大置信度作为当前样本是ID样本的概率,也就是:

S_{\hat{y}}(x;T)=\max_{i}S_i(x;T)

得分S_{\hat{y}}(x;T)将被用于计算OOD检测的评价指标。作者在训练时,使用的是T=1,也就是传统的Max-Softmax模型,但是在推理的时候,作者发现通过调节温度T会显著提高OOD检测的能力,这是为什么呢?我们需要理解以下两点:

  • 第一点:在计算AUROC,AUPR这两个指标时,会对输入的预测值进行排序,逐个选择分界阈值,然后计算平均。也就是说,这两个指标只与排序结果相关,而与绝对分值无关。进一步的,如果在标签不变的前提下,我们把所有样本的得分同时变大或者变小,但是保证排序的顺序不变,那么这两个指标是不会变化的。
  • 第二点:作者在实验中发现一个现象,那就是Max-Softmax方法会倾向于将目标标签所在的那一维度的输出值(logit)推向很大,在量级上远远超过其他维度。这里我们说logit指的是未经过Softmax映射的网络输出的实数值。而根据Max-Softmax的发现,对于OOD样本,这一现象不是那么突出,也就是各个维度(各个类别)的logit会有差异,但是很少有量级上的巨大差异。因此,通过调节温度T,可以使得OOD样本的置信度锐减,而ID样本的置信度减少很小或没有变化。

我们通过一个实例来理解上述的第二点,也就是Temperature Scaling的作用效果:

import torch
import torch.nn as nn

if __name__ == '__main__':
    T = 100
    softmax = nn.Softmax(0)
    logit_a = torch.tensor([10, 11, 12, 13]).float()
    softmax_logit_a = softmax(logit_a)
    T_softmax_logit_a = softmax(logit_a / T)
    print('Original : ', softmax_logit_a)
    print('Temperature Scaling : ', T_softmax_logit_a)

我们可以得到以下输出结果:

 这说明,在logit没有太大量级差异的时候,我们对logit缩小相同的倍率,会使得经过Softmax映射后,结果趋近于均匀分布,各个维度之间的差异不再明显。下面是一个维度之间有着明显量级差异的示例:

import torch
import torch.nn as nn

if __name__ == '__main__':
    softmax = nn.Softmax(0)
    T = 100
    logit_a = torch.tensor([300, 11, 12, 13]).float()
    softmax_logit_a = softmax(logit_a)
    T_softmax_logit_a = softmax(logit_a / T)
    print('Original : ', softmax_logit_a)
    print('Temperature Scaling : ', T_softmax_logit_a)

此时,我们得到的结果如下:

可以看出,此时,经过Temperature Scaling之后,各维度之间的概率置信度并没有发生显著的变化,原来占据主导的维度现在仍然占据主导优势。 

另外,值得指出的是,Temperature Scaling不会改变各个维度之间的相对顺序关系,这丛上面的两个示例也可以看出。这保证了Max-Softmax方法结合Temperature Scaling使用,性能只可能上升,而不可能下降,这是非常巧妙的一点。作者在文中对温度T做了一系列消融实验,对比了不同温度的作用效果:

 从上图左侧的四幅图中可以看出,在不同的温度设置下,OOD检测的性能均高于Max-Softmax(对英语温度为1的时候)。

Input Preprocessing

除了对Softmax的输出进行处理之外,作者还提出了另外一种针对输入图像的处理方法,文中称作Input Preprocessing。这个方法是基于一个先验的:由于我们的分类网络是在ID数据上训练的,那么我们可以直观的认为,ID数据分布在得分峰值或者是峰值附近,而OOD数据则往往分布在远离得分峰值的区域。下面的示意图直观的展示了这一现象:

在上图中,蓝色字体表示OOD数据,红色字体表示ID数据。竖直方向的坐标轴表示的是经过Softmax后输出的得分,也就是上文中提到的S_{\hat{y}}(x;T)。因为卷积神经网络是在ID数据上训练的,它对于ID数据更加敏感,并且,ID数据在训练过程中会尽量聚集在得分峰值或者是峰值附近。与此不同的是,OOD数据往往分布在距离峰值较远的区域。

借助于示意图我们可以看出,如果冻结神经网络的权重,对Softmax输出得分进行一次梯度上升的话,ID样本的得分将会大幅度提高,而OOD样本则仅仅会小幅度提高,这样一来,也可以拉大ID数据与OOD数据的得分差距,从而有助于进行OOD检测。

x表示输入的图像,用S_{\hat{y}}(x;T)表示Softmax网络输出的置信度得分,利用FGSM方法(参见专栏一),可以对输入图像进行微调,得到对抗样本:

\tilde{x}=x+\epsilon(\nabla_x\log S_{\hat{y}}(x;T))

上式中的\tilde{x}便是经过Input Preprocessing后得到的样本,将\tilde{x}作为输入得到的Softmax得分S_{\hat{y}}(\tilde{x};T)可以用于检测OOD样本,也就是用来计算AUROC以及AUPR等指标。在ODIN中,这两种处理方法是结合使用的,对Softmax检测OOD能力的提升具有显著效果。

Evaluation Metrics

作者在文中给出了ODIN与Softmax的实验对比,可以看出,ODIN对于提升卷积网络的OOD检测能力是具有十分明显的作用的。

在本文中,作者使用的卷积网络是DenseNet-BC,除此之外,ResNet18与ResNet34也是OOD检测中常用的骨干网络。从目前来说,用于OOD实验的数据集并不是非常复杂,因此通常选用较常见的规模适量的卷积网络作为分类器。 

  • 15
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: Out-of-distribution是指在模型训练时未曾出现过的数据分布,也称为“未知数据”。在模型面对未知数据时,其预测结果可能会出现误差或不确定性。因此,对于模型的鲁棒性和泛化能力的提升,需要对out-of-distribution数据进行有效的识别和处理。 ### 回答2: out-of-distribution(OoD)是指模型在测试阶段遇到了其训练数据集之外的样本或类别。当模型只使用特定的数据集进行训练时,它可能无法处理那些与训练数据不同的输入。这些新的样本可能是在颜色、形状、大小等方面与训练数据有所不同,也可能属于未在训练数据中出现过的类别。 遇到OoD样本的问题是模型的泛化能力不足。模型在训练数据中表示和学习的特征可能过于特定,无法推广到训练数据集之外的样本。这可能导致模型的预测不准确或不可靠。 为了解决OoD问题,有几种方法可以采取。一种常见的方法是收集更多来自OoD分布的样本,并将其添加到训练数据中,以使模型能够更好地学习如何处理这些新样本。另一种方法是使用一些先验知识或规则,对OoD样本进行检测和筛选,以避免对其进行错误预测。 同时,一些研究者提出了一些用于检测OoD样本的新颖性评估方法。这些方法通过利用模型在训练样本和OoD样本上的输出差异来判断一个样本是否属于OoD类别。这种方法可以帮助我们识别OoD样本,并采取相应的措施,以提高模型的泛化性能。 综上所述,解决out-of-distribution问题是训练一个具有较强泛化能力的模型的重要步骤。只有当模型能够有效处理新的样本和未见过的类别时,才能提高模型的可靠性和适用性。 ### 回答3: "out-of-distribution"是指数据集中没有包含的数据样本或样本类别。在机器学习深度学习中,数据集通常用于训练和测试模型的性能。然而,在现实世界中,我们会遇到无法准确分类的新数据,这些数据就属于"out-of-distribution"。这可能是因为这些数据具有与训练数据不同的特征,或者因为数据集的覆盖范围有限。 "out-of-distribution"的出现可能会对模型的性能和鲁棒性产生负面影响。由于模型没有前面没有见过这些类型的数据,它可能会对其进行错误的分类或给出不确定的预测结果。这种情况在实际应用中特别重要,因为我们希望模型能够在各种不同的情况下表现得可靠和准确。 为了解决"out-of-distribution"问题,一种常见的方法是通过收集更多具有代表性的训练数据来增加数据集的覆盖范围。这样模型可以更好地学习不同类型的数据特征,并提高对"out-of-distribution"数据的泛化能力。另外,使用先进的模型架构和优化算法也可以增强模型的鲁棒性。 除了增加训练数据和改进模型架构外,还可以使用一些检测方法来识别"out-of-distribution"的样本。这些方法可以根据模型的置信度、预测熵或数据分布等特征来判断样本是否属于训练集之外的数据。这些方法可以帮助我们发现并处理那些可能造成模型失效的"out-of-distribution"数据。 总之,"out-of-distribution"是指在训练数据之外的数据样本或样本类别。对于机器学习深度学习任务,了解和解决"out-of-distribution"问题是提高模型性能和鲁棒性的关键。通过增加训练数据、改进模型架构和使用检测方法,我们可以减少"out-of-distribution"带来的负面影响。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值