AdvProp的论文全称是:Adversarial Examples Improve Image Recognition。从论文的名称就可以知道,采用对抗样本去提升图像识别能力。在以前的研究中,对抗样本被认为是对卷积网络的一种威胁,在干净数据集上训练好的网络在对抗数据上的识别能力却急剧下降。
AdvProp给了我们一种全新的角度来看对抗样本,因为对抗样本的分布和普通样本数据不一样,所以采用了一种叫做辅助BN(axuliary batch norm)的方法来对对抗样本进行分离建模和训练。思路很简单,但是结果很有效,巧妙地把对抗样本这种原本对神经网络有害的东西转变成了防止神经网络过拟合的数据。作者将这种训练应用在EfficientNet-B8上面,在ImageNet数据集上达到了state-of-the-art的成绩。
对抗样本是一种在普通样本数据上加一些噪声信号得到的新数据,这种样本数据在我们人类看起来和普通样本没有什么区别,人类可以很轻松地识别出来,但是对于神经网络来说却是致命的,很多对抗样本会导致原本识别能力很好的网络的错误率大大提升。
针对这种情况,作者在论文中提出了一种叫做辅助BN的方法,思想很简单,就是在原本网络里batch norm层(主BN)旁边加了一条旁路,也是batch norm层,因为是要用来给对抗样本进行训练,为了和原本的BN做区分,所以叫做辅助BN。传统BN和辅助BN的网络设计图如下。
图1. 传统BN网络和辅助BN网络设计
为什么直接传统BN的网络不能很好地在对抗样本数据上进行训练呢?从上图中的虚线部分我们可以看到,普通数据和对抗数据在分布上很不一样,如果使用普通BN的网络强行对这两种数据样本进行拟合的话,只会让对抗样本的识别能力提升有限的同时,还会降低普通样本的识别准确率。而采用辅助BN网络的话,就可以同时对普通样本和对抗样本进行建模,在不影响原本普通数据拟合的同时,加强了对抗样本数据的拟合能力。
但是这里提到的只是一种对抗样本分布的情况,作者在论文中提到,如果有多种分布的对抗数据的话,就得使用添加多个辅助BN。对于一个网络来说,增加辅助BN只会带来可以忽略不计的参数量增加(在EfficentNet-B7中只增加了0.5%),而且只是在训练的过程中会使用辅助BN,在测试的时候,将所有的辅助BN抛弃掉,只使用原本的BN,因为测试集的数据都是干净的,没有加入对抗噪声。
AdvProp的训练方法如下:
图2. AdvProp的训练算法
训练算法步骤为:
- 从数据集中采样一个mini-batch的干净输入 x c x^c xc和标签 y y y;
- 将数据通过辅助BN产生对抗输入 x a x^a xa;
- 使用干净输入 x c x^c xc通过主BN计算损失函数 L c L^c Lc;
- 使用对抗输入 x a x^a xa通过辅助BN计算损失函数 L a L^a La;
- 最小化两种输入的损失函数之和 L c + L a L^c+L^a Lc+La
以上步骤是一个训练的step中完成的。相比于fine-tune的方法,AdvProp保证了网络能同时学习干净数据和对抗样本的特征。
在ImageNet的实验中,作者采用了EfficientNet作为训练对象,训练参数设置和原生EfficientNet一样,在对抗样本的产生上,采用了 L ∞ L_{\infty} L∞范数下的PGD(Projected Gradient Descent)方法。B0-B7的训练结果和原生方法的对比如下图所示。
图3. AdvProp和原生EfficientNet在ImageNet上的训练结果对比
从图3中可以看出,使用AdvProp方法后,EfficientNet B0-B7均有不同程度的准确率提升,其中B7网络更是提升了0.7个点。论文还提到在EfficientNet-B8的网络上和没有使用其他额外数据的情况下,ImageNet的top-1准确率更是达到了85.5%的SOTA水平。