KDforAA,论文全称是Circumventing Outliers of AutoAugment with Knowledge Distillation,论文的大概意思就是使用蒸馏的方法规避掉AutoAugment中的一些异常值,何为异常值,后面会详细说到。这篇论文也在ImageNet上取得不错的成绩,将EfficientNet-B8网络的top-1提升到85.8%的高度。
论文先简单介绍了之前AutoML在数据增强中的应用。图1是论文中使用到的数据增强的transform搜索列表,沿用了AutoAugment的设置。Augment的搜索目的是在训练集中找一种最佳的增强策略,应用在验证集中。在搜索时,每次最多选择两种增强方式,选中的增强方式中再选择其增强的力度。搜索的方法有强化学习和权值共享等方式,最后会学习出一组transform的选中和力度的概率分布。
图1. Augment的transform列表
论文接下来分析了增大Augment的力度会带来两个影响:
- 使训练集更加多样化,避免网络过拟合。
- 力度过大的话会导致图像的关键语义缺失,标签失去意义,变成噪声。
举个平移的transform为例,如果平移力度过大的话,会导致图像的主要内容信息被移出图像之外,但是在标签上还是属于该内容的类别,这种情况下图像本身已经无法和标签对应上了,就可以认为是一个被错误标记的噪声图片。这种现象就是第一段中提到的异常值。
怎么解决这种噪声图片的异常现象呢?作者给出的解决方法很简单——改Loss!
在原本交叉熵Loss的基础上,添加了KL散度项。添加的方法是:使用一个预训练好的模型作为教师模型,将图片送入教师模型中,得到的输出向量作为软标签,该软标签和我们要训练的目标模型(学生模型)的输出计算KL散度值,修改后的Loss方程如下所示。
其中,等号右边的第一项就是标准的交叉熵计算公式,第二项就是KL散度值, λ \lambda λ表示散度值的权重系数。论文中KL散度值只选择最高的K个预测值(教师模型的输出)进行计算,KL散度的计算方法如下所示。
KL的散度的计算公式形式和交叉熵很像,有两个区别的地方:1. 常规交叉熵会计算所有元素的熵值总和,而这边的KL散度只计算K个最高的软标签值;2. 常规交叉熵中每个元素的 l n ln