SMO算法原理


1. 回顾SVM优化目标函数

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

min(α)12i=1,j=1mαiαjyiyjK(xi,xj)i=1mαi min(\alpha)\;\; \frac{1}{2}\sum\limits_{i=1,j=1}^{m}\alpha_i\alpha_jy_iy_jK(x_i,x_j) - \sum\limits_{i=1}^{m}\alpha_i

s.t.i=1mαiyi=0 s.t. \; \sum\limits_{i=1}^{m}\alpha_iy_i = 0

0αiC 0 \leq \alpha_i \leq C

我们的解要满足的KKT条件的对偶互补条件为:αi(yi(wϕ(xi)+b)1)=0\alpha_{i}^{*}(y_i(w^{*} \bullet \phi(x_i) + b^{*}) - 1) = 0

根据这个KKT条件的对偶互补条件,我们有: αi=0yi(wϕ(xi)+b)1 \alpha_{i}^{*} = 0 \Rightarrow y_i(w^{*} \bullet \phi(x_i) + b) \geq 1 0αiCyi(wϕ(xi)+b)=1 0 \leq \alpha_{i}^{*} \leq C \Rightarrow y_i(w^{*} \bullet \phi(x_i) + b) = 1

αi=Cyi(wϕ(xi)+b)1 \alpha_{i}^{*}= C \Rightarrow y_i(w^{*} \bullet \phi(x_i) + b) \leq 1 由于w=j=1mαjyjϕ(xj)w^{*} = \sum\limits_{j=1}^{m}\alpha_j^{*}y_j\phi(x_j),我们令g(x)=wϕ(x)+b=j=1mαjyjK(x,xj)+bg(x) = w^{*} \bullet \phi(x) + b =\sum\limits_{j=1}^{m}\alpha_j^{*}y_jK(x, x_j)+ b^{*},则有: αi=0yig(xi)1 \alpha_{i}^{*} = 0 \Rightarrow y_ig(x_i) \geq 1 0αiCyig(xi)=1 0 \leq \alpha_{i}^{*} \leq C \Rightarrow y_ig(x_i) = 1 αi=Cyig(xi)1 \alpha_{i}^{*}= C \Rightarrow y_ig(x_i) \leq 1

2. SMO算法的基本思想

上面这个优化式子比较复杂,里面有m个变量组成的向量α\alpha需要在目标函数极小化的时候求出。直接优化时很难的。SMO算法则采用了一种启发式的方法。它每次只优化两个变量,将其他的变量都视为常数。由于i=1mαiyi=0\sum\limits_{i=1}^{m}\alpha_iy_i = 0.假如将α3,α4,...,αm\alpha_3, \alpha_4, ..., \alpha_m 固定,那么α1,α2\alpha_1, \alpha_2之间的关系也确定了。这样SMO算法将一个复杂的优化算法转化为一个比较简单的两变量优化问题。

为了后面表示方便,我们定义Kij=ϕ(xi)ϕ(xj)K_{ij} = \phi(x_i) \bullet \phi(x_j)

由于α3,α4,...,αm\alpha_3, \alpha_4, ..., \alpha_m都成了常量,所有的常量我们都从目标函数去除,这样我们上一节的目标优化函数变成下式: min(α1,α1)12K11α12+12K22α22+y1y2K12α1α2(α1+α2)+y1α1i=3myiαiKi1+y2α2i=3myiαiKi2 min(\alpha_1, \alpha_1)\;\; \frac{1}{2}K_{11}\alpha_1^2 + \frac{1}{2}K_{22}\alpha_2^2 +y_1y_2K_{12}\alpha_1 \alpha_2 -(\alpha_1 + \alpha_2) +y_1\alpha_1\sum\limits_{i=3}^{m}y_i\alpha_iK_{i1} + y_2\alpha_2\sum\limits_{i=3}^{m}y_i\alpha_iK_{i2} s.t.α1y1+α2y2=i=3myiαi=ς s.t. \;\;\alpha_1y_1 + \alpha_2y_2 = -\sum\limits_{i=3}^{m}y_i\alpha_i = \varsigma 0αiCi=1,2 0 \leq \alpha_i \leq C \;\; i =1,2

3. SMO算法目标函数的优化

为了求解上面含有这两个变量的目标优化问题,我们首先分析约束条件,所有的α1,α2\alpha_1, \alpha_2都要满足约束条件,然后在约束条件下求最小。

根据上面的约束条件α1y1+α2y2=ς0αiCi=1,2\alpha_1y_1 + \alpha_2y_2 = \varsigma\;\;0 \leq \alpha_i \leq C \;\; i =1,2,又由于y1,y2y_1,y_2均只能取值1或者-1, 这样α1,α2\alpha_1, \alpha_2在[0,C]和[0,C]形成的盒子里面,并且两者的关系直线的斜率只能为1或者-1,也就是说α1,α2\alpha_1, \alpha_2的关系直线平行于[0,C]和[0,C]形成的盒子的对角线,如下图所示:

