对抗样本与对抗训练

(本文讨论仅限个人观点,因为我见解有限,错误难免(我也可能不定时更新想法),欢迎和我讨论jsxiejp@163.com) 
本文将会介绍对抗样本与对抗训练的相关知识(请将此对抗训练与Ian Goodfellow的生成对抗网络区别开来)。综合Ian Goodfelow在Berkeley CS 294-131的deeplearning topic上面的讲义,我将从以下几个方面介绍:

  • 什么是对抗样本?
  • 它们是怎么出现的?
  • 它们是怎么危害到机器学习系统?
  • 有什么办法防范?
  • 怎样使用对抗样本训练机器学习?

由于本人的研究方向并非是神经网络,或者机器学习,所以对相关related work没有系统的调研,仅限于读过的几篇文章,浅尝辄止,有兴趣的读者可以参考论文原文。

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=argmaxxg^(x),s.t.d(x,x0)dmax

它是说我们想找一个对抗样本x,使它尽可能被分类为好,并且与某个原来的样本 x0 在样本空间里还很接近(距离小于 dmax )。 
Szegedy的攻击策略为: 
Minimize||r||2,subject to:1. f(x+r)=l,2. x+r[0,1]m

它是说对于给定的某个样本x,怎么找离它最近的样本,使得被分类为标签 l
这里不再赘述优化问题该怎么解,常用的方法有梯度下降,或者牛顿法,BFGS,L-BFGS. 上述两个优化问题分别使用梯度下降法和L-BFGS来解决。这两篇文章的实验细节我们也不再举例,我们只看一下结果。Biggo的实验学术味更浓,Szegedy的实验则很直观了,他们的实验显示,给定一张图片,加一个微小扰动使它被错误的分类为某个指定标签。 
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~ 的响应应该要一样的。考虑一个权值向量 ω,

ωx~=ωx+ωη.
对抗扰动使得激发增长了 ωη . 显然,我们可以让 η=sign(ω) 来使激发增长最大。如果 ω n 个维度,如果在每个维度上增加 m ,那么激发可以增加 ϵmn 。因为 ||η|| 与维度无关,而激发增加量随维度线性增长,那么在高维问题中,我们可以很大程度改变输出,但是在输入上只需要做极小的改动!这个例子说明,如果维度足够的话,一个简单的线性模型同样存在对抗样本的问题。过去对对抗样本的那些牵扯到神经网络的性质的解释,比如误认他们具有高度的非线性性,可能都不对。Ian基于线性性的假设更简单,并且能够解释softmax回归也对对抗样本很脆弱的事实。 因此,基于线性性,对抗样本很容易生成。Ian假设神经网络同样是因为太“线性”而不能抵抗对抗样本。LSTMs, ReLUs, 和maxout网络都设计得很“线性”,所以他们很容易被利用。我们可以想象一个具有高度线性性的网络训练出来的函数,它的高阶导数近似于0,Taylor展开以后占主导作用的是线性部分,所以可以类比为线性分类器。线性性意味着线性模型上面的微小扰动同样能够破坏神经网络。假设有一个模型,它的参数是 θ ,输入是 x y x 的目标, J(θ,x,y) 是神经网络的损失函数。在目前的 θ 值,局部上可以将函数近似为线性,使用线性模型的攻击方法,我们得到一个最优的扰动
η=ϵsign(xJ(θ,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、有什么办法防范?

参见下一节

5、怎样使用对抗样本训练机器学习?

以最简单的logistic regression为例。如果我们要训练一个模型来识别标签 y{1,1} P(y=1)=σ(wx+b) ,其中 σ 为sigmoid函数,然后在

Ex,ypdataζ(y(wx+b))

上作梯度下降,其中 ζ(x)=log(1+exp(z)) 是softplus函数。下面将 x 代替为 x 上面的线性扰动,推到出的解析式为
Ex,ypdataζ(y(ϵ||w||1wxb)).

这类似于 L1 正则化,但不同的是, L1 罚项是从激发中减去,而不是加到损失函数中。这样的坏处是会恶化欠拟合的情况。下图是Ian的解释原文: 这里写图片描述

需要注意的是,这里对于损失函数的估计过于悲观。在softmax回归中,很难找到一个扰动,让他在每个标签的梯度上都达到最坏(即与他们的符号相反),因此我们有必要减少 ϵ 。 
Szegedy的文章Intriguing properties of neural networks表明将对抗样本和普通样本一起给模型训练能够使模型稍微正则化。训练对抗样本和普通的数据增加不一样:通常我们通过对数据进行变形来增加数据,这样变形后的数据是可能出现在测试集里的。而对抗样本这种数据通常不可能自然地出现在测试集中,但是它们可以揭露出模型的缺陷。增加对抗样本来训练并没有显著提高性能,有可能是因为实验样本不太够(Szegedy那篇文章使用expensive的L-BFGS来寻找对抗样本)。 
Ian发现使用对抗目标函数(基于快速梯度符号法)能够有效正则化模型:

J~(θ,x,y)=αJ(θ,x,y)+(1α)J(θ,x+ϵsign(xJ(θ,x,y)).

用这个方法来训练dropout网络,能够使错误率从0.94%降到0.84%。Ian发现训练集上的错误率并没有下降到0,作者做了两个改变,首先使网络更大,将每一层网络的节点从240增加到1600。如果没有对抗训练这可能会导致过拟合,此时测试集上错误率有1.14%。原来的maxout网络中验证集上错误率会平坦下降,但速度很慢,而对抗验证集不是,因此在对抗验证集上使用早停法。 
对抗训练的过程可以看做当数据被恶意扰动的时候,最小化最差情况的错误率。我在intel实习的一次组会上介绍过对抗训练,当时我提到使用正则化能有效降低对抗样本的错误分类率,有同事发出质疑: 
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降低。 *
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值