研究这个方向的动机,是因为在将神经网络模型应用于实际场景时,它仅仅拥有较高的正确率是不够的,例如在异常检测中、垃圾邮件分类等等场景,那些负类样本也会想尽办法来“欺骗”模型,使模型无法辨别出它为负类。因此我们希望我们的模型能够拥有应对这种攻击的能力。

How to Attack

通过影像辨识的例子来解释如何进行攻击。

假设我们已经训练了一个图像的分类器,对于我们下图中输入的图片它能够分辨出来是一只猫;那么我们现在对原始的输入进行一定的扰动,加入干扰项再输入到模型中看看它是否会辨别成其中的东西(图中这种扰动太大了,一般加入的扰动项是人眼无法辨别的):

那么这种攻击又划分为两类:

  • Non-targeted:这一类的攻击只要求能够让模型无法辨认出来是猫就行
  • targeted:这一类的模型是有目的性的,除了让模型无法辨别出来是猫之外,还希望让模型辨别出来是特定的物品

这里有一个很神奇的现象,假设我们加入的杂讯比较大,我们人眼能够直接观察得到:

可以发现机器还是大部分能够发现这是一只猫,只不过可能品种不同而已。但如果加入的杂讯是我们特别准备的,并且肉眼看不出来的:

可以看到不仅分类错误了,连信心分数都激增,并且事实上我们可以调整我们的杂讯让机器把这张看起来像一只猫的图片分辨成任何东西,因此这也是我们需要机器能够对抗攻击的原因之一。

那么接下来我们就来认识一下是怎么做到这种攻击的。

对于我们当前拥有的分类器,输入一张猫的图片\(x^0\)它输出为一个向量,是每一个类别的信心分数,其中最高的为猫。

  • 对于无目标的攻击来说,我们在原始图像更换成一张图片\(x\),它也经过分类器的处理后输出一个向量,那希望是这个向量能够和猫这个类别对应的One-hat-vector之间的距离越远越好
  • 对于有目标的攻击来说,我们在原始图像更换成一张图片\(x\),它也经过分类器的处理后输出一个向量,那不仅希望是这个向量能够和猫这个类别对应的One-hat-vector之间的距离越远越好,还希望这个向量与目标类别的One-hat-vector之间的差距越小越好

而对于向量之间的差距我们可以用交叉熵来表示,因此得到:

那么对于无目标的攻击,可以设定其损失函数为:

\[L(x)=-e(y,\hat{y})
\]

对于有目标的攻击可以设定其损失函数为:

\[L(x)=-e(y,\hat{y})+e(y,y^{target})
\]

因此优化目标为:

\[x^*=argmin_{d(x^0,x)<\varepsilon}~ L(x)
\]

其中\(d(x^0,x)<\varepsilon\)代表我们希望加入的图像和原始的图像比较接近,这样肉眼才看不出来。而这个距离的计算方式下面举两个例子:

  • L2-norm:\(d(x^0,x)=\lVert \Delta \vec{x}\rVert =\sum_{i=1}(\Delta x_i)^2\)
  • L-infinity:\(d(x^0,x)=\lVert \Delta \vec{x} \rVert=max\{\Delta x_i\}\)

那么这两种距离计算方法的区别在于人眼的观感程度,这也许听起来很抽象但可以通过下面的例子解释:

上方和下方的图它们与原始的图的L2-norm距离相同,只不过上方的图距离都分散的每一个像素,下方的图集中在右下角的像素,因此下方的图我们能够明显感受出差别。

而这两张图的L-infinity差距是不同的,第一张图显然比第二张图小。那么为了要让我们人眼无法辨认,我们需要对这个L-infinity进行限制,才可以让我们无法看出来,因此一般是选择L-infinity。

那么下面的问题就是我们如何求解这个优化问题

\[x^*=argmin_{d(x^0,x)<\varepsilon}~ L(x)
\]

对于此问题,跟之前我们训练模型时调整参数是一样的,只不过调整的参数变成了输入而已,同样也可以采用梯度下降来求解,只不过要加上一定的限制而已:

进行梯度更新的时候,我们要时刻检查更新之后其距离是否会超过限制的范围,如果超过了就要及时地将其修正回来

有一个应用上述思想的简单算法为FGSM,其特点在于:

  • 它只迭代一次
  • 它的学习率设为我们限制的距离大小
  • 它的梯度计算出来后会对每一个分量加上一个Sign函数,使其成为正负1

那么可以看到,这样更新一次是绝对不会超过范围的,因此这样找到的或许是可行的。

White Box v.s. Black Bos

