一、什么是支持向量机?
支持向量机可以用下面的一句话进行总结:
支持向量机就是最大间隔分类器
因此,支持向量机其实就是一种分类器(大多数情况下都用于二分类)。那最大间隔是什么意思呢?
考虑下面的例子,我们希望找到一个超平面将两类样本分开。很明显的是中间加粗的划分超平面应该是最鲁棒的。假设我们将超平面上移直到遇到一个样本点(称为支持向量),我们将其定义为上边界。同样的,将它向下移动直到遇到一个样本点,我们将其定义为下边界,上下边界的距离称为间隔(margin)。观察最佳超平面的特点,我们发现它的间隔是所有候选超平面中最大的,因此我们可以通过最大化间隔来找到该最佳超平面。
![](https://img-blog.csdnimg.cn/e872d46d2c384267a1e694a17efb3edb.png#pic_left)
![](https://img-blog.csdnimg.cn/d976335d79884c23ae8f8cf6607ab171.png#pic_left)
对于任意一个划分超平面
w
T
x
+
b
=
0
\boldsymbol{w}^{\mathrm{T}} \boldsymbol{x}+b=0
wTx+b=0
不妨设它的上下界为
{
w
T
x
i
+
b
=
+
1
w
T
x
i
+
b
=
−
1
\left\{\begin{array}{l} \boldsymbol{w}^{\mathrm{T}} \boldsymbol{x}_{i}+b =+1 \\ \boldsymbol{w}^{\mathrm{T}} \boldsymbol{x}_{i}+b =-1 \end{array}\right.
{wTxi+b=+1wTxi+b=−1
这里这个1是任意取的,它并不影响我们对于正确超平面的求解。若超平面 ( w ′ , b ′ ) (w^{'} ,b^{'}) (w′,b′)能将训练样本正确分类,则总存在缩放变换 ς w ↦ w ′ \varsigma w \mapsto w^{\prime} ςw↦w′和 ς b ↦ b ′ \varsigma b \mapsto b^{\prime} ςb↦b′使式上式成立。
容易知道
w
w
w是两个超平面(一维是就是直线)的法向量,设
x
2
,
x
1
x_2,x_1
x2,x1分别是上下界的任一点,根据距离公式可得(即
x
1
−
x
2
x_1-x_2
x1−x2在法向量上的投影,再除以法向量的长度), 在这里我们省略标识向量的箭头符号。
∥
(
x
1
−
x
2
)
⋅
w
∥
∥
w
∥
=
∥
w
T
(
x
1
−
x
2
)
∥
∥
w
∥
=
∥
w
T
x
1
−
w
T
x
2
∥
∥
w
∥
=
∥
1
−
b
−
(
−
1
−
b
)
∥
∥
w
∥
=
2
∥
w
∥
\begin{aligned} \dfrac{\Vert{(\boldsymbol{x_1-x_2})\cdot \boldsymbol{w}}\Vert}{\Vert \boldsymbol{w}\Vert}&=\dfrac{\Vert{\boldsymbol{w}^T(\boldsymbol{x_1-x_2})}\Vert}{\Vert \boldsymbol{w}\Vert} \\ &=\dfrac{\Vert{\boldsymbol{w}^T\boldsymbol{x_1}-\boldsymbol{w}^T\boldsymbol{x_2}}\Vert}{\Vert \boldsymbol{w}\Vert} \\ &=\dfrac{\Vert1-b-(-1-b)\Vert}{\Vert \boldsymbol{w}\Vert} \\ &= \dfrac{2}{\Vert w \Vert} \end{aligned}
∥w∥∥(x1−x2)⋅w∥=∥w∥∥wT(x1−x2)∥=∥w∥∥wTx1−wTx2∥=∥w∥∥1−b−(−1−b)∥=∥w∥2
因此,我们想要最大化这个间隔来求得相应的w,并且需要满足正确分类的约束(正确分类时
y
i
f
(
x
i
)
≥
1
y_if(\boldsymbol{x_i}) \geq 1
yif(xi)≥1, 这是因为正确分类只有两种情况,
y
i
=
1
y_i=1
yi=1时预测值在上界上面
f
(
x
i
)
≥
1
f(\boldsymbol{x_i})\geq1
f(xi)≥1, 同样
y
i
=
−
1
y_i=-1
yi=−1时预测值在下界下面
f
(
x
i
)
≤
−
1
f(\boldsymbol{x_i})\leq-1
f(xi)≤−1 ),也就是:
max
w
,
b
2
∥
w
∥
s.t.
y
i
(
w
T
x
i
+
b
)
⩾
1
,
i
=
1
,
2
,
…
,
m
.
\begin{aligned} \max _{\boldsymbol{w}, b} & \frac{2}{\|\boldsymbol{w}\|} \\ \text { s.t. } & y_{i}\left(\boldsymbol{w}^{\mathrm{T}} \boldsymbol{x}_{i}+b\right) \geqslant 1, \quad i=1,2, \ldots, m . \end{aligned}
w,bmax s.t. ∥w∥2yi(wTxi+b)⩾1,i=1,2,…,m.
上述约束公式等价于求解
min
w
,
b
1
2
∥
w
∥
2
s
.
t
.
y
i
(
w
T
x
i
+
b
)
⩾
1
,
i
=
1
,
2
,
…
,
m
.
\begin{aligned} \min _{\boldsymbol{w}, b} \frac{1}{2}\|\boldsymbol{w}\|^{2} \\ s.t. y_{i}\left(\boldsymbol{w}^{\mathrm{T}} \boldsymbol{x}_{i}+b\right) \geqslant 1, \quad i=1,2, \ldots, m . \end{aligned}
w,bmin21∥w∥2s.t.yi(wTxi+b)⩾1,i=1,2,…,m.
上述带约束的问题就是SVM的基本型,这其实是一个凸二次规划 (convex quadratic programming) 问题,能直接用现成的优化计算包求解(比如梯度下降法),但是我们可以使用下面基于下面的方法求解,更加的高效。(这个方法的过程是:拉格朗日乘子法->转换为对偶问题->SMO求解),因为拉格朗日原本就是直接求闭式解,所以必然比梯度下降或者牛顿法这种迭代的方法更加高效。
二次规划的定义:当凸优化问题的目标函数是(凸)二次型并且约束函数为仿射(仿射,即关于变量的线性组合)时,该问题称为二次规划(Quadratic Programming),二次规划可以表述为
二、如何求解支持向量机?
事实上,SVM的思想是非常容易理解的,但是它的推导求解是一个复杂的过程,需要一定的数学基础。
在高等数学中,带约束的优化问题很自然而然的就知道是使用拉格朗日乘子法求解,可以参考下直观理解拉格朗日乘子法。
我们由上面得到了SVM基本型,可以看到,它是一个带不等式约束的优化问题,根据直观理解拉格朗日乘子法里面的介绍,它可以使用带KKT条件的拉格朗日乘子法进行求解(这个过程就是使用松弛变量将不等式约束转化为等式约束,然后就直接使用拉格朗日乘子法,由于不等式约束转化为等式约束,这个过程导出了KKT条件来对原不等式约束进行等价约束),在这里,为了读者进行对比,再次给出不等式约束条件下的拉格朗日乘子法的标准形式。
所以对于SVM标准型的求解可以转化为下面的拉格朗日函数最小值的求解
L ( w , b , α ) = 1 2 ∥ w ∥ 2 + ∑ i = 1 m α i ( 1 − y i ( w T x i + b ) ) L(\boldsymbol{w}, b, \boldsymbol{\alpha})=\frac{1}{2}\|\boldsymbol{w}\|^{2}+\sum_{i=1}^{m} \alpha_{i}\left(1-y_{i}\left(\boldsymbol{w}^{\mathrm{T}} \boldsymbol{x}_{i}+b\right)\right) L(w,b,α)=21∥w∥2+i=1∑mαi(1−yi(wTxi+b))
同时需要满足KKT条件
{
α
i
⩾
0
y
i
f
(
x
i
)
−
1
⩾
0
α
i
(
y
i
f
(
x
i
)
−
1
)
=
0
\left\{\begin{array}{l} \alpha_{i} \geqslant 0 \\ y_{i} f\left(\boldsymbol{x}_{i}\right)-1 \geqslant 0 \\ \alpha_{i}\left(y_{i} f\left(\boldsymbol{x}_{i}\right)-1\right)=0 \end{array}\right.
⎩⎨⎧αi⩾0yif(xi)−1⩾0αi(yif(xi)−1)=0
上面我们说到了对偶问题?什么是对偶问题?为什么要转化为对偶问题?(一般如果转换为对偶问题,求解更简单,则使用对偶问题)
拉格朗日的对偶问题是指以下问题
d ∗ = max λ , μ : i ≥ 0 min x L ( x , λ , μ ) ≤ min x max λ , μ : i ≥ 0 L ( x , λ , μ ) = p ∗ d^{*}=\max _{\lambda, \mu: _{i} \geq 0} \min _{x} L(x, \lambda, \mu) \leq \min _{x} \max _{\lambda, \mu: _{i} \geq 0} L(x, \lambda,\mu)=p^{*} d∗=λ,μ:i≥0maxxminL(x,λ,μ)≤xminλ,μ:i≥0maxL(x,λ,μ)=p∗
其实在SVM中,现在的问题是 min max问题(min对于的参数是w,b,max对应的参数是 α \alpha α),然后我们需要将其转化为max min问题(因为这样求解更简单)
下面我们先简单证明下为什么现在的问题是min max问题。为了更一般化的表达,仍使用拉格朗日乘子法的标准形式进行证明,具体读者可以根据SVM的参数进行对号入座。
一般我们要求解的拉格朗日函数都是关于某个目标参数最小值,所以一般都是min max问题。根据上面图片所示的标准形式,我们现在的参数是 x , λ , μ x,\lambda,\mu x,λ,μ,欲求关于x的拉格朗日最小值,即:
Γ
(
λ
,
μ
)
=
inf
x
∈
D
L
(
x
,
λ
,
μ
)
=
inf
x
∈
D
(
f
(
x
)
+
∑
i
=
1
m
λ
i
h
i
(
x
)
+
∑
j
=
1
n
μ
j
g
j
(
x
)
)
\begin{aligned} \Gamma(\boldsymbol{\lambda}, \boldsymbol{\mu}) &=\inf _{\boldsymbol{x} \in \mathbb{D}} L(\boldsymbol{x}, \boldsymbol{\lambda}, \boldsymbol{\mu}) \\ &=\inf _{\boldsymbol{x} \in \mathbb{D}}\left(f(\boldsymbol{x})+\sum_{i=1}^{m} \lambda_{i} h_{i}(\boldsymbol{x})+\sum_{j=1}^{n} \mu_{j} g_{j}(\boldsymbol{x})\right) \end{aligned}
Γ(λ,μ)=x∈DinfL(x,λ,μ)=x∈Dinf(f(x)+i=1∑mλihi(x)+j=1∑nμjgj(x))
这里inf表示下界。 如果
x
~
∈
D
\tilde{\boldsymbol{x}} \in \mathbb{D}
x~∈D是可行域的解,那么根据原始的约束条件(即
h
i
(
x
)
=
0
,
g
j
(
x
)
≤
x
h_i(x)=0,g_j(x)\leq x
hi(x)=0,gj(x)≤x,这里只是
x
~
∈
D
\tilde{\boldsymbol{x}} \in \mathbb{D}
x~∈D是可行域的解,而不是说
x
~
\tilde{\boldsymbol{x}}
x~是最优解,因此采用的是原始的原始条件,而不是做了最优解假设的KKT条件),因此对于任意的
μ
≥
0
\mu \geq 0
μ≥0和
λ
\lambda
λ有
∑ i = 1 m λ i h i ( x ) + ∑ j = 1 n μ j g j ( x ) ⩽ 0 \sum_{i=1}^{m} \lambda_{i} h_{i}(\boldsymbol{x})+\sum_{j=1}^{n} \mu_{j} g_{j}(\boldsymbol{x}) \leqslant 0 i=1∑mλihi(x)+j=1∑nμjgj(x)⩽0
进而有
Γ
(
λ
,
μ
)
=
inf
x
∈
D
L
(
x
,
λ
,
μ
)
⩽
L
(
x
~
,
λ
,
μ
)
⩽
f
(
x
~
)
\Gamma(\boldsymbol{\lambda}, \boldsymbol{\mu})=\inf _{\boldsymbol{x} \in \mathbb{D}} L(\boldsymbol{x}, \boldsymbol{\lambda}, \boldsymbol{\mu}) \leqslant L(\tilde{\boldsymbol{x}}, \boldsymbol{\lambda}, \boldsymbol{\mu}) \leqslant f(\tilde{\boldsymbol{x}})
Γ(λ,μ)=x∈DinfL(x,λ,μ)⩽L(x~,λ,μ)⩽f(x~)
如果原问题的最优值为
p
∗
p^*
p∗,那对于任意的
μ
≥
0
\mu \geq 0
μ≥0和
λ
\lambda
λ有
Γ
(
λ
,
μ
)
⩽
p
∗
\Gamma(\boldsymbol{\lambda}, \boldsymbol{\mu}) \leqslant p^{*}
Γ(λ,μ)⩽p∗
因此,也就是说最优值的取得应该是 min max得一个过程,也就是先求一个关于
λ
,
μ
\lambda,\mu
λ,μ的拉格朗日函数最大值,然后再求关于x的最小值。
min
x
max
λ
,
μ
:
i
≥
0
L
(
x
,
λ
,
μ
)
\min _{x} \max _{\lambda, \mu: _{i} \geq 0} L(x, \lambda,\mu)
xminλ,μ:i≥0maxL(x,λ,μ)
现在由于我们如果先求max L的话,对于SVM来说,这并不是一个好解的问题,因此将其SVM标准型转化为其对偶问题,即max min问题,即先求关于w,b的min,再求max。
现在我们回到SVM的具体求解(回想:我们的目标是求得最优值下的w,b, α \alpha α)。
现在用拉格朗日函数
L
(
w
,
b
,
α
)
=
1
2
∥
w
∥
2
+
∑
i
=
1
m
α
i
(
1
−
y
i
(
w
T
x
i
+
b
)
)
L(\boldsymbol{w}, b, \boldsymbol{\alpha})=\frac{1}{2}\|\boldsymbol{w}\|^{2}+\sum_{i=1}^{m} \alpha_{i}\left(1-y_{i}\left(\boldsymbol{w}^{\mathrm{T}} \boldsymbol{x}_{i}+b\right)\right)
L(w,b,α)=21∥w∥2+∑i=1mαi(1−yi(wTxi+b))先对w和b求偏导并令其等于0,可得
w
=
∑
i
=
1
m
α
i
y
i
x
i
0
=
∑
i
=
1
m
α
i
y
i
\begin{aligned} \boldsymbol{w} &=\sum_{i=1}^{m} \alpha_{i} y_{i} \boldsymbol{x}_{i} \\ 0 &=\sum_{i=1}^{m} \alpha_{i} y_{i} \end{aligned}
w0=i=1∑mαiyixi=i=1∑mαiyi
接下来我们再求关于
α
\alpha
α的max问题,从而得到最优值处
α
\alpha
α的取值。由于求min过程已经得到一部分有用的信息,我们将上面两个式子代入拉格朗日函数
L
(
w
,
b
,
α
)
L(\boldsymbol{w}, b, \boldsymbol{\alpha})
L(w,b,α),可得
max
α
∑
i
=
1
m
α
i
−
1
2
∑
i
=
1
m
∑
j
=
1
m
α
i
α
j
y
i
y
j
x
i
T
x
j
\max _{\alpha} \sum_{i=1}^{m} \alpha_{i}-\frac{1}{2} \sum_{i=1}^{m} \sum_{j=1}^{m} \alpha_{i} \alpha_{j} y_{i} y_{j} \boldsymbol{x}_{i}^{\mathrm{T}} \boldsymbol{x}_{j}
αmaxi=1∑mαi−21i=1∑mj=1∑mαiαjyiyjxiTxj
s.t.
∑
i
=
1
m
α
i
y
i
=
0
α
i
⩾
0
,
i
=
1
,
2
,
…
,
m
.
\begin{array}{ll} \text { s.t. } & \sum_{i=1}^{m} \alpha_{i} y_{i}=0 \\ & \alpha_{i} \geqslant 0, \quad i=1,2, \ldots, m . \end{array}
s.t. ∑i=1mαiyi=0αi⩾0,i=1,2,…,m.
并且需满足上述的解依然需要满足KKT条件(这里求解
α
\alpha
α时先不考虑KKT,求解完再进行验证)
{
α
i
⩾
0
y
i
f
(
x
i
)
−
1
⩾
0
α
i
(
y
i
f
(
x
i
)
−
1
)
=
0
\left\{\begin{array}{l} \alpha_{i} \geqslant 0 \\ y_{i} f\left(\boldsymbol{x}_{i}\right)-1 \geqslant 0 \\ \alpha_{i}\left(y_{i} f\left(\boldsymbol{x}_{i}\right)-1\right)=0 \end{array}\right.
⎩⎨⎧αi⩾0yif(xi)−1⩾0αi(yif(xi)−1)=0
可以看到,上面对于 α \alpha α的max过程其实是一个二次规划的问题,可以通过半正定规划、梯度下降法、拟牛顿法进行求解。;然而该问题的规模正比于训练样本数 这会在实际任务中造成很大的开销.为了避开这个障碍,人们通过利用问题本身的特性,提出了很多高效算法, SMO(Sequential Minimal Optimization)是其中一个代表。
SMO的基本思路是每次只更新一个变量
α
i
\alpha_i
αi.他不断地迭代以下两个步骤直至收敛。
1. 选取一对需要更新的变量
α
i
\alpha_i
αi和
α
j
\alpha_j
αj
2. 固定
α
i
\alpha_i
αi和
α
j
\alpha_j
αj以外的参数,求解上述max函数获得更新后的
α
i
\alpha _i
αi和
α
j
\alpha _j
αj, 这个过程如下所示:
仅考虑
α
i
\alpha _i
αi和
α
j
\alpha _j
αj时,约束
∑
i
=
1
m
α
i
y
i
=
0
\sum_{i=1}^{m} \alpha_{i} y_{i}=0
∑i=1mαiyi=0可以重写为:
α
i
y
i
+
α
j
y
j
=
c
,
α
i
⩾
0
,
α
j
⩾
0
\alpha_{i} y_{i}+\alpha_{j} y_{j}=c, \quad \alpha_{i} \geqslant 0, \quad \alpha_{j} \geqslant 0
αiyi+αjyj=c,αi⩾0,αj⩾0
其中
c
=
−
∑
k
≠
i
,
j
α
k
y
k
c=-\sum_{k \neq i, j} \alpha_{k} y_{k}
c=−k=i,j∑αkyk
利用上面关于 α i \alpha _i αi和 α j \alpha _j αj的式子,我们可以消去 α j \alpha _j αj,这时就得到了只关于 α i \alpha _i αi的单变量二次规划问题,仅有的约束是 α i ≥ 0 \alpha _i \geq 0 αi≥0。这样的二次规划问题是具有闭式解的(即直接公式求解),可以高效的计算出更新后的 α i \alpha _i αi和 α j \alpha _j αj。
当所有的 α \alpha α都不再发生明显变化后,我们得到了拉格朗日函数最优值处的 α \alpha α。
然后我们根据以下公式求得 w \boldsymbol{w} w
w = ∑ i = 1 m α i y i x i \boldsymbol{w} =\sum_{i=1}^{m} \alpha_{i} y_{i} \boldsymbol{x}_{i} w=i=1∑mαiyixi
那么如何确定偏移项b呢?注意到对任意支持向量
(
x
s
,
y
s
)
(\boldsymbol{x_s},y_s)
(xs,ys), 都有
y
s
f
(
x
s
)
=
1
y_sf(\boldsymbol{x_s})=1
ysf(xs)=1,即
y
s
(
∑
i
∈
S
α
i
y
i
x
i
T
x
s
+
b
)
=
1
y_{s}\left(\sum_{i \in S} \alpha_{i} y_{i} \boldsymbol{x}_{i}^{\mathrm{T}} \boldsymbol{x}_{s}+b\right)=1
ys(i∈S∑αiyixiTxs+b)=1
因此,我们可以使用所有支持向量求 解的平均值
b
=
1
∣
S
∣
∑
s
∈
S
(
y
s
−
∑
i
∈
S
α
i
y
i
x
i
T
x
s
)
b=\frac{1}{|S|} \sum_{s \in S}\left(y_{s}-\sum_{i \in S} \alpha_{i} y_{i} \boldsymbol{x}_{i}^{\mathrm{T}} \boldsymbol{x}_{s}\right)
b=∣S∣1s∈S∑(ys−i∈S∑αiyixiTxs)
至此,通过引入带KKT条件的拉格朗日乘子法,再将其转化为对偶问题求解,该对偶问题是一个二次规划问题,最后通过SMO算法高效求解该二次规划问题,得到了最优值下 α \alpha α的取值,然后根据 α \alpha α的取值得到 w \boldsymbol{w} w和b,最终完成了对最优划分超平面的求解。
三、参考资料
【1】周志华《机器学习》
【2】Stephen Boyd 《凸优化》
【3】浅谈最优化问题的KKT条件
【4】直观理解拉格朗日乘子法