赞
踩
本文将会介绍对抗样本与对抗训练的相关知识(请将此对抗训练与Ian Goodfellow的生成对抗网络区别开来)。
综合Ian Goodfelow在Berkeley CS 294-131的deeplearning topic上面的讲义,我将从以下几个方面介绍:
由于本人的研究方向并非是神经网络,或者机器学习,所以对相关related work没有系统的调研,仅限于读过的几篇文章,浅尝辄止,有兴趣的读者可以参考论文原文。
自从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: 敌人对机器学习训练系统的知识包括:
显然敌人拥有什么样的知识对系统的危害程度会不一样。
- 修改输入数据
- 修改特征向量
- 修改某个制定的特征
显然敌人的能力不同,攻击的危害也不同。
建立在上面模型中的敌人(或者叫对抗者,攻击者)就是试图寻找对抗样本来误导分类器。
那么作为一个攻击方,怎么依赖他拥有的知识来做攻击(即混淆分类器)呢?
Biggo和Szegedy都提出了类似的攻击策略,基于最优化的方法,Biggo的攻击策略如下:
这里不再赘述优化问题该怎么解,常用的方法有梯度下降,或者牛顿法,BFGS,L-BFGS. 上述两个优化问题分别使用梯度下降法和L-BFGS来解决。这两篇文章的实验细节我们也不再举例,我们只看一下结果。
Biggo的实验学术味更浓,Szegedy的实验则很直观了,他们的实验显示,给定一张图片,加一个微小扰动使它被错误的分类为某个指定标签。
上面每副图片的左侧是真实的图片,中间是加的噪音(就是优化问题中的r),右边是生成的对抗样本图片。很好笑的是,6张对抗样本全部被错分类为了鸵鸟!!
所以,这里已经解决了怎么找对抗样本的问题,但是没有深入到问题的本质,为什么能够找到?能找到我们不意外,因为我们总可以在原来的图片上“动手术”,让他改成我们要的样子,但是Szegedy的实验很出人意料,因为结果显示其实只需要很微小的扰动就能随意改变分类的标签,这又是为什么?
下面我们再继续讨论,首先先看goodfellow是怎么总结现有结论的:
注意最后一条,大家可能在想,我们手动生成对抗样本喂给分类器学习不就完了吗,但是效果并不好,因为对抗样本的生成比较expensive。如果我们能知道对抗样本产生的原因,也许能更轻松的制造对抗样本,从而训练。
在这些结论基础上,我们开始学习Ian Goodfellow的这篇文章,Explaining and Harnessing Adversarial Examples.
对抗样本产生的原因仍然不是特别清楚,有人怀疑是因为深度神经网络模型的非线性性,也许再加上不充分的模型平均和不充分的正则化(即过拟合)。G认为这些猜测都是不必要的,相反,他认为模型在高维空间中的线性性是对抗样本存在的罪魁祸首!!!
举个例子,下面从一个线性模型入手,来解释对抗样本的存在性问题。
在很多问题当中,一个输入的特征的取值精度通常是有限制的,这就意味着当在特征的取值上做一个微小的扰动(在精度范围内),分类器不应该返回不同的结果。比如我们现在有一个样本
对抗扰动使得激发增长了. 显然,我们可以让来使激发增长最大。如果有个维度,如果在每个维度上增加,那么激发可以增加。因为与维度无关,而激发增加量随维度线性增长,那么在高维问题中,我们可以很大程度改变输出,但是在输入上只需要做极小的改动!
这个例子说明,如果维度足够的话,一个简单的线性模型同样存在对抗样本的问题。过去对对抗样本的那些牵扯到神经网络的性质的解释,比如误认他们具有高度的非线性性,可能都不对。Ian基于线性性的假设更简单,并且能够解释softmax回归也对对抗样本很脆弱的事实。因此,基于线性性,对抗样本很容易生成。Ian假设神经网络同样是因为太“线性”而不能抵抗对抗样本。LSTMs, ReLUs, 和maxout网络都设计得很“线性”,所以他们很容易被利用。
我们可以想象一个具有高度线性性的网络训练出来的函数,它的高阶导数近似于0,Taylor展开以后占主导作用的是线性部分,所以可以类比为线性分类器。线性性意味着线性模型上面的微小扰动同样能够破坏神经网络。
假设有一个模型,它的参数是,输入是,是的目标,是神经网络的损失函数。在目前的值,局部上可以将函数近似为线性,使用线性模型的攻击方法,我们得到一个最优的扰动
讲到这里,有的人可能云里雾里了。如果我们有两张图片,人眼看上去一模一样,都是一间房子,但是cnn把一张分类为房子,一张分类为鸵鸟,这种分类器还有什么用啊。如果我们的模型随随便便就被欺骗,还能被投入使用吗,那那些研究不成了纸上谈兵了吗。
但仔细看的人可能会说,不要慌。呵呵,确实,我们回过头去看,对抗样本是怎么找到的。即使是Ian的方法,都需要知道梯度怎么求,可是攻击者怎么知道我的模型是什么样子呢,换句话说,他不会求梯度生成对抗样本啊!
可惜,对抗样本还有一个重要性质,叫做Transferability,转移性。什么意思呢,就是我在我的模型上找到一个对抗样本,放到别人的模型上,居然也有效。而且我通过我的模型把房子分类成鸵鸟,别人的模型很多时候居然也分类成了鸵鸟。。。这个可以称作灾难了,最后的堡垒也被攻破了,我们再怎么隐藏模型的细节,也可能会被攻击。(引用:Transferability in Machine Learning: from Phenomena to Black-Box Attacks using Adversarial Samples)
先等一下,我们再好好思考一下对抗样本的问题:有一张图片(房子),加了噪音,变成了鸵鸟。首先我们不用担心的是,这个噪音很难找,不是任意一个随机的噪音都能让原来图片被误分类。在线性模型中,在一张227*227图片的每个像素里做随机扰动,他们基本上都能抵消,即使不抵消,余下的也很少,而且扰动的方向不一定沿着梯度的负梯度符号方向,所以我们不担心这种情况。
再回来,现在的分类器,正确率都特别高,softmax,cnn在mnist上面都有90%以上的正确率。这些分类器基本上都接近了分类的正确准则,他们差不多是等价的。这里说的很悬,我的意思是说,cnn和线性分类器很像,他们对输入的图片所做的操作,变换,最终结果都是线性的变换。而一张精心制作的对抗样本,是在负梯度符号方向上做微小扰动,而大部分的分类模型都有很高的线性性,他们对这种对抗策略应该是一样脆弱。
参见下一节
以最简单的logistic regression为例。如果我们要训练一个模型来识别标签
, ,其中为sigmoid函数,然后在
需要注意的是,这里对于损失函数的估计过于悲观。在softmax回归中,很难找到一个扰动,让他在每个标签的梯度上都达到最坏(即与他们的符号相反),因此我们有必要减少
。
Szegedy的文章Intriguing properties of neural networks表明将对抗样本和普通样本一起给模型训练能够使模型稍微正则化。训练对抗样本和普通的数据增加不一样:通常我们通过对数据进行变形来增加数据,这样变形后的数据是可能出现在测试集里的。而对抗样本这种数据通常不可能自然地出现在测试集中,但是它们可以揭露出模型的缺陷。增加对抗样本来训练并没有显著提高性能,有可能是因为实验样本不太够(Szegedy那篇文章使用expensive的L-BFGS来寻找对抗样本)。
Ian发现使用对抗目标函数(基于快速梯度符号法)能够有效正则化模型:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。