Out-of-Distribution Robustness in Deep Learning
本文总结了SOTA的OOD检测论文(截止到2020/4/10):
目前SOTA的OOD检测算法分成两大类:
1,Deep generative model(包含基于flow的方法Glow,PixelCNN等)都是为了学习得到 p(x) 所以往往不需要label信息,之前的方法总用likelihood去作为评价out或in distribution,但是这种方式不合适,所以大家提出用likelihood ratio等方法来改善他们。
2,基于训练分类器的检测OOD的方法,包含熵或者deep ensemble的各种方法则依赖于x的label信息。
下面就介绍几篇最新进展:
A simple unified framework for detecting out-of distribution samples and adversarial attacks NIPS 2018
Likelihood Ratios for Out-of-Distribution Detection NIPS 2019
Robust Out-of-distribution Detection in Neural Networks 2020 还没被接收
INPUT COMPLEXITY AND OUT-OF-DISTRIBUTION DETECTION WITH LIKELIHOOD-BASED GENERATIVE MODELS ICLR 2020
Detecting out-of-distribution inputs to deep generative models using a test for typicality (E. Nalisnick, A. Matsukawa, Y. W. Teh, and B. Lakshminarayanan)
A simple unified framework for detecting out-of distribution samples and adversarial attacks NIPS 2018
输入数据:多类分类的数据(有label),训练数据中都是in-distribution的 (实验评价指标 AUROC)
然后用一个验证集(同时包含in-d和OOD数据对)去调节超参数alpha。
提供一种confidence score的计算方式,适用于任何训练好的softmax neural classifier
https://github.com/hungrayho/deep_Mahalanobis_detector
use the Mahalanobis distance based confidence score derived from a neural network
f是分类器 求出 class-condition 的高斯分布
然后计算confidence score M
只用f 就是整个分类器的output 是比较低维度的信息 ,所以本文用了feature ensemble的方法,这个方法考虑到每一个网络层 l 的输出特征在里面。每个层会有一个confidence score,然后alpha每层的权重是在validation上用逻辑回归计算出来的。下图是confidence score计算方法
但是在计算测试数据集的confidence score之前,它要做一个校准如下,增加了一个小扰动。这个做法貌似在好几个文章中都用到了。
Likelihood Ratios for Out-of-Distribution Detection NIPS 2019
https://github.com/google-research/google-research/tree/master/genomics_ood
训练数据不需要label的信息,是基于Deep generative model 学 p(x) ,训练数据是in-distribution
然后用一个验证集(同时包含in-d和OOD)去调节超参数。
训练时候不需要OOD数据
提供了一个 genomics dataset for ood detection
通过likelihood来判断ood已经被很多人吐槽过是非常不准确的 这个文章的作者也是提出一种likelihood ratios的方法来判断ood。作者觉得模型学习样本应该分为两个部分,一个是backgroud(无论是ood还是in distribution都有),一个是semantic的部分。
所以它觉得x的似然函数应该表示成这两部分的乘积
theta是在in-distribution上学习的模型 theta_0是学习所有样本的一个背景信息的模型 因为theta和theta_0在学习background部分的概率应该是差不多。所以得到如下:
用auto-regressive来建模这个似然函数则可以得到:
第一步训练一个background model,通过算法1 生成一些加入扰动的数据,然后生成background模型。第二步就是使用Liklihood ratio来判断OOD 但没看到semantic部分数据咋来,直接用raw data。前景和背景模型用的是同样一个,但是背景模型有两个参数l2正则化项系数和数据扰动比例mu需要在验证集(有in-d和OOD标签)上去调节。
Robust Out-of-distribution Detection in Neural Networks 2020 还没被接收
训练同时需要in-distribution和OOD数据集
https://github.com/jfc43/ robust-ood-detection 这里有本文以及其它一些ood detection算法
作者说他发现现在的OOD detection(calibrated softmax confidence score or the Mahalanobis
distance based confidence score)的方法,如果样本增加一点点小扰动,不改变语义信息情况下表现非常差。一方面作者提出了一个robust ood detection方法;另外一方面提出了一个算法来fool existing OOD detectors(通过加一个扰动生成对抗样本,而不改变语义信息)。这里就对比了上面NIPS2018的论文,说它就表现很差。
这是Deep Anomaly Detection with Outlier Exposure ICLR 2019 简称OE (需要OOD的数据)
https://github.com/hendrycks/outlier-exposure.
本文好像做法上没有很特别,就是 OE + 对抗样本学习(需要OOD的数据)
也可以根据任务有很多种选择
F softmax的输出 OE是 Outlier Exposure
INPUT COMPLEXITY AND OUT-OF-DISTRIBUTION DETECTION WITH LIKELIHOOD-BASED GENERATIVE MODELS ICLR 2020
提出一种parameter-free的判断OOD的score,针对deep generative mode
这个只是计算一个score而且没有超参数,所以不需要用val调参,可以通过有label的val来调阈。也可以不用label的val来判断是否OOD 最后评价指标是AUROC。
生成模型用likelihood去判断OOD效果不好,在这个文章中,作者说这个原因是输入的复杂度造成的这个问题。为了说明这个问题,他做了大量实验。并且使用对输入复杂度的估计来推导出一个OOD的score,这个score(parameter-free)也能被看作是一个likelihood ratio。
第一项是negative loglikelihood 第二项是复杂度的估计 S分数越高说明它越有可能是OOD的
训练:用一个自回归模型PixelCNN++(得到图像数据的似然函数);一个可逆模型Glow(多个双射映射推导出log likelihood)。任意选择一个就好 这俩在每个数据上表现略有差异。
复杂度估计是通过压缩输入x,通过多个压缩器C,对每一个输入都选择一个最合适的压缩器 实验发现FLIF总是最好的那个压缩器。
Detecting out-of-distribution inputs to deep generative models using a test for typicality. E. Nalisnick, A. Matsukawa, Y. W. Teh, and B. Lakshminarayanan.
这个论文ICLR2020被拒了,出现在了ICLR2020上面这个论文的实验里面,实验结果里它的效果很差劲。
它意思是样本的density很大,但是不一定就是高概率出现的,如下:
它说到判断OOD不应该是判断likelihood的density,而是判断是不是属于typical set,而typical set往往不一定是density最大的,而是比如图一里的外圈深灰色部分。
- 点赞
- 收藏
- 关注作者
评论(0)