由于α1,α2\alpha_1, \alpha_2的关系被限制在盒子里的一条线段上,所以两变量的优化问题实际上仅仅是一个变量的优化问题。不妨我们假设最终是α2\alpha_2的优化问题。由于我们采用的是启发式的迭代法,假设我们上一轮迭代得到的解是α1old,α2old\alpha_1^{old}, \alpha_2^{old},假设沿着约束方向α2\alpha_2未经剪辑的解是α2new,unc\alpha_2^{new,unc}.本轮迭代完成后的解为α1new,α2new\alpha_1^{new}, \alpha_2^{new}

由于α2new\alpha_2^{new}必须满足上图中的线段约束。假设L和H分别是上图中α2new\alpha_2^{new}所在的线段的边界。那么很显然我们有:Lα2newHL \leq \alpha_2^{new} \leq H

而对于L和H,我们也有限制条件如果是上面左图中的情况,则 L=max(0,α2oldα1old)H=min(C,C+α2oldα1old) L = max(0, \alpha_2^{old}-\alpha_1^{old}) \;\;\;H = min(C, C+\alpha_2^{old}-\alpha_1^{old}) 如果是上面右图中的情况,我们有: L=max(0,α2old+α1oldC)H=min(C,α2old+α1old) L = max(0, \alpha_2^{old}+\alpha_1^{old}-C) \;\;\; H = min(C, \alpha_2^{old}+\alpha_1^{old}) 也就是说,假如我们通过求导得到的α2new,unc\alpha_2^{new,unc},则最终的α2new\alpha_2^{new}应该为:

α2new={HLα2new,unc>Hα2new,uncLα2new,uncHLα2new,unc<L\alpha_2^{new}= \begin{cases} H& {L \leq \alpha_2^{new,unc} > H}\\ \alpha_2^{new,unc}& {L \leq \alpha_2^{new,unc} \leq H}\\ L& {\alpha_2^{new,unc} < L} \end{cases}

那么如何求出α2new,unc\alpha_2^{new,unc}呢?很简单,我们只需要将目标函数对α2\alpha_2求偏导数即可。

首先我们整理下我们的目标函数。

为了简化叙述,我们令Ei=g(xi)yi=j=1mαjyjK(xi,xj)+byiE_i = g(x_i)-y_i = \sum\limits_{j=1}^{m}\alpha_j^{*}y_jK(x_i, x_j)+ b - y_i

其中g(x)就是我们在第一节里面的提到的g(x)=wϕ(x)+b=j=1mαjyjK(x,xj)+bg(x) = w^{*} \bullet \phi(x) + b =\sum\limits_{j=1}^{m}\alpha_j^{*}y_jK(x, x_j)+ b^{*}

我们令vi=i=3myjαjK(xi,xj)=g(xi)i=12yjαjK(xi,xj)bv_i = \sum\limits_{i=3}^{m}y_j\alpha_jK(x_i,x_j) = g(x_i) - \sum\limits_{i=1}^{2}y_j\alpha_jK(x_i,x_j) -b

这样我们的优化目标函数进一步简化为:W(α1,α2)=12K11α12+12K22α22+y1y2K12α1α2(α1+α2)+y1α1v1+y2α2v2W(\alpha_1,\alpha_2) = \frac{1}{2}K_{11}\alpha_1^2 + \frac{1}{2}K_{22}\alpha_2^2 +y_1y_2K_{12}\alpha_1 \alpha_2 -(\alpha_1 + \alpha_2) +y_1\alpha_1v_1 + y_2\alpha_2v_2

由于α1y1+α2y2=ς\alpha_1y_1 + \alpha_2y_2 = \varsigma,并且yi2=1y_i^2 = 1,可以得到α1\alpha_1α2\alpha_2表达的式子为:α1=y1(ςα2y2)\alpha_1 = y_1(\varsigma - \alpha_2y_2)

将上式带入我们的目标优化函数,就可以消除α1\alpha_1,得到仅仅包含α2\alpha_2的式子。W(α2)=12K11(ςα2y2)2+12K22α22+y2K12(ςα2y2)α2(α1+α2)+(ςα2y2)v1+y2α2v2W(\alpha_2) = \frac{1}{2}K_{11}(\varsigma - \alpha_2y_2)^2 + \frac{1}{2}K_{22}\alpha_2^2 +y_2K_{12}(\varsigma - \alpha_2y_2) \alpha_2 -(\alpha_1 + \alpha_2) +(\varsigma - \alpha_2y_2)v_1 + y_2\alpha_2v_2

忙了半天,我们终于可以开始求α2new,unc\alpha_2^{new,unc}了,现在我们开始通过求偏导数来得到α2new,unc\alpha_2^{new,unc}

Wα2=K11α2+K22α22K12α2K11ςy2+K12ςy2+y1y21v1y2+y2v2=0\frac{\partial W}{\partial \alpha2} = K{11}\alpha2 + K{22}\alpha2 -2K{12}\alpha2 - K{11}\varsigma y2 + K{12}\varsigma y_2 +y_1y_2 -1 -v_1y_2 +y_2v_2 = 0

整理上式有:(K11+K222K12)α2=y2(y2y1+ςK11ςK12+v1v2)( K{11} +K{22}-2K{12})\alpha_2 = y_2(y_2-y_1 + \varsigma K{11} - \varsigma K_{12} + v_1 - v_2)

=y2(y2y1+ςK11ςK12+(g(x1)j=12yjαjK1jb)(g(x2)j=12yjαjK2jb))= y_2(y_2-y_1 + \varsigma K_{11} - \varsigma K_{12} + (g(x_1) - \sum\limits_{j=1}^{2}y_j\alpha_jK_{1j} -b ) -(g(x_2) - \sum\limits_{j=1}^{2}y_j\alpha_jK_{2j} -b))

ς=α1y1+α2y2\varsigma = \alpha_1y_1 + \alpha_2y_2带入上式,我们有:

(K11+K222K12)α2new,unc=y2((K11+K222K12)α2oldy2+y2y1+g(x1)g(x2))(K_{11} +K_{22}-2K_{12})\alpha_2^{new,unc} = y_2((K_{11} +K_{22}-2K_{12})\alpha_2^{old}y_2 +y_2-y_1 +g(x_1) - g(x_2))

=(K11+K222K12)α2old+y2(E1E2)\;\;\;\; = (K_{11} +K_{22}-2K_{12}) \alpha_2^{old} + y2(E_1-E_2)

我们终于得到了α2new,unc\alpha_2^{new,unc}的表达式:α2new,unc=α2old+y2(E1E2)K11+K222K12)\alpha_2^{new,unc} = \alpha_2^{old} + \frac{y2(E_1-E_2)}{K_{11} +K_{22}-2K_{12})}

