系列文章目录
研究笔记(一):Adversarial attacks(对抗攻击)
文章目录
前言
本系列文章旨在记录本人探索对抗攻击领域的心路历程
目前,深度学习(DL)广泛应用于计算机视觉领域,而针对于深度学习的对抗攻击也被逐渐被重视起来。对抗攻击可以通过在图像中引入视觉上难以察觉的扰动来影响或操纵它的预测,这也是本文要研究的内容。
一、学习内容总览
这段时间的学习主要围绕综述"Advances in adversarial attacks and defenses in computer vision"展开,近期对几个攻击的原理进行了了解学习,其中包括The L-BFGS Attack、The FGSM Attack、The BIM & ILCM Attacks、The PGD Attacks、JSMA and One-pixel Attack。以上都是一些早期探究对抗攻击而设计出来的,目前所研究的攻击都是针对分类任务的攻击,再学习的过程中也包含了自己现阶段的一些思考,如有错误,烦请指出。
二、对于Adversarial attacks的探索
对抗攻击对DL产生分类上的干扰现象在2013年“Intriguing properties of neural networks”中就被发现并提出了。在这篇文章中就有探讨,对DL网络输入进行一个不可察觉的扰动可以任意改变网络的预测,并且模型在错误的判断上报告了很高的置信度,而且同一幅图像扰动可以欺骗多个网络分类器,这对于深度学习来说这一攻击相当恐怖。下图截取自这篇论文的一部分,测试的网络模型是AlexNet,左边一列是能够正确分类的原始图像,右边一列是做出错误判断的修改之后的图片,中间一列是两者的差别,通过人的肉眼几乎判断不出左右两列之间的差别。
在2018年以前出现的一些攻击类型属于第一代攻击,2018年之后出现的攻击属于第二代攻击
1.1 The L-BFGS Attack
L-BFGS是最早被设计攻击深度神经网络模型的对抗攻击算法,其原理是利用网络模型所反馈的损失,在输入的约束空间中找到一个不可察觉的最小输入扰动。公式如下
min
∥
r
∥
2
2
s.t.
f
(
x
+
r
)
=
l
x
+
r
∈
[
0
,
1
]
n
\begin{gathered} \min \left\|r\right\|_2^2 \\ \text { s.t. } f\left(x+r\right)=l \\ x+r \in[0,1]^{\mathrm{n}} \end{gathered}
min∥r∥22 s.t. f(x+r)=lx+r∈[0,1]n
在这里面范数是计算其欧氏距离,
r
r
r表示对抗扰动,
x
x
x未经修改的样本,
f
f
f表示要攻击的分类器,
l
l
l表示干扰之后模型得到的分类结果,
x
+
r
∈
[
0
,
1
]
n
x+r \in[0,1]^{\mathrm{n}}
x+r∈[0,1]n是为了限制修改之后的图像不超出样本空间。而在这个公式中
f
(
x
+
r
)
=
1
f(x+r)=1
f(x+r)=1不好求解,因此用一个盒约束的L-BFGS算法逼近想要的结果,因此有了如下的公式。
min c ⋅ ∥ r ∥ 2 2 + Loss F ( x + r , l ) s.t. x + r ∈ [ 0 , 1 ] n \begin{gathered} \min \mathrm{c} \cdot\left\|\mathrm{r}\right\|_2^2+\operatorname{Loss}_{\mathrm{F}}\left(\mathrm{x+r}, l\right) \\ \text { s.t. } \mathrm{x+r} \in[0,1]^{\mathrm{n}} \end{gathered} minc⋅∥r∥22+LossF(x+r,l) s.t. x+r∈[0,1]n
在这里 L o s s F ( x + r , l ) LossF(x+r,l) LossF(x+r,l)代表模型计算的损失函数,惩罚系数 c c c可以控制范数的大小,为 c c c设定不同的值,然后使用优化方法L-BFGS 求解问题,使得 f ( x + r ) = l f(x+r)=l f(x+r)=l的同时还要满足范数尽可能的要小。生成过程需要调动一次反向传播。
设想:能否应用到图像目标分割中,此方法本用来设计针对分类网络模型,不过在公式上反应出的差别只有损失函数的变化,在针对目标分割过程中,损失函数大多会是交叉熵损失函数,将GT看作 l l l从而寻找 r r r应该是可行的。
1.2 The FGSM Attack
Fast Gradient Sign Method,此对抗攻击生成方式出自论文“Explaining and harnessing adversarial examples” ,在这篇文章中作者讨论了为什么会出现网络对对抗攻击做出高置信度错误判断的原因:计算机视觉中的一种较为流行方法是使用卷积网络特征作为欧几里得距离去近似感知距离。但是,如果具有不可测量的小感知距离的图像对应于网络表示中完全不同的类别,那么这种近似方法就出现了缺陷。在文章中作者进行推测,这些对抗攻击能够成功可能是因为网络模型的极端非线性导致的。下面介绍此对抗攻击生成方法的公式
η = ϵ sign ( ∇ x J ( θ , x , y ) ) \boldsymbol{\eta}=\epsilon \operatorname{sign}\left(\nabla_{\boldsymbol{x}} J(\boldsymbol{\theta}, \boldsymbol{x}, y)\right) η=ϵsign(∇xJ(θ,x,y))
在上述公式中, θ θ θ代表模型参数, x x x代表输模型的输入, y y y代表模型输入 x x x之后所对应输出的节点数字, J ( . ) J(.) J(.)表示计算得到的损失,围绕模型参数得当前值(当前参数不变)线性化损失函数, s i g n ( x ) sign(x) sign(x)就是大于0的时候是1,小于0的时候是-1,等于0的时候是0, ϵ \epsilon ϵ是图片的8位比特位平面中最低的一位平面在经过分类网络(文章中用的是GoogleNet)之后输出的实数,这个图片指的是所加对抗扰动的图片的最低位平面,不是原图片的。
在FGSM之后还出现了一些以此攻击为基础的修改版本,例如去除符号函数
s
i
g
n
(
.
)
sign(.)
sign(.)的Fast Gradient Value Method (FGVM),在去除
s
i
g
n
(
.
)
sign(.)
sign(.)之后又求其2范数的攻击等,在罗列所有对抗攻击类型之后再仔细研究其分支。
设想:此方法也是用来设计针对分类网络模型的,如何运用到图像目标分割上,除了损失的计算还要考虑 ϵ \epsilon ϵ的值如何选取,比特位平面的最低位平面作为输入则其输出和 ϵ \epsilon ϵ的值如何联系,如果不能的话是否可以用基于此原理的其他版本攻击。
1.3 The BIM & ILCM Attacks
Basic Iterative Method and Iterative Least-likely-Class Methods,此对抗生成方式出自论文“Adversarial examples in the physical world”再这篇论文中又一个很强的实验,就是把加过干扰和没加过干扰的图片打印出来,再对打印出来的物理世界中的图片通过手机摄像头获得照片传入网络中,如下图,没有加过干扰的照片能够正常识别出是洗衣机,而加过干扰的照片被识别成保险柜,这一实验也激发了对物理世界对抗攻击的研究。
攻击原理:作者提出迭代的方式来找各个像素点的扰动,而不是像FGSM一次性所有像素都改 ϵ \epsilon ϵ那么多,即迭代式的FGSM,也就是I-FGSM(Iterative FGSM)或BIM(Basic Iterative Method)。步骤是每次在上一步的对抗样本的基础上,各个像素增长 α α α(或者减少),然后再执行裁剪,保证新样本的各个像素都在 x x x的 ϵ \epsilon ϵ 邻域内。这种迭代的方法是有可能在各个像素变化小于 ϵ \epsilon ϵ的情况下找到对抗样本的,如果找不到,最差的效果就跟原始的FGSM一样,公式表示如下:
X 0 a d v = X , X N + 1 a d v = C l i p X , ϵ { X N a d v + α sign ( ∇ X J ( X N a d v , y t r u e ) ) } \boldsymbol{X}_0^{a d v}=\boldsymbol{X}, \quad \boldsymbol{X}_{N+1}^{a d v}=C l i p_{X, \epsilon}\left\{\boldsymbol{X}_N^{a d v}+\alpha \operatorname{sign}\left(\nabla_X J\left(\boldsymbol{X}_N^{a d v}, y_{t r u e}\right)\right)\right\} X0adv=X,XN+1adv=ClipX,ϵ{XNadv+αsign(∇XJ(XNadv,ytrue))}
其中的
C
l
i
p
Clip
Clipx表示裁剪,在迭代更新过程中,随着迭代次数的增加,样本的部分像素值可能会溢出,比如超出0到1的范围,这时需将这些值用0或1代替,最后才能生成有效的图像。该过程确保了新样本的各个像素在原样本各像素的某一领域内,不至于图像失真。
对于Iterative Least-likely-Class Methods,在公式上有所区别,公式如下
X 0 a d v = X , X N + 1 a d v = C l i p X , ϵ { X N a d v − α sign ( ∇ X J ( X N a d v , y L L ) ) } \boldsymbol{X}_0^{a d v}=\boldsymbol{X}, \quad \boldsymbol{X}_{N+1}^{a d v}=C l i p_{X, \epsilon}\left\{\boldsymbol{X}_N^{a d v}-\alpha \operatorname{sign}\left(\nabla_X J\left(\boldsymbol{X}_N^{a d v}, y_{LL}\right)\right)\right\} X0adv=X,XN+1adv=ClipX,ϵ{XNadv−αsign(∇XJ(XNadv,yLL))}
此种攻击可以被认为是目标攻击了,从公式中可以看到和前面无目标攻击公式的最大区别在于 α \alpha α前面的加号变成减号,同时原本的真实标签 y t r u e y_{true} ytrue变成 y L L y_{LL} yLL,这2个修改使得模型优化的目标是最终对应类别为 y L L y_{LL} yLL的分类概率越来越大,这和常规的分类模型训练类似,只不过监督信息并不是真实标签,而是指定的一个标签,这也使得这个攻击是指定目标的攻击。在原文当中 y L L y_{LL} yLL表示的是被识别成可能性最小的那个标签类别。
设想:在目标分割当中用目标攻击让网络分割出想要的图形在主官直觉上感觉不可行,但增加对抗攻击对分割进行扰乱并降低其精度等的指标在主观直觉上认为可行。在此罗列学习各攻击原理,后续再进行针对图像分割的研究。
1.4 The PGD Attacks
The Projected Gradient Descent Attacks投影梯度下降,此对抗攻击方法出自论文 “Towards Deep Learning Models Resistant to Adversarial Attacks”,这篇论文探讨了通过对抗训练提高模型针对对抗攻击的鲁棒性来抵御对抗攻击的可行性,同时提出PGD 对抗攻击作为普遍的攻击方式,PGD攻击也是最强的异界攻击,大致思路是在FGSM上做了改进,FGSM是做一次迭代,而PGD是做多次迭代,每次走一小步,每次迭代都会将扰动裁剪到规定范围内。一般来说,PGD的攻击效果比FGSM要好。首先,如果目标模型是一个线性模型,那么用FGSM就可以了,因为此时 l o s s loss loss对输入的导数是固定的,换言之,使得loss下降的方向是明确的,即使你多次迭代,扰动的方向也不会改变。而对于一个非线性模型,仅仅做一次迭代,方向是不一定完全正确的,这也是为什么FGSM的效果一般的原因了。PGD攻击的原理公式如下。
x t + 1 = Π x + S ( x t + α sgn ( ∇ x L ( θ , x , y ) ) ) x^{t+1}=\Pi_{x+\mathcal{S}}\left(x^t+\alpha \operatorname{sgn}\left(\nabla_x L(\theta, x, y)\right)\right) xt+1=Πx+S(xt+αsgn(∇xL(θ,x,y)))
1.5 JSMA and One-pixel Attack
the Jacobian-based Saliency Map Attack 首先学习JSMA攻击,这个攻击方式来自论文“The Limitations of Deep Learning in Adversarial Settings”这个攻击方式也很牛了,作者在MNIST数据集上加对抗扰动,可以在模型的输出判别上想要什么输出就有什么输出。
JSMA算法的灵感来自于计算机视觉领域的显著图。简单来说,就是不同输入特征对分类器产生不同输出的影响程度不同。如果我们发现某些特征对应着分类器中某个特定的输出,我们可以通过在输入样本中增强这些特征来使得分类器产生指定类型的输出。JSMA算法主要包括三个过程:计算前向导数,计算对抗性显著图,添加扰动。
所谓前向导数,其实是计算神经网络最后一层的每一个输出对输入的每个特征的偏导。以MNIST分类任务为例,输入的图片的特征数(即像素点)为784,神经网络的最后一层一般为10个输出(分别对应0-9分类权重),那对于每一个输出我们都要分别计算对784个输入特征的偏导,所以计算结束得到的前向导数的矩阵为(10,784)。前向导数标识了每个输入特征对于每个输出分类的影响程度,其计算过程也是采用链式法则。这里需要说明一下,前面讨论过的FGSM在计算梯度时,是通过对损失函数求导得到的,而JSMA中前向导数是通过对神经网络最后一层输出求导得到的。前向导数
∇
F
(
X
)
\nabla \mathbf{F}(\mathbf{X})
∇F(X)具体计算过程如下所示,
j
j
j表示对应的输出分类,
i
i
i表示对应的输入特征。
∇ F ( X ) = ∂ F ( X ) ∂ X = [ ∂ F j ( X ) ∂ x i ] i ∈ 1 … M , j ∈ 1.. N \nabla \mathbf{F}(\mathbf{X})=\frac{\partial \mathbf{F}(\mathbf{X})}{\partial \mathbf{X}}=\left[\frac{\partial \mathbf{F_j}(\mathbf{X})}{\partial x_i}\right]_{i \in 1 \ldots M, j \in 1 . . N} ∇F(X)=∂X∂F(X)=[∂xi∂Fj(X)]i∈1…M,j∈1..N
∂
F
j
(
X
)
∂
x
i
=
(
W
n
+
1
,
j
⋅
∂
H
n
∂
x
i
)
×
∂
f
n
+
1
,
j
∂
x
i
(
W
n
+
1
,
j
⋅
H
n
+
b
n
+
1
,
j
)
\begin{aligned} \frac{\partial \mathbf{F_j}(\mathbf{X})}{\partial x_i}=&\left(\mathbf{W}_{n+1, j} \cdot \frac{\partial \mathbf{H_n}}{\partial x_i}\right) \times \frac{\partial f_{n+1, j}}{\partial x_i}\left(\mathbf{W}_{n+1, j} \cdot \mathbf{H_n}+b_{n+1, j}\right) \end{aligned}
∂xi∂Fj(X)=(Wn+1,j⋅∂xi∂Hn)×∂xi∂fn+1,j(Wn+1,j⋅Hn+bn+1,j)
通过得到的前向导数,我们可以计算其对抗性显著图,即对分类器特定输出影响程度最大的输入。首先,根据扰动方式的不同(正向扰动和反向扰动),作者提出了两种计算对抗性显著图的方式:
S
(
X
,
t
)
[
i
]
=
{
0
if
∂
F
t
(
X
)
∂
X
i
<
0
or
∑
j
≠
t
∂
F
j
(
X
)
∂
X
i
>
0
(
∂
F
t
(
X
)
∂
X
i
)
∣
∑
j
≠
t
∂
F
j
(
X
)
∂
X
i
∣
otherwise
\begin{aligned} & S(\mathbf{X}, t)[i]=\left\{\begin{array}{l} 0 \quad \text { if } \frac{\partial \mathbf{F}_{\mathbf{t}}(\mathbf{X})}{\partial \mathbf{X}_i}<0 \text { or } \sum_{j \neq t} \frac{\partial \mathbf{F}_j(\mathbf{X})}{\partial \mathbf{X}_i}>0 \\ \left(\frac{\partial \mathbf{F}_{\mathbf{t}}(\mathbf{X})}{\partial \mathbf{X}_{\mathbf{i}}}\right)\left|\sum_{j \neq t} \frac{\partial \mathbf{F}_{\mathbf{j}}(\mathbf{X})}{\partial \mathbf{X}_{\mathbf{i}}}\right| \quad \text { otherwise } \end{array}\right. \\ \end{aligned}
S(X,t)[i]={0 if ∂Xi∂Ft(X)<0 or ∑j=t∂Xi∂Fj(X)>0(∂Xi∂Ft(X))
∑j=t∂Xi∂Fj(X)
otherwise
S
(
X
,
t
)
[
i
]
=
{
0
if
∂
F
t
(
X
)
∂
X
i
>
0
or
∑
j
≠
t
∂
F
j
(
X
)
∂
X
i
<
0
(
∂
F
t
(
X
)
∂
X
i
)
∣
∑
j
≠
t
∂
F
j
(
X
)
∂
X
i
∣
otherwise
\begin{aligned} & S(\mathbf{X}, t)[i]=\left\{\begin{array}{l} 0 \quad \text { if } \frac{\partial \mathbf{F}_t(\mathbf{X})}{\partial \mathbf{X}_i}>0 \text { or } \sum_{j \neq t} \frac{\partial \mathbf{F}_j(\mathbf{X})}{\partial \mathbf{X}_i}<0 \\ \left(\frac{\partial \mathbf{F}_t(\mathbf{X})}{\partial \mathbf{X}_i}\right)\left|\sum_{j \neq t} \frac{\partial \mathbf{F}_j(\mathbf{X})}{\partial \mathbf{X}_i}\right| \quad \text { otherwise } \end{array}\right. \\ & \end{aligned}
S(X,t)[i]={0 if ∂Xi∂Ft(X)>0 or ∑j=t∂Xi∂Fj(X)<0(∂Xi∂Ft(X))
∑j=t∂Xi∂Fj(X)
otherwise
但是在文章中第四部分的应用中作者发现,找到单个满足要求的特征很困难,所以作者提出了另一种解决方案,通过对抗性显著图寻找对分类器特定输出影响程度最大的输入特征对,即每次计算得到两个特征
p
1
p1
p1,
p
2
p2
p2
arg
max
(
p
1
,
p
2
)
(
∑
i
=
p
1
,
p
2
∂
F
t
(
X
)
∂
X
i
)
×
∣
∑
i
=
p
1
,
p
2
∑
j
≠
t
∂
F
j
(
X
)
∂
X
i
∣
\arg \max _{\left(p_1, p_2\right)}\left(\sum_{i=p_1, p_2} \frac{\partial \mathbf{F_t}(\mathbf{X})}{\partial \mathbf{X_i}}\right) \times\left|\sum_{i=p_1, p_2} \sum_{j \neq t} \frac{\partial \mathbf{F_j}(\mathbf{X})}{\partial \mathbf{X_i}}\right|
arg(p1,p2)max(i=p1,p2∑∂Xi∂Ft(X))×
i=p1,p2∑j=t∑∂Xi∂Fj(X)
参考文章:https://chaoge123456.github.io/%E5%AF%B9%E6%8A%97%E6%A0%B7%E6%9C%AC%E7%94%9F%E6%88%90%E7%B3%BB%E5%88%97%EF%BC%9AJSMA%E7%9B%AE%E6%A0%87%E6%89%B0%E5%8A%A8.html/
如果运用到分割当中,这个攻击方式的前向导数计算会很大,网络模型的最后输出是与输入同样大小的单通道二值图像,在算法上会有一些改变,但是对分割任务的干扰不知道会不会有效果
One pixel attack这个攻击方式源自于论文“One pixel attack for fooling deep neural networks”,作者在设计这种攻击方式时用到了差分进化算法,只改变一个像素达到对抗攻击的目的。我们当然可以一个个去改像素,每改一个像素就去模型里测试一下。但是真的是非常之麻烦,作者想到将差分近化算法(Differential Evolution)引入来解决这个问题。(差分进化参考https://zhuanlan.zhihu.com/p/485546258)主要原理就是将一张图片看作是[R,G,B,H,W]五维的向量,在这个向量中进行多次(6次左右)的差分进化运算,在最终迭代出的最有种群中挑选最优值作为我们要更改的像素。
思考:虽然JSMA攻击可以进行目标攻击,但在图中我们看到其生成的对抗攻击样本中产生了很多人眼能轻易分辨出的噪声,而One-pixel Attack虽然值改变了一个像素点,人眼几乎不能分辨数原始图与对抗样本,但是仅限于分类任务,运用到分割网络中不能干扰大多网络中的感受野模块和注意力机制,或者说在分割网络中感受野的扩大和注意力机制会减小单个像素对整张图像的影响,或许并不能产生很好的效果。
三、总结
经过这一阶段的学习了解了一些攻击方式和大致的原理,但这些都是比较早期的针对分类网络的攻击方式,想在分割网络中实现还有一些路要走。接下来的学习还是围绕攻击方式,待探索完成综述"Advances in adversarial attacks and defenses in computer vision"中的相关攻击方式、论文、知识之后再进行下一步的探索。