深度学习中的对抗攻击(Adversarial Attack)

Motivation

当你训练了一个效果非常好深度学习模型之后肯定想马上把它投入使用,但在现实环境下光是效果好还是不够的,模型需要应对来自黑客的恶意攻击。

Attack

What do we want do?

那么黑客是如何攻击机器学习模型的?假设我们有一个已经使用ImageNet数据集训练好的一个模型,给它看一张小虎斑猫的图片,它会识别出这是一只小虎斑猫。

我们假设输入的图片是$ x^0 $,我们把图片加上一个特殊的噪音$ \Delta x $(不是随机产生的), 结果发现模型产生了错误的预测结果。

Loss function for Attack

那么这个特殊的噪音应该如何计算呢?首先让我们回忆一下神经网络训练过程。

神经网络就是一个函数$f$完成图片$ x^0 $到标签$y$的映射,我们需要找到神经网络函数的一组参数$\theta$构成函数$ f_{\theta} $, 使得$f_{\theta}(x^0)$产生的结果与真实结果越接近越好。

我们还需要一种方法来衡量神经网络的输出标签与真实标签究竟差了多少,在分类任务通常使用交叉熵来衡量神经网络输出标签$y^0$与真实标签$y^{true}$之间的差距, 所以我们构建$Loss$函数,该函数的得到的是二者的交叉熵值,我们希望神经网络找到的$ \theta $让loss越小越好 。
$$
Loss(\theta) = C(y^{0}, y^{true})
$$

$$
f^{*} = arg \min\limits_{\theta}Loss(\theta)
$$

简单强调一下,训练的时候$ \theta $是我们要通过反向传播算法不断训练的值,图片$ x^0 $肯定是固定不变的。

理解了网络的训练过程,就可以很轻松的理解网络是如何被攻击的,攻击分为两种,一种是无目标的攻击(Non-targeted Attack), 另一种是有目标的攻击(Targeted Attack).

我们首先聊一聊Non-targeted Attack,简单来说就是我给图片加个噪音让你的模型无法正确识别就可以了,至于你的模型把照片识别成什么我并不关心。实现起来非常简单,在神经网络的训练中我们固定照片$x^0$更新参数$\theta$, 而在攻击中只需要固定参数$\theta$, 更新噪音$\Delta x $,得到新的图片$ x’ = x^0 + \Delta x$,让神经网络预测$ x’ $输出标签与正确标签差的越来越远就可以了(二者交叉熵越大越好)。
$$
Loss(x^{‘}) = -C(y^{0}, y^{true})
$$
再谈一下Targeted Attack,概念和实现也比较简单,我希望添加噪音的照片可以被识别成某一个确定的类,所以就在Loss函数中添加一项$ C(y^{0}, y^{false}) 即可​$。
$$
Loss(x^{‘}) = -C(y^{0}, y^{true}) + C(y^{0}, y^{false})
$$
不管是Targeted Attack还是Non-targeted Attack都有一个重要的约束条件,这个约束条件就是加了噪音的图片和原图片不能差太多(二者的差距要小于某个值$ \epsilon$),我们也许根本看不出两张图片的差别。
$$
d(X^{0}, X^{‘}) \leq \epsilon
$$

Constraint

我们通常用两种方法来计算两张图片之间的距离,

一种是$L2-norm​$:
$$
d(X^{0}, X^{‘}) = {||X^{0} - X^{‘}||}_{2} = (\Delta x_1)^2 + (\Delta x_2)^2 + (\Delta x_3)^2+ …
$$
另一种$L- \infty​$:
$$
d(X^{0}, X^{‘}) = {||X^{0} - X^{‘}||}_{\infty} = max { \Delta x_1, \Delta x_2, \Delta x_3, … }
$$
在图片攻击中我们通常使用$L-\infty$,原因是我们希望我们找到的噪音要分散到整张图片而不是只集中在几个像素点上,这两种情况用$L2-norm$计算出的距离值可能是一样的, 而用$L- \infty$计算出的分散的距离值要比集中的距离值小。

How to attack?

这是完整的方程,在满足d的条件下,找到$ X^* $使Loss值最小

$$
X^{*} = arg\min\limits_{d(X^{0}, X^{‘}) \leq \epsilon} Loss(X^{‘})
$$

我们现在先不管条件d, 只考虑$X^* = arg \min Loss(X^{‘})​$

用普通的梯度下降算法就可以找到$ X^* $

其中:

1553672689581

为了满足$d(X^{0}, X^{‘}) \leq \epsilon​$, 只需要在轮更新中判断$x^t​$是否满足条件,如果不满足就对$x^t​$进行修正。

1553672843301

修正就是我们在所有满足条件的$x$中找到一个离$x^t$最近的$x$来替换$x^t$

让我们看两个例子:

$ x^0 ​$表示图片是高维空间中的一点(向量), 假设$x^0​$是二维向量,那么以$x^0​$为圆心, 以$ \epsilon ​$为半径构成的圆,圆内所有的点都为满足条件的点。$x^t​$每更新一次都判断它在不在圆内,如果不在圆内$x^t​$就用满足条件且与$x^t​$距离最近的点替代。

1553673362800

对于$L- \infty​$也同理,注意构成的图形是方形。

1553673801173

Example

左边是原始图片,神经网络识别结果是小虎斑猫,右边是攻击后的图片,神经网络的识别结果是海星。肉眼根本看不出两张图片的差别(反正我看不出来)。

