简介
本文旨在收集对抗训练相关的内容,并作出比较详细的理解和讲解。
一些基本概念的收集
本部分收集对抗训练相关的一些基本概念,并结合写下自己的理解。
对抗样本
我们对数据集中的数据,做一些比较小的、但却能带来很大杀伤力的改动。改动后的数据可能会让模型以较高的confidence输出一个错误的预测。1
很多模型面对这种样本的时候,是很容易出错的。2
也就是说,对抗样本应该是一些只加入了轻微扰动,却给模型带来较大负面影响的样本。
现实中的对抗样本
设原样本为
x
x
x
设引入扰动后的样本为
x
~
\tilde{x}
x~:
x
~
=
x
+
η
\tilde{x} = x + \eta
x~=x+η
(此处的
η
\eta
η为引入的扰动)
现实中我们怕的是,两个样本
x
x
x和
x
~
\tilde{x}
x~在本质上没有区别,但模型觉得它俩不一样。
比如说,
x
x
x和
x
~
\tilde{x}
x~是两张我们看起来长得一毛一样的图片,但实际上它们每一个像素的颜色上有无比轻微的、我们观察不太出来的区别,但就因为这些区别,模型认为这俩图片所在的class不一样,那这种情况是不能被我们人类接受的。
当然,"观察不太出来"是从人的角度出发、比较主观的。
我们还是用比较数字化的方式1来定义一下这种区别:
很多储存图片的设备,每个像素只存8个bit,也就是说,在设备储存精度之外的一些信息,对储存图片的设备来说是不重要的。
那我们就可以这样规定:只要
η
\eta
η满足
∥
η
∥
∞
<
=
ϵ
\Vert \eta \Vert_\infty<=\epsilon
∥η∥∞<=ϵ (也就是说
η
\eta
η这个向量里每个元素的绝对值中最大的也小于
ϵ
\epsilon
ϵ), 我们就规定
x
x
x和
x
~
\tilde{x}
x~的class是一样的。此处的
ϵ
\epsilon
ϵ小到对我们的储存或者传感设备来说,
x
x
x和
x
~
\tilde{x}
x~是一样的。
再换句话说,扰动
η
\eta
η足够小,小到我们的储存或者传感设备感受不到。
产生"对抗样本问题"的原因
Goodfellow et al.1提出,模型的线性就可能足够让这类问题产生。
为什么模型的线性会让"对抗样本问题"产生?也就是说,为什么由于模型的线性,当我们对某些数据引入较小的扰动的时候,会带来较大的负面影响?
Goodfellow et al.1是这样解释的:
假如我们把
x
x
x扔进一个线性模型,那我们就得到:
w
T
x
w^Tx
wTx
假如我们把
x
~
\tilde{x}
x~扔进一个线性模型,那我们就得到:
w
T
x
~
=
w
T
x
+
w
T
η
w^T\tilde{x} = w^Tx + w^T\eta
wTx~=wTx+wTη
也就是说,对于这两个样本,线性模型出来的结果之间就只差一个
w
T
η
w^T\eta
wTη。假设
w
w
w中一共有
n
n
n个元素,每个元素平均值是
m
m
m,那么这个
w
T
η
w^T\eta
wTη的算出来的就会是在
n
m
ϵ
nm\epsilon
nmϵ这个水平(因为是点乘)。
那也就是说,我们的原始样本
x
x
x和对抗样本
x
~
\tilde{x}
x~分别输入模型之后,得到的输出之间会相差约
n
m
ϵ
nm\epsilon
nmϵ。这个差距,是会随着
w
w
w的维数(
n
n
n)来线性增加的。也就是说,如果我们的问题是一个高维问题,就算加入的干扰不多,也会由于维数较多而给模型输出带来很大的影响。
这就是Goodfellow et al.1解释线性模型能让"对抗样本问题"产生的逻辑。
制造对抗样本的方式
那么如何让模型面对对抗样本时也能有能力识别正确?我们可以制造对抗样本来攻击模型,以此提升它的防御能力。
FGSM
FGSM的全称是Fast Gradient Sign Method. 如果用FGSM来制造扰动
η
\eta
η,可以使用如下的式子:
η
=
ϵ
s
i
g
n
(
∇
x
J
(
θ
,
x
,
y
)
)
\eta = \epsilon sign(\nabla_xJ(\theta, x, y))
η=ϵsign(∇xJ(θ,x,y))
其中
x
x
x是输入,
y
y
y是
x
x
x的标签,
θ
\theta
θ是模型的参数,
J
(
)
J()
J()是损失函数。
我们来看一下这个式子里各部分的寓意和用意。
首先,
∇
x
J
(
θ
,
x
,
y
)
\nabla_xJ(\theta, x, y)
∇xJ(θ,x,y)这部分是损失函数关于输入
x
x
x求导得到的梯度,也就是说,如果我们让
x
x
x的值往这个方向走,损失函数是上升得最快的。它解决的问题是:让
x
x
x往哪个方向走(即我们要如何扰动这个
x
x
x),才能让模型在面对正确的标签
y
y
y的时候,反而高效地把损失函数拉得很大?从而让模型倾向于认为
y
y
y并不是正确的标签。
其次,我们来说一下这个式子剩下的部分,这部分主要是为了使得
∥
η
∥
∞
<
=
ϵ
\Vert \eta \Vert_\infty<=\epsilon
∥η∥∞<=ϵ。
ϵ
\epsilon
ϵ就是我们一开始提到的,扰动
η
\eta
η的无限范数不能超过的值。那我们是如何做到这一点的呢,答案是靠
s
i
g
n
(
)
sign()
sign(),
s
i
g
n
(
)
sign()
sign()的函数图像3是这样的:
也就是说:
s
i
g
n
(
a
)
=
{
1
,
a
>
0
0
,
a
=
0
−
1
,
a
<
0
sign(a)=\left\{ \begin{aligned} 1 \qquad ,a>0 \\ 0 \qquad ,a=0 \\ -1 \qquad ,a<0 \end{aligned} \right.
sign(a)=⎩⎪⎨⎪⎧1,a>00,a=0−1,a<0
如果这里的
a
a
a是一个向量的话,就会对它的每个维度分别做这样的操作。4
由于 s i g n ( ) sign() sign()函数的输出在{-1,0,1}之间,那么简单地, ϵ s i g n ( ) \epsilon sign() ϵsign()的输出就在 { − ϵ , 0 , ϵ } \{-\epsilon,0,\epsilon\} {−ϵ,0,ϵ}之间了,从而,我们就成功使得 ∥ η ∥ ∞ < = ϵ \Vert \eta \Vert_\infty<=\epsilon ∥η∥∞<=ϵ了。
总结: ∇ x J ( θ , x , y ) \nabla_xJ(\theta, x, y) ∇xJ(θ,x,y)给我们提供了扰动 x x x的高效方向, ϵ s i g n ( ) \epsilon sign() ϵsign()帮助我们使得扰动大小被限制在某个范围内。
FGM
FGM的全称是Fast Gradient Method, 一般指的是这样的扰动(出现于Adversarial Training Methods for Semi-supervised Text Classification这篇论文):
η
=
ϵ
g
∥
g
∥
2
其
中
,
g
=
∇
x
J
(
θ
,
x
,
y
)
\eta = \epsilon \frac{g}{\Vert g \Vert_2}\\ \quad\\ 其中,g = \nabla_xJ(\theta, x, y)
η=ϵ∥g∥2g其中,g=∇xJ(θ,x,y)
也就是说比起FGSM中
s
i
g
n
(
)
sign()
sign()的方式,这里做了一个L2范数归一化。
设
g
g
g的第
i
i
i维是
g
i
g_i
gi,那么就有:
g
∥
g
∥
2
=
(
g
1
∥
g
∥
2
,
g
2
∥
g
∥
2
,
.
.
.
,
g
n
∥
g
∥
2
)
=
(
g
1
g
1
2
+
g
2
2
+
.
.
.
+
g
n
2
,
g
2
g
1
2
+
g
2
2
+
.
.
.
+
g
n
2
,
.
.
.
,
g
n
g
1
2
+
g
2
2
+
.
.
.
+
g
n
2
)
\begin{aligned} \frac{g}{\Vert g \Vert_2} &= (\frac{g_1}{\Vert g\Vert_2}, \frac{g_2}{\Vert g\Vert_2}, ...,\frac{g_n}{\Vert g\Vert_2})\\ &=(\frac{g_1}{\sqrt{g_1^2+g_2^2+...+g_n^2}},\frac{g_2}{\sqrt{g_1^2+g_2^2+...+g_n^2}},...,\frac{g_n}{\sqrt{g_1^2+g_2^2+...+g_n^2}}) \end{aligned}
∥g∥2g=(∥g∥2g1,∥g∥2g2,...,∥g∥2gn)=(g12+g22+...+gn2g1,g12+g22+...+gn2g2,...,g12+g22+...+gn2gn)
通过这样归一化的话,还能保留每个维度之间的相对大小,不像FGSM直接用了一个把每个维度转成-1,1或0的
s
i
g
n
(
)
sign()
sign()函数。