当前位置: 代码迷 >> 综合 >> 深度学习中模型攻击与防御(Attack DL Models and Defense)的原理与应用(李宏毅视频课笔记)
  详细解决方案

深度学习中模型攻击与防御(Attack DL Models and Defense)的原理与应用(李宏毅视频课笔记)

热度:43   发布时间:2023-10-30 17:18:16.0

文章目录

  • 0 前言
  • 1 Attack(模型攻击)
    • 1.1 Attack on Image Recognition Network Model(对图像识别网络模型的攻击)
      • 1.1.1 Loss Function for Attack
      • 1.1.2 Constraint(相似度的限制)
      • 1.1.3 Solution to Attack(求解攻击信号)
      • 1.1.4 Example
      • 1.1.5 Explanation of Attack
    • 1.2 FGSM(快速梯度下降法)
    • 1.3 Black Box Attack(黑盒攻击)
      • 1.3.1 Using Training Datasets
      • 1.3.2 Taking Black’ s Output as Training Datasets
    • 1.4 Universal Adversarial Attack(普遍性对抗攻击)
      • 1.4.1 Adversarial Reprogramming(对抗性重新编程)
      • 1.4.2 Attack in Real world (现实世界的攻击)
      • 1.4.3 Attack to Face Recognition
      • 1.4.4 Attack to Poster
  • 2 Defense (模型防御)
    • 2.1 Passive Defense (被动防御)
      • 2.1.1 Feature Squeeze(特征挤压)
      • 2.1.2 Randomization at Inference Phase(推理阶段的随机化)
    • 2.2 Proactive Defense(主动防御)

0 前言

深度学习模型很可能会遭到恶意攻击,这些伪造的攻击对象对人类的判断没有太大影响,但会使模型输出意想不到的结果,造成误判别。本文由整理李宏毅老师视频课笔记和个人理解所得,详细讲述了Attack ML Models and Defense(机器学习模型的攻击与防御)的原理及实现方法。有问题欢迎在评论区交流,我会及时回复。

1 Attack(模型攻击)

实际生活中除了一些正常的噪声,也有一些针对模型的恶意信号,用来骗过模型。而且本来就有一些模型就是为了探测恶意信号,比如恶意邮件,恶意软件等。在这里插入图片描述

1.1 Attack on Image Recognition Network Model(对图像识别网络模型的攻击)

假设有一个可以识别图像的网络模型,输入x0x^{0}x0的向量,可以得到一个识别结果"Tiger Cat"。现在加上一些特殊的噪声Δx\Delta xΔx,再把新的图片x′=x0+Δxx^{\prime}=x^{0}+\Delta xx=x0+Δx丢入模型,虽然我们看上去还是一只猫,但对于模型来说可能输出结果会截然不同,这就是模型攻击:
在这里插入图片描述

1.1.1 Loss Function for Attack

那我们怎么训练得到特殊的噪声Δx\Delta xΔx呢?下图中分别有一般训练的损失函数,与无目标攻击,以及目标攻击的损失函数:在这里插入图片描述首先是训练一个正常的神经网络模型,训练使得:
Ltrain (θ)=C(y0,ytrue )L_{\text {train }}(\theta)=C\left(y^{0}, y^{\text {true }}\right) Ltrain ?(θ)=C(y0,ytrue )
训练的时候,我们的xxx是不变的,从而获得模型的θθθ。针对神经网络模型,一共分为两种攻击:

  • 没有目标的攻击:输入x′x^{\prime}x,使得输出和真实的label越远越好,损失函数为:L(x′)=?C(y′,ytrue )L\left(x^{\prime}\right)=-C\left(y^{\prime}, y^{\text {true }}\right) L(x)=?C(y,ytrue )
  • 有目标的攻击:也是输入x′x^{\prime}x,不止是跟正确答案的举例越远越好,同时和一个自定义的错误答案的距离越近越好。损失函数为:L(x′)=?C(y′,ytrue )+C(y′,yfalse )L\left(x^{\prime}\right)=-C\left(y^{\prime}, y^{\text {true }}\right)+C\left(y^{\prime}, y^{\text {false }}\right) L(x)=?C(y,ytrue )+C(y,yfalse )
    这里需要注意的是,而在训练攻击图片的时候,我们不改变原模型本身的参数θθθ ,而训练的是x′x^{\prime}x

1.1.2 Constraint(相似度的限制)

但是对于Attack恶意攻击,首先我们还是要保证,我们攻击所用的输入x′x^{\prime}x和原输入x0x^0x0应该相对很接近(差异不大),因此我们要增加一个相似度的限制d(x0,x′)≤εd\left(x^{0}, x^{\prime}\right) \leq \varepsilond(x0,x)ε。其中d(x0,x′)d\left(x^{0}, x^{\prime}\right)d(x0,x)的定义有两种选择:
在这里插入图片描述
这个距离的大小和定义方式虽然可自定义的,但是就图像而言这个距离应该是以人类的感知差异为标准。李宏毅老师认为L-infinity更适合图像的应用。如图右下一张仅有4个pixel的图片:
在这里插入图片描述
将每个像素调整很小的Δx\Delta xΔx,可以得到上面一张4个pixel图片;将绿色像素调整较大的Δx\Delta xΔx,可以得到下面一张4个pixel图片。就肉眼观察而言,下面一张图片较原始图片变化更明显。但是如果用L2范数来计算差异,结果两张图是相同的值,如果用L-Infinity来计算,结果差异会很大。

