对抗样本与对抗训练2
转载自:https://blog.csdn.net/cdpac/article/details/53170940
对以下论文进行解读:3.Intriguing properties of neural networks
5.Explaining and Harnessing Adversarial Examples
6.Ensemble adversarial training_Attacks and defenses
详细解读:https://blog.csdn.net/kearney1995/article/details/79638389
1、什么是对抗样本?
自从2013年以来,深度的神经网络模型在各方面得到了广泛应用,甚至在某些方面达到可以匹配人类的性能,比如人脸识别,最高已经可以达到99.5%的识别率,代表产品有face++等。然而Christian Szegedy等人在2014年发表一篇文章:Intriguing properties of neural networks。这篇文章介绍了关于神经网络一个有趣的现象,即神经网络学习到的那个函数是不连续的!只需要在一张图片上做微小的扰动,就能让图片以很高的置信度被错误分类,甚至能让图片被分类一个指定的标签(不是图片正确所属的标签)。这对图片分类系统无疑是危害巨大!试想在支付宝这样使用人脸识别的应用中,攻击者可以轻轻松松伪装成“马云”会怎么样,呵呵。我们把这种攻击方式叫做“adversarial example”。其实在机器学习领域中,对抗样本的问题并不是第一次提到。Biggo等人在Evasion attacks against machine learning at test time这篇文章里就介绍过。他们给潜在的“敌人(adversary)”定义了一个模型“Adversary model”。一个敌对模型包括adversary goal, adversary knowledge和adversary capability等几个方面:
- adversary goal(攻击目标): 分为两种目标,一是能够分类为好的即可(在垃圾邮件检测中,指分类为好的邮件)。如果有一个函数g定义在样本空间中X,g(x)<0表示分类为好,那么敌人的目标就是设计一个样本x*,让g(x*)<0。这种攻击很容易破解,只要调整分类界限即可(这里指g(x)=0这条边界)。所以,其实攻击者还有一个更好的目标是让g(x)尽可能小。
- adversary knowledge: 敌人对机器学习训练系统的知识包括:
-
- 训练集是什么
- 样本的特征表示
- 学习算法是什么,决策函数是什么
- 分类模型是什么,比如线性分类器的权重
- 分类器的反馈
显然敌人拥有什么样的知识对系统的危害程度会不一样。
- adversary capability: 敌人的能力,包括:
- 修改输入数据
- 修改特征向量
- 修改某个制定的特征
显然敌人的能力不同,攻击的危害也不同。
建立在上面模型中的敌人(或者叫对抗者,攻击者)就是试图寻找对抗样本来误导分类器。
2、它们是怎么出现的?
那么作为一个攻击方,怎么依赖他拥有的知识来做攻击(即混淆分类器)呢?
Biggo和Szegedy都提出了类似的攻击策略,基于最优化的方法,Biggo的攻击策略如下:
它是说我们想找一个对抗样本x,使它尽可能被分类为好,并且与某个原来的样本x0在样本空间里还很接近(距离小于dmax)。
Szegedy的攻击策略为:
它是说对于给定的某个样本x,怎么找离它最近的样本,使得被分类为标签ll.
这里不再赘述优化问题该怎么解,常用的方法有梯度下降,或者牛顿法,BFGS,L-BFGS. 上述两个优化问题分别使用梯度下降法和L-BFGS来解决。这两篇文章的实验细节我们也不再举例,我们只看一下结果。Biggo的实验学术味更浓,Szegedy的实验则很直观了,他们的实验显示,给定一张图片,加一个微小扰动使它被错误的分类为某个指定标签。
上面每副图片的左侧是真实的图片,中间是加的噪音(就是优化问题中的r),右边是生成的对抗样本图片。很好笑的是,6张对抗样本全部被错分类为了鸵鸟!!
所以,这里已经解决了怎么找对抗样本的问题,但是没有深入到问题的本质,为什么能够找到?能找到我们不意外,因为我们总可以在原来的图片上“动手术”,让他改成我们要的样子,但是Szegedy的实验很出人意料,因为结果显示其实只需要很微小的扰动就能随意改变分类的标签,这又是为什么?
下面我们再继续讨论,首先先看goodfellow是怎么总结现有结论的:
- 使用Box-constrained L-BFGS能够找到对抗样本
- 在ImageNet这样的数据集里,对抗样本和原始样本的差别非常小,人眼不可分别
- 同样的对抗样本,会同时被不同的分类器错误分类,哪怕他们使用了不同的训练集
- 浅层的softmax回归模型对对抗样本也很脆弱
- 在对抗样本上训练能够正则化模型,但是代价高昂,因为训练集不容易获得。
注意最后一条,大家可能在想,我们手动生成对抗样本喂给分类器学习不就完了吗,但是效果并不好,因为对抗样本的生成比较expensive。如果我们能知道对抗样本产生的原因,也许能更轻松的制造对抗样本,从而训练。
在这些结论基础上,我们开始学习Ian Goodfellow的这篇文章,Explaining and Harnessing Adversarial Examples.
对抗样本产生的原因仍然不是特别清楚,有人怀疑是因为深度神经网络模型的非线性性,也许再加上不充分的模型平均和不充分的正则化(即过拟合)。G认为这些猜测都是不必要的,相反,他认为模型在高维空间中的线性性是对抗样本存在的罪魁祸首!!!
举个例子,下面从一个线性模型入手,来解释对抗样本的存在性问题。
在很多问题当中,一个输入的特征的取值精度通常是有限制的,这就意味着当在特征的取值上做一个微小的扰动(在精度范围内),分类器不应该返回不同的结果。比如我们现在有一个样本x和一个对抗输入x~=x+η,当η足够小的时候,分类器对x和x~的响应应该要一样的。考虑一个权值向量ω,此时的响应为ω,此时的响应为
对抗扰动使得激发增长了ω⊤η. 显然,我们可以让η=sign(ω)来使激发增长最大。如果ω有n个维度,如果在每个维度上增加m,那么激发可以增加ϵmn。因为||η||∞与维度无关,而激发增加量随维度线性增长,那么在高维问题中,我们可以很大程度改变输出,但是在输入上只需要做极小的改动!这个例子说明,如果维度足够的话,一个简单的线性模型同样存在对抗样本的问题。过去对对抗样本的那些牵扯到神经网络的性质的解释,比如误认他们具有高度的非线性性,可能都不对。Ian基于线性性的假设更简单,并且能够解释softmax回归也对对抗样本很脆弱的事实。 因此,基于线性性,对抗样本很容易生成。Ian假设神经网络同样是因为太“线性”而不能抵抗对抗样本。LSTMs, ReLUs, 和maxout网络都设计得很“线性”,所以他们很容易被利用。我们可以想象一个具有高度线性性的网络训练出来的函数,它的高阶导数近似于0,Taylor展开以后占主导作用的是线性部分,所以可以类比为线性分类器。线性性意味着线性模型上面的微小扰动同样能够破坏神经网络。假设有一个模型,它的参数是θ,输入是x,y是x的目标,J(θ,x,y)是神经网络的损失函数。在目前的θ值,局部上可以将函数近似为线性,使用线性模型的攻击方法,我们得到一个最优的扰动
这种方法称为生成对抗模型的快速梯度符号法,梯度可以通过反向传播算法(backpropagation)计算获得。
3、它们是怎么危害到机器学习系统?
如果我们有两张图片,人眼看上去一模一样,都是一间房子,但是cnn把一张分类为房子,一张分类为鸵鸟,这种分类器还有什么用啊。如果我们的模型随随便便就被欺骗,还能被投入使用吗,那那些研究不成了纸上谈兵了吗。但仔细看的人可能会说,不要慌。呵呵,确实,我们回过头去看,对抗样本是怎么找到的。即使是Ian的方法,都需要知道梯度怎么求,可是攻击者怎么知道我的模型是什么样子呢,换句话说,他不会求梯度生成对抗样本啊!
可惜,对抗样本还有一个重要性质,叫做Transferability,转移性。什么意思呢,就是我在我的模型上找到一个对抗样本,放到别人的模型上,居然也有效。而且我通过我的模型把房子分类成鸵鸟,别人的模型很多时候居然也分类成了鸵鸟。这个可以称作灾难了,最后的堡垒也被攻破了,我们再怎么隐藏模型的细节,也可能会被攻击。(引用:Transferability in Machine Learning: from Phenomena to Black-Box Attacks using Adversarial Samples)
先等一下,我们再好好思考一下对抗样本的问题:有一张图片(房子),加了噪音,变成了鸵鸟。首先我们不用担心的是,这个噪音很难找,不是任意一个随机的噪音都能让原来图片被误分类。在线性模型中,在一张227*227图片的每个像素里做随机扰动,他们基本上都能抵消,即使不抵消,余下的也很少,而且扰动的方向不一定沿着梯度的负梯度符号方向,所以我们不担心这种情况。
再回来,现在的分类器,正确率都特别高,softmax,cnn在mnist上面都有90%以上的正确率。这些分类器基本上都接近了分类的正确准则,他们差不多是等价的。cnn和线性分类器很像,他们对输入的图片所做的操作,变换,最终结果都是线性的变换。而一张精心制作的对抗样本,是在负梯度符号方向上做微小扰动,而大部分的分类模型都有很高的线性性,他们对这种对抗策略应该是一样脆弱。
4、怎样使用对抗样本训练机器学习?
以最简单的logistic regression为例。如果我们要训练一个模型来识别标签y∈{−1,1}, ,其中σ为sigmoid函数,然后在
上作梯度下降,其中ζ(x)=log(1+exp(z))是softplus函数。下面将x代替为x上面的线性扰动,推到出的解析式为
这类似于L1正则化,但不同的是,L1罚项是从激发中减去,而不是加到损失函数中。这样的坏处是会恶化欠拟合的情况。下图是Ian的解释原文:
需要注意的是,这里对于损失函数的估计过于悲观。在softmax回归中,很难找到一个扰动,让他在每个标签的梯度上都达到最坏(即与他们的符号相反),因此我们有必要减少ϵ。
Szegedy的文章Intriguing properties of neural networks表明将对抗样本和普通样本一起给模型训练能够使模型稍微正则化。训练对抗样本和普通的数据增加不一样:通常我们通过对数据进行变形来增加数据,这样变形后的数据是可能出现在测试集里的。而对抗样本这种数据通常不可能自然地出现在测试集中,但是它们可以揭露出模型的缺陷。增加对抗样本来训练并没有显著提高性能,有可能是因为实验样本不太够(Szegedy那篇文章使用expensive的L-BFGS来寻找对抗样本)。
Ian发现使用对抗目标函数(基于快速梯度符号法)能够有效正则化模型:
用这个方法来训练dropout网络,能够使错误率从0.94%降到0.84%。Ian发现训练集上的错误率并没有下降到0,作者做了两个改变,首先使网络更大,将每一层网络的节点从240增加到1600。如果没有对抗训练这可能会导致过拟合,此时测试集上错误率有1.14%。原来的maxout网络中验证集上错误率会平坦下降,但速度很慢,而对抗验证集不是,因此在对抗验证集上使用早停法。
对抗训练的过程可以看做当数据被恶意扰动的时候,最小化最差情况的错误率。
对于使用正则化能有效降低对抗样本的错误分类率的质疑:
Q.正则化以后的实验是不是仍然用同样的对抗样本,如果是,那就没有意义,因为模型参数改变了,对抗样本理应重新找。如果不是,那很难理解,因为模型的线性性并没有改变,仍然可以找到对抗样本,没有理由错误率会降低。
回答:
A.在论文原文里面作者是这样描述的:
“The model also became somewhat resistant to adversarial examples. Recall that without adversarial training, this same kind of model had an error rate of 89.4% on adversarial examples based on the fast gradient sign method. With adversarial training, the error rate fell to 17.9%.”
所以对于上面那个问题,我倾向于后者,也就是作者针对新模型,使用了Fast gradient sign method方法重新生成一批新的对抗样本。那为什么线性性没有改变,错误率能降低这么多呢。我觉得有一种可能解释是对于strong的正则化,模型(比如说线性模型)的weight会变得比较低。记得我们举过的例子,对线性模型,精心设计的对抗样本能使模型的activation改变大约ϵmn,这里的\epsilon是样本允许的波动范围,是固定的,m是平均的weight,当m很小的时候,对activation的扰动ϵmn会很小,从而对分类的影响比较小。所以,这里问题的关键变成了为什么strong的正则化会使weight降低。还记得在cost function里面加的正则化,是对样本的扰动进行惩罚,而高weight会使样本的扰动更大,那训练的时候模型显然会自然的降低weight来减少cost function的值。所以strong的正则化会使weight降低。*
posted on 2018-11-02 10:39 Josie_chen 阅读(1491) 评论(0) 编辑 收藏 举报