在前面介绍的攻击方法中我们需要计算梯度,而计算梯度则要求我们知道该模型内部的参数,因此这一种攻击称为White Box(白箱攻击),这一种攻击对于一些未知模型来说可能是无法进行的。但这不代表着不让别人知道模型参数就是安全的,因为还有Black Bos(黑箱攻击),这一类攻击不需要知道模型内部的参数就可以发动攻击。

对于黑箱攻击来说,一种简单的情况是我们知道这个未知的模型是由哪些训练资料训练出来的,那么我们就可以用一个具有类似网络结构的模型也对这些训练资料进行训练,得到我们自己模型的参数,那么再在这个模型上计算如何攻击,最终将得到的攻击应用到目标模型中就可能会成功,如下图:

那么复杂一点的情况就是我们也不知道训练集,那么可能可行的做法为用一大堆我们自己的资料放进去这个模型,相应会得到一大堆输出,那么将这些输入和输出来作为训练集,就可以类比上面的做法进行训练

在实际上,黑箱攻击和白箱攻击都是很容易成功的,并且在一个模型上攻击成功的x,用在另外的模型上也非常容易攻击成功,那么这就让人有了研究的空间,但目前仍然没有明确的答案,值得让人信服的解释是实际上攻击是否成功主要取决于你的训练资料而不是取决于你的模型,相同的训练资料所训练出来的不同模型在被攻击时很可能呈现相同的结果,也就是说攻击可以认为是“具有特征性的”,也许你得到的这个攻击向量看起来真的很像是杂讯, 但这可能就是机器从训练资料中学习到的特征

这里补充一个小知识点,因为我们之前说到的攻击都说客制化的,即对于每一张图片单独计算它的攻击向量,那么假设影响场景为某个摄像头,我们想要让这个摄像头对于输入都辨认错误的话则要对每张图片都计算,那么运算量很大;那么有没有可能能够有一个通用的攻击向量,如果将它加入摄像头摄取的每一个图片的时候,都能够使该图片被辨认错误,那么这样的攻击称为Universal Adversarial Attack。这种是可能可以做到的。

其他攻击类型综述

Adversarial Reprogramming

这一个类别的攻击在于直接攻击模型,它像是寄生虫一样寄生于别的模型之上,然后让其他已经训练好的模型来做我们想做的任务

"Backdoor" in Model

这种开后门的方法是在训练阶段就已经攻击了,例如在训练阶段加入特定的图片,让训练完成后的模型看到某一张特定图片的鱼是会分辨成狗。但是这种训练要保证我们加进去的特殊图片它是人眼无法检查出来的,不能说加入一大堆鱼的图片然后标准改成狗,这是不行的。

Defense

前面都是在讲如何进行攻击,那么接下来进行介绍我们如何进行防御

Passive Defense

这类防御,训练完模型之后就不改变模型,而是在将样本输入到模型之前,增加一个filter环节,如下:

那么这个Filter的作用可以认为是削减这个攻击信号的威力,使我们的模型仍然能够正常的进行辨认。那么这个Filter也不一定特别复杂,有时候例如进行模糊化就可以达到我们想要的效果,但要注意模糊化也有负作用,就是让机器的信心分数降低:

类似于这种方法还有很多,例如将影像进行压缩和解压缩,可能就可以让攻击信号失去威力,或者通过AE自编码器来重新生成,也可能可以过滤掉杂讯等等。而这种被动防御一般来说如果被攻击方明确你采用的防御方法,那么就非常容易被破解。

那么可能的改进是加入随机化,即在对图像处理处理的时候随机选择可选的处理策略,不过还是得保护住你随机的分布才可以保持防御的有效性。

Proactive Defense

这种思想是在训练时就训练一个不容易被攻击的模型。具体的做法是我们自己创造攻击类型的向量来进行攻击训练,即对原始的样本修改为攻击的样本,不过我们要加上它原来正确的标签,将这些作为训练资料来对模型进行训练。

但这个问题主要是能够抵挡你训练过的那些攻击的方法,对于未见过的攻击算法很可能挡不住。