1.1.3 Solution to Attack(求解攻击信号)

那怎么求这个攻击的图片x?x^{*}x?呢?其实这和我们训练一个模型的方式是很类似的。现在,假设我们的损失函数:
x?=arg?min?d(x0,x′)≤εL(x′)x^{*}=\arg \min _{d\left(x^{0}, x^{\prime}\right) \leq \varepsilon} L\left(x^{\prime}\right) x?=argd(x0,x)εmin?L(x)
这个过程也很像是训练神经网络,但是这里有一个约束项d(x0,x′)≤εd\left(x^{0}, x^{\prime}\right) \leq \varepsilond(x0,x)ε,需要在训练的时候加入。可以使用梯度下降:
在这里插入图片描述以原始的x0x^0x0当作起点,接下来就是求梯度,然后把限制加入到循环中,如果更新的xtx^txt不满足约束,就替换为fix(xt)f i x\left(x^{t}\right)fix(xt)。其中fix()f i x( )fix()函数定义是在所有的xxx中找出满足条件d(x0,x′)≤εd\left(x^{0}, x^{\prime}\right) \leq \varepsilond(x0,x)ε 的值,然后返回一个最近接近xtx^txtxxx
在这里插入图片描述
画图说明基于L2和L-Infinity范数的约束情况:
在这里插入图片描述也就是在超出约束范围的点找一个约束内最接近的值代替。

1.1.4 Example

原始模型为一个50层的神经网络,原始输入图是Cat,识别也为Tiger Cat。求解出攻击图片之后,输入攻击图片到模型中,识别结果为Star Fish:
在这里插入图片描述
看上去一模一样,但实际上是不同的。将图片相减之后乘50倍(因为差距很小,所以要放大),可以得到一张混乱的图:
在这里插入图片描述
因为图片不是单色,可以表明是有差异的。

可能会觉得猫和海星都是生物,可能会影响判断,但是也可以判别为键盘:
在这里插入图片描述
如果手动对图片添加一些很大的噪声后输入到模型中,模型仍然可以大概辨识这是一只猫:
在这里插入图片描述
这说明攻击图片中含有一种特殊的攻击信号,区别于普通噪声。

1.1.5 Explanation of Attack

结论是神经网络可以被轻易攻击,但是为什么会发生呢? 李宏毅老师给了一个他自己的解释,但是目前还没有明确的理论。
假设输入图片x0x^0x0在一个高维空间随机变化,那么输入到模型后,有很大的概率被认为是各种猫:
在这里插入图片描述
但是在沿着一个特定的方向上变化时,就有很大的概率被认为是键盘或者其他东西。这个方向通常接近于梯度方向:
在这里插入图片描述
不仅是深度学习,传统机器学习方法也会面临类似被攻击的问题。

1.2 FGSM(快速梯度下降法)

攻击算法的主要区别在于使用不同的优化方法和不同的约束条件。FGSM(fast gradient sign method)是一个很简单梯度下降的方式。主要思想是:在iii维度上梯度方向如果为正,则?L/?xi\partial L / \partial x_{i}?L/?xi?为1,如果为负,则?L/?xi\partial L / \partial x_{i}?L/?xi?为-1:
在这里插入图片描述直观一点讲,FGSM类似于使用了基于L-infinity约束条件,不同的是FGSM只考虑梯度下降方向,不考虑梯度大小。这样也能保证x?x^*x?在约束范围ε\varepsilonε之内,而且不用多次迭代,一步就收敛。分为两种情况:

  • x1x^1x1ε\varepsilonε范围内: 在这里插入图片描述
  • x1x^1x1ε\varepsilonε范围外:
    在这里插入图片描述
    可以理解为设置了一个很大的学习率,但是也能直接拉回来。

1.3 Black Box Attack(黑盒攻击)

之前的攻击都是White Box(白盒子)的攻击,也就是说我们需要固定网络的参数θ\thetaθ,才能找到攻击输入x?x^*x?。那么,如果一个未知结构Black Box的Black模型,该如何进行攻击呢?
在这里插入图片描述

1.3.1 Using Training Datasets

假设知道这个模型的是由什么数据训练出来的,就可以用这些数据自己训练一个proxy(代理)网络模型。然后用这个代理网络,产生攻击对象x?x^*x?;再把这个攻击对象x?x^*x?拿去攻击原来的Black网络模型:
在这里插入图片描述

1.3.2 Taking Black’ s Output as Training Datasets

那么我们保护好训练资料不就可以了吗?但是可以给原始black模型提供大量的测试样本,然后通过模型得到输出,将输出的Predicted数据用于proxy代理网络的训练。这样也可以用很好的效果。