1553674919827

我们把两张图片相减并扩大50倍,得到噪音

1553675178719

上面噪音是我们通过训练得出的,如果我们随机加一些噪音,会影响神经网络的预测吗?

1553675324042

实验表明随机的噪音确实会对神经网络的预测产生影响,但是这种影响是相对较小的,虽然图片的变化很大但是神经网络仍然可以知道照片中是猫而不是海星。

What Happened?

为什么通过计算得出的小噪音要比随机产生的大噪音更有效呢?

我们刚才说过$x^0$是高维空间中一点,对$x^0 $进行修改可以看成把$ x^0 $朝某个方向移动一定距离。而随机也是一种方向,$x^0$ 在随机这个方向移动对预测的影响会非常小。

1553675636120

而我们的计算正是找到一个特殊的方向,$x^0$仅需要在这个点移动一点点距离就可以改变神经网络的预测。

1553676044937

Attack Approaches

虽然不同的Attack方法会让人眼花缭乱,但是不同一般是衡量距离的方法不同或是不同的optimization方法来达到constraints。

1553994846534

以下是攻击的常见方法

• FGSM (https://arxiv.org/abs/1412.6572)

•Basic iterative method (https://arxiv.org/abs/1607.02533)

•L-BFGS (https://arxiv.org/abs/1312.6199)

•Deepfool (https://arxiv.org/abs/1511.04599)

•JSMA (https://arxiv.org/abs/1511.07528)

•C&W (https://arxiv.org/abs/1608.04644)

•Elastic net attack (https://arxiv.org/abs/1709.04114)

•Spatially Transformed (https://arxiv.org/abs/1801.02612)

•One Pixel Attack (https://arxiv.org/abs/1710.08864)

…..

Fast Gradient Sign Method (FGSM)

这里只介绍FGSM方法

1553995012043

FGSM只是把图片加上正负$\epsilon$,并且只Update一次

假设$x^0$是二维坐标,通常的梯度下降算法会将$x^0$移动到$x^1$, 但是FGSM每一次都是在两个维度上加减$\epsilon$, 是加还是减看的是gradient的方向,如果gradient偏向左下角,那么我们就要朝着右上角更新$ x^0 $,所以就要向上移动$\epsilon$向右移动$\epsilon$,$x^*$就会跑到右上角等等。

1554000213871

White Box v.s. Black Box

在这些攻击中我们都是知道并且固定住神经网络参数$ \theta $, 找到一张图片$ x’ $, 这就是所谓的白盒攻击,所以是不是我把网络参数保护好就可以免于攻击呢?Sorry,不能。因为还存在黑盒攻击。

Black Box Attack

如果你想攻击模型A,没有它的参数但是有它的训练数据,你只需要用这个训练数据自己训练一个模型B,用模型B生成的攻击样本来攻击模型A有非常大的可能性会攻击成功。

如果你没有模型A的参数也没有模型A的训练数据,你还可以用模型A来生成数据集,同样可以达到很好的攻击效果。

1554448560927

Universal Adversarial Attack

找出一个通用噪音让所有的图片预测结果都出错。论文地址

1554375121037

Adversarial Reprogramming

通过在图片中加如特殊噪音,模型会帮你完成其他工作,你可以用一些特殊噪音让ImageNet分类器帮你数图片中小方格的个数,非常神奇。

1554375535264

Attack in the Real World

主要是对抗攻击在现实生活中的应用,感兴趣可以看一下对应的论文。

1554375743629

1554375784090

1554375806961

Beyond Images

对抗攻击不仅存在于图像分类中,你还可以攻击音频和文本。

Defense

针对对抗攻击的防御主要分为两种一种是Passive Defense,另一种是Proactive Defense,首先介绍Passive Defense。

Passive Defense

Passive Defense只是能够找出对抗样本,并不更改模型的参数,主体思想就是我们在把图片送到之前先把图片做一下处理(平滑化等),这样可以减少噪音带来的影响。

1554376280200

下面是两种具体的应用。

Feature Squeeze

Squeezer指的就是前面提到的处理,如果三个预测结果差距很大就意味着图片受到攻击。

1554376395660

Randomization at Inference Phase

更改输入图片的尺寸然后做一下随机的Padding再放入神经网络进行预测。

1554376701360

Proactive Defense

另一种防御方法是Proactive Defense,这种防御的主体思想是用某个算法A把对抗样本找出来,单独生成一个训练集把你的模型再训练一遍,这种防御方法存在很多问题比如你的这种防御只针对算法A,别人用算法B还是可以攻击你的网络。

1554377017967

Summary and outlook

我们主要学习了如何生成对抗样本和如何防御,简单来说生成就是固定住网络参数$ \theta $利用反向传播算法求出一个噪音,让加了噪音的图片被识别错误或是识别成某一个固定的类别,同时也要控制噪音的大小,太大就会被发现,而防御相对来说较为困难一种方法就是从图片入手想要通过对图片进行平滑处理来减小噪音的影响或是对比进行不同处理的图片的预测结果如果他们差距过大就说明图片收到了攻击,另一种方法就是找到所有的对抗样本并使用对抗样本重新训练网络。其实仔细想想不管是哪一种防御方法都不见得有效就算是把图片做了特殊处理,我也是有可能通过白盒或是黑盒攻击找到对抗样本的,所以防御这块还是很棘手的。

Next Step

推荐教程:

Adversarial Robustness - Theory and Practice

生活不易,求打赏~