AdvProp:两组Batch Normalization助你在CNN对抗训练中高效涨点
极市导读
CNN能被轻易的攻击是其最大的弱点之一,本文介绍的AdvProp创造性提出了在一个网络中使用两组可以切换的BN,并利用附加的BN去处理对抗样本,实现了较好的效果。 >>加入极市CV技术交流群,走在计算机视觉的最前沿
前言
CNN的对抗攻击是近年来的研究热点。CNN能被轻易的攻击到也是其最大的弱点之一。本文介绍的AdvProp(Adversarial Propagation)不是用来利用防御手段应对对抗攻击的,而是提高模型在真实原始的数据集上的准确率。是增强的对抗性训练方法,将对抗样本视为附加样本,用来防止网络过拟合。本文的核心点就是利用附加的BN去处理对抗样本,因为论文认为对抗样本和真实样本有着不同的分布。
AdvProp的两点贡献:
创造性提出了在一个网络中使用两组可以切换的BN,处理两种不同的分布,分别是真实样本和对抗样本。 在Image数据集上,相对于baseline,准确率均有不同程度提高。对于模型EfficientNet-B7上,取得了ImageNet (+0.7%), ImageNet-C (+6.5%), ImageNet-A (+7.0%), StylizedImageNet (+4.8%)。在EfficientNet-B8上,无额外数据训练的情况下在ImageNet上实现top-1为85.5%。
前置知识一:对抗攻击和防御
对抗攻击通过添加不易察觉的图像扰动,就可以使网络预测失败,这些样本被称为对抗样本。对抗样本的存在不仅揭示了神经网络具有有限的泛化能力,同时也带来了安全性问题,对模型的实际部署也带来了威胁。对抗攻击包括提前知道模型信息的白盒攻击和不利用模型信息的黑盒攻击。
例如论文《explaining and harnessing adversarial examples》(https://arxiv.org/abs/1412.6572)中给熊猫图片增加扰动,网络就预测成了长臂猿。其利用的就是基于梯度的攻击,也是白盒攻击常用的方法。
再例如论文《Adversarial T-shirt! Evading Person Detectors in A Physical World》(https://arxiv.org/abs/1910.11099)中,利用物理对抗攻击,可以让目标检测网络造成漏报。如下面的视频截图,网络无法识别右侧穿着白色T恤的人,所谓的Adversarial T-shirt,有兴趣可以去网上搜索视频和论文。
本文利用到的是PGD(Project Gradient Descent )攻击方法,是一种迭代攻击,相比于普通的FGSM 仅做一次迭代,PGD是做多次迭代,每次走一小步,每次迭代都会将扰动投射到规定范围内。是Athalye等人在2018年发现的, 并且是最强大的一阶攻击方法之一。
其中FGSM生成干扰样本的公式为:
PGD生成干扰样本的公式如下,是经过多次迭代获取的:
FGSM伪代码:
def perturb(self, x, y=None):
x, y = self._verify_and_process_inputs(x, y) # 获取target y,如果是target攻击,就是将网络预测值攻击成预测target,否则攻击成预测错误
xadv = x.requires_grad_()
outputs = self.predict(xadv) # 网络预测
loss = self.loss_fn(outputs, y) # 计算loss
if self.targeted:
loss = -loss
loss.backward() # 反向传播
grad_sign = xadv.grad.detach().sign()# 计算梯度方向
xadv = xadv + batch_multiply(self.eps, grad_sign)# 增加扰动,可以这样理解,网络优化利用梯度下降,攻击利用梯度上升
xadv = clamp(xadv, self.clip_min, self.clip_max)
return xadv.detach()
既然能够被攻击到,那么一个朴素的方法就是:能否将对抗样本加到训练集中来抵抗攻击?
事实上,就是就对抗防御的思想,也是一个领域,本文不去过多关注,以后可以做专门的解读。不过本文认为,之前的对抗防御做法要么是在mnist等小数据集上做的,要么是在大数据集上用半监督的形式做的。到底有没有用,是一个比较open的话题。另外本文对标的方法《Towards Deep Learning Models Resistant to Adversarial Attacks》用到的是min-max game方法,其问题是不能在原始干净的图片上提升指标,甚至还会降低指标。
另外,Adversarial T-shirt中提到,现实中对抗样本是否存在?他们经过大量的实验和经验发现,现实中很难出现对抗样本,理由如下:
像素变化过于细微,无法通过打印机表现出来。
通过相机的捕捉会再次改变对抗样本。
环境和目标本身发生变化。
所以就更能突出本文的意义所在:利用对抗样本提高真实clean图片的准确率。
前置知识二:BN
BN(batch Normalization)通过将数据进行偏移和尺度缩放拉到一个特定的分布。它的引入是用来解决 internal covariate shift 问题,即训练迭代中网络激活的分布的变化对网络训练带来的破坏。BN通过在每次训练迭代的时候,利用minibatch计算出的当前batch的均值和方差,进行标准化来缓解这个问题。
一般来说,BN的主要有两个优点:1是降低对初始化、学习率等超参的敏感程度,因为每层的输入被BN拉成相对稳定的分布,也能加速收敛过程。2是应对梯度饱和和梯度弥散,主要是对于sigmoid和tanh的激活函数。再来回顾一下BN的具体做法:
训练的时候:使用当前batch统计的均值和方差对数据进行标准化,同时优化优化gamma和beta两个参数。另外利用指数滑动平均收集全局的均值和方差。 测试的时候:使用训练收集全局均值和方差以及优化好的gamma和beta进行推理。
可以看出,要想BN真正work,就要保证训练时当前的均值和方差逼近全部数据的均值和方差。因为训练过程每个minibatch从整体数据中均匀采样,不同分布的话minibatch的均值和方差和训练样本整体的均值和方差是会存在较大差异的。
所有LN、IN、GN等所有的Normalization都会用到真实数据做归一化操作的,只不过发生的维度不一样而已,所以本文的方法适合推广。
本文做法
本文的思路也很简单朴素,既然clean样本和对抗样本是不同的分布,那么使用两个BN不就可以了嘛!如上图,图a代表的是传统的BN,可以看出clean样本和对抗样本有着不一样的分布。图b为本文的做法,只在BN的地方增加auxiliary BN,训练过程根据输入样本是clean还是对抗样本进行切换。
这是普通训练的优化目标,其中为网络参数,L为loss:
这是Madry’s对抗训练的优化目标,用到的是min-max方法,max是使得增加对抗扰动,让loss最大;min是在该loss上优化网络参数。
这个本文的优化目标,可以看作在对抗样本+原始样本上进行联合训练,力求网络拟合两种数据集。
训练过程:
选择clean 图片和对应label,利用辅助BN生成对抗样本; 利用main BN计算clean图片的loss; 利用辅助BN计算对抗图片的loss; 利用同时计算两种loss的梯度反向传播,更新网络参数;
测试过程:
将辅助BN去掉,只使用正常的BN,因为我们面临的场景是正常图片的预测。
实验结果:
测试结果如下,在imagenet上,使用effencientnet不同大小模型,均有不同程度的提高。说明该方法是work的:
在imagenet其他数据集上表现都不错,可见其泛化能力。
论文并对进行了消融实验,其中越大,攻击程度越大。可以看出,小模型上弱的攻击带来的效果越好,大模型反之。
总结
本文介绍的AdvProp着眼利用对抗样本提高训练的测试指标,其最大创新点就是利用两组BN处理不同的数据分布,思路简单有效,值得借鉴。