实验结果表明,使用与目标black网络模型相同模型架构的proxy网络模型的攻击成功率最高,但是即使使用异构的网络模型也有不错的效果:
在这里插入图片描述

1.4 Universal Adversarial Attack(普遍性对抗攻击)

攻击的时候针对每一张不同的image有不同的攻击,但是有人尝试找一种通用的攻击噪声,将这种攻击噪声与原输入信号叠加就能获得攻击对象。
在这里插入图片描述

1.4.1 Adversarial Reprogramming(对抗性重新编程)

模型是用于辨识A任务的,可以变成辨识B任务的。比如本来这个模型是辨识鱼类的,那么可以对这个模型做一定的改造,使得可以辨识方块。方法不是对参数本身做修改,而是将方块的图片置于一个Adversarial Program的背景中(这也可以认为是一种攻击噪声),然后再输入到原模型中,此时输出的鱼类种类依照(a)中表格,就可以确定方块数了:在这里插入图片描述

1.4.2 Attack in Real world (现实世界的攻击)

在真实的世界中这些有用吗?在真实镜头上加上一种特质的噪声,也能使得最后辨识结果出错:
在这里插入图片描述

1.4.3 Attack to Face Recognition

在人脸图片部分区域加上特制噪声,可以使得辨识系统将其辨识为另一个人。他们制作出了一个眼镜,在真实人脸识别系统中实验人员戴上一个含有特制噪声的眼镜,那么就可以使得系统辨识为另一个人:
在这里插入图片描述
当然他们也做了一些改进:

  1. 因为真实环境中人脸是多角度的,所以他们在大部分的角度上都去找特定噪声,以保证单次识别攻击的成功率。

  2. 由于拍摄距离或者拍摄器材会造成像素变化,使得有些噪声信息丢失,这些特制噪声需要以色块为单位来显示。

  3. 以及在真实世界中有些颜色也不一定会准确表示,所以也考虑了颜色的因素。
    在这里插入图片描述

1.4.4 Attack to Poster

也有在路标或者海报上贴一些不显眼的图案来攻击的方式:
在这里插入图片描述

2 Defense (模型防御)

有人会觉得是会被攻击是因为模型过拟合导致的,但是即使模型使用了weight regularization,dropout等减小过拟合风险的方法依然会被攻击。一般有两种防御手段;

  • Passive Defense(被动防御):不改变网络模型,只是另外加上一层防御,类似于Anomaly Detection。
  • Proactive Defense(主动防御):训练模型的过程中,就要将防御考虑在其中,主要在于要自己找到漏洞并补起来。
    在这里插入图片描述

2.1 Passive Defense (被动防御)

在输入前加上一个滤波器Filter,可以减轻attack signal 带来的影响:
在这里插入图片描述
什么样的滤波器呢?只需要输入图像前对图像做smoothing(平滑化),就是一种滤波方式了。实验结果表明使用平滑化之后能基本识别了:
在这里插入图片描述
为什么呢?只有某几个方向的攻击信号是有效的,但是平滑化之后破坏了这个信号,但是平滑又不会对整体影响很大。

2.1.1 Feature Squeeze(特征挤压)

如果同一张图片,被squeeze前和squeeze后,辨识结果差很多,说明这张图片可能是被攻击过的:
在这里插入图片描述

2.1.2 Randomization at Inference Phase(推理阶段的随机化)

对输入的图片做随机的裁剪和加噪,随机选择一张作为最终输入,当然这些处理都是限制在不会对结果产生很大影响的范围内:
在这里插入图片描述但是这些防御方式不能被泄露出去,否则攻击者也可以将防御方式当作模型的一层进行训练,最终可以得到攻击信号。

2.2 Proactive Defense(主动防御)

Proactive Defense 基本思想是:找出漏洞,补起来。首先是利用资料训练好一个模型,然后再训练一些攻击算法,将得到很多攻击信号x~n\tilde{x}^{n}x~n,将x~n\tilde{x}^{n}x~n收集起来作为新的训练集X′={(x~1,y^1),(x~2,y^2),?,(x~N,y^y)}\mathrm{X}^{\prime}=\left\{\left(\tilde{x}^{1}, \hat{y}^{1}\right),\left(\tilde{x}^{2}, \hat{y}^{2}\right), \cdots,\left(\tilde{x}^{N}, \hat{y}^{y}\right)\right\}X={ (x~1,y^?1),(x~2,y^?2),?,(x~N,y^?y)},再去训练原模型。这样就可以使得模型能够防御这些攻击信号了。这种方式有点类似于data augmentation 数据增强:
在这里插入图片描述
这里为什么有T次循环?因为找出攻击信号,再重新训练模型之后,模型的参数就会改变,那么可能会产生新的漏洞。这个过程要反复多次进行才可以减少漏洞。但是对方如果使用在防守的攻击算法之外的方法,那么这些防守仍然是无效的,所以防守在当前仍然是一个重要研究问题。

  相关解决方案