序列最小最优化算法(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)$

         $0\leq a_i\leq 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_1\sum_{i=3}^{n}y_ia_iK_{i1}+y_2a_2\sum_{i=3}^ny_ia_iK_{i2}+C \ \ (4)$

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

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

 

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

 

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

 

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

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

其中,$0\leq a_i\leq 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)中的不等式约束。因此,有$L\leq a_{2}^{new}\leq H$。其中L和H分别为$a_{2}^{new}$的上界和下界。

 

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

若$k\geq C$,则$C\leq a_1+a_2\leq 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\ne y_2$时,若$k<0$,那么$-C\leq a_1-a_2<0$,可以得到$L=0, \ H=C+a_{2}^{old}-a_{1}^{old}$

若$k\geq 0$,那么$0\leq a_1-a_2\leq 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\rightarrow \ a_1y_1y_1=(\xi-y_2a_2)y_1 \rightarrow \ 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_2\sum_{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\{\begin{aligned}H&,& \ \ a_{2}^{new,unc}>H\\a_{2}^{new,unc}&,& \ L\leq a_{2}^{new,unc}\leq H\\L&,& a_{2}^{new,unc}<L\end{aligned}\right.$

由$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

 

posted on 2016-06-13 16:52  weibao  阅读(696)  评论(1编辑  收藏  举报