利用上面讲到的α2new,unc\alpha_2^{new,unc}α2new\alpha_2^{new}的关系式,我们就可以得到我们新的α2new\alpha_2^{new}了。利用α2new\alpha_2^{new}α1new\alpha_1^{new}的线性关系,我们也可以得到新的α1new\alpha_1^{new}

4. SMO算法两个变量的选择

SMO算法需要选择合适的两个变量做迭代,其余的变量做常量来进行优化,那么怎么选择这两个变量呢?

4.1 第一个变量的选择

SMO算法称选择第一个变量为外层循环,这个变量需要选择在训练集中违反KKT条件最严重的样本点。对于每个样本点,要满足的KKT条件我们在第一节已经讲到了: αi=0yig(xi)1 \alpha_{i}^{*} = 0 \Rightarrow y_ig(x_i) \geq 1 0αiCyig(xi)=1 0 \leq \alpha_{i}^{*} \leq C \Rightarrow y_ig(x_i) =1 αi=Cyig(xi)1 \alpha_{i}^{*}= C \Rightarrow y_ig(x_i) \leq 1 一般来说,我们首先选择违反0αiCyig(xi)=10 \leq \alpha_{i}^{*} \leq C \Rightarrow y_ig(x_i) =1这个条件的点。如果这些支持向量都满足KKT条件,再选择违反αi=0yig(xi)1\alpha_{i}^{*} = 0 \Rightarrow y_ig(x_i) \geq 1 αi=Cyig(xi)1\alpha_{i}^{*}= C \Rightarrow y_ig(x_i) \leq 1的点。

4.2 第二个变量的选择

SMO算法称选择第二个变量为内层循环,假设我们在外层循环已经找到了α1\alpha_1, 第二个变量α2\alpha_2的选择标准是让|E1-E2|有足够大的变化。由于α1\alpha_1定了的时候,E1E_1也确定了,所以要想|E1-E2|最大,只需要在E1E_1为正时,选择最小的EiE_i作为E2E_2, 在E1E_1为负时,选择最大的EiE_i作为E2E_2,可以将所有的EiE_i保存下来加快迭代。

如果内存循环找到的点不能让目标函数有足够的下降, 可以采用遍历支持向量点来做α2\alpha_2,直到目标函数有足够的下降, 如果所有的支持向量做α2\alpha_2都不能让目标函数有足够的下降,可以跳出循环,重新选择α1\alpha_1

