序列最小最优化算法(SMO)-SVM的求解(续)

在前一篇文章中,我们给出了感知器和逻辑回归的求解,还将SVM算法的求解推导到了最后一步,在这篇文章里面,我们将给出最后一步的求解。也就是我们接下来要介绍的序列最小最优化算法。

  

序列最小最优化算法(SMO):

首先回顾一下。我们使用广义拉格朗日函数,将目标函数和限制条件写到一起,然后证明了原始问题能够转化成对偶问题来求解。并且使用KKT条件将对偶问题化简,得到下面的问题(以非线性可分SVM的研究问题作为例子,求解):

$max limits_{a} -frac{1}{2}sum_{i=1}^{n}sum_{j=1}^{n}a_ia_jy_iy_jK(x_i,x_j)+sum_{i=1}^{n}a_i (1)$

$s.t. sum_{i=1}^{n}a_iy_i=0 (2)$

         $0leq a_ileq C, i=1,2,....,n (3)$

事实上,上面的问题完全可以使用梯度下降等类似的办法进行解决。但是,当训练样本过大的时候,这些算法往往变得低效,以至于无法使用。为了高效地实现支持向量机,1998年,Platt提出了SMO算法。

这个算法的基本思路是:如果所有的变量都满足KKT条件,那么,这个最优化问题的解就已经得到了。(谁叫KKT条件是该最优化问题的充要条件呢)否则的话。我们从上面式子中的(2)式入手。

SMO希望先固定其他的变量,然后改变(2)中的一部分变量。显然,如果只改变一个变量,固定剩下的n-1个变量,由于等式的限制,实际上不能改变任何变量。所以,至少需要改变两个变量。(为什么不改变更多的变量呢?改变更多的变量意味着问题变得更复杂,所以,改变其中两个,然后固定剩余n-2个是比较合理的选择)

所以,我们从式子(2)出发,从中选择两个变量($a_i$和$a_j$)。这时候,问题来了,该怎么选?

很明显,如果 已经满足的KKT条件,我们就没有必要对其进行更新了。需要更新的变量,必然是违反了KKT条件的变量。SMO算法的策略是:优先更新违反KKT条件最严重的 ,作为选择的第一个变量。

那么,用什么来衡量是否违反KKT条件的程度呢?要判断结果是否正确,我们得先知道正确的结果是什么。下面列出了满足KKT条件时,$a_i$和$y_ig(x_i)$应该满足的关系。

$a_i=0 iff y_ig(x_i)geq 1$

$0<a_i<C iff y_ig(x_i)=1$

$a_i=C iff y_ig(x_i)leq 1$

其中,$g(x_i)=sum_{j=1}^{N}a_jy_jK(x_i,x_j)+b$

我们是在误差为$xi$的范围内检查 是否满足KKT条件。具体的检验过程中,先检查$0<a_i<C$的样本,即间隔边界上面的样本,如果这些样本都满足KKT条件,再检查剩余的样本是否满足KKT条件。

得到第一个变量后,我们继续来确定第二个变量:

与第一个变量不同的地方是,第二个变量的选择标准,是希望能够使第二个变量有足够大的变化,也就是其改变量应该大于一定的阈值。如果选定了$a_i$后,不能找到有足够改变量的$a_j$,则选择一个新的$a_i$。

下面,通过例子来说明SMO的算法:

不妨设选择的两个变量是$a_1,a_2$,其他变量$a_i(i=3,4,5,6...,n)$固定为常量。于是(1)式可以改写为:

$max limits_{a_1,a_2} -frac{1}{2}sum_{i=1}^{n}sum_{j=1}^{n}a_ia_jy_iy_jK(x_i,x_j)+sum_{i=1}^{n}a_i$

即:$min limits_{a_1,a_2} W(a_1,a_2)=frac{1}{2}sum_{i=1}^{n}sum_{j=1}^{n}a_ia_jy_iy_jK(x_i,x_j)-sum_{i=1}^{n}a_i$

化简得到:

$min limits_{a_1,a_2} W(a_1,a_2)=frac{1}{2}K_{11}a_{1}^2+frac{1}{2}K_{22}a_{2}^2+y_1y_2K_{12}a_1a_2-(a_1+a_2)+y_1a_1sum_{i=3}^{n}y_ia_iK_{i1}+y_2a_2sum_{i=3}^ny_ia_iK_{i2}+C (4)$

$s.t. a_1y_1+a_2y_2=xi (5)$

         $0leq a_ileq C, i=1,2 (6)$

于是,SMO算法的关键步骤就变成了:求解两个变量的二次规划问题

由于$y_1,y_2in {+1,-1}$,所以,首先对y进行分类讨论:

当$y_1=y_2$时,(5)可以化简为:$a_1+a_2=k$

