【机器学习】支持向量机原理(四)SMO算法原理

   在SVM的前三篇里,我们优化的目标函数最终都是一个关于 α 向量的函数。而怎么极小化这个函数,求出对应的 α 向量,进而求出分离超平面我们没有讲。本篇就对优化这个关于 α 向量的函数的SMO算法做一个总结。


回顾SVM优化目标函数

   我们首先回顾下我们的优化目标函数:

minα12i=1mj=1mαiαjyiyjK(xi,xj)i=1mαis.t.i=1mαiyi=00αiC
 
   我们的解要满足的KKT条件的对偶互补条件为:
(1)αi(yi(wTxi+b)1)=0

   根据这个KKT条件的对偶互补条件,我们有:
(2)αi=0yi(wϕ(xi)+b)1)10<αi<Cyi(wϕ(xi)+b)1)=1αi=Cyi(wϕ(xi)+b)1)1

   由于 w=j=1mαjyjϕ(xj),我们令 g(x)=wϕ(x)+b=j=1mαiyjK(x,xj)+b,则有:
(3)αi=0yig(xi)10<αi<Cyig(xi)=1αi=Cyig(xi)1
   


SMO算法的基本思想

   上面这个优化式子比较复杂,里面有m个变量组成的向量 α 需要在目标函数极小化的时候求出。直接优化时很难的。SMO算法则采用了一种启发式的方法。它每次只优化两个变量,将其他的变量都视为常数。由于 i=1mαiyi=0.假如将 α3,α4,...,αm固定,那么 α1,α2之间的关系也确定了。这样SMO算法将一个复杂的优化算法转化为一个比较简单的两变量优化问题。
   
   为了后面表示方便,我们定义 Kij=ϕ(xi)ϕ(xj)
   
   由于 α3,α4,...,αm都成了常量,所有的常量我们都从目标函数去除,这样我们上一节的目标优化函数变成下式:

minα1,α212K11α12+12K22α22+y1y2K12α1α2(α1+α2)+y1α1i=3myiαiKi1(1)+y2α2i=3myiαiKi2(2)s.t.α1y1+α2y2=i=3myiαi=ς(3)0αiCi=1,2
   


SMO算法目标函数的优化

   本部分的总体思路:首先将目标函数看作是一个关于 α1,α2的二元二次函数 W(α1,α2),然后通过条件 α1y1+α2y2=ς将目标函数转化为一个关于 α2的一元二次函数 W(α2),我们的最终目标是求出 W(α2)在参数 α2可行域范围内的函数最小值。
  下文第一部分先求出 W(α2)的极值点 α2new,unclipped。下文第二部分根据约束条件
( α1y1+α2y2=ς,0αiCi=1,2)求出 α2的可行域。下文第三部分,分类讨论一元二次函数 W(α2)的最优解 α2 α2的可行域边界取得还是在极值点取得。第四部分通过 α1,α2的关系,由 α2求出 α1.

1. 不考虑约束条件( α1y1+α2y2=ς,0αiCi=1,2),对目标函数求极值点

   首先我们的目标函数是一个二元二次函数:

(4)W(α1,α2)=12K11α12+12K22α22+y1y2K12α1α2(α1+α2)(5)+y1α1i=3myiαiKi1+y2α2i=3myiαiKi2(6)=12K11α12+12K22α22+y1y2K12α1α2(α1+α2)+y1α1v1+y2α2v2

其中

