SVM(二):对偶算法、SMO算法

拉格朗日乘子法
在学习对偶算法之前,首先我们需要了解一点数学知识——拉格朗日乘子法。它和高数中的拉格朗日乘数法很类似,都用于最优化的求解。不同的点是乘数法用于限制条件为等式的情况,而乘子法用于限制条件为不等式的情况。下面我们介绍一下两种方法,侧重点放在乘子法上面。

1、拉格朗日乘数法——等式约束

下面简单介绍下拉格朗日乘数法。
设给定二元函数z=ƒ(x,y)和附加条件φ(x,y)=0,为寻找z=ƒ(x,y)在附加条件下的极值点。

1. 先做拉格朗日函数F(x,y,λ)=f(x,y)+λφ(x,y) ,其中λ为参数。
2. 令F(x,y,λ)对x和y和λ的一阶偏导数等于零,得到
        F x ′ = ƒ x ′ ( x , y ) + λ φ x ′ ( x , y ) = 0 F'_x=ƒ'_x(x,y)+λφ'_x(x,y)=0 Fx=ƒx(x,y)+λφx(x,y)=0

      F y ′ = ƒ y ′ ( x , y ) + λ φ y ′ ( x , y ) = 0 F'_y=ƒ'_y(x,y)+λφ'_y(x,y)=0 Fy=ƒy(x,y)+λφy(x,y)=0
      F λ ′ = φ ( x , y ) = 0 F'_λ=φ(x,y)=0 Fλ=φ(x,y)=0
3. 由上述方程组解出x,y及λ,如此求得的(x,y),就是函数z=ƒ(x,y)在附加条件φ(x,y)=0下的可能极值点。若这样的点只有一个,由实际问题可直接确定此即所求的点。

2、拉格朗日乘子法——不等式约束

目标函数f(x),不等式约束g(x),有的教程会添加上等式约束条件h(x)=0。
此时最优化问题描述如下:
m i n    f ( x ) s . t .     g i ( x ) ⩽ 0   ;   h i ( x ) = 0 (2.1) \tag{2.1}min\ \ f(x) \\ s.t. \ \ \ g_i(x)\leqslant0 \ ; \ h_i(x)=0 min  f(x)s.t.   gi(x)0 ; hi(x)=0(2.1)

定义不等式约束下的拉格朗日函数L:
L ( x , λ , μ ) = f ( x ) + ∑ 1 p λ i g i ( x ) + ∑ 1 q μ j h j ( x ) (2.2) L(x,λ,μ)=f(x)+\sum\limits_{1}\limits^{p}λ_ig_i(x)+\sum\limits_{1}\limits^{q}μ_jh_j(x) \tag{2.2} L(x,λ,μ)=f(x)+1pλigi(x)+1qμjhj(x)(2.2)

其中λ和μ叫做乘子,也是分别是g(x)和h(x)的约束系数。


学习的对偶算法
为了求解线性可分支持向量机的最优化问题,将它作为原始的最优化问题,应用拉格朗日对偶性通过求解对偶问题(dual problem)得到原始问题的最优解,这就是线性可分支持向量机的对偶算法(dual algorithm)。
网页链接:拉格朗日对偶性
首先,我们来回顾一下原始的最优化问题,即原始问题:

min ⁡ w , b 1 2 ∣ ∣ w ∣ ∣ 2 s . t .     y i ( w T x i + b ) ⩾ 1 , i = 1 , 2 , … … , m (2.3) \min\limits_{w,b} \frac{1}{2}||w||^2 \\s.t. \ \ \ y_i(w^Tx_i+b) \geqslant 1,i=1,2,……,m \tag{2.3} w,bmin21w2s.t.   yi(wTxi+b)1,i=1,2,,m(2.3)

根据上面的拉格朗日乘子法介绍来看,我们需要的约束函数是 g ( x ) ⩽ 0 g(x)\leqslant0 g(x)0,因此我们将原始问题的约束条件改为 s . t .     1 − y i ( w T x i + b ) ⩽ 0 s.t. \ \ \ 1-y_i(w^Tx_i+b)\leqslant0 s.t.   1yi(wTxi+b)0。然后,对上式中的约束添加拉格朗日乘子 α i ⩾ 0 α_i\geqslant0 αi0我们可以得到不等式约束条件下的拉格朗日函数L:
L ( w , b , α ) = 1 2 ∣ ∣ w ∣ ∣ 2 + ∑ i = 1 m α i [ 1 − y i ( w T x i + b ) ] (2.4) L(w,b,α) = \frac{1}{2}||w||^2 + \sum\limits_{i=1}^{m}α_i[1-y_i(w^Tx_i+b)] \tag{2.4} L(w,b,α)=21w2+i=1mαi[1yi(wTxi+b)](2.4)

因为 α i ⩾ 0 α_i\geqslant0 αi0,且 1 − y i ( w T x i + b ) ⩽ 0 1-y_i(w^Tx_i+b)\leqslant0 1yi(wTxi+b)0。显然有:
max ⁡ α    L ( w , b , α ) = 1 2 ∣ ∣ w ∣ ∣ 2 (2.5) \max\limits_{α} \ \ L(w,b,α) = \frac{1}{2}||w||^2 \tag{2.5} αmax  L(w,b,α)=21w2(2.5)

