目录
Training confidence-calibrated classifiers for detecting out-of-distribution samples
前言
这本次与下一次专栏中,我们将要介绍两种基于生成对抗网络进行OOD检测的文章。这两篇文章的角度都比较新颖,方法也很巧妙。从这两篇文章开始,OOD数据通常被划分为两种:一种是位于ID数据流形之外的,另一种是位于ID数据流形边缘的。在最新的文章中,与这种划分方式类似,一些作者使用Near-OOD与Far-OOD来界定OOD样本,这些划分都有一定的道理。
Training confidence-calibrated classifiers for detecting out-of-distribution samples
论文链接:https://arxiv.org/pdf/1711.09325.pdf
Motivation
在之前的方法中,OOD检测大都是依据Max-Softmax然后再做一些阈值的改进,但是整体来讲仍然没有摆脱分类模型over-confidence的问题。在本篇文章中,作者提出了一个新的框架:联合训练一个GAN生成对抗网络与一个分类器。其中分类器用于判断输入样本的类别,生成器用于生成有效训练样本。在文章中,有效训练样本指的是:与ID数据相似,但是分类器给的置信度较低的样本。借鉴于目标检测中的困难样本挖掘,我们可以把这些样本也叫做hard examples,在我自己的工作中,我喜欢这样称呼它们。
Methodology
试想一下,在训练传统的生成对抗网络的时候,我们希望生成器生成的数据与ID数据越接近越好,也就是生成标准的ID数据。另外,如果我们有一个在ID数据上训练得到的分类器,这个分类器会赋予ID数据很高的置信度,而给OOD数据相对较低的置信度。那么此时,如果我们去采样生成器生成的数据中,从分类器那里得到较低置信度的样本,那这些样本就可以认为是困难样本了。但是这样的方案存在一个弊端,就是这些所谓的困难样本很可能是大量的低质量样本,也就是生成器生成的样本质量不高。文章中使用了联合训练的方式,在我个人看来,应该是为了解决这个潜在的问题。
另外,联合训练的方式往往各部分的作用相互抵消,最后得到的效果可能并不会那么好,但是文章中给的指标结果很高,留给各位读者去验证。
Approach
为了便于大家理解,我画了一个简单的示意图,图中展示了文章中提出的框架结构:
上图中,我们用ID数据同时训练一个GAN网络以及一个分类网络,同时我们希望生成器生成的数据在CNN分类网络中得到的置信度尽量低。回想一下,在Softmax网络的输出中,我们使用的是输出置信度的最大值作为判断输入数据是ID还是OOD的衡量标准。因此,如果想要最大值最小的话,那就是要让Softmax的输出接近于一个均匀分布,各个维度的得分在均值附近。这样,我们就获得了联合训练的损失函数:
上面的表达式中,(c)代表的是交叉熵损失函数,用于监督分类网络的学习。(d)项是KL散度损失,将生成器生成的样本输入到分类网络中,网络的输出与均匀分布计算KL散度,最小化这一项可以使得分类网络对生成器数据的置信度最低。(e)项是训练传统生成对抗网络中常见的损失函数,期望生成数据与ID数据尽可能相似。文章中使用的训练方式是GAN与分类网络交替训练,使用的损失如下:
- 训练判别器:使用损失(e)
- 训练生成器:使用损失(e)的后一项和损失(d)
- 训练分类器:使用损失(c)和(d)
训练完成后,生成器可以生成分布在ID边缘的样本,而分类网络可以赋予这些边缘样本较小的置信度数值。作者给出了生成器生成样本的示意图:
从示意图来看,生成器生成的结果还是比较令人惊讶的,实际复现效果大家可以使用作者公开的代码跑一下。
Experiments
对于具体的试验参数设置,我没有去源码中详细看,这里直接看一下作者公布的指标:
从上图可以看出,这种方法的实验效果很不错,AUROC以及AUPR等指标非常高。文章的思想也是比较具有创新性的,KL散度损失的设计是一大亮点。