而$y_1 e y_2$时,(5)可以化简为:$a_1-a_2=k$

其中,$0leq a_ileq C, i=1,2$

因此,对上面的限制条件分类讨论:

由于$a_1,a_2$由等式联系在一起,因此,只需要知道其中一个值,另外一个就确定了。不妨假设初始可行解为$a_{1}^{old},a_{2}^{old}$,最优解为$a_{1}^{new},a_{2}^{new}$,并且在沿着约束方向未经剪辑时 的最优解为$a_{2}^{new,unc}$。

显然,$a_{2}^{new}$满足(6)中的不等式约束。因此,有$Lleq a_{2}^{new}leq H$。其中L和H分别为$a_{2}^{new}$的上界和下界。

当$y_1=y_2$时,若$k<C$,那么$0leq a_1+a_2<C$,可以得到$L=0, H=a_{1}^{old}+a_{2}^{old}$

若$kgeq C$,则$Cleq a_1+a_2leq 2C$,可以得到$L=k-C=a_{1}^{old}+a_{2}^{old}-C, H=C$

综合一下,得到:

$L=max(0,a_{1}^{old}+a_{2}^{old}-C), H=min(C,a_{1}^{old}+a_{2}^{old})$

同理,当$y_1 e y_2$时,若$k<0$,那么$-Cleq a_1-a_2<0$,可以得到$L=0, H=C+a_{2}^{old}-a_{1}^{old}$

若$kgeq 0$,那么$0leq a_1-a_2leq C$,可以得到$L=a_{1}^{old}-a_{2}^{old}, H=C$

综合一下,得到:

$L=max(0,a_{1}^{old}-a_{2}^{old}), H=min(C,C+a_{2}^{old}-a_{1}^{old})$

下面开始求解(4):

由(5)得:$a_1y_1=xi-y_2a_2 ightarrow a_1y_1y_1=(xi-y_2a_2)y_1 ightarrow a_1=(xi-y_2a_2)y_1$

将结果代入(4)得到:

$W(a_2)=frac{1}{2}K_{11}(xi-y_2a_2)^2+frac{1}{2}K_{22}a_{2}^2+y_1y_2K_{12}(xi-y_2a_2)a_2-((xi-y_2a_2)y_1+a_2)+(xi-y_2a_2)sum_{i=3}^{n}y_ia_iK_{i1}+y_2a_2sum_{i=3}^ny_ia_iK_{i2}+C$

对$a_2$求导数并令$frac{partial W}{partial a_2}=0$

最终得到下面的迭代公式:

$a_{2}^{new,unc}=a_{2}^{old}+frac{y_2(E_1-E_2)}{eta}$

其中:

$eta=K_{11}+K_{22}-2K_{12}$

$E_1=g(x_1)-y_1, E_2=g(x_2)-y_2$

$g(x_i)=sum_{j=1}^{n}a_jy_jK(x_j,x_i)+b$(b的计算会在后面继续讨论)

因此,可以得到剪辑后的解是:

$a_{2}^{new}=left{egin{aligned}H&,& a_{2}^{new,unc}>H\a_{2}^{new,unc}&,& Lleq a_{2}^{new,unc}leq H\L&,& a_{2}^{new,unc}<Lend{aligned} ight.$

由$a_{2}^{new}$求解$a_{1}^{new}$得:

                                               $a_{1}^{new}=a_{1}^{old}+y_1y_2(a_{2}^{old}-a_{2}^{new})$

 

还有一些细节:

在每一次完成两个变量的更新后,需要将$b_i, i=1,2$也更新。

$0<a_i<C$时,由$y_ig(x_i)=y_i(sum_{j=1}^{n}a_jy_jK(x_j,x_i)+b)=1$,两边同乘$y_i$,得到:

                   $sum_{j=1}^{n}a_jy_jK(x_j,x_i)+b=y_i, i=1,2$

由此,将$a_{1}^{new},a_{2}^{new}$代入后,可以分别解得$b_{1}^{new},b_{2}^{new}$。

当$a_{1}^{new},a_{2}^{new}$都满足$0<a_i<C$时,$b_{1}^{new}=b_{2}^{new}$

如果$a_{1}^{new},a_{2}^{new}$是0或者C,那么$b_{1}^{new},b_{2}^{new}$以及它们之间的数都满足KKT条件,这时候选择它们的中点作为$b^{new}$。

每次更新完后,需要对$E_i$更新,其中:$E_i=sum_{S}y_ia_iK(x_i,x_j)+b^{new}-y_i$,S是所有支持向量$x_j$的集合。

参考文献:

(1)李航 《统计学习方法》

(2)*

转载请注明:http://www.cnblogs.com/weibao/p/5581156.html

有任何问题,请联系weibao798@gmail.com