【机器学习】李宏毅——Adversarial Attack(对抗攻击)的更多相关文章

  1. KDD 2018 | 最佳论文:首个面向Facebook、arXiv网络图类的对抗攻击研究

    8 月 19 日至 23 日,数据挖掘顶会 KDD 2018 在英国伦敦举行,昨日大会公布了最佳论文等奖项.最佳论文来自慕尼黑工业大学的研究者,他们提出了针对图深度学习模型的对抗攻击方法,是首个在属性 ...

  2. SNN对抗攻击笔记

    SNN对抗攻击笔记: 1. 解决SNN对抗攻击中脉冲与梯度数据格式不兼容性以及梯度消失问题: G2S Converter.Gradient Trigger[1] 2. 基于梯度的对抗攻击方式: FGS ...

  3. Exploring Adversarial Attack in Spiking Neural Networks with Spike-Compatible Gradient

    郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布! arXiv:2001.01587v1 [cs.NE] 1 Jan 2020 Abstract 脉冲神经网络(SNN)被广泛应用于神经形态设 ...

  4. Adversarial Attack Type I: Cheat Classifiers by Significant Changes

    出于实现目的,翻译原文(侵删) Published in: IEEE Transactions on Pattern Analysis and Machine Intelligence (TPAMI ...

  5. 对抗攻击(一) FGSM

    引言 在对抗样本综述(二)中,我们知道了几种著名的对抗攻击和对抗防御的方法.下面具体来看下几种对抗攻击是如何工作的.这篇文章介绍FGSM(Fast Gradient Sign Method). 预备知 ...

  6. XML External Entity attack/XXE攻击

    XML External Entity attack/XXE攻击   1.相关背景介绍 可扩展标记语言(eXtensible Markup Language,XML)是一种标记语言,被设计用来传输和存 ...

  7. QA 中的对抗攻击和防御

    攻击 supporting facts 的修改:字符调换,替换词(用空格embedding或近同义词,变形词等) 还有针对question的攻击. 梯度下降,在embediing上做攻击,如何deco ...

  8. Replay attack 回放攻击

    w http://baike.baidu.com/item/重放攻击 重放攻击(Replay Attacks)又称重播攻击.回放攻击或新鲜性攻击(Freshness Attacks),是指攻击者发送一 ...

  9. 【笔记】机器学习 - 李宏毅 - 10 - Tips for Training DNN

    神经网络的表现 在Training Set上表现不好 ----> 可能陷入局部最优 在Testing Set上表现不好 -----> Overfitting 过拟合 虽然在机器学习中,很容 ...

  10. 【笔记】机器学习 - 李宏毅 - 5 - Classification

    Classification: Probabilistic Generative Model 分类:概率生成模型 如果说对于分类问题用回归的方法硬解,也就是说,将其连续化.比如 \(Class 1\) ...

随机推荐

  1. 网络安全(一)主动进攻之DNS基础和ettercap实现DNS流量劫持

    alittlemc,个人原创,个人理解和观点.若有错误.不理解请与我联系,谢谢! 介绍了DNS的解析过程. DNS劫持的思路和实践. DNS 域名 以为live.bilibili.com为例子,从后到 ...

  2. Vue3 SFC 和 TSX 方式自定义组件实现 v-model

    1 v-model 1.1 理解 v-model v-model 是 vue3 中的一个内置指令,很多表单元素都可以使用这个属性,如 input.checkbox 等,咱可以在自定义组件中实现 v-m ...

  3. python更改文件后缀名

    path = '1024.png' extension = 'jpg' for i in range(1,len(path)): if (path[-i] == '.'):#找到后缀初始点 new_p ...

  4. python用ffmpeg进行视频处理

    1.下载及安装 在ffmpeg官网https://ffmpeg.zeranoe.com/builds/可以下载到需要的版本,然后解压到D盘,添加环境变量(如D:\ffmpeg\bin) 在cmd输入f ...

  5. iptables和firewalld基础

    1.四表五链概念: filter表 过滤数据包 Nat表 用于网络地址转换(IP.端口) Mangle表 修改数据包的服务类型.TTL.并且可以配置路由实现QOS Raw表 决定数据包是否被状态跟踪机 ...

  6. IPython的使用技巧

    ?打印IPython简介 在IPython中直接输入?,可以打印出IPython的功能介绍 object ?内省功能 在变量后面加上?,可以打印出该变量的详细信息.例如图中一个列表对象,打印出该对象的 ...

  7. 谣言检测(RDCL)——《Towards Robust False Information Detection on Social Networks with Contrastive Learning》

    论文信息 论文标题:Towards Robust False Information Detection on Social Networks with Contrastive Learning论文作 ...

  8. "xxx cannot be cast to jakarta.servlet.Servlet "报错解决方式

    在做jsp的上机时候同学出现了一个500错误:com.kailong.servlet.ComputeBill cannot be cast to jaka.servlet.Servlet 然后因为我用 ...

  9. 一个超经典 WinForm 卡死问题的再反思

    一:背景 1.讲故事 这篇文章起源于昨天的一位朋友发给我的dump文件,说它的程序出现了卡死,看了下程序的主线程栈,居然又碰到了 OnUserPreferenceChanged 导致的挂死问题,真的是 ...

  10. CSP-J/S 2021 游记

    \(\large\texttt{Day -1}\) 晚上好累啊,去集训了,回来之后发现十一点了还码了一会儿,只能祈求上帝明天不会打瞌睡. \(\large\texttt{Day 0}\) 意料中的事情 ...