前言
本文主要是讲了如何构建SVM的模型,并利用KKT条件构造其对偶型,从而求解问题,并讲述了SVM的硬间隔,软间隔和核函数三个境界。主要参考了周志华的《机器学习》,并在其中补充了自己的想法。由于内容较多,所以很多细节都省略掉了,只留下了整体的框架,该说的东西应该都说了。
SVM基本型
首先,我们先假设一个数据集线性可分的情况,也就是硬间隔的情况,如下图所示。
{ w T x + b = a w T x + b = − a \begin{cases}w^Tx+b=a \\ w^Tx+b=-a\end{cases} {wTx+b=awTx+b=−a
为了之后方便处理,我们统一一下,将等式两边同时除以一个 a a a,即
{ w : = w / a b : = b / a \begin{cases}w:=w/a \\ b:=b/a\end{cases} {w:=w/ab:=b/a
于是,我们现在就有三条直线或超平面
{ w T x + b = 1 w T x + b = 0 w T x + b = − 1 \begin{cases}w^Tx+b=1 \\ w^Tx+b=0 \\ w^Tx+b=-1\end{cases} ⎩ ⎨ ⎧wTx+b=1wTx+b=0wTx+b=−1
如下图所示。
{ w T x 1 + b = 1 w T x 2 + b = − 1 \begin{cases}w^Tx_1+b=1 \\ w^Tx_2+b=-1\end{cases} {wTx1+b=1wTx2+b=−1
两式相减则有
w ⋅ ( x 1 − x 2 ) = 2 w \cdot (x_1-x_2)=2 w⋅(x1−x2)=2
注意到 w w w, x 1 x_1 x1, x 2 x_2 x2都是向量,那么由向量点乘的性质可以得到
∣ ∣ w ∣ ∣ ⋅ ∣ ∣ x 1 − x 2 ∣ ∣ ⋅ c o s θ = 2 ||w|| \cdot ||x_1-x_2|| \cdot cos\theta =2 ∣∣w∣∣⋅∣∣x1−x2∣∣⋅cosθ=2
注意到了吗?这里的 ∣ ∣ x 1 − x 2 ∣ ∣ ⋅ c o s θ ||x_1-x_2|| \cdot cos\theta ∣∣x1−x2∣∣⋅cosθ就是间隔,不信可以自己画下图看。于是
d = ∣ ∣ x 1 − x 2 ∣ ∣ ⋅ c o s θ = 2 ∣ ∣ w ∣ ∣ d=||x_1-x_2|| \cdot cos\theta=\dfrac{2}{||w||} d=∣∣x1−x2∣∣⋅cosθ=∣∣w∣∣2
我们假设现在是一个二分类问题,两类分别标记为 { + 1 , − 1 } \{+1, -1\} {+1,−1},于是现在问题就转化为了
m a x w , b 2 ∣ ∣ w ∣ ∣ s . t . { y i = 1 , w T x i + b ≥ 1 y i = − 1 , w T x i + b ≤ − 1 \mathop{max}_{w,b}\ \dfrac{2}{||w||} \\ s.t. \begin{cases}y_i=1, \quad \ \ \ w^Tx_i+b\geq 1 \\ y_i=-1, \quad w^Tx_i+b\leq -1\end{cases} maxw,b ∣∣w∣∣2s.t.{yi=1, wTxi+b≥1yi=−1,wTxi+b≤−1
将式子合起来并将求最大改成求最小则是
m i n w , b ∣ ∣ w ∣ ∣ 2 2 s . t . y i ( w T x i + b ) ≥ 1 , i = 1 , 2 , . . . , m \mathop{min}_{w,b}\ \dfrac{||w||^2}{2} \\ s.t. \ y_i(w^Tx_i+b) \geq 1, \quad i=1,2,...,m minw,b 2∣∣w∣∣2s.t. yi(wTxi+b)≥1,i=1,2,...,m
这就是SVM的基本型。
这是一个凸二次规划问题,可以直接解决,但效率不高,我们希望找到更高效的方法,所以就去找它的对偶问题。这也是求不等式约束求极值的通用手段。
既然都讲到这里了,干脆先把拉格朗日乘子法和KKT条件都给讲了。
拉格朗日乘子法
拉格朗日乘子法针对的是等式约束,基本形式如下:
m i n x f ( x ) s . t . h i ( x ) = 0 , i = 1 , 2 , . . . , m \mathop{min}_{x} \ f(x) \\ s.t. h_i(x)=0, \quad i=1,2,...,m minx f(x)s.t.hi(x)=0,i=1,2,...,m
拉格朗日乘子法做的就是将约束条件添加到目标函数当中,使其变成一个无约束优化问题。可以这么做的原因是,只要满足 h i ( x ) = 0 h_i(x)=0 hi(x)=0,那么不管加多少个都是不改变目标值的。
m i n x , λ L ( x , λ ) = f ( x ) + ∑ i = 1 m λ i h i ( x ) \mathop{min}_{x,\lambda} L(x, \lambda) = f(x) +\sum_{i=1}^m\lambda_i h_i(x) minx,λL(x,λ)=f(x)+i=1∑mλihi(x)
我们假设 x x x有 p p p个特征,那么上式的极值点有如下的必要条件
{ ∂ L ∂ x k = ∂ f ∂ x k + ∑ i = 1 m λ i ∂ h i ( x ) ∂ x k = 0 , k = 1 , 2 , . . . , p ∂ L ∂ λ i = h i ( x ) = 0 , i = 1 , 2 , . . . , m \begin{cases} \dfrac{\partial L}{\partial x_k}=\dfrac{\partial f}{\partial x_k} + \sum_{i=1}^m\lambda_i \dfrac{\partial h_i(x)}{\partial x_k}=0, \quad k=1,2,...,p \\ \dfrac{\partial L}{\partial \lambda_i} =h_i(x)=0, \quad i=1,2,...,m\end{cases} ⎩ ⎨ ⎧∂xk∂L=∂xk∂f+∑i=1mλi∂xk∂hi(x)=0,k=1,2,...,p∂λi∂L=hi(x)=0,i=1,2,...,m
上式有
p
p
p个
x
k
x_k
xk和
m
m
m个
λ
i
\lambda_i
λi是待求的参数(
k
+
m
k+m
k+m个未知数),同时有
p
+
m
p+m
p+m个等式方程,所以是可以求解得到
x
k
x_k
xk和
λ
i
\lambda_i
λi的值。
值得注意的是,以上的只是必要条件,并不是充分条件,所以求得结果后最好再检验一下(虽然实际情况下都忽略了这一步)。
KKT条件
KKT条件是在拉格朗日乘子法的基础上多了不等式的约束,其针对的问题的基本型如下所示。
m i n x f ( x ) s . t . { h i ( x ) = 0 , i = 1 , 2 , . . , m g j ( x ) ≤ 0 , j = 1 , 2 , . . . , n \mathop{min}_x f(x) \\ s.t.\begin{cases} h_i(x)=0,\ i=1,2,..,m \\ g_j(x) \leq 0, \ j=1,2,...,n \end{cases} minxf(x)s.t.{hi(x)=0, i=1,2,..,mgj(x)≤0, j=1,2,...,n
其对偶型为
m i n x , λ , μ L ( x , λ , μ ) = f ( x ) + ∑ i = 1 m λ i h i ( x ) + ∑ j = 1 n μ j g j ( x ) \mathop{min}_{x,\lambda,\mu}L(x,\lambda,\mu)=f(x)+\sum_{i=1}^m\lambda_ih_i(x)+\sum_{j=1}^n\mu_jg_j(x) minx,λ,μL(x,λ,μ)=f(x)+i=1∑mλihi(x)+j=1∑nμjgj(x)
此时最优解要满足的条件为
{ ∂ L ∂ x k = ∂ f ∂ x k + ∑ i = 1 m λ i ∂ h i ( x ) ∂ x k + ∑ j = 1 n μ j ∂ g j ( x ) ∂ x k = 0 , k = 1 , 2 , . . . , p ∂ L ∂ λ i = h i ( x ) = 0 , i = 1 , 2 , . . . , m μ j g i ( x ) = 0 , j = 1 , 2 , . . . , n μ j ≥ 0 , j = 1 , 2 , . . . , n \begin{cases}\dfrac{\partial L}{\partial x_k}=\dfrac{\partial f}{\partial x_k} + \sum_{i=1}^m\lambda_i \dfrac{\partial h_i(x)}{\partial x_k}+\sum_{j=1}^n\mu_j\dfrac{\partial g_j(x)}{\partial x_k}=0, \quad k=1,2,...,p \\ \dfrac{\partial L}{\partial \lambda_i} =h_i(x)=0, \quad i=1,2,...,m \\ \mu_jg_i(x)=0, \quad j=1,2,...,n \\ \mu_j \geq 0, j=1,2,...,n\end{cases} ⎩ ⎨ ⎧∂xk∂L=∂xk∂f+∑i=1mλi∂xk∂hi(x)+∑j=1nμj∂xk∂gj(x)=0,k=1,2,...,p∂λi∂L=hi(x)=0,i=1,2,...,mμjgi(x)=0,j=1,2,...,nμj≥0,j=1,2,...,n
至于为什么是这样,参考一下这个吧,这里偷下懒。
SVM对偶问题
我们再来回顾一下我们得到的SVM基本型。
m i n w , b ∣ ∣ w ∣ ∣ 2 2 s . t . 1 − y i ( w T x i + b ) ≤ 0 , i = 1 , 2 , . . . , m \mathop{min}_{w,b}\ \dfrac{||w||^2}{2} \\ s.t. \ 1-y_i(w^Tx_i+b) \leq 0, \quad i=1,2,...,m minw,b 2∣∣w∣∣2s.t. 1−yi(wTxi+b)≤0,i=1,2,...,m
很显然,这是一个只有不等式的约束的KKT条件问题。
于是,我们可以将问题转化为
m i n w , b , α L ( w , b , α ) = ∣ ∣ w ∣ ∣ 2 2 + ∑ i = 1 m α i ( 1 − y i ( w T x i + b ) ) \mathop{min}_{w,b,\alpha} L(w,b,\alpha)=\dfrac{||w||^2}{2} + \sum_{i=1}^{m}\alpha_i(1-y_i(w^Tx_i+b)) minw,b,αL(w,b,α)=2∣∣w∣∣2+i=1∑mαi(1−yi(wTxi+b))
这个时候最优解满足的条件为
{ ∂ L ∂ w = w − ∑ i = 1 m α i y i x i = 0 ∂ L ∂ b = ∑ i = 1 m α i y i = 0 α i ( y i f ( x i ) − 1 ) = 0 , i = 1 , 2 , . . . , m α i ≥ 0 , i = 1 , 2 , . . . , m \begin{cases}\dfrac{\partial L}{\partial w} = w-\sum_{i=1}^{m}\alpha_i y_i x_i=0 \\ \dfrac{\partial L}{\partial b}=\sum_{i=1}^m\alpha_iy_i=0 \\ \alpha_i(y_if(x_i)-1)=0, \ i=1,2,...,m \\ \alpha_i \geq 0,\quad i=1,2,...,m\end{cases} ⎩ ⎨ ⎧∂w∂L=w−∑i=1mαiyixi=0∂b∂L=∑i=1mαiyi=0αi(yif(xi)−1)=0, i=1,2,...,mαi≥0,i=1,2,...,m
值得注意的是,这里的
w
w
w,
x
x
x都是向量,
f
(
x
i
)
=
w
T
x
i
+
b
f(x_i)=w^Tx_i+b
f(xi)=wTxi+b。
我们将上述方程组的前2个带入到原问题中,消去参数
w
w
w和
b
b
b,则原问题转化为
m i n α L ( α ) = 1 2 ∑ i = 1 m ∑ j = 1 m α i α j y i y j x i T x j − ∑ i = 1 m α i \mathop{min}_{\alpha} \ L(\alpha)= \dfrac{1}{2}\sum_{i=1}^m\sum_{j=1}^{m}\alpha_i\alpha_jy_iy_jx_i^Tx_j-\sum_{i=1}^m\alpha_i minα L(α)=21i=1∑mj=1∑mαiαjyiyjxiTxj−i=1∑mαi
这个时候,仍然需要满足
{ ∑ i = 1 m α i y i = 0 α i ≥ 0 , i = 1 , 2 , . . . , m α i ( y i f ( x i ) − 1 ) = 0 , i = 1 , 2 , . . . , m \begin{cases}\sum_{i=1}^m\alpha_iy_i=0 \\ \alpha_i \geq 0,\quad i=1,2,...,m \\ \alpha_i(y_if(x_i)-1)=0, \ i=1,2,...,m \end{cases} ⎩ ⎨ ⎧∑i=1mαiyi=0αi≥0,i=1,2,...,mαi(yif(xi)−1)=0, i=1,2,...,m
这个时候,我们就可以用一个叫做SMO的算法来求解 α \alpha α,这里不详细介绍这种算法了,不然篇幅太长了。求得 α \alpha α之后,可以通过 w − ∑ i = 1 m α i y i x i = 0 w-\sum_{i=1}^{m}\alpha_i y_i x_i=0 w−∑i=1mαiyixi=0这个式子来求得 w w w,而剩下的一个参数 b b b则要通过支持向量代入求解。
软间隔
有时候,噪声太大,会因为某几个点而产生线性不可分的情况。这个时候,就要引入软间隔这个概念了。说白了,就是我们允许某些点是可以被错误分类的,但这种错分的情况要尽可能地少。
m i n w , b ∣ ∣ w ∣ ∣ 2 2 + C ∑ i = 1 m ϵ i s . t . y i ( w T x i + b ) ≥ 1 − ϵ i , ϵ i ≥ 0 , i = 1 , 2 , . . . , m \mathop{min}_{w,b}\ \dfrac{||w||^2}{2} + C\sum_{i=1}^m \epsilon_i \\ s.t. \ y_i(w^Tx_i+b) \geq 1-\epsilon_i, \quad \epsilon_i\geq 0, \quad i=1,2,...,m minw,b 2∣∣w∣∣2+Ci=1∑mϵis.t. yi(wTxi+b)≥1−ϵi,ϵi≥0,i=1,2,...,m
容易看出,当
C
C
C为无穷大的时候,就成了硬间隔的状态;当
C
C
C越小的时候,允许被错分的点就越多。
同样是利用KKT条件,我们可以得到其对偶问题
m a x α ∑ 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 0 ≤ α i ≤ C , i = 1 , 2 , . . . , m \mathop{max}_{\alpha} \ \sum_{i=1}^m\alpha_i-\dfrac{1}{2}\sum_{i=1}^m\sum_{j=1}^{m}\alpha_i\alpha_jy_iy_jx_i^Tx_j \\ s.t.\begin{cases}\sum_{i=1}^m \alpha_iy_i=0 \\ 0\leq \alpha_i \leq C, \quad i=1,2,...,m\end{cases} maxα i=1∑mαi−21i=1∑mj=1∑mαiαjyiyjxiTxjs.t.{∑i=1mαiyi=00≤αi≤C,i=1,2,...,m
同样地,这也是可以利用SMO算法求解的,这里不详细介绍。
核函数
以上问题是针对线性可分,或者是针对由于噪声而产生的个别点线性不可分,总体线性可分的情况。那么对于下图左这样本来就线性不可分的数据集该怎么处理呢?
f ( x ) = w T ϕ ( x ) + b f(x)=w^T\phi(x)+b f(x)=wTϕ(x)+b
类似上述的问题,我们有
m i n w , b ∣ ∣ w ∣ ∣ 2 2 + C ∑ i = 1 m ϵ i s . t . y i ( w T ϕ ( x i ) + b ) ≥ 1 − ϵ i , ϵ i ≥ 0 , i = 1 , 2 , . . . , m \mathop{min}_{w,b}\ \dfrac{||w||^2}{2} + C\sum_{i=1}^m \epsilon_i \\ s.t. \ y_i(w^T\phi(x_i)+b) \geq 1-\epsilon_i, \quad \epsilon_i\geq 0, \quad i=1,2,...,m minw,b 2∣∣w∣∣2+Ci=1∑mϵis.t. yi(wTϕ(xi)+b)≥1−ϵi,ϵi≥0,i=1,2,...,m
其对偶问题为
m a x α ∑ 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 0 ≤ α i ≤ C , i = 1 , 2 , . . . , m \mathop{max}_{\alpha} \ \sum_{i=1}^m\alpha_i-\dfrac{1}{2}\sum_{i=1}^m\sum_{j=1}^{m}\alpha_i\alpha_jy_iy_j\phi(x_i)^T\phi(x_j) \\ s.t.\begin{cases}\sum_{i=1}^m \alpha_iy_i=0 \\ 0\leq \alpha_i \leq C, \quad i=1,2,...,m\end{cases} maxα i=1∑mαi−21i=1∑mj=1∑mαiαjyiyjϕ(xi)Tϕ(xj)s.t.{∑i=1mαiyi=00≤αi≤C,i=1,2,...,m
但是,这样的处理会导致维度灾难,也就是说本来几百维的一个东西会变成几千维,这样的计算量是无法接受的。于是,核函数就出现了,核函数是在低维空间上计算高维空间点积的一种方法,大大减少了数据量,也就是说,我们完全不用考虑 ϕ ( x ) \phi(x) ϕ(x)是什么东西就能够计算 ϕ ( x i ) T ϕ ( x j ) \phi(x_i)^T\phi(x_j) ϕ(xi)Tϕ(xj)我们将核函数记作
κ ( x i , x j ) = ϕ ( x i ) T ϕ ( x j ) \kappa(x_i,x_j)=\phi(x_i)^T\phi(x_j) κ(xi,xj)=ϕ(xi)Tϕ(xj)
常用的核函数有如下几种,这里不详细介绍核函数。
于是,我们的问题就转化为了
m a x α ∑ i = 1 m α i − 1 2 ∑ i = 1 m ∑ j = 1 m α i α j y i y j κ ( x i , x j ) s . t . { ∑ i = 1 m α i y i = 0 0 ≤ α i ≤ C , i = 1 , 2 , . . . , m \mathop{max}_{\alpha} \ \sum_{i=1}^m\alpha_i-\dfrac{1}{2}\sum_{i=1}^m\sum_{j=1}^{m}\alpha_i\alpha_jy_iy_j\kappa(x_i,x_j) \\ s.t.\begin{cases}\sum_{i=1}^m \alpha_iy_i=0 \\ 0\leq \alpha_i \leq C, \quad i=1,2,...,m\end{cases} maxα i=1∑mαi−21i=1∑mj=1∑mαiαjyiyjκ(xi,xj)s.t.{∑i=1mαiyi=00≤αi≤C,i=1,2,...,m
利用上式我们可以求出
α
\alpha
α,然而,这并没有什么卵用。由于我们不知道
ϕ
(
x
)
\phi(x)
ϕ(x)是什么,所以仍旧求不出
f
(
x
)
=
w
T
ϕ
(
x
)
+
b
f(x)=w^T\phi(x)+b
f(x)=wTϕ(x)+b。
真的是这样吗?别急。
在求对偶型的过程当中,我们会求
∂
L
∂
w
\dfrac{\partial L}{\partial w}
∂w∂L对吧。由该式我们可以知道
w = ∑ i = 1 m α i y i ϕ ( x i ) w=\sum_{i=1}^m\alpha_iy_i\phi(x_i) w=i=1∑mαiyiϕ(xi)
我们将其代入 f ( x ) f(x) f(x)可得
f ( x ) = w T ϕ ( x ) + b = ∑ i = 1 m α i y i ϕ ( x i ) T ϕ ( x ) + b = ∑ i = 1 m α i y i κ ( x , x i ) + b f(x)=w^T\phi(x)+b \\ \quad \quad =\sum_{i=1}^m\alpha_iy_i\phi(x_i)^T\phi(x)+b \\ \quad \quad = \sum_{i=1}^m\alpha_iy_i\kappa(x,x_i)+b f(x)=wTϕ(x)+b=i=1∑mαiyiϕ(xi)Tϕ(x)+b=i=1∑mαiyiκ(x,xi)+b
这样不就求出来了吗!核函数是不是很神奇!
结束语
本文讨论了SVM是怎么来的,以及硬间隔,软间隔,核函数这三个SVM的核心问题。许多细节都省略了,只留下了整体框架。
如有不足,还请指正~
参考文献
[1] 周志华. 机器学习 : = Machine learning[M]. 清华大学出版社, 2016.
[2] http://www.onmyphd.com/?p=lagrange.multipliers
[3] http://www.onmyphd.com/?p=kkt.karush.kuhn.tucker