视频连接:http://www.mooc.ai/course/383/learn#lesson/2163
论文总结:http://ai.yanxishe.com/page/blogDetail/5357
对抗样本的攻防:
-
-
什么是对抗样本 adversarial examples
-
-
传统的攻击方法
-
传统的防守方法
-
动量迭代攻击
-
去噪方法
-
高层引导去噪方法
什么是对抗样本
对抗样本的性质不仅仅是图片所拥有的性质,也不仅仅是深度学习神经网络独有的性质。因此它是把机器学习模型应用到一些安全敏感性领域里的一个障碍。
当时,机器学习大牛 Good fellow 找了些船、车图片,他想逐渐加入一些特征,让模型对这些船,车的识别逐渐变成飞机,到最后发现人眼观测到的图片依然是船、车,但模型已经把船、车当做飞机。
我们之前的工作发现样本不仅仅是对最后的预测产生误导,对特征的提取也产生误导。这是一个可视化的过程。
当把一个正常样本放到神经网络后,神经元会专门观察鸟的头部,但我们给它一些对抗样本,这些对抗样本也都全部设计为鸟,就发现神经网络提取出来的特征都是乱七八糟,和鸟头没有太大的关系。也就是说欺骗不是从最后才发生的,欺骗在从模型的中间就开始产生的。
不仅仅只是对最后的prediction产生了误导,还影响了特征的提取。在模型中间就产生了。
将147号神经元的处理进行可视化,发现上图中高亮部分,对所有real image会专门观察鸟的头部;
而对于被设计为鸟的对抗样本而言,147号神经元会注意到的是一些跟鸟头无关的特征点。
下图是最简单的攻击方法——Fast Gradient Sign Method
x*为要产生的对抗样本,x为真实样本,y为正确的分类名,
第一行Objective表示:最大化x*的基础上,得到正确分类名label的损失函数(loss function(cross-entropy交叉熵)越大,预测的概率越小),说白了,目标就是为了最小化对抗样本在正确分类名上的预测概率
第二行:做一个线性假设,将损失函数展开,L(x,y)对x求偏导数,然后取符号函数sign,乘上系数加到原来的真实样本x上。说白了,就是将y反向梯度传回原始图片的梯度加到图片中,得到对抗样本
为什么不采用L2 norm,而采用L∞ norm呢?
L2可能会产生非常大的distortion:
下图中第一列为原图,第二列加入的干扰项的L2 norm是一样的,第三列为附加后的图片
肉眼就能看出来,第一张和第三张图片已经和原图有了非常大的差别了。
而L∞一般不会出现这种变化。
除了 FGSM 单步攻击的方法,它的一个延伸就是多步攻击,即重复使用 FGSM。由于有一个最大值的限制,所以单步的步长也会相应缩小。比如这里有一个攻击三步迭代,每一步迭代的攻击步长也会相应缩小。
产生图片所用的 CNN 和需要攻击的 CNN 是同一个,我们称为白盒攻击。
与之相反的攻击类型称为黑盒攻击,也就是对需要攻击的模型一无所知。此方法也可能成功,因为对抗样本迁移。
以上所说的都是 Non Targeted, 只要最后得到的目标预测不正确就可以了。
另一种攻击 Targeted FGSM,目标是不仅要分的不正确,而且还要分到指定的类型。
y*为指定的错误分类目标类型 。现在目标应该是最小化loss function
一个提高黑盒攻击成功率行之有效的办法,是攻击一个集合。
例如第一行,将多个模型的logits层拼接起来,然后当成一个大的单个模型。
同理,不仅可以在logits,预测和损失函数都可以融合拼接。但实验表明在logits上做效果最好。
而目前为止一个行之有效的防守策略就是对抗训练。
在模型训练过程中,训练样本不仅仅是干净样本,而是干净样本加上对抗样本。在线生成训练样本。
随着模型训练越来越多,一方面干净图片的准确率会增加,另一方面,对对抗样本的鲁棒性也会增加。
下表为准确率accuracy:
e为不同的攻击步长(能容忍的攻击范围)越大攻击越强。随着它变大,准确率下降
(1)baseline为一个普通网络
(2)adv.training对抗样本训练之后,对此攻击基本上就免疫了。但此方法会消耗大量时间:
原因是1、在线生成用于训练的对抗样本(两次操作:前馈+反馈)
2、训练模型去适应对抗样本本身就比较困难
因此,此方法可能会耗费比训练普通模型好几倍的时间。
(3)一个增强的训练对抗样本的版本:ensemble adversarial training
在训练时输入模型的样本是在攻击一大堆模型时产生的一堆样本。例如要训练Inception模型,找来resnet、VGG、Alexnet做陪练来产生很多对抗样本加上Inception自己也产生的很多对抗样本。
通过此方法得到的网络是目前最稳定的网络。但训练时间就更长了,基本上是一个普通网络好几十倍的训练时间。
Deeper model:
下面简单介绍一下 NIPS 2017 上的这个比赛规则
第一个:将图片分类为指定类别
第二个:将图片不分为正确类别即可
第三个:防守
比赛结构:主办方提供dataset包含5000张图片;
Non-target attacks(右上橘红色)将原始图片全部变成对抗样本(例如有100个队伍,就会利用原始的五千图产生五十万张对抗样本)
target attacks(左下橘红色)同理100个队伍一共生成五十万张对抗样本
defense(蓝色)每个队伍都会讲上述一起产生的一百万张图片进行处理。
评估防守方的标准就是看防守方分类正确了多少张样本。
评估两个攻击方的标准:产生的对抗样本成功欺骗了多少防守方。
因此,这个比赛中攻防双方两个队伍之间进行对打,互相揣摩对方用了什么模型
两个限制条件:
容忍范围不能太大,在4~16间测试模型的鲁棒性;
不能花太长时间产生一个对抗样本,或者防守一个对抗样本
FGSM 算法结果:下图表示1000张图片中分类正确的图片数目 ,左边列名为攻击模型,上面行名为防守样本
例如第一行表示用inception-v3产生的对抗样本去攻击各种模型,正确识别的图片数越多,表示防御能力越强,越不受干扰。
对角线标红的为白盒攻击。注意到adv-incv3对白盒攻击的正确分类相当高,能够正确分类。
可以看出,Adv-Incv3、Ens3-Adv-Incv3、Ens4-Adv-Incv3、Ens-IncR都达到了 较高准确率。
图中绿色模型为攻击范围,倒数三四栏R-50和R-152有“亲戚”R-101在攻击目标中,这两列可以看出随着迭代次数上升,识别准确率还是有所下降的。
最后两栏灰色是黑盒模型,随着迭代数量的增加, 攻击成功率反而上升。这就给攻击造成了难题。
因此,白盒攻击可以增加迭代次数,最终进入一个局部最小的识别率。
但对于我们不了解的模型而言,就是黑盒样本应该减少迭代次数。
对于这些黑盒模型识别率较低的情况,实际是一个overfitting过拟合的问题。局部最小适用于绿色的模型,但却不适合后两个黑盒模型。
我们解决的办法就是在迭代与迭代中间加入动量momentum,对于后四列有明显的下降。
加入动量之后,白盒攻击变强了,而且对黑盒模型攻击的成功率也大大提升了。
从而对于黑盒攻击,也可以使用相当多数量的迭代次数了。
总结
以前方法(iterative attack)的弱点是在迭代数量增多的情况下,它们的迁移性,也就是黑盒攻击性会减弱,在我们提出加入动量之后,这个问题得到了解决,可以很放心使用非常多的迭代数量进行攻击。
在 NIPS 2017 比赛上得到最高的分数
需要提到的一点,上面提到的都是 Non-targeted , 在 Targeted 攻击里面,这个策略有所不同。在 Targeted 攻击里面,基本没有观察到迁移性,也就是黑盒成功率一直很差,即便是加入动量,它的迁移程度也非常差。
因此,分数高是因为有很多人提交了baseline模型,而攻击这些白盒做的很好,因此分数高。
下面讲一下防守
我们常说对抗样本用人眼是无法识别的,但此话不全对。当我们将原图放大 ,左边对抗样本明显有噪声。
首先想到的就是去噪声,我们尝试用了一些传统的去噪方法(median filter 、BM3D)效果都不好。之后我们尝试使用了两个不同架构的神经网络去噪。
一个是 Denoising Autoencoder,卷积型的去噪。
另一个是 Denoising Additive U-Net。在中间加上neural connection。目标不再是先重建原图,二是先重建出噪声,然后将重建出来的噪音对adversarial样本进行预测,然后加回去,得到纯净图片。
下图为Denoising Additive U-Net的结构
我们的训练样本是从 ImageNet 数据集中取了三万张图片 ,使用了七个不同的攻击方法对三万张图片攻击,得到 21 万张对抗样本图片以及三万张对应的原始图片。
除了训练集,我们还做了两个测试集。一个白盒攻击测试集(针对Inception-v3)和一个黑盒攻击测试集(针对Inception-v4)。
可以看到训练效果:NA表示不设防守的模型;DAE:Denoising AutoEncoder;DUNET:Denoising U-NET;
前三行算的是去噪后的剩下的噪音(用l1来统计):DAE增加了噪声。DUNET部分减少了噪声
后三行为去噪后的分类正确率:结果发现正确率并不高。特别是对于DUNET,明明噪声在白盒攻击的时候已经降到了0.0164了,识别率却还没有NA的高。分析原因:
我们发现经过去噪以后,正确率反而有点下降。我们分析了一下原因,输入一个干净图片,再输入一个对抗图片,然后计算每一层网络在这两张图片上表示的差距,我们发现这个差距是逐层放大的。
计算网络在这两张图片(第一张为干净图片,一张为对抗图片)上表示的差异:右图折线图可以看出差距是在逐层增大的
绿线为baseline去噪后仍然在放大,
图中蓝线发现放大的幅度非常大,图中红线是去噪过后的图片,仍然在放大,导致最后还是被分错。
经过去噪后的PGD为红线,仍然在放大,这说明经过去噪后的噪音仍然会被放大。所以会被分错。
既然,都是会被放大的,那不如就将最后迭代结束的作为loss function
为了解决这个问题,我们提出了经过改良后的网络 HGD:
变种:和之前的方法相比,改良后的网络 HGD 防守准确率得到很大的提升
FGD:CNN提取出来的特征算距离
LGD:不再是用卷积核的距离去度量了,直接用logist(最后一层softmax的上一层)的一千维向量
CGD:直接用CNN进行预测,得到的结果和真实正确的计算一个误差cross-entropy
比较一下鲁棒性:后三排的防守准确率得到了极大的提升。
现在来看,误差放大也得到了很好的抑制。
LGD训练后的误差放大曲线为黑线,只比绿线random noise高一丢丢
1、发现HGD迁移性很好,训练750张,对测试250张的防守效果很好
2、由于denoising的训练需要CNN的辅助,这边从模型A借了一个,安到了模型B上
同时也比较了一下模型A自己训练出来的效果。
可以看出,借来的模型完成了95%的防守任务。
denoising就像是一个安全帽。自己的帽子肯定比别人的帽子效果更好。
A训练一个denoising,B也训练一个denoising,然后把这两个的denoising合并一下,这样会不会是一个效果更好的denoising呢?结果如下:
事实表明,还是自己用自己的denoising效果最好,合并起来效果没那么好。
最后比赛中,我们集成了四个不同的模型,以及训练了他们各自的去噪denoising,最终把它们合并起来提交了上去。
为什么LGD比PGD好的原因:
因为PGD并没有去掉所有噪声,横坐标为噪声的幅值,纵坐标为denoising预测出来的幅值。
将横纵坐标做一个correlation关系,发现系数为0.48,而不是想象中的接近1,说明PGD没能将图片中噪声去除干净。从而剩下的52%噪声造成了之前的error amplification effect。
而LGD的去噪效果比例为1.05,是能够将噪声完全去除掉的。
还做了一个补充实验:将PGD的估计噪声乘以2会不会就能达到全去除噪声呢?测试结果表明会多去除一点噪声,但是还远不及LGD的效果。
HGD 网络总结
优点:
-
效果显著比其他队伍的模型好。
-
比前人的方法使用更少的训练图片和更少的训练时间。 只需要三万张图片,半天的训练即可
-
可迁移。
缺点:
-
还依赖于微小变化的可测量
-
问题并没有完全解决。
-
仍然会受到白盒攻击,除非假设对手不知道 HGD 的存在