4.3 计算阈值b和差值E_i

在每次完成两个变量的优化之后,需要重新计算阈值b。当0α1newC0 \leq \alpha_{1}^{new} \leq C时,我们有y1i=1mαiyiKi1b1=0y_1 - \sum\limits_{i=1}^{m}\alpha_iy_iK_{i1} -b_1 = 0

于是新的b1newb_1^{new}为:b1new=y1i=3mαiyiKi1α1newy1K11α2newy2K21b_1^{new} = y_1 - \sum\limits_{i=3}^{m}\alpha_iy_iK_{i1} - \alpha_{1}^{new}y_1K_{11} - \alpha_{2}^{new}y_2K_{21}

计算出E1E_1为:E1=g(x1)y1=i=3mαiyiKi1+α1oldy1K11+α2oldy2K21+boldy1E_1 = g(x_1) - y_1 = \sum\limits_{i=3}^{m}\alpha_iy_iK_{i1} + \alpha_{1}^{old}y_1K_{11} + \alpha_{2}^{old}y_2K_{21} + b^{old} -y_1

可以看到上两式都有y1i=3mαiyiKi1y_1 - \sum\limits_{i=3}^{m}\alpha_iy_iK_{i1},因此可以将b1newb_1^{new}E1E_1表示为:b1new=E1y1K11(α1newα1old)y2K21(α2newα2old)+boldb_1^{new} = -E_1 -y_1K_{11}(\alpha_{1}^{new} - \alpha_{1}^{old}) -y_2K_{21}(\alpha_{2}^{new} - \alpha_{2}^{old}) + b^{old}

同样的,如果0α2newC0 \leq \alpha_{2}^{new} \leq C, 那么有:b2new=E2y1K12(α1newα1old)y2K22(α2newα2old)+boldb_2^{new} = -E_2 -y_1K_{12}(\alpha_{1}^{new} - \alpha_{1}^{old}) -y_2K_{22}(\alpha_{2}^{new} - \alpha_{2}^{old}) + b^{old}

最终的bnewb^{new}为:bnew=b1new+b2new2b^{new} = \frac{b_1^{new} + b_2^{new}}{2}

得到了bnewb^{new}我们需要更新Ei:Ei=SyjαjK(xi,xj)+bnewyiE_i:E_i = \sum\limits_{S}y_j\alpha_jK(x_i,x_j) + b^{new} -y_i

其中,S是所有支持向量xjx_j的集合。

好了,SMO算法基本讲完了,我们来归纳下SMO算法。

5. SMO算法总结

输入是m个样本(x1,y1),(x2,y2),...,(xm,ym),{(x_1,y_1), (x_2,y_2), ..., (x_m,y_m),},其中x为n维特征向量。y为二元输出,值为1,或者-1.精度e。

输出是近似解\alpha

1)取初值α0=0,k=0\alpha^{0} = 0, k =0

2)按照4.1节的方法选择α1k\alpha_1^k,接着按照4.2节的方法选择α2k\alpha_2^k,求出新的α2new,unc\alpha_2^{new,unc}α2new,unc=α2k+y2(E1E2)K11+K222K12)\alpha_2^{new,unc} = \alpha_2^{k} + \frac{y_2(E_1-E_2)}{K_{11} +K_{22}-2K_{12})}

3)按照下式求出α2k+1\alpha_2^{k+1}

α2k+1={HLα2new,unc>H α2new,uncLα2new,uncH Lα2new,unc<L\alpha_2^{k+1}= \begin{cases} H& {L \leq \alpha_2^{new,unc} > H}\ \alpha_2^{new,unc}& {L \leq \alpha_2^{new,unc} \leq H}\ L& {\alpha_2^{new,unc} < L} \end{cases}

4)利用α2k+1\alpha_2^{k+1}α1k+1\alpha_1^{k+1}的关系求出α1k+1\alpha_1^{k+1}

5)按照4.3节的方法计算bk+1b^{k+1}EiE_i

6)在精度e范围内检查是否满足如下的终止条件: i=1mαiyi=0 \sum\limits_{i=1}^{m}\alpha_iy_i = 0 0αiC,i=1,2...m 0 \leq \alpha_i \leq C, i =1,2...m αik+1=0yig(xi)1 \alpha_{i}^{k+1} = 0 \Rightarrow y_ig(x_i) \geq 1 0αik+1Cyig(xi)=1 0 \leq \alpha_{i}^{k+1} \leq C \Rightarrow y_ig(x_i) = 1 αik+1=Cyig(xi)1 \alpha_{i}^{k+1}= C \Rightarrow y_ig(x_i) \leq 1 7)如果满足则结束,返回αk+1\alpha^{k+1},否则转到步骤2)。

results matching ""

    No results matching ""