对多分类的理解
在多分类器中,输出向量由输入x属于各个分类的概率组成。若输出的向量中某个类对应的概率高,则判定输入的样本属于该类。
将每个类别
C
k
C_k
Ck对应一个决策超平面
c
k
c_k
ck,平面两端分别表示“属于该分类”(
C
k
C_k
Ck)和“不属于该分类”(
C
k
‾
\overline{C_k}
Ck)。假设一个三分类器(如图,
C
4
C_4
C4先忽视),于是对于
C
3
C_3
C3分类区域,它是
c
1
‾
\overline{c_1}
c1、
c
2
‾
\overline{c_2}
c2和
c
3
c_3
c3的交集。其他分类区域类似。
扰动仿射多分类器(即线性多分类器)
DeepFool对多分类器的扰动目标仅是让分类器对对抗样本的预测不为原分类。它求的是达到这个目标的最小扰动,原文是让样本靠向某个类,但不确保样本加上最小扰动后对它预测得到的就是这个类。
推导:扰动向量的求解公式
论文中对多分类器的扰动向量的求取如下式。
l
^
\hat{l}
l^可视为
x
0
x_0
x0被扰动之后,其靠向的类对应的决策超平面,
k
^
\hat{k}
k^则是
x
0
x_0
x0原所属类别。
这个式子怎么得来的,原文没有细说。下面推导。
论文原图是
x
0
x_0
x0在
C
4
C_4
C4类区域内(中间围成的三角形),接着通过扰动让
x
0
x_0
x0归类为
C
3
C_3
C3。
c
3
c_3
c3对应上式的
l
^
\hat{l}
l^,
c
1
c_1
c1对应
k
^
\hat{k}
k^。为方便画图和理解,这里换个说法:
x
0
x_0
x0原属
C
1
C_1
C1,需通过扰动使其归属
C
3
C_3
C3。 如图,
c
1
c_1
c1和
c
3
c_3
c3的交点为
x
1
x_1
x1.直观上看,
x
0
x_0
x0从
C
1
C_1
C1到
C
3
C_3
C3的最短路径即是向量
x
0
x
1
→
\overrightarrow{x_0x_1}
x0x1,因此求最小扰动向量就是求向量:
x
1
⃗
−
x
0
⃗
\vec{x_1}-\vec{x_0}
x1−x0。
给这个向量乘个
w
3
−
w
1
w_3-w_1
w3−w1,于是有:
(
w
3
−
w
1
)
∗
(
x
1
−
x
0
)
(w_3-w_1)*(x_1-x_0)
(w3−w1)∗(x1−x0)
=
(
w
3
∗
x
1
−
w
1
∗
x
1
)
−
(
w
3
∗
x
0
−
w
1
∗
x
0
)
=(w_3*x_1-w_1*x_1)-(w_3*x_0-w_1*x_0)
=(w3∗x1−w1∗x1)−(w3∗x0−w1∗x0)
=
(
(
f
3
(
x
1
)
−
b
3
)
−
(
f
1
(
x
1
)
−
b
1
)
)
−
(
(
f
3
(
x
0
)
−
b
3
)
−
(
f
1
(
x
0
)
−
b
1
)
)
=((f_3(x_1)-b_3)-(f_1(x_1)-b_1))-((f_3(x_0)-b_3)-(f_1(x_0)-b_1))
=((f3(x1)−b3)−(f1(x1)−b1))−((f3(x0)−b3)−(f1(x0)−b1))
(因为决策超平面上的点 x 1 x_1 x1对应的 f f f值为0,所以:)
=
−
(
f
3
(
x
0
)
−
f
1
(
x
0
)
)
=-(f_3(x_0)-f_1(x_0))
=−(f3(x0)−f1(x0))
因为
w
3
−
w
1
w_3-w_1
w3−w1是个向量,不能直接放到右边除
−
(
f
3
(
x
0
)
−
f
1
(
x
0
)
)
-(f_3(x_0)-f_1(x_0))
−(f3(x0)−f1(x0)),所以先把
w
3
−
w
1
w_3-w_1
w3−w1搞成单位向量,之后两边乘单位向量就可了:
(
w
3
−
w
1
)
∥
w
3
−
w
1
∥
2
∗
(
x
1
−
x
0
)
=
−
(
f
3
(
x
0
)
−
f
1
(
x
0
)
)
∥
w
3
−
w
1
∥
2
\frac{(w_3-w_1)}{\Vert w_3-w_1 \Vert_2}*(x_1-x_0)=\frac{-(f_3(x_0)-f_1(x_0))}{\Vert w_3-w_1 \Vert_2}
∥w3−w1∥2(w3−w1)∗(x1−x0)=∥w3−w1∥2−(f3(x0)−f1(x0))
↓
(
x
1
−
x
0
)
=
−
(
f
3
(
x
0
)
−
f
1
(
x
0
)
)
∥
w
3
−
w
1
∥
2
∗
(
w
3
−
w
1
)
∥
w
3
−
w
1
∥
2
(x_1-x_0)=\frac{-(f_3(x_0)-f_1(x_0))}{\Vert w_3-w_1 \Vert_2} * \frac{(w_3-w_1)}{\Vert w_3-w_1 \Vert_2}
(x1−x0)=∥w3−w1∥2−(f3(x0)−f1(x0))∗∥w3−w1∥2(w3−w1)
右式的负号是前面向量相减时引入的方向,其实在前面的
(
w
3
−
w
1
)
∗
(
x
1
−
x
0
)
(w_3-w_1)*(x_1-x_0)
(w3−w1)∗(x1−x0)后这个负号就没意义了,所以取
−
(
f
3
(
x
0
)
−
f
1
(
x
0
)
)
-(f_3(x_0)-f_1(x_0))
−(f3(x0)−f1(x0))的绝对值即可。于是得到论文中的公式(9)。
求对非线性多分类器的最小扰动
同上一篇讲DeepFool针对二分类情况的文章,这里还是只考虑样本的某一个特征的维度。如下图。横轴对应输入的特征x,纵轴对应分类概率,三条曲线
c
1
c_1
c1、
c
2
c_2
c2、
c
3
c_3
c3对应三个分类的概率函数。
C
1
C_1
C1、
C
2
C_2
C2、
C
3
C_3
C3三个类别各对应一个区间。现有属于
C
2
C_2
C2类的样本
x
0
x_0
x0,要将它移到
C
3
C_3
C3分类,最短距离即是向量
x
0
x
1
→
\overrightarrow{x_0x_1}
x0x1(
x
1
x_1
x1是
c
2
c_2
c2、
c
3
c_3
c3在x轴上的交点)。现在只能得到
x
0
x_0
x0处各概率函数的梯度,那么怎么求
x
1
x_1
x1?
结论是,在
x
0
x_0
x0处作
c
2
c_2
c2、
c
3
c_3
c3的切线,它们相交于点
x
′
x'
x′,DeepFool即用该点作为
x
1
x_1
x1的近似。下面证明。
求向量
x
0
x
′
→
\overrightarrow{x_0x'}
x0x′也即是求
x
1
⃗
−
x
0
⃗
\vec{x_1}-\vec{x_0}
x1−x0,因此同上一节提到的做法,给这个向量乘个
w
3
−
w
2
w_3-w_2
w3−w2(
w
3
w_3
w3、
w
2
w_2
w2分别是两条切线的法向量,也就是梯度),便得到
(
(
f
3
(
x
′
)
−
b
3
)
−
(
f
2
(
x
′
)
−
b
2
)
)
−
(
(
f
3
(
x
0
)
−
b
3
)
−
(
f
2
(
x
0
)
−
b
2
)
)
((f_3(x')-b_3)-(f_2(x')-b_2))-((f_3(x_0)-b_3)-(f_2(x_0)-b_2))
((f3(x′)−b3)−(f2(x′)−b2))−((f3(x0)−b3)−(f2(x0)−b2))。
消掉
b
2
b_2
b2和
b
3
b_3
b3,又因为
x
′
x'
x′是两条切线的交点,所以
f
3
(
x
′
)
f_3(x')
f3(x′)和
f
2
(
x
′
)
f_2(x')
f2(x′)相等,再消,最后得
(
w
3
−
w
1
)
∗
(
x
1
−
x
0
)
=
−
(
f
3
(
x
0
)
−
f
2
(
x
0
)
)
(w_3-w_1)*(x_1-x_0)=-(f_3(x_0)-f_2(x_0))
(w3−w1)∗(x1−x0)=−(f3(x0)−f2(x0))。
最后也得到公式(9)。