欢迎小朋友们来到每日算法幼儿园,今天我们要学习Support Vector Machine(SVM)算法。
简介
SVM是一种二分类模型,是定义在特征空间上的最大间隔分类器,该算法包含了核技巧(核函数),使其能够处理非线性任务。SVM的学习策略是最大化其间隔,可形式化为一个求解凸二次规划问题。
相关概念
线性可分:在当前线性空间能够使用一个线性函数将两类样本分开。
算法原理
为了由浅到深,完整理解SVM算法,接下来我们从线性可分的数据入手,推导SVM的原理。搬起你们的小板凳,深吸一口气,幼儿园发车辣。
SVM在线性可分下运行简介
对于一系列样本点 ( y i , ( x 1 i , . . . , x n i ) ) (y_i,(x_{1i},...,x_{ni})) (yi,(x1i,...,xni)),来自于两个群体,如图1所示。我们可以很容易找到多条直线区分。那么哪一条直线最好?一般而言,我们会选择 l 2 l_2 l2,因为这条直线有更好的泛化性和鲁棒性。一般在SVM算法中,我们会找距离支持向量最大的超平面。那么有小朋友会问,老师老师,什么是支持向量?支持向量其实是距离超平面距离最近的样本。这下有小朋友要晕车了。其实,支持向量与超平面是一种对偶概念,两者是相互存在,后面我们将会发现,超平面的表达式会与支持向量同时求出。
step1:线性可分下的超平面如何找?
在幼儿园小班就学过,设超平面方程
W
T
X
+
b
=
0
\mathbf{W}^TX + b = 0
WTX+b=0,那么样本点
P
(
y
i
,
(
x
1
i
,
.
.
.
,
x
n
i
)
)
P(y_i,(x_{1i},...,x_{ni}))
P(yi,(x1i,...,xni))到超平面的距离
d
d
d:
∣
d
∣
=
∣
w
1
∗
x
1
+
.
.
.
+
w
n
∗
x
n
∣
w
1
2
+
.
.
.
+
w
n
2
=
∣
W
T
X
+
b
∣
∣
∣
W
∣
∣
(1)
|d| = \frac{|w_1 * x_1 + ... + w_n * x_n|}{\sqrt{w^2_1 + ... + w^2_n}} = \frac{|\mathbf{W}^TX + b|}{||\mathbf{W}||} \tag{1}
∣d∣=w12+...+wn2∣w1∗x1+...+wn∗xn∣=∣∣W∣∣∣WTX+b∣(1)
其中$||w|| 是 是 是 R^n 的范数, 的范数, 的范数,b \in R$.
在明白如何计算点到平面的距离后,那么该怎么找支持向量到超平面的距离呢?其实,我们只需要求所有点到平面最小距离的最大值即可,听起来有些晕,但写出目标函数便很直观地表达需求。此时,目标函数为:
arg
max
w
,
b
min
(
y
i
(
W
X
i
+
b
)
∣
∣
w
∣
∣
)
s
.
t
.
y
i
(
W
X
i
+
b
)
)
>
=
0
(2)
\arg \quad \max_{w,b} \min(\frac{y_i(\mathbf{W}X_i + b)}{||w||}) \\ s.t. \quad y_i(\mathbf{W}X_i + b)) >= 0 \tag{2}
argw,bmaxmin(∣∣w∣∣yi(WXi+b))s.t.yi(WXi+b))>=0(2)
其中
y
i
y_i
yi是
X
X
X的标签值,取值
{
1
,
−
1
}
\{1,-1\}
{1,−1}。有小朋友就要问了,为什么不用公式(1)呢,这样不是更简单吗?其实啊,我们选择公式(2)基于以下两点考虑。一,绝对值的性质不好,使用绝对值在0处不可导。二,假设我们找到了可分平面,那么在该平面上方,
d
=
W
T
X
i
+
b
∣
∣
W
∣
∣
>
0
,
y
i
>
0
d = \frac{\mathbf{W}^TX_i + b}{||\mathbf{W}||}>0,y_i>0
d=∣∣W∣∣WTXi+b>0,yi>0,在平面下方,则正好相反,
d
=
W
T
X
i
+
b
∣
∣
W
∣
∣
<
0
,
y
i
<
0
d = \frac{\mathbf{W}^TX_i + b}{||\mathbf{W}||}<0,y_i<0
d=∣∣W∣∣WTXi+b<0,yi<0,但两者乘积
y
i
(
W
X
i
+
b
)
∣
∣
W
∣
∣
>
0
\frac{y_i(\mathbf{W}X_i + b)}{||\mathbf{W}||}>0
∣∣W∣∣yi(WXi+b)>0恒成立,这样也等价于
d
d
d。
接着,我们注意到,当对
W
\mathbf{W}
W和
b
b
b同时缩放时,
d
=
y
i
(
λ
W
X
i
+
λ
b
)
∣
∣
λ
W
∣
∣
=
y
i
(
W
X
i
+
b
)
∣
∣
W
∣
∣
d = \frac{y_i(\lambda\mathbf{W}X_i + \lambda b)}{||\mathbf{\lambda W}||} = \frac{y_i(\mathbf{W}X_i + b)}{||\mathbf{W}||}
d=∣∣λW∣∣yi(λWXi+λb)=∣∣W∣∣yi(WXi+b),距离不变。那么,通过合适的系数变换,我们可以化简(2)的目标函数,此时,我们令支持向量(Support Vector,下简记为sv)到超平面距离为1,此时,其他向量的模长除以支持向量到超平面距离应大于1。则(2)可等价为:
arg
max
w
,
b
1
∣
∣
W
∣
∣
s
.
t
.
y
i
(
W
X
i
+
b
)
)
>
=
1
(3)
\arg \quad \max_{w,b} \frac{1}{||\mathbf{W}||}\\ s.t. \quad y_i(\mathbf{W}X_i + b)) >= 1 \tag{3}
argw,bmax∣∣W∣∣1s.t.yi(WXi+b))>=1(3)
为了计算便利,我们将求极大值转变成极小值,则(3)可等价为:
arg
min
w
,
b
1
2
∣
∣
W
∣
∣
2
s
.
t
.
y
i
(
W
X
i
+
b
)
)
>
=
1
(4)
\arg \quad \min_{w,b} \frac{1}{2}||\mathbf{W}||^2\\ s.t. \quad y_i(\mathbf{W}X_i + b)) >= 1 \tag{4}
argw,bmin21∣∣W∣∣2s.t.yi(WXi+b))>=1(4)
step2:优化求解基础知识补充
为了帮助像逐波这样没有接触过最优化的同学理解后文,在本部分补充相关知识,有基础的可以跳过。
在高等数学/数学分析中,对于条件极值,通常使用拉格朗日数乘法求解。
如
max
V
=
x
y
z
,
s
.
t
.
2
x
y
+
2
y
z
+
2
x
z
=
a
2
c
o
n
s
t
r
u
c
t
l
a
n
g
u
a
g
e
f
u
n
c
t
i
o
n
L
(
x
,
y
,
z
,
λ
)
=
x
y
z
−
λ
(
2
x
y
+
2
y
z
+
2
x
z
−
a
2
)
q
i
u
d
a
o
{
∂
L
∂
x
=
0
∂
L
∂
y
=
0
∂
L
∂
z
=
0
∂
L
∂
λ
=
0
t
h
a
t
i
s
{
y
z
−
λ
(
2
y
+
2
z
)
=
0
x
z
−
λ
(
2
x
+
2
z
)
=
0
x
y
−
λ
(
2
x
+
2
y
)
=
0
s
o
,
w
e
g
e
t
x
=
y
=
z
=
a
6
,
V
=
a
3
6
6
\max V = xyz,\\ s.t.\quad 2xy+2yz+2xz = a^2 \\ construct\quad language \quad function\\ L(x,y,z,\lambda) = xyz - \lambda(2xy+2yz+2xz - a^2)\\ qiudao\\ \begin{cases} \frac{\partial L}{\partial x} = 0 \\ \frac{\partial L}{\partial y} = 0 \\ \frac{\partial L}{\partial z} = 0 \\ \frac{\partial L}{\partial \lambda} = 0 \\ \end{cases}\\ that \quad is \\ \begin{cases} yz - \lambda(2y + 2z) = 0\\ xz - \lambda(2x + 2z) = 0\\ xy - \lambda(2x + 2y) = 0\\ \end{cases}\\ so,we \quad get\\ x=y=z=\frac{a}{\sqrt{6}},V = \frac{a^3}{6\sqrt{6}}
maxV=xyz,s.t.2xy+2yz+2xz=a2constructlanguagefunctionL(x,y,z,λ)=xyz−λ(2xy+2yz+2xz−a2)qiudao⎩
⎨
⎧∂x∂L=0∂y∂L=0∂z∂L=0∂λ∂L=0thatis⎩
⎨
⎧yz−λ(2y+2z)=0xz−λ(2x+2z)=0xy−λ(2x+2y)=0so,wegetx=y=z=6a,V=66a3
对于不等式约束条件,我们可以选择对不等式约束加入松弛变量转为等式约束,如:
{
min
f
(
X
)
s
.
t
.
g
(
X
)
≤
0
\begin{cases} \min f(X)\\ s.t. g(X) \leq 0 \end{cases}
{minf(X)s.t.g(X)≤0
加入松弛变量
v
v
v后变为:
{
min
f
(
X
)
s
.
t
.
g
(
X
)
+
v
2
=
0
\begin{cases} \min f(X)\\ s.t. g(X) + v^2 = 0 \end{cases}
{minf(X)s.t.g(X)+v2=0
此时,我们构造拉格朗日函数,对
X
,
λ
,
v
X,\lambda,v
X,λ,v各自求偏导即可求解该问题。
然而,这样求解并不一定会获得可行域上的解,会通过KKT条件判断该约束问题是否有解,该命题表述为…
感兴趣的同学可以看看证明,主播并不感兴趣。
一般而言,KKT条件是一般判别有约束极值点的必要条件,但对于凸规划,KKT条件是判断存在极值点的充要条件。
除了KKT条件外,我们也常用对偶条件优化约束求解,对偶问题的好处在于能够将转化后的优化问题转变成对偶问题,详细内容扔个连接,在这里不细说了。
step3:求解
好,回到正题,我们能判断出(4)是个凸优化问题。构造(4)的拉格朗日函数,如下:
L
(
W
,
b
,
λ
)
=
1
2
∣
∣
W
∣
∣
2
−
∑
i
=
1
m
λ
i
(
y
i
(
W
X
i
+
b
)
)
−
1
)
(5)
L(\mathbf{W},b,\mathbf{\lambda}) = \frac{1}{2}||\mathbf{W}||^2 - \sum \limits_{i=1}^{m}\lambda_i(y_i(\mathbf{W}X_i + b))-1) \tag{5}
L(W,b,λ)=21∣∣W∣∣2−i=1∑mλi(yi(WXi+b))−1)(5)
我们转化(5)获得其对偶问题:
θ
(
W
)
=
max
λ
i
≥
0
L
(
W
,
b
,
λ
)
(6)
\theta(\mathbf{W}) = \max_{\lambda_i \geq 0} L(\mathbf{W},b,\lambda) \tag{6}
θ(W)=λi≥0maxL(W,b,λ)(6)
此时(4)的对偶问题等价为:
min
W
,
b
θ
(
W
)
=
min
W
,
b
max
λ
i
≥
0
L
(
W
,
b
,
λ
)
(7)
\min_{\mathbf{W},b} \theta(\mathbf{W}) = \min_{\mathbf{W},b} \max_{\lambda_i \geq 0} L(\mathbf{W},b,\lambda) \tag{7}
W,bminθ(W)=W,bminλi≥0maxL(W,b,λ)(7)
(8)中
min
max
\min \max
minmax问题不容易求解,再考虑到要满足KKT条件才能存在极值点,因此,考虑交换(8)中的次序。此时需要满足两个条件:1.优化问题为凸规划问题,2.满足KTT条件,正好与我们的需求一致,于是交换次序,此时需要满足以下条件:
{
λ
i
≥
0
λ
i
(
y
i
(
W
X
i
+
b
)
−
1
)
=
0
y
i
(
W
X
i
+
b
)
−
1
≥
0
\begin{cases} \lambda_i \geq 0\\ \lambda_i(y_i(\mathbf{W}X_i + b)-1) =0\\ y_i(\mathbf{W}X_i + b)-1 \geq 0 \end{cases}
⎩
⎨
⎧λi≥0λi(yi(WXi+b)−1)=0yi(WXi+b)−1≥0
对
L
(
W
,
b
,
λ
)
L(\mathbf{W},b,\lambda)
L(W,b,λ)中的
W
,
b
\mathbf{W},b
W,b求导,过程如图2所示,
解得:
{
W
=
∑
i
=
1
m
λ
i
y
i
X
i
∑
i
=
1
m
λ
i
y
i
=
0
(8)
\begin{cases} \mathbf{W} = \sum\limits_{i=1}^m \lambda_i y_i X_i \\ \sum\limits_{i=1}^m \lambda_i y_i = 0 \end{cases} \tag{8}
⎩
⎨
⎧W=i=1∑mλiyiXii=1∑mλiyi=0(8)
将(8)带入
L
(
W
,
b
,
λ
)
L(\mathbf{W},b,\lambda)
L(W,b,λ),可得
L
(
W
,
b
,
λ
)
=
−
1
2
∑
i
=
1
m
∑
j
=
1
m
λ
i
λ
j
y
i
y
j
<
X
i
,
X
j
>
+
∑
i
=
1
m
λ
i
(9)
L(\mathbf{W},b,\lambda) = -\frac{1}{2}\sum\limits_{i=1}^m \sum\limits_{j=1}^m \lambda_i \lambda_j y_i y_j <X_i,X_j> + \sum\limits_{i=1}^m \lambda_i \tag{9}
L(W,b,λ)=−21i=1∑mj=1∑mλiλjyiyj<Xi,Xj>+i=1∑mλi(9)
此时,我们解得(4)的对偶等价规划问题为:
{
max
λ
i
≥
0
−
1
2
∑
i
=
1
m
∑
j
=
1
m
λ
i
λ
j
y
i
y
j
<
X
i
,
X
j
>
+
∑
i
=
1
m
λ
i
s
.
t
.
∑
i
=
1
m
λ
i
y
i
=
0
(10)
\begin{cases} \max \limits_{\lambda_i \geq 0} -\frac{1}{2}\sum\limits_{i=1}^m \sum\limits_{j=1}^m \lambda_i \lambda_j y_i y_j <X_i,X_j> + \sum\limits_{i=1}^m \lambda_i \\ s.t. \sum\limits_{i=1}^{m} \lambda_i y_i = 0 \end{cases} \tag{10}
⎩
⎨
⎧λi≥0max−21i=1∑mj=1∑mλiλjyiyj<Xi,Xj>+i=1∑mλis.t.i=1∑mλiyi=0(10)
此时,求解(10)规划问题,将解带入(8)即可解得
W
\mathbf{W}
W。
SVM算法中,论文作者使用SMO对该问题进行求解,下次再说。
此时,根据KKT条件,当 λ i = 0 \lambda_i = 0 λi=0时,对应的样本点 X i X_i Xi不是sv,相反, λ i ≠ 0 \lambda_i \not= 0 λi=0时,对应的样本点 X i X_i Xi为sv。一般而言,我们只需选取一个sv,带入 b = y i − W X i b = y_i - \mathbf{W}X_i b=yi−WXi即可解得 b b b,但为了减少误差,我们会计算所有sv对应的 b b b,并取均值。
或许,会有小朋友说,哎呀,线性问题有什么难解得,我上我也行,就是躺赢狗。别急,让我们接着看SVM得进一步优化。
step4:线性不可分下优化-软间隔
在实践中(一般说这几个字就是在耍流氓),几乎没有样本满足线性可分,对于一些特别难以区分的样本,我们可以放松要求,增强泛化能力。我们将(4)的优化问题升级为:
{
arg
min
W
,
b
1
2
∣
∣
w
∣
∣
2
+
C
∑
i
=
1
m
ξ
i
s
.
t
.
y
i
(
W
X
i
+
b
)
)
>
=
1
−
ξ
i
ξ
i
≥
0
(11)
\begin{cases} \arg \min\limits_{\mathbf{W},b}\frac{1}{2}||w||^2+C\sum\limits_{i=1}^{m}\xi_i \\ s.t. \quad y_i(\mathbf{W}X_i + b)) >= 1-\xi_i \\ \quad \quad \quad \xi_i \geq 0 \end{cases} \tag{11}
⎩
⎨
⎧argW,bmin21∣∣w∣∣2+Ci=1∑mξis.t.yi(WXi+b))>=1−ξiξi≥0(11)
此时的拉格朗日函数对
W
,
b
,
ξ
i
\mathbf{W},b,\xi_i
W,b,ξi求导后为
L
(
W
,
b
,
λ
,
τ
)
=
1
2
∣
∣
W
∣
∣
2
−
∑
i
=
1
m
λ
i
(
y
i
(
W
X
i
+
b
)
)
−
1
)
−
∑
τ
i
ξ
i
{
∂
L
∂
W
=
0
∂
L
∂
b
=
0
∂
L
∂
τ
i
=
0
t
h
e
n
{
W
=
∑
λ
i
y
i
X
i
∑
λ
i
y
i
=
0
C
−
λ
i
−
τ
i
=
0
s
o
max
L
=
−
1
2
∑
i
=
1
m
∑
j
=
1
m
λ
λ
y
i
y
j
<
X
i
,
X
j
>
+
∑
1
=
1
m
λ
i
(12)
\begin{aligned} L(\mathbf{W},b,\lambda,\tau) &= \frac{1}{2}||\mathbf{W}||^2 - \sum \limits_{i=1}^{m}\lambda_i(y_i(\mathbf{W}X_i + b))-1) - \sum \tau_i \xi_i \\ &\begin{cases} \frac{\partial L}{\partial \mathbf{W}} = 0 \\ \frac{\partial L}{\partial b} = 0\\ \frac{\partial L}{\partial \tau_i} = 0\\ \end{cases}\\ &then\\ &\begin{cases} \mathbf{W} = \sum \lambda_i y_i X_i\\ \sum \lambda_i y_i = 0\\ C - \lambda_i - \tau_i = 0\\ \end{cases}\\ &so\\ &\max L = -\frac{1}{2} \sum\limits_{i=1}^m\sum\limits_{j=1}^m \lambda \lambda y_i y_j <X_i,X_j> + \sum\limits_{1=1}^m \lambda_i \end{aligned} \tag{12}
L(W,b,λ,τ)=21∣∣W∣∣2−i=1∑mλi(yi(WXi+b))−1)−∑τiξi⎩
⎨
⎧∂W∂L=0∂b∂L=0∂τi∂L=0then⎩
⎨
⎧W=∑λiyiXi∑λiyi=0C−λi−τi=0somaxL=−21i=1∑mj=1∑mλλyiyj<Xi,Xj>+1=1∑mλi(12)
求解过程同上
step5:线性不可分下优化-核函数
SVM著名之处在于,能够将低维数据转化为高维数据,在高维数据中找到可分平面,将低维平面内不可分的数据嵌入高维空间,即可变为线性可分问题,升维的过程借助了核函数。
假设
φ
(
X
)
\varphi(X)
φ(X)是
X
X
X的高维形式,那么其他过程均可只将
X
X
X换为
φ
(
X
)
\varphi(X)
φ(X),在(11)中,原优化问题升级为:
{
max
λ
i
≥
0
−
1
2
∑
i
=
1
m
∑
j
=
1
m
λ
i
λ
j
y
i
y
j
K
<
X
i
,
X
j
>
+
∑
i
=
1
m
λ
i
s
.
t
.
∑
i
=
1
m
λ
i
y
i
=
0
(13)
\begin{cases} \max \limits_{\lambda_i \geq 0} -\frac{1}{2}\sum\limits_{i=1}^m \sum\limits_{j=1}^m \lambda_i \lambda_j y_i y_j K<X_i,X_j> + \sum\limits_{i=1}^m \lambda_i \\ s.t. \sum\limits_{i=1}^{m} \lambda_i y_i = 0 \end{cases} \tag{13}
⎩
⎨
⎧λi≥0max−21i=1∑mj=1∑mλiλjyiyjK<Xi,Xj>+i=1∑mλis.t.i=1∑mλiyi=0(13)
其中
K
<
X
i
,
X
j
>
K<X_i,X_j>
K<Xi,Xj>为高维向量
φ
(
X
i
)
\varphi(X_i)
φ(Xi)与
φ
(
X
j
)
\varphi(X_j)
φ(Xj)的内积,使用隐式的核函数表达。因此,核函数隐式提升原有数据维度,或者是,重新定义了向量空间,引入非线性运算,从而从其他空间找区分原数据的超平面。
对于核函数有一些要求,但不是本节课重点,最后放个链接供参考。
总结
今天我们学习了SVM算法原理,现在请深呼吸,头晕是正常的,请小朋友们下课认真总结,就这样,下课。
课外参考资料
KKT条件:
什么是凸函数、凸优化
SVM原理