(4){vi=j=3myjαjKij=g(xi)j=12yjajkijb,i=1,2g(x)=wϕ(x)+b=j=1mαiyjK(x,xj)+b

   由于 α1y1+α2y2=ς,并且 yi2=1,可以得到用 α2表达 α1的式子:

(7)α1=y1(ςα2y2)
 
   将上式带入我们的目标优化函数,就可以消除 α1,得到仅仅包含 α2的式子为:
(8)W(α2)=12K11(ςa2y2)2+12K22α22+y2K12(ςa2y2)α2(y1(ςα2y2)+α2)(9)+(ςa2y2)v1+y2α2v2
 
 
   显然 W(α2)是一个一元二次方程,最优解α2只能是约束条件( 0αiC)规定的可行域的边界值,或者是 W(α2)的极值点。现在我们先对其求极值点,即对 α2求导并令为0得:
(10)W(α2)α2=(K11+K222K12)α2K11ςy2+K12ςy2+y1y21(5)v1y2+v2y2=0
  
   这时候我们定义 Ei表示预测值 g(xi)与真实值 yi之差:
(6)Ei=g(xi)yi
     
   这时我们记优化前的解为 α1old,α2old,优化后的解为 α1new,α2new,由约束条件 i=1myiαi=0,有 α1oldy1+α2oldy2=α1newy1+α1newy2=ς ,即
(7)α1newy1+α1newy2=ς
 
进行下一步化简,将式子(4)(6)(7)代入式子(5),此时求解出的 α2new未考虑约束条件( 0αiC),先记为 α2new,unclipped
(8)(K11+K222K12)α2new,unclipped=(K11+K222K12)α2old+y2(E1E2)
 
   我们终于得到了 α2new,unclipped的表达式:
(9)α2new,unclipped=α2old+y2(E1E2)K11+K222K12
 

2. 由约束条件( α1y1+α2y2=ς,0αiCi=1,2)求出 α2的可行域   

   上面求出的 α2new,unclipped没考虑到的约束条件为:

{0αi=1,2Cα1y1+α2y2=ς
  
   在二维平面上直观表达上述两个约束条件 :
   【机器学习】支持向量机原理(四)SMO算法原理
   
   根据式子 α1y1+α2y2=ς,和 y1,y2只能取值 +11,共有四种情况:
   
(1)当 y1=1,y2=1,此时的表达式为 α1y1+α2y2=ς,那么对应上图中的右边情况。根据 ς的不同取值,我们可以分为下面几种情况来求 α2的可行域:

  1.  ς<0,因为 0αiC,所以此时 α1y1+α2y2=ς与方形区域一定没有任何交集,所以此时 α2的可行域为空集.
  2.  ς=0,此时 α1y1+α2y2=0,此时与方形区域的交点就是(0,0),那么可行域就是 α2=0.
  3.  0ςC时,此时对应上图中右边的靠下的那种直线的情况,所以根据直线和方形区域的相交情况,此时可以求出 α2的可行区间为 [0,ς],即 [0,α1+α2].
  4.  Cς2C时,可以求出此时对应上图右边情况靠上的那种直线,所以此时可以求出的可行区间为 [ςC,C][α1+α2C,C]
  5.  ς2C时,可行域为空寂,且这种情况也不会发生。

综上所述,当 y1=1y2=1时,此时的 α2可行域在存在的情况下(即不考虑 ς<0ς2C),其实可以这样表示它的区间:

[max(0,α1+α2C),min(C,α1+α2)]
 
(2)当 y1=1y2=1 时,此时的表达式是 α1+α2=ς,那么首先此时的 ς0,此时的各种分类其情况和上面的(1)类似。

(3)当 y1=1y2=1时,此时的表达式是 α1α2=ς,根据 ς的不同取值,我们可以分为下面几种情况来求 α2的可行域:

  1.  ς>Cς<C时,此时直线与方形区域没有交点,所以此时 α2可行域为空集.
  2.  0<ςC 时,此时对应上面的左图中的靠下的那种直线的情况,此时可以计算出 α2[0Cα1+α2] .
  3.  Cς0时,此时对应左图中靠上的那种直线的情况,此时可计算出 alpha2[α2α1,C]

综上所述, α2[max(0,α1α2),min(C,Cα2+α2)]

(4)当 y1=1y2=1时,情况和(3)类似。

我们设 α2的可行域为 α2[L,H],结合上述(1)~(4)种情况,我们得出不同情况下 α2可行域的边界值L、H:

  1.  y1y2L=max0,α2oldα1oldH=min(C,C+α2oldα1old)
  2.  y1=y2L=max0,α1old+α2oldCH=min(C,α2old+α1old)

3. 对 α2new,unclipped进行修剪 

   好了,目前为止我们手头上有一元二次函数 W(α2)的极值点 α2new,unclipped,和 α2的可行域的边界值L,H。
   下文根据 α2的可行域和一元二次函数 W(α2)的开口方向,讨论 W(α2)在何处取得最小值,共分为3种情况:

(1)无论一元二次函数 W(α2)的开口向上还是向下,只要极值点不在可行域内,该函数的最小值就在可行域的边界值取得,这种情况我们只需要比较 W(L)W(H)的大小,然后取小者就是函数的最小值。

(2)如果 W(α2)的开口向上,且极值点在可行域内,则函数最小值为极值点。
   
(3)如果 W(α2)的开口向下,该函数的最小值就在可行域的边界值取得,这种情况我们只需要比较 W(L)W(H)的大小,然后取小者就是函数的最小值。

   综合上述三种情况,就可以对 α2new,unclipped进行修剪了,最优解就可以记为 α2new

α2new={Hα2new,unclipped>Hα2new,unclippedLα2new,unclippedHLα2new,unclipped<L

4. 通过 α2new求解 α1new 

   由 α1oldy1+α2oldy2=α1newy1+α2newy2=ς得:

(11)α1new=α1old+y1y2(α2oldα2new)
 


SMO算法两个变量的选择

1.第一个变量的选择

   第一个变量的选择称为外循环,首先遍历整个样本集,选择违反KKT条件的 αi作为第一个变量,接着依据相关规则选择第二个变量(见下面分析),对这两个变量采用上述方法进行优化。当遍历完整个样本集后,遍历非边界样本集 (0<αi<C)中违反KKT的 αi作为第一个变量,同样依据相关规则选择第二个变量,对此两个变量进行优化。当遍历完非边界样本集后,再次回到遍历整个样本集中寻找,即在整个样本集与非边界样本集上来回切换,寻找违反KKT条件的 αi作为第一个变量。直到遍历整个样本集后,没有违反KKT条件 αi,然后退出。
   边界上的样本对应的 αi=0或者 αi=C,在优化过程中很难变化。然而非边界样本 (0<αi<C)会随着对其他变量的优化会有大的变化。
   
【机器学习】支持向量机原理(四)SMO算法原理

2.第二个变量的选择

   SMO称第二个变量的选择过程为内循环,假设在外循环中找个第一个变量记为 α1,第二个变量的选择希望能使 α2有较大的变化,由于 α1是依赖于 |E1E2|,当 E1为正时,那么选择最小的 Ei作为 E2。如果 E1为负,选择最大 Ei作为 E2,通常为每个样本的 Ei保存在一个列表中,选择最大的 |E1E2|来近似最大化步长。
   
   有时按照上述的启发式选择第二个变量,不能够使得函数值有足够的下降,这时按下述步骤:

首先在非边界集上选择能够使函数值足够下降的样本作为第二个变量;
如果非边界集上没有,则在整个样本集上选择第二个变量;
如果整个样本集依然不存在,则重新选择第一个变量;


计算阈值 bnew、差值 Ei

   每完成对两个变量的优化后,要对b的值进行更新,因为b的值关系到预测值 g(x)的计算,即关系到下次优化时 Ei的计算。 

求解  bnew的4种情况  

   1. 如果 0<α1new<C,由KKT条件 y1(wTx1+b)=1,且 yi2=1,得到 i=1mαiyiKi1+b=yi,所有有:

(12)b1new=y1i=3mαiyiKi1α1newy1K11α2newy2K21

将式子(6)代入上式子,得:
(13)b1new=E1y1K11(α1newα1old)y2K21(α2newα2old)+bold

   2. 如果 0<α2new<C,则:
(14)b2new=E2y1K12(α1newα1old)y2K22(α2newα2old)+bold
   
   3. 如果 α1,α2同时满足 0<αinew<C,则:
(15)b1new=b2new
    
   4. 如果 α1,α2同时不满足 0<α1,2new<C,那么 b1new b2new以及它们之间的数都是符合KKT条件的阈值,这时选择它们的中点作为 bnew

更新差值 Ei 

   根据式子(4),(6),得到:

(16)Ei=g(xi)yi=j=1mαiyjK(x,xj)+bnewyi
   


SMO算法总结

   输入是m个样本 (x1,y1),(x2,y2),...,(xm,ym),其中 x n维特征向量。y为二元输出,值为+1或-1。精度e.
   输出值是近似解,向量 α.
   
   1) 取初值 α0=0,k=0 α的上标表示迭代轮数, k 表示当前迭代为第 k 轮.
   
   2) 按照上文的方法依次选取两个参数  α1k,α2k,求出新的 α2k+1,unclipped.

α2k+1,unclipped=α2k+y2(E1E2)K11+K222K12
 
   
   3)求出 α2可行域的边界值 L,H:
L,H={y1y2L=max0,α2kα1kH=min(C,C+α2kα1k)y1=y2L=max0,α1k+α2kCH=min(C,α2k+α1k)

   3)对 α2k+1,unclipped进行修剪:

α2k+1={Hα2k+1,unclipped>Hα2k+1,unclippedLα2k+1,unclippedHLα2k+1,unclipped<L
   

   4)求出 α1k+1

(17)α1k+1=α1k+y1y2(α2kα2k+1)
 

   5)按照上文的规则,求出 bk+1,并更新 Ei

(18)Ei=g(xi)yi=j=1mαiyjK(x,xj)+bk+1yi
   
   6)转至步骤2),进入下一轮优化。直到遍历整个样本集后,没有违反KKT条件 αi,然后退出算法。

   

参考资料

1.支持向量机原理(四)SMO算法原理
2.第三部分:SMO算法的个人理解
3.【机器学习详解】SMO算法剖析