发表时间:2018(NeurIPS 2018)
文章要点:这篇文章提出了一个对分类任务检测异常点的方法。文章首先说异常点可以有两类,一类是OOD(out-of-distribution),一类是对抗样本(adversarial samples)。很多方式只能检测一种,不能两种一起。作者这种方法对这两类异常点都适用,并且更加稳健,取得了SOTA的效果。具体的,作者通过神经网络最后一层隐藏层构造特征向量,然后用高斯判别分析(Gaussian discriminant analysis)建立各个类别的均值和协方差
有了这个,就相当于有了一个分类器,并且对每个类的聚类中心和协方差都有了一定估计。
然后基于马氏距离(Mahalanobis distance)计算一个得分
判别一个点是不是异常点就是先找这个点最近的那个分类,然后根据上式计算得分,然后根据得分阈值判断是不是异常点。阈值具体咋设的,文章没说。
此外,还可以把ensemble加上,就是说不仅仅用神经网络的最后一层,中间层也可以用来做高斯判别,然后计算得分,然后所有得分加权。
最后作者还说了,可以用在class-incremental learning问题上面,就是预训练的模型只有一部分分类任务,后面新来了新的类,可以直接用这个网络提取特征向量,用高斯判别生成这个新类的均值和协方差,和之前的类的均值和协方差放到一起,接下来检测异常值就和之前一样了。
总结:感觉主要的点就是基于已经训好的神经网络再新训练一个基于高斯分布的分类器,这样就相当于把神经网络无法解释的东西弄成了一个多元高斯分布,有了这个分布的假设,用距离的方式判别异常值就变的可以做了。挺有道理的。
疑问:为啥对样本做预处理的时候要加个噪声,会不会有作弊的嫌疑?整个代码随机种子都只用了一个,如果实验结果是基于这个随机种子调参得出来的,那改个种子大概率不能复现了。另外,从代码上看,阈值是训逻辑回归做的,训的时候还用了OOD的样本作为负样本,这感觉有点明着作弊了啊。