简介
本文旨在收集对抗训练相关的内容,并作出比较详细的理解和讲解。
一些基本概念的收集
本部分收集对抗训练相关的一些基本概念,并结合写下自己的理解。
对抗样本
我们对数据集中的数据,做一些比较小的、但却能带来很大杀伤力的改动。改动后的数据可能会让模型以较高的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
w
T
x
假如我们把
x
~
\tilde{x}
x
~
扔进一个线性模型,那我们就得到:
w
T
x
~
=
w
T
x
+
w
T
η
w^T\tilde{x} = w^Tx + w^T\eta
w
T
x
~
=
w
T
x
+
w
T
η
也就是说,对于这两个样本,线性模型出来的结果之间就只差一个
w
T
η
w^T\eta
w
T
η
。假设
w
w
w
中一共有
n
n
n
个元素,每个元素平均值是
m
m
m
,那么这个
w
T
η
w^T\eta
w
T
η
的算出来的就会是在
n
m
ϵ
nm\epsilon
n
m
ϵ
这个水平(因为是点乘)。
那也就是说,我们的原始样本
x
x
x
和对抗样本
x
~
\tilde{x}
x
~
分别输入模型之后,得到的输出之间会相差约
n
m
ϵ
nm\epsilon
n
m
ϵ
。这个差距,是会随着
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))
η
=
ϵ
s
i
g
n
(
∇
x
J
(
θ
,
x
,
y
)
)
其中
x
x
x
是输入,
y
y
y
是
x
x
x
的标签,
θ
\theta
θ
是模型的参数,
J
(
)
J()
J
(
)
是损失函数。
我们来看一下这个式子里各部分的寓意和用意。
首先,
∇
x
J
(
θ
,
x
,
y
)
\nabla_xJ(\theta, x, y)
∇
x
J
(
θ
,
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()
s
i
g
n
(
)
,
s
i
g
n
(
)
sign()
s
i
g
n
(
)
的函数图像
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.
s
i
g
n
(
a
)
=
⎩
⎪
⎨
⎪
⎧
1
,
a
>
0
0
,
a
=
0
−
1
,
a
<
0
如果这里的
a
a
a
是一个向量的话,就会对它的每个维度分别做这样的操作。
4
由于
s
i
g
n
(
)
sign()
s
i
g
n
(
)
函数的输出在{-1,0,1}之间,那么简单地,
ϵ
s
i
g
n
(
)
\epsilon sign()
ϵ
s
i
g
n
(
)
的输出就在
{
−
ϵ
,
0
,
ϵ
}
\{-\epsilon,0,\epsilon\}
{
−
ϵ
,
0
,
ϵ
}
之间了,从而,我们就成功使得
∥
η
∥
∞
<
=
ϵ
\Vert \eta \Vert_\infty<=\epsilon
∥
η
∥
∞
<
=
ϵ
了。
总结:
∇
x
J
(
θ
,
x
,
y
)
\nabla_xJ(\theta, x, y)
∇
x
J
(
θ
,
x
,
y
)
给我们提供了扰动
x
x
x
的高效方向,
ϵ
s
i
g
n
(
)
\epsilon sign()
ϵ
s
i
g
n
(
)
帮助我们使得扰动大小被限制在某个范围内。
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
∥
2
g
其
中
,
g
=
∇
x
J
(
θ
,
x
,
y
)
也就是说比起FGSM中
s
i
g
n
(
)
sign()
s
i
g
n
(
)
的方式,这里做了一个L2范数归一化。
设
g
g
g
的第
i
i
i
维是
g
i
g_i
g
i
,那么就有:
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
∥
2
g
=
(
∥
g
∥
2
g
1
,
∥
g
∥
2
g
2
,
.
.
.
,
∥
g
∥
2
g
n
)
=
(
g
1
2
+
g
2
2
+
.
.
.
+
g
n
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
)
通过这样归一化的话,还能保留每个维度之间的相对大小,不像FGSM直接用了一个把每个维度转成-1,1或0的
s
i
g
n
(
)
sign()
s
i
g
n
(
)
函数。