因此原始问题 min ⁡ w , b 1 2 ∣ ∣ w ∣ ∣ 2 \min\limits_{w,b}\frac{1}{2}||w||^2 w,bmin21w2可以写成:
min ⁡ w , b   max ⁡ α   L ( w , b , α ) = = > max ⁡ α min ⁡ w , b   L ( w , b , α ) (2.6) \min\limits_{w,b} \ \max\limits_{α} \ L(w,b,α) ==> \max\limits_{α} \min\limits_{w,b} \ L(w,b,α) \tag{2.6} w,bmin αmax L(w,b,α)==>αmaxw,bmin L(w,b,α)(2.6)此时我们就得到了原始问题的对偶问题 max ⁡ α min ⁡ w , b   L ( w , b , α ) \max\limits_{α} \min\limits_{w,b} \ L(w,b,α) αmaxw,bmin L(w,b,α)


对偶问题的求解
首先,我们先看内层的最优化问题,即 min ⁡ w , b   L ( w , b , α ) \min\limits_{w,b} \ L(w,b,α) w,bmin L(w,b,α)
用L(w,b,α)分别对w,b进行求导,令=0,得到下面两个式子:
         w = ∑ i = 1 m α i y i x i w = \sum\limits_{i=1}^{m}α_iy_ix_i w=i=1mαiyixi
         0 = ∑ i = 1 m α i y i 0 = \sum\limits_{i=1}^{m}α_iy_i 0=i=1mαiyi
将上面两个公式带入 max ⁡ α min ⁡ w , b   L ( w , b , α ) \max\limits_{α} \min\limits_{w,b} \ L(w,b,α) αmaxw,bmin L(w,b,α)中,可以消去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 s . t .     ∑ i = 1 m α i y i = 0 ;      i ⩾ 0 , i = 1 , 2 , … , m (2.7) \max\limits_{α}\ \ \sum\limits_ {i=1}^{m}α_i - \frac{1}{2}\sum\limits_{i=1}^{m}\sum\limits_{j=1}^{m}α_iα_jy_iy_jx_i^Tx_j \tag{2.7} s.t. \ \ \ \sum\limits_{i=1}^{m}α_iy_i = 0;\ \ \ _i\geqslant 0,i = 1,2,…,m αmax  i=1mαi21i=1mj=1mαiαjyiyjxiTxjs.t.   i=1mαiyi=0;   i0,i=1,2,,m(2.7)
通过上面的式子可以解出α,然后求出w和b,然后就能得到最终的模型 f ( x ) = w T x i + b f(x) = w^Tx_i + b f(x)=wTxi+b
具体的求解方法SMO看下一小节。


SMO
SMO(Sequential Minimal Optimization),顺序最小优化算法。其基本思想先固定 α i α_i αi之外的所有参数,然后求 α i α_i αi上的极值。因为存在 ∑ i = 1 m α i y i = 0 \sum\limits_{i=1}^{m}α_iy_i = 0 i=1mαiyi=0的限制,所以固定 α i α_i αi之外的其他变量,则 α i α_i αi可以由其他变量表示。

具体过程:

SMO每次选择两个变量 α i α_i αi α j α_j αj,并固定其他的参数。这样在参数初始化后,SMO不断执行以下的两个步骤直至收敛:

  • 选取一对需更新的变量 α i α_i αi α j α_j αj
  • 固定 α i α_i αi α j α_j αj之外的参数,求解 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\limits_{α}\ \ \sum\limits_ {i=1}^{m}α_i - \frac{1}{2}\sum\limits_{i=1}^{m}\sum\limits_{j=1}^{m}α_iα_jy_iy_jx_i^Tx_j αmax  i=1mαi21i=1mj=1mαiαjyiyjxiTxj获取更新后的 α i α_i αi α j α_j αj

SMO算法之所以很高效,恰恰在于在固定其他参数后,仅优化剩下两个参数的过程能非常高效。因为 α i α_i αi α j α_j αj之间的约束可重写为:
α i y i + α j y j = c , α i ⩾ 0 , α j ⩾ 0 (2.8) α_iy_i + α_jy_j = c,α_i\geqslant0 ,α_j\geqslant0 \tag{2.8} αiyi+αjyj=c,αi0,αj0(2.8)

α i y i + α j y j = c α_iy_i + α_jy_j = c αiyi+αjyj=c进行变形,变为
α j = c − α i y i y j (2.9) α_j = \frac{c-α_iy_i}{y_j} \tag{2.9} αj=yjcαiyi(2.9)

将(2.9)带入到(2.7),可以消去式中的 α j α_j αj。然后(2.7)就变成了有关单变量 α i α_i αi的二次规划问题,很简单就可以求解出 α i α_i αi的最优解。随后用同样的方法求解出 α j α_j αj

那么参数b怎么确定呢?我们注意到任意的支持向量 ( x s , y s ) (x_s,y_s) (xs,ys)都有 y s ⋅ f ( x s ) = 1 y_s·f(x_s)=1 ysf(xs)=1即:
y s ( ∑ i ∈ s α i y i x i T x s + b ) = 1 (2.10) y_s(\sum\limits_{i∈s}α_iy_ix_i^Tx_s+b)=1 \tag{2.10} ys(isαiyixiTxs+b)=1(2.10)

即可获取参数b。虽然任何的支持向量都可以(2.10)获取b,但是现实中通常采用一种更鲁棒的做法,使用所有支持向量求解的平均值:
b = 1 ∣ s ∣ ∑ s ∈ S ( 1 y s − ∑ i ∈ S α i y i x i T x s ) b = \frac{1}{|s|}\sum\limits_{s∈S} (\frac{1}{y_s}-\sum\limits_{i∈S}α_iy_ix_i^Tx_s) b=s1sS(ys1iSαiyixiTxs)

最后w和b都求解出来后,结束。机器学习,学习的就是w和b这两个参数。


函数间隔到几何间隔的推导过程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值