支持向量机
支持向量机(Support Vector Machine)是一种针对二分类任务设计的分类器,它的理论相对于神经网络模型来说更加完备和严密,在某些DL神经网络的输出层也会使用SVM用来分类(例如R-CNN)。
下面我们将会探讨:
- 间隔与支持向量:如何计算空间中任意一点到超平面的距离?什么是支持向量?什么是间隔?支持向量机求解的目标是什么?
- 对偶问题:求取最大间隔等价于怎样的对偶问题?KKT条件揭示出支持向量机的什么性质?如何用SMO算法进行高效求解?为什么SMO算法能高效求解?
- 核函数:如何处理非线性可分问题?什么是核函数?为什么需要核函数?有哪些常用的核函数?核函数具有什么性质?
- 软间隔与正则化:如何应对过拟合问题?软间隔和硬间隔分别指什么?如何求解软间隔支持向量机?0/1损失函数有哪些可选的替代损失函数?支持向量机和回归对率模型(Logistic regression)有什么联系?支持向量回归的支持向量满足什么条件?
- 核方法:什么是表示定理?什么是核方法?如何应用?
间隔与支持向量
给定一个二分类数据集,正类标记为+1,负类标记为-1(对率回归中负类标记是0,这点是不同的)
分类学习对基本的想法就是基于训练集D在样本空间中找到一个划分超平面、将不同类别的样本分开,但这样的超平面有很多个,我们该选取哪一个呢?
支持向量
直观上看,我们应该找位于两类样本“正中间”的划分超平面,即上图中红色的那个,因为该划分超平面对训练样本局部扰动的“容忍”性最好。即这个划分超平面所产生的分类结果是 最鲁棒的,泛化能力最强。
上图的红色实现就是划分超平面,在线性表模型中通过线线方程 ω T x + b = 0 \omega^Tx+b = 0 ωTx+b=0. ω \omega ω是线性模型的投影向量,也是划分超平面的法向量,决定着法向量的方向。偏置项b又被成为位置项,决定了超平面和空间原点之间的距离。
假定超平面能够将所有训练样本正确分类,也即对所有标记为+1的点有
ω
T
x
+
b
>
0
\omega^Tx+b > 0
ωTx+b>0,所有标记为-1的点有
ω
x
+
b
<
0
\omega^x+b < 0
ωx+b<0.只要这个超平面存在,那么我们必然可以对
ω
\omega
ω和b进行适当的线性缩放,使得:
w
T
x
+
b
≥
1
,
y
i
=
+
1
w
T
x
+
b
≤
1
,
y
i
=
−
1
w^T x+ b \ge 1,y_i = +1 \\ w^T x +b \le 1,y_i = -1
wTx+b≥1,yi=+1wTx+b≤1,yi=−1
而SVM中定义 使得上式等号成立的训练样本点 就是 支持向量 (如果叫做 支持点 可能更好理解一些,因为事实上就是样本空间中的数据点,但因为在表示数据点的时候一般写成向量形式,所以就称为 支持向量),它们是距离超平面最近的几个样本点,也即上图两条虚线上的点。(当然,也可能出现比支持向量距离超平面更近的点,这跟 软间隔 有关,这里先不讨论)。
在SVM中,我们希望实现的是 最大化两类支持向量到超平面的距离。
那首先就需要知道怎么计算距离,怎样计算样本空间中任意数据点到划分超平面的距离呢?
方法:假设直线方程为
a
x
1
+
b
x
2
+
c
=
0
ax_1 + bx_2 + c =0
ax1+bx2+c=0,那么有点到直线距离公式:
r
=
∣
a
x
1
+
b
x
2
+
c
∣
a
2
+
b
2
r = \frac {|ax_1 + bx_2 + c|}{\sqrt {a^2+b^2}}
r=a2+b2∣ax1+bx2+c∣
令w = (a,b),x = (x1,x2),则可以把
a
x
1
+
b
x
2
ax_1+bx_2
ax1+bx2写成向量形式
w
T
x
w^Tx
wTx.把截距项设为b,则直线方程变为
w
T
x
+
b
=
0
w^Tx+b=0
wTx+b=0,代入距离公式得:
r
=
w
T
x
+
b
w
T
w
=
w
T
x
+
b
∣
∣
w
∣
∣
r = \frac {w^Tx+b}{\sqrt {w^Tw}} = \frac {w^Tx+b}{||w||}
r=wTwwTx+b=∣∣w∣∣wTx+b
该式扩展到多维情况下也是通用的。
间隔
希望实现的是 最大化两类支持向量到超平面的距离之和,而根据定义,所有支持向量都满足:
w
T
x
+
b
=
+
1
,
y
i
=
+
1
w
T
x
+
b
=
−
1
,
y
i
=
−
1
w^Tx+b=+1,y_i=+1\\ w^Tx+b=-1,y_i=-1
wTx+b=+1,yi=+1wTx+b=−1,yi=−1
代入前面的距离公式:
r = w T x + b ∣ ∣ w ∣ ∣ r = \frac {w^Tx+b}{||w||} r=∣∣w∣∣wTx+b
可以得到支持向量到超平面的距离为 1 ∣ ∣ w ∣ ∣ \frac 1{||w||} ∣∣w∣∣1。
定义 间隔 为 两个异类超平面的距离之和:
γ = 2 ⋅ 1 ∣ ∣ w ∣ ∣ = 2 ∣ ∣ w ∣ ∣ \gamma =2 ·\frac 1{||w||} = \frac 2{||w||} γ=2⋅∣∣w∣∣1=∣∣w∣∣2
SVM的目标是找到 具有最大间隔(maximum margin)的划分超平面,也即找到使 γ \gamma γ最大的w和b:
max w , b 2 ∣ ∣ w ∣ ∣ s . t . y i ( w T x + b ) ≥ 1 , i = 1 , 2 , ⋯ , m \max_{w,b} \frac 2{||w||} \ \ \ \ s.t.y_i(w^Tx+b)\ge1,i=1,2,\cdots,m maxw,b∣∣w∣∣2 s.t.yi(wTx+b)≥1,i=1,2,⋯,m
约束部分指的是全部样本都被正确分类,此时标记值(+1 或 -1)呈上预测值必定是一个 ≥ 1 \ge1 ≥1的数值。看上去间隔大小只与w有关,但实际上位移项也通过约束影响取值,进而对间隔产生影响。
由于最大化 ∣ ∣ w ∣ ∣ − 1 ||w||^{-1} ∣∣w∣∣−1等价于最小化 ∣ ∣ w ∣ ∣ 2 ||w||^2 ∣∣w∣∣2,所以可以重写 目标函数 为:
min w , b 1 2 ∣ ∣ w ∣ ∣ 2 s . t . y i ( w T x + b ) ≥ 1 , i = 1 , 2 , ⋯ , m ( 1 ) \min_{w,b} \frac 12||w||^2 \ \ \ \ s.t.y_i(w^Tx+b)\ge1,i=1,2,\cdots,m\ \ \ \ \ \ \ \ \ (1) minw,b21∣∣w∣∣2 s.t.yi(wTx+b)≥1,i=1,2,⋯,m (1)
引入 1 2 \frac 12 21是为了求导时可以消去平方项的2,这边是 支持向量机的基本模型。
特别地,还有以下定义:
- 函数间隔: y i ( w T + b ) y_i(w^T+b) yi(wT+b)
- 几何间隔: y i ( w T + b ) ∣ ∣ w ∣ ∣ 2 \frac {y_i(w^T+b)}{||w||^2} ∣∣w∣∣2yi(wT+b)
对偶问题
式(1)是一个带约束的凸二次规划问题(凸优化问题就意味着必定能求到全局最优解,而不会陷入局部最优解)。对于这样的问题,可以直接采取现成的优化计算包求解,但下面将介绍的是一种更高效的方法。
在开始介绍这种方法之前,我们先需要明确几个概念,拉格朗日乘子法 和 KKT条件。
拉格朗日乘子法:
为什么需要使用 拉格朗日乘子法 呢?记住,有拉格朗日乘子法的地方,必然是一个组合优化问题。比如下面的这个:
min
f
=
2
x
1
2
+
3
x
2
2
+
3
x
3
2
s
.
t
.
{
2
x
1
+
x
2
=
1
2
x
2
+
3
x
3
=
2
\min f = 2x_1^2+3x_2^2+3x_3^2 \ \ \ s.t.\begin{cases}2x_1+x_2=1\\ 2x_2+3x_3=2\end{cases}
minf=2x12+3x22+3x32 s.t.{2x1+x2=12x2+3x3=2
这是一个带等式的优化问题,有目标值,有约束条件。那么你可以想想,假设没有这个约束条件这个问题是怎么求解的呢?
若问题是一个凸优化问题,可以直接f对x求导等于0。但若是不是凸优化问题呢?
凸优化问题就是开口朝向一个方向(向上或者向下),更准确的数学公式是:
f ( x 1 ) + f ( x 2 ) 2 > f ( x 1 + x 2 2 ) \frac {f(x_1)+f(x_2)}{2} > f(\frac {x_1+x_2}{2}) 2f(x1)+f(x2)>f(2x1+x2)或者
f ( x 1 ) + f ( x 2 ) 2 < f ( x 1 + x 2 2 ) \frac {f(x_1)+f(x_2)}{2} < f(\frac {x_1+x_2}{2}) 2f(x1)+f(x2)<f(2x1+x2)
拉格朗日乘子法一定适用于 凸优化 问题,但不一定适用于其他问题。
有了约束不能直接求导,那么就要想办法将约束去掉,怎么去掉呢?我们把约束乘以一个系数加到目标函数中去,这样就相当于既考虑了原目标函数,也考虑了约束条件
L ( w , b , α ) = f + α 1 ( 2 x 1 + x 2 ) + α 2 ( 2 x 2 + 3 x 3 ) L(w,b,\alpha)=f+\alpha_1(2x_1+x_2)+\alpha_2(2x_2+3x_3) L(w,b,α)=f+α1(2x1+x2)+α2(2x2+3x3)
然后分别对 x 1 、 x 2 、 x 3 x_1、x_2、x_3 x1、x2、x3求导,解得x为含 α \alpha α的式子,带回约束条件,即可求解。
等式约束我们找到了解决方案,那么如果约束条件是不等式呢?就需要用KKT条件来解决这种问题了。
KKT条件:
约束条件无非就是等于、大于、小于,而经过一些变化都可以转变为约束方程小于0和等于0,举个简单的例子。假设原始约束条件为下列所示:
min
f
=
x
1
2
−
2
x
1
+
1
+
x
2
2
+
4
x
2
+
4
s
.
t
.
{
x
1
+
10
x
2
>
10
10
x
1
−
10
x
2
<
10
\min f = x_1^2 - 2x_1+1+x_2^2+4x_2+4 \ s.t.\begin{cases}x_1+10x_2>10\\10x_1-10x_2<10\end{cases}
minf=x12−2x1+1+x22+4x2+4 s.t.{x1+10x2>1010x1−10x2<10
那么把约束条件变个样子:
s . t . { 10 − x 1 − 10 x 2 < 0 10 x 1 − x 2 − 10 < 0 s.t. \ \ \ \begin{cases}10-x_1-10x_2<0\\10x_1-x_2-10<0\end{cases} s.t. {10−x1−10x2<010x1−x2−10<0
将不等式都变为小于号
现在将约束拿到目标函数就变为:
L
(
x
,
a
)
=
f
(
x
)
+
α
1
g
1
(
x
)
+
α
2
g
2
(
x
)
=
x
1
2
−
2
x
1
+
1
+
x
2
2
+
4
x
2
+
4
+
α
1
(
10
−
x
1
−
10
x
2
)
+
α
2
(
10
x
1
−
x
2
−
10
)
L(x,a)=f(x)+\alpha_1g1(x)+\alpha_2g2(x)\\=x_1^2-2x_1+1+x_2^2+4x_2+4+\alpha_1(10-x_1-10x_2)+\alpha_2(10x_1-x_2-10)
L(x,a)=f(x)+α1g1(x)+α2g2(x)=x12−2x1+1+x22+4x2+4+α1(10−x1−10x2)+α2(10x1−x2−10)
那么KKT条件的定理是什么呢?就是如果一个优化问题在转变后变为:
L
(
x
,
α
,
β
)
=
f
(
x
)
+
∑
α
i
g
i
(
x
)
+
∑
β
i
h
i
(
x
)
L(x,\alpha,\beta)=f(x)+\sum\alpha_ig_i(x)+\sum\beta_ih_i(x)
L(x,α,β)=f(x)+∑αigi(x)+∑βihi(x)
其中g是不等式约束,h是等式约束,KKT条件就是函数最优值时x满足:
- L对各个x求导为0
- h(x)=0;
- ∑ α i g i ( x ) = 0 , α i ≥ 0 \sum\alpha_ig_i(x)=0,\alpha_i\ge0 ∑αigi(x)=0,αi≥0
前两个式子比较好理解,对于第三个式子来说, g ( x ) ≤ 0 且 α ≥ 0 g(x)\le0且\alpha\ge0 g(x)≤0且α≥0,而 g i ( x ) α i g_i(x)\alpha_i gi(x)αi求和等于0,所以要么g(x)=0,要么 α \alpha α等于0
SVM的拉格朗日乘子法:
为式(1)的每条约束添加拉格朗日乘子
α
i
≥
0
\alpha_i\ge0
αi≥0(对应m个样本的m条约束),得到该问题的拉格朗日函数:
L
(
w
,
b
,
α
)
=
1
2
∣
∣
w
∣
∣
2
+
∑
i
=
1
m
α
i
(
1
−
y
i
(
w
T
x
i
+
b
)
)
(
2
)
L(w,b,\alpha)=\frac 12||w||^2+\sum_{i=1}^m\alpha_i(1-y_i(w^Tx_i+b))\ \ \ (2)
L(w,b,α)=21∣∣w∣∣2+∑i=1mαi(1−yi(wTxi+b)) (2)
解析:
南瓜书——https://datawhalechina.github.io/pumpkin-book/#/
其中 α = ( α 1 , α 2 , ⋯ ; α m ) \alpha=(\alpha_1,\alpha_2,\cdots;\alpha_m) α=(α1,α2,⋯;αm),对拉格朗日函数求w和b的偏导,并令偏导为0可以得到:
w = ∑ i = 1 m α i y i x i ( 3 ) 0 = ∑ i = 1 m α i y i ( 4 ) w = \sum_{i=1}^m\alpha_iy_ix_i \ \ \ \ \ \ \ \ (3)\\ 0=\sum_{i=1}^m\alpha_iy_i \ \ \ \ \ \ \ \ \ \ \ \ \ (4) w=i=1∑mαiyixi (3)0=i=1∑mαiyi (4)
解析:
南瓜书——https://datawhalechina.github.io/pumpkin-book/#/
将(3)代入(2)可以消去w,又因为式(2)中b的系数是
α
i
y
i
\alpha_iy_i
αiyi,由式(4)可知b也可以消去。然后再考虑(4)的约束就得到了式(1)的 对偶问题(dual problem):
W
(
α
)
=
max
∑
i
=
1
m
α
i
−
1
2
∑
i
=
1
m
∑
j
=
1
m
α
i
α
j
y
i
y
j
x
i
T
x
j
s
.
t
.
∑
i
=
1
m
α
i
y
i
=
0
,
α
i
≥
0
,
i
=
1
,
2
⋯
,
m
(
5
)
W(\alpha)=\max\sum_{i=1}^m\alpha_i-\frac 12\sum_{i=1}^m\sum_{j=1}^m\alpha_i\alpha_jy_iy_jx_i^Tx_j\ \ \ \ s.t.\sum_{i=1}^m\alpha_iy_i=0,\alpha_i\ge0,i=1,2\cdots,m\ \ \ \ (5)
W(α)=max∑i=1mαi−21∑i=1m∑j=1mαiαjyiyjxiTxj s.t.∑i=1mαiyi=0,αi≥0,i=1,2⋯,m (5)
解析:
南瓜书——https://datawhalechina.github.io/pumpkin-book/#/
只要求出该对偶问题的解a,就可以退出w和b,从而得出模型:
f
(
x
)
=
w
T
x
+
b
=
∑
i
=
1
m
α
i
y
i
x
i
T
x
+
b
(
6
)
f(x)=w^Tx+b\\=\sum_{i=1}^m\alpha_iy_ix_i^Tx+b \ \ \ \ (6)
f(x)=wTx+b=∑i=1mαiyixiTx+b (6)
不过实际计算时一般不会直接求解 α \alpha α,特别是需要用核函数映射到高维空间时,因为映射后做内积很困难,而用少量支持向量进行表示,在原始空间进行计算显然更优,这点在后续章节会更详细讲解。
注意,由于式(1)的约束条件是 不等式约束,所以求解过程要满足 KKT条件:
{
α
i
≥
0
y
i
f
(
x
i
)
−
1
≥
0
α
i
(
y
I
f
(
x
i
)
−
1
)
=
0
\begin{cases}\alpha_i\ge0\\ y_if(x_i)-1\ge0\\ \alpha_i(y_If(x_i)-1)=0\end{cases}
⎩⎪⎨⎪⎧αi≥0yif(xi)−1≥0αi(yIf(xi)−1)=0
这个 KKT条件说明了,对任何一个样本 x i x_i xi来说,
- 要么对应的拉格朗日乘子 α i \alpha_i αi为0,此时有样本 x i x_i xi对(6)毫无贡献,将不会在式(6)求和中出现,不会影响到模型,也不会对 f ( x ) f(x) f(x)有任何影响;
- 要么 α i > 0 \alpha_i>0 αi>0,则必有函数间隔 y I f ( x i ) = 1 y_If(x_i)=1 yIf(xi)=1,此时对应的样本点 x i x_i xi位于最大间隔边界上,是一个支持向量。
它揭示了一个重要性质:训练完成后,大部分的训练样本都不需保留,最终模型仅与支持向量有关。
SMO算法
可以发现对偶式(5)是一个二次规划问题,可以使用通用的二次规划算法求解。但 问题的规模正比于训练样本数,因此这会在实际任务中造成很大的开销。为了避免这个障碍,人们通过利用问题本身的特性,提出了很多高效算法,可以使用高效的SMO(Sequential Minimal Optimization)算法。
对于式(5)来说,我们要解决的是在 α \alpha α上求最大值W的问题,至于 x i 和 y i x_i和y_i xi和yi都是已知数,C由我们预先设定,也是已知数。
按照坐标上升的思路,我们首先固定除
α
i
\alpha_i
αi以外的所有参数,然后再
α
i
\alpha_i
αi上求极值。但是如果固定
α
i
\alpha_i
αi之外的所有参数,那么
α
i
\alpha_i
αi将不再是变量(可以由其他退出),因为问题中规定:
∑
i
=
1
m
α
i
y
i
=
0
⇒
α
1
y
1
=
−
∑
i
=
2
m
α
i
y
i
\sum_{i=1}^m\alpha_iy_i=0 \Rightarrow\\ \alpha_1y_1 = -\sum_{i=2}^m\alpha_iy_i
i=1∑mαiyi=0⇒α1y1=−i=2∑mαiyi
因此,我们需要一次选取两个参数做优化,比如 α 1 和 α 2 \alpha_1和\alpha_2 α1和α2,此时 α 1 和 α 2 \alpha_1和\alpha_2 α1和α2可以由其他参数表示出来。这样带回带W中,W就是关于 α i \alpha_i αi的函数了。
SMO的步骤:
第一步,选取一对 α i 和 α j \alpha_i和\alpha_j αi和αj,选取方法使用启发式方法。第二步,固定除 α i 和 α j \alpha_i和\alpha_j αi和αj之外的其他参数,确定W极值条件下的 α i , α j \alpha_i,\alpha_j αi,αj由 α i \alpha_i αi表示。
SMO之所以高效,就是因为在固定其他参数后,对一个参数优化过程很高效