小菜君的SVM笔记之SMO算法

SMO序列最小最优化算法

SMO算法实际上用于SVM对偶问题求解中 α ∗ \boldsymbol{\alpha^*} α的确定。根据之前的推导,当求得 α ∗ \boldsymbol{\alpha^*} α使得对偶问题取得最大值时,即对偶问题取得最优解,同样的也是原始问题的最优解。SMO方法事实上和坐标上升/梯度下降的方法有所相似,都是固定部分变量,更新所需要的变量,不断迭代直至收敛的一种方法。

变量更新

首先,需要更新参数。为方便,注意到 max ⁡ L ( w , b , ξ , α , β ) = max ⁡ ∑ i = 1 n α i − 1 2 ∑ i = 1 n ∑ j = 1 n α i α j y i y j x i ⊤ x j \max L(\boldsymbol{w}, b,\boldsymbol{\xi},\boldsymbol{\alpha},\boldsymbol{\beta}) = \max\sum_{i=1}^{n}\alpha_i -\frac{1}{2}\sum_{i=1}^{n}\sum_{j=1}^{n}\alpha_i\alpha_j y_i y_j \boldsymbol{x_i}^\top \boldsymbol{x_j} maxL(w,b,ξ,α,β)=maxi=1nαi21i=1nj=1nαiαjyiyjxixj中存在 x i ⊤ x j \boldsymbol{x_i}^\top \boldsymbol{x_j} xixj在后续的算法过程中将其写成内积的形式,记为 K i , j K_{i, j} Ki,j(其实是前面提到过的核函数的形式…后续再进行引入)。
假设从 ( α 1 , α 2 ) (\alpha_1, \alpha_2) (α1,α2)开始,将其他变量固定,因此需要保留与 α 1 \alpha_1 α1 α 2 \alpha_2 α2有关的变量,设M为与 α 1 \alpha_1 α1 α 2 \alpha_2 α2无关的变量,由于固定,将其视作常数。此外,约束也要转换为对 α 1 \alpha_1 α1 α 2 \alpha_2 α2的约束。得到如下的有约束的关于 α 1 \alpha_1 α1 α 2 \alpha_2 α2的函数:
W ( α 1 , α 2 )   = α 1 + α 2 − 1 2 α 1 2 y 1 2 K 1 , 1 − 1 2 α 2 2 y 2 2 K 2 , 2 − α 1 α 2 y 1 y 2 K 1 , 2 − α 1 y 1 ∑ i = 3 n α i y i K 1 , i − α 2 y 2 ∑ i = 3 n α i y i K 2 , i + ∑ i = 3 n α i − 1 2 ∑ i = 3 n ∑ j = 3 n α i α j y i y j K i , j s . t .   0 ≤ α 1 ≤ C 0 ≤ α 2 ≤ C ∑ i n α i y i = 0 (1) \begin{aligned} W(\alpha_1, \alpha_2)\ =&\alpha_1+\alpha_2-\frac{1}{2}\alpha_1^2y_1^2K_{1,1}- \frac{1}{2}\alpha_2^2y_2^2K_{2,2}-\alpha_1\alpha_2y_1y_2K_{1,2}-\alpha_1y_1\sum_{i=3}^{n}\alpha_iy_iK_{1,i}\\ &-\alpha_2y_2\sum_{i=3}^{n}\alpha_iy_iK_{2,i} + \sum_{i=3}^{n}\alpha_i - \frac{1}{2}\sum_{i=3}^{n}\sum_{j=3}^{n}\alpha_i\alpha_jy_iy_jK_{i, j}\\ s.t.\ \quad &0 \le \alpha_1 \le C\\ &0 \le \alpha_2 \le C\\ &\sum_{i}^{n}\alpha_iy_i=0\tag1 \end{aligned} W(α1,α2) =s.t. α1+α221α12y12K1,121α22y22K2,2α1α2y1y2K1,2α1y1i=3nαiyiK1,iα2y2i=3nαiyiK2,i+i=3nαi21i=3nj=3nαiαjyiyjKi,j0α1C0α2Cinαiyi=0(1)

其中,为表示方便,将与 α 1 \alpha_1 α1 α 2 \alpha_2 α2无关的部分用字母表示,即记:
v 1 = ∑ i = 3 n α i y i K 1 , i v 2 = ∑ i = 3 n α i y i K 2 , i M = ∑ i = 3 n α i − 1 2 ∑ i = 3 n ∑ j = 3 n α i α j y i y j K i , j \begin{aligned} v_1 &= \sum_{i=3}^{n}\alpha_iy_iK_{1,i}\\ v_2 &= \sum_{i=3}^{n}\alpha_iy_iK_{2,i}\\ M &= \sum_{i=3}^{n}\alpha_i - \frac{1}{2}\sum_{i=3}^{n}\sum_{j=3}^{n}\alpha_i\alpha_jy_iy_jK_{i, j} \end{aligned} v1v2M=i=3nαiyiK1,i=i=3nαiyiK2,i=i=3nαi21i=3nj=3nαiαjyiyjKi,j

则函数1可写为:
W ( α 1 , α 2 )   = α 1 + α 2 − 1 2 α 1 2 y 1 2 K 1 , 1 − 1 2 α 2 2 y 2 2 K 2 , 2 − α 1 α 2 y 1 y 2 K 1 , 2 − α 1 y 1 v 1 − α 2 y 2 v 2 + M (2) \begin{aligned} W(\alpha_1, \alpha_2)\ =\alpha_1+\alpha_2-\frac{1}{2}\alpha_1^2y_1^2K_{1,1}- \frac{1}{2}\alpha_2^2y_2^2K_{2,2}-\alpha_1\alpha_2y_1y_2K_{1,2}-\alpha_1y_1v_1-\alpha_2y_2v_2 + M\tag2 \end{aligned} W(α1,α2) =α1+α221α12y12K1,121α22y22K2,2α1α2y1y2K1,2α1y1v1α2y2v2+M(2)

此时存在 α 1 \alpha_1 α1 α 2 \alpha_2 α2两个变量,需要根据两个变量之间的关系更新变量的值。设如公式1的优化问题初始的可行解为 ( α 1 o l d , α 2 o l d ) (\alpha_1^{old},\alpha_2^{old}) (α1old,α2old),最优解为 α 1 n e w , α 2 n e w ) \alpha_1^{new},\alpha_2^{new}) α1new,α2new)需要确定可行解和最优解的范围。
而根据之前的约束,可以得到 α 1 \alpha_1 α1 α 2 \alpha_2 α2之间的关系如公式3所示,并且可绘制出如下图所示的在定义域内的关系图。
α 1 y 1 + α 2 y 2 = − ∑ i = 3 n α i y i = ζ ⇒ α 1 y 1 y 2 + α 2 y 2 2 = y 2 ζ ⇒ α 1 = − y 1 y 2 α 2 + y 1 ζ (3) \begin{aligned} &\alpha_1y_1+\alpha_2y_2 = -\sum_{i=3}^{n}\alpha_iy_i = \zeta \\ &\Rightarrow \alpha_1y_1y_2+\alpha_2y_2^2 = y_2\zeta\\ &\Rightarrow \alpha_1 = -y_1y_2\alpha_2 + y_1\zeta\tag3 \end{aligned} α1y1+α2y2=i=3nαiyi=ζα1y1y2+α2y22=y2ζα1=y1y2α2+y1ζ(3)
小菜君的SVM笔记之SMO算法
由图可知,最优值位于正方形内的一条线段上,又因为 α 1 \alpha_1 α1 α 2 \alpha_2 α2之间存在关系,优化问题可以从原来的多变量优化问题转换为单变量的最优化问题。并且假设在上述两种情况中下界为L,上界为H,则,最优解 α 1 n e w \alpha_1^{new} α1new的取值范围为:
L ≤ α 1 n e w ≤ H L \le \alpha_1^{new} \le H Lα1newH

其中,若 y 1 y 2 = − 1 y_1y_2 = -1 y1y2=1,则 L = max ⁡ { 0 , y i ζ } , H = min ⁡ { C , C + y i ζ } L = \max\{0, y_i\zeta\}, H = \min\{C, C+y_i\zeta\} L=max{0,yiζ},H=min{C,C+yiζ},转换成用初始的可行解表示为 L = max ⁡ { 0 , α 1 o l d − α 2 o l d } , H = min ⁡ { C , C + α 1 o l d − α 2 o l d } L = \max\{0, \alpha_1^{old} - \alpha_2^{old}\}, H = \min\{C, C+\alpha_1^{old} - \alpha_2^{old}\} L=max{0,α1oldα2old},H=min{C,C+α1oldα2old};若 y 1 y 2 = 1 y_1y_2 = 1 y1y2=1,则 L = max ⁡ { 0 , α 1 o l d + α 2 o l d − C } , H = min ⁡ { C , α 1 o l d + α 2 o l d } L = \max\{0, \alpha_1^{old}+\alpha_2^{old}-C\}, H = \min\{C, \alpha_1^{old}+\alpha_2^{old}\} L=max{0,α1old+α2oldC},H=min{C,α1old+α2old}
确定了最优值的上下界后,将 α 1 = − y 1 y 2 α 2 + y 1 ζ \alpha_1 = -y_1y_2\alpha_2 + y_1\zeta α1=y1y2α2+y1ζ代入原公式,将其转换为单变量的优化问题。
W ( α 2 ) = − y 1 y 2 α 2 + y 1 ζ + α 2 − 1 2 ( − y 1 ( y 2 α 2 − ζ ) ) ) 2 y 1 2 K 1 , 1 − 1 2 α 2 2 y 2 2 K 2 , 2 + ( y 1 y 2 α 2 − y 1 ζ ) α 2 y 1 y 2 K 1 , 2 + ( y 1 y 2 α 2 − y 1 ζ ) y 1 v 1 − α 2 y 2 v 2 + M = − y 1 y 2 α 2 + y 1 ζ + α 2 − 1 2 y 1 2 ( y 2 2 α 2 2 − 2 y 2 ζ + ζ 2 ) y 1 2 K 1 , 1 − 1 2 α 2 2 y 2 K 2 , 2 + y 1 2 y 2 2 α 2 2 K 1 , 2 − y 1 2 y 2 ζ α 2 K 1 , 2 + y 1 2 y 2 α 2 v 1 − α 2 y 2 v 2 − y 1 2 ζ v 1 + M = α 2 2 ( − 1 2 K 1 , 1 − 1 2 K 2 , 2 + K 1 , 2 ) + α 2 y 2 ( y 2 − y 1 + ζ K 1 , 1 − ζ K 1 , 2 + v 1 − v 2 ) − y 1 2 ζ v 1 + M (4) \begin{aligned} W(\alpha_2) =&-y_1y_2\alpha_2+y_1\zeta+\alpha_2-\frac{1}{2}(-y_1(y_2\alpha_2-\zeta)))^2y_1^2K_{1,1}-\frac{1}{2}\alpha_2^2y_2^2K_{2,2}\\ &+(y_1y_2\alpha_2-y_1\zeta)\alpha_2y_1y_2K_{1,2}+(y_1y_2\alpha_2-y_1\zeta)y_1v_1-\alpha_2y_2v_2+M\\ =&-y_1y_2\alpha_2+y_1\zeta+\alpha_2-\frac{1}{2}y_1^2(y_2^2\alpha_2^2-2y_2\zeta+\zeta^2)y_1^2K_{1,1}-\frac{1}{2}\alpha_2^2y_2K_{2,2}\\ &+y_1^2y_2^2\alpha_2^2K_{1,2}-y_1^2y_2\zeta\alpha_2K_{1,2}+y_1^2y_2\alpha_2v_1-\alpha_2y_2v_2-y_1^2\zeta v1+M\\ =&\alpha_2^2(-\frac{1}{2}K_{1,1}-\frac{1}{2}K_{2,2}+K_{1,2})+\alpha_2y_2(y_2-y_1+\zeta K_{1,1}-\zeta K_{1,2}+v_1-v_2)\\ &-y_1^2\zeta v_1+M\tag4 \end{aligned} W(α2)===y1y2α2+y1ζ+α221(y1(y2α2ζ)))2y12K1,121α22y22K2,2+(y1y2α2y1ζ)α2y1y2K1,2+(y1y2α2y1ζ)y1v1α2y2v2+My1y2α2+y1ζ+α221y12(y22α222y2ζ+ζ2)y12K1,121α22y2K2,2+y12y22α22K1,2y12y2ζα2K1,2+y12y2α2v1α2y2v2y12ζv1+Mα22(21K1,121K2,2+K1,2)+α2y2(y2y1+ζK1,1ζK1,2+v1v2)y12ζv1+M(4)

因为要求最优解,因此对 α 2 \alpha_2 α2求偏导得到:
∂ W ( α 2 ) ∂ α 2 = α 2 ( − K 1 , 1 − K 2 , 2 + 2 K 1 , 2 ) + y 2 ( y 2 − y 1 + ζ K 1 , 1 − ζ K 1 , 2 + v 1 − v 2 ) = 0 ⇒ α 2 n e w ′ ( K 1 , 1 + K 2 , 2 − 2 K 1 , 2 ) = y 2 ( y 2 − y 1 + ζ K 1 , 1 − ζ K 1 , 2 + v 1 − v 2 ) (5) \begin{aligned} \frac{\partial W(\alpha_2)}{\partial \alpha_2} &= \alpha_2(-K_{1,1}-K_{2,2}+2K_{1,2})+y_2(y_2-y_1+\zeta K_{1,1}-\zeta K_{1,2}+v_1-v_2) = 0 \\ &\Rightarrow \alpha_2^{new'}(K_{1,1}+K_{2,2}-2K_{1,2}) = y_2(y_2-y_1+\zeta K_{1,1}-\zeta K_{1,2}+v_1-v_2)\tag5 \end{aligned} α2W(α2)=α2(K1,1K2,2+2K1,2)+y2(y2y1+ζK1,1ζK1,2+v1v2)=0α2new(K1,1+K2,22K1,2)=y2(y2y1+ζK1,1ζK1,2+v1v2)(5)

由于我们需要利用初始的可行解求得最优解,因此需要将等式右边转换成带可行解的,方便更新的式子。首先将 ζ = α 1 y 1 + α 2 y 2 \zeta = \alpha_1y_1+\alpha_2y_2 ζ=α1y1+α2y2代入公式中。
α 2 n e w ( K 1 , 1 + K 2 , 2 − K 1 , 2 ) = y 2 ( y 2 − y 1 + ( α 1 y 1 + α 2 y 2 ) K 1 , 1 + ( α 1 y 1 − α 2 y 2 ) K 1 , 2 + v 1 − v 2 ) = y 2 ( y 2 − y 1 + α 1 o l d y 1 ( K 1 , 1 − K 1 , 2 ) + α 2 o l d y 2 ( K 1 , 1 − K 1 , 2 ) + v 1 − v 2 ) (6) \begin{aligned} \alpha_2^{new}(K_{1,1}+K_{2,2}-K_{1,2}) &= y_2(y_2-y_1+(\alpha_1y_1+\alpha_2y_2)K_{1,1}+(\alpha_1y_1-\alpha_2y_2)K_{1,2}+v_1-v_2)\\ &=y_2(y_2-y_1+\alpha_1^{old}y_1(K_{1,1}-K_{1,2})+\alpha_2^{old}y_2(K_{1,1}-K_{1,2})+v_1-v_2)\tag6 \end{aligned} α2new(K1,1+K2,2K1,2)=y2(y2y1+(α1y1+α2y2)K1,1+(α1y1α2y2)K1,2+v1v2)=y2(y2y1+α1oldy1(K1,1K1,2)+α2oldy2(K1,1K1,2)+v1v2)(6)

看到这个式子,尤其是右边也有 K 1 , 1 K_{1,1} K1,1 K 1 , 2 K_{1,2} K1,2应该考虑如果要是有 K 2 , 2 K_{2,2} K2,2就好了,说不定能够凑够系数,把右边的系数约去呢(数学敏感性)!那么这个 K 2 , 2 K_{2,2} K2,2哪里来呢?又注意到我们的 v 1 v_1 v1 v 2 v_2 v2原来是为了方便表示,其实也是有原因的。
我们将所构建的模型是得到的预测值记为 f ( x ) f(x) f(x),并将之前求得的 w \boldsymbol{w} w表达式代入模型表达式中得到:
f ( x ) = w ⊤ x + b = ∑ i = 1 n α i y i x ⊤ x + b = ∑ i = 1 n α i y i K x i , x + b (7) \begin{aligned} f(\boldsymbol{x}) &= \boldsymbol{w^\top}\boldsymbol{x}+b\\ &=\sum_{i=1}^{n}\alpha_iy_i\boldsymbol{x^\top}\boldsymbol{x}+b\\ &=\sum_{i=1}^{n}\alpha_iy_iK_{x_i, x}+b\tag7 \end{aligned} f(x)=wx+b=i=1nαiyixx+b=i=1nαiyiKxi,x+b(7)

f ( x 1 ) = ∑ i = 1 n α i y i K i , 1 + b = ∑ i = 1 n α i y i K i , 1 + b (8) \begin{aligned} f(\boldsymbol{x_1}) &=\sum_{i=1}^{n}\alpha_iy_iK_{i, 1}+b\\ &=\sum_{i=1}^{n}\alpha_iy_iK_{i, 1}+b\tag8 \end{aligned} f(x1)=i=1nαiyiKi,1+b=i=1nαiyiKi,1+b(8)

f ( x 2 ) = ∑ i = 1 n α i y i K i , 1 + b = ∑ i = 1 n α i y i K i , 2 + b (9) \begin{aligned} f(\boldsymbol{x_2}) &=\sum_{i=1}^{n}\alpha_iy_iK_{i, 1}+b\\ &=\sum_{i=1}^{n}\alpha_iy_iK_{i, 2}+b\tag9 \end{aligned} f(x2)=i=1nαiyiKi,1+b=i=1nαiyiKi,2+b(9)

根据公式7-9其实就可以从 v 1 v_1 v1 v 2 v_2 v2中得到我们想要的。
v 1 = f ( x 1 ) − α 1 y 1 K 1 , 1 − α 2 y 2 K 1 , 2 v 2 = f ( x 2 ) − α 1 y 1 K 1 , 2 − α 2 y 2 K 2 , 2 (10) \begin{aligned} v_1=f(\boldsymbol{x_1}) - \alpha_1y_1K_{1,1}-\alpha_2y_2K_{1,2}\\ v_2=f(\boldsymbol{x_2}) - \alpha_1y_1K_{1,2}-\alpha_2y_2K_{2,2}\tag{10} \end{aligned} v1=f(x1)α1y1K1,1α2y2K1,2v2=f(x2)α1y1K1,2α2y2K2,2(10)
v 1 v_1 v1 v 2 v_2 v2的表达式公式10代入公式6中得到 α 2 n e w \alpha_2^{new} α2new并可以根据 α 1 \alpha_1 α1 α 2 \alpha_2 α2之间的关系得到 α 1 n e w \alpha_1^{new} α1new。此外,预测值与实际值的差即为误差,我们将 E i E_i Ei记为 f ( x i ) − y i f(\boldsymbol{x_i})-y_i f(xi)yi
α 2 n e w ′ ( K 1 , 1 + K 2 , 2 − 2 K 1 , 2 ) = y 2 ( y 2 − y 1 + α 1 o l d y 1 ( K 1 , 1 − K 1 , 2 ) + α 2 o l d y 2 ( K 1 , 1 − K 1 , 2 ) + f ( x 1 ) − α 1 y 1 K 1 , 1 − α 2 y 2 K 1 , 2 − f ( x 2 ) + α 1 y 1 K 1 , 2 + α 2 y 2 K 2 , 2 ) = y 2 ( y 2 − y 1 + f ( x 1 ) − f ( x 2 ) + α 2 o l d y 2 ( K 1 , 1 + K 2 , 2 − 2 K 1 , 2 ) ) (11) \begin{aligned} \alpha_2^{new'}(K_{1,1}+K_{2,2}-2K_{1,2}) =& y_2(y_2-y_1+\alpha_1^{old}y_1(K_{1,1}-K_{1,2})+\alpha_2^{old}y_2(K_{1,1}-K_{1,2})+f(x_1)\\ &- \alpha_1y_1K_{1,1}-\alpha_2y_2K_{1,2}-f(x_2) + \alpha_1y_1K_{1,2}+\alpha_2y_2K_{2,2})\\ =&y_2(y_2-y_1+f(x_1)-f(x_2)+\alpha_2^{old}y_2(K_{1,1}+K_{2,2}-2K_{1,2}))\tag{11} \end{aligned} α2new(K1,1+K2,22K1,2)==y2(y2y1+α1oldy1(K1,1K1,2)+α2oldy2(K1,1K1,2)+f(x1)α1y1K1,1α2y2K1,2f(x2)+α1y1K1,2+α2y2K2,2)y2(y2y1+f(x1)f(x2)+α2oldy2(K1,1+K2,22K1,2))(11)

因此,可以得到 α 2 n e w \alpha_2^{new} α2new的值如下:
α 2 n e w ′ = α 2 o l d + ( f ( x 1 ) − y 1 ) − ( f ( x 2 ) − y 2 ) K 1 , 1 + K 2 , 2 − 2 K 1 , 2 = α 2 o l d + ( E 1 − E 2 ) K 1 , 1 + K 2 , 2 − 2 K 1 , 2 (12) \begin{aligned} \alpha_2^{new'} &= \alpha_2^{old} + \frac{(f(x_1)-y_1)-(f(x_2)-y_2)}{K_{1,1}+K_{2,2}-2K_{1,2}}\\ &=\alpha_2^{old} + \frac{(E_1-E_2)}{K_{1,1}+K_{2,2}-2K_{1,2}}\tag{12} \end{aligned} α2new=α2old+K1,1+K2,22K1,2(f(x1)y1)(f(x2)y2)=α2old+K1,1+K2,22K1,2(E1E2)(12)

然而,此时的 ( α 1 n e w ′ , α 2 n e w ′ ) (\alpha_1^{new'}, \alpha_2^{new'}) (α1new,α2new)并不一定是更新以后的值,我们还要根据之前求得的值域来确定更新后的值,即:
α 2 n e w = { L , α 2 n e w ′ ≤ L α 2 n e w ′ , L ≤ α 2 n e w ′ ≤ H H , α 2 n e w ′ ≥ H \alpha_2^{new} = \left\{ \begin{array}{ll} L,&\alpha_2^{new'} \le L\\ \alpha_2^{new'},&L \le \alpha_2^{new'} \le H\\ H, &\alpha_2^{new'} \ge H \end{array} \right. α2new=L,α2new,H,α2newLLα2newHα2newH

再由 α 2 \alpha_2 α2 α 1 \alpha_1 α1的关系可以得到:
α 1 n e w = α 1 o l d + y 1 y 2 ( α 2 o l d − α 2 n e w ) (13) \begin{aligned} \alpha_1^{new} = \alpha_1^{old}+y_1y_2(\alpha_2^{old}-\alpha_2^{new})\tag{13} \end{aligned} α1new=α1old+y1y2(α2oldα2new)(13)

更新变量的选取

SMO算法需要选择一对变量进行迭代更新修正,很显然,对于违反KKT条件的点是我们需要进行更新的。因此,我们第一个变量选取违法KKT条件最严重的点。主要是支持向量对模型产生影响,则先遍历 0 ≤ α i ≤ C 0 \le \alpha_i \le C 0αiC的样本点,检查是否违反KKT条件即是否满足 y i ( w ⊤ x + b ) = 1 y_i(\boldsymbol{w^\top}\boldsymbol{x}+b) = 1 yi(wx+b)=1。若都满足,则再考虑 α i = 0 \alpha_i=0 αi=0时,是否满足 y i ( w ⊤ x + b ) ≥ 1 y_i(\boldsymbol{w^\top}\boldsymbol{x}+b) \ge 1 yi(wx+b)1 α i = C \alpha_i =C αi=C时,是否满足 y i ( w ⊤ x + b ) ≤ 1 y_i(\boldsymbol{w^\top}\boldsymbol{x}+b) \le 1 yi(wx+b)1。若遇到一个样本点不满足,则将其选为第一个变量。
而第二个变量,根据公式,我们希望更新更快,则需要步伐大一点,在第一个变量 α 1 \alpha_1 α1确定后,要求第二个变量使得 ∣ E 1 − E 2 ∣ \vert E_1-E_2 \vert E1E2尽可能大。因此, E 1 ≥ 0 E_1\ge 0 E10时,选取最小的 E i E_i Ei作为 E 2 E_2 E2;而 E 1 ≤ 0 E_1 \le 0 E10时,则需要选取最大的 E i E_i Ei作为 E 2 E_2 E2

b b b和误差 E i E_i Ei的计算

每更新一次后,都需要重新计算b和误差。然而,此时需要考虑 α \alpha α的值。根据KKT条件 0 ≤ α 1 n e w ≤ C 0 \leq \alpha_1^{new} \leq C 0α1newC时可得 ξ 1 = 0 \xi_1 = 0 ξ1=0那么, y 1 = w ⊤ x 1 + b y_1=\boldsymbol{w^\top}\boldsymbol{x_1}+b y1=wx1+b,可求得 b 1 n e w b_1^{new} b1new如下公式所示:
b 1 n e w = y 1 − w ⊤ x 1 = y 1 − ∑ i = 1 n α i y 1 K 1 , i = y 1 − ∑ i = 3 n α i y i K i , 1 − α 1 n e w y 1 K 1 , 1 − α 2 n e w y 2 K 2 , 1 \begin{aligned} b_1^{new}&= y_1- \boldsymbol{w^\top}\boldsymbol{x_1}\\ &=y_1-\sum_{i=1}^{n}\alpha_iy_1K_{1,i}\\ &=y_1-\sum_{i=3}^{n}\alpha_iy_iK_{i,1}-\alpha_1^{new}y_1K_{1,1}-\alpha_2^{new}y_2K_{2,1} \end{aligned} b1new=y1wx1=y1i=1nαiy1K1,i=y1i=3nαiyiKi,1α1newy1K1,1α2newy2K2,1

其实我们是并不希望在更新的时候看到 ∑ i = 3 n α i y i K i , 1 \sum_{i=3}^{n}\alpha_iy_iK_{i,1} i=3nαiyiKi,1的,而是希望通过能够根据旧的或者已知的参数去表示。此时看到 y 1 − ∑ i = 3 n α i y i K i , 1 y_1-\sum_{i=3}^{n}\alpha_iy_iK_{i,1} y1i=3nαiyiKi,1有点眼熟,它和之前我们定义的误差很接近(数学敏感性!),因此我们将其转换为误差得到:
b 1 n e w = − E 1 + b o l d + y 1 K 1 , 1 ( α 1 o l d − α 1 n e w ) + y 2 K 2 , 1 ( α 2 o l d − α 2 n e w ) (14) \begin{aligned} b_1^{new} = -E_1+b^{old}+y_1K_{1,1}(\alpha_1^{old}-\alpha_1^{new})+y_2K_{2,1}(\alpha_2^{old} - \alpha_2^{new})\tag{14} \end{aligned} b1new=E1+bold+y1K1,1(α1oldα1new)+y2K2,1(α2oldα2new)(14)

同样的,当 0 ≤ α 2 n e w ≤ C 0 \leq \alpha_2^{new} \leq C 0α2newC时,更新b为:
KaTeX parse error: No such environment: align at position 8: \begin{̲a̲l̲i̲g̲n̲}̲ \label{equa:b…

此时,问题来了,当 α 1 \alpha_1 α1 α 2 \alpha_2 α2都满足是 ( 0 , C ) (0,C) (0,C)时, b b b应该如何更新呢?注意, b b b是对于每一对 ( α 1 , α 2 ) (\alpha_1,\alpha_2) (α1,α2)优化后进行更新,并不是求得 α 1 n e w \alpha_1^{new} α1new进行更新,求得 α 2 n e w \alpha_2^{new} α2new再更新一次。答案是,此时 b 1 n e w = b 2 n e w b_1^{new} = b_2^{new} b1new=b2new。因为在这种情况下,说明两个点都位于间隔边界上,此时的 w w w是确定的,同时到分割平面的距离都是1,所以是相等的。其实直接用公式也可以证明,直接将 ( α 1 n e w , α 2 n e w ) (\alpha_1^{new},\alpha_2^{new}) (α1new,α2new) ( α 1 o l d , α 2 o l d ) (\alpha_1^{old},\alpha_2^{old}) (α1old,α2old)代入公式14和公式15可以得到二者相等。
然而,上面讨论的是 ( 0 , C ) (0,C) (0,C)的情况,当取0和 C C C的时候呢?当 α 1 \alpha_1 α1 α 2 \alpha_2 α2都取边界值时,仅有 y 1 y 2 = − 1 y_1y_2=-1 y1y2=1时, α 1 \alpha_1 α1 α 2 \alpha_2 α2可以同时取 0 0 0 C C C。而当 α 1 \alpha_1 α1 α 2 \alpha_2 α2同时为0时,说明两个点均分类正确,假设 y 1 = 1 y_1 = 1 y1=1 y 2 = − 1 y_2=-1 y2=1代入KKT条件得到:
b 1 n e w ≥ − E 1 + b o l d + y 1 K 1 , 1 ( α 1 o l d − α 1 n e w ) + y 2 K 2 , 1 ( α 2 o l d − α 2 n e w ) b 2 n e w ≤ − E 2 + b o l d + y 1 K 1 , 2 ( α 1 o l d − α 1 n e w ) + y 2 K 2 , 2 ( α 2 o l d − α 2 n e w ) \begin{aligned} b_1^{new} \ge -E_1+b^{old}+y_1K_{1,1}(\alpha_1^{old}-\alpha_1^{new})+y_2K_{2,1}(\alpha_2^{old} - \alpha_2^{new})\\ b_2^{new} \le -E_2+b^{old}+y_1K_{1,2}(\alpha_1^{old}-\alpha_1^{new})+y_2K_{2,2}(\alpha_2^{old} - \alpha_2^{new}) \end{aligned} b1newE1+bold+y1K1,1(α1oldα1new)+y2K2,1(α2oldα2new)b2newE2+bold+y1K1,2(α1oldα1new)+y2K2,2(α2oldα2new)

如下图所示,其中两条虚线分别为 b 1 n e w b_1^{new} b1new b 2 n e w b_2^{new} b2new对应的分割超平面。两个平面一个向上移,一个向下移, b 1 n e w b_1^{new} b1new b 2 n e w b_2^{new} b2new都满足KKT条件则其中见也满足KKT条件。其他形式的边界值搭配也可以同样地代入到KKT条件中,并且进行解释。
小菜君的SVM笔记之SMO算法
然而,这样是有问题的,有可能两个平面移动的轨迹并不重合。对于SMO算法中的缺陷,Keerthi在论文中已经进行修改。当然,因为我们其实只是为了对b进行更新而已,在这种情况下,我们可以考虑不进行更新,也就是会慢一步。如果是轨迹有重合的部分,我们采用 b 1 n e w + b 2 n e w 2 \frac{b_1^{new}+b_2^{new}}{2} 2b1new+b2new来对 b b b进行更新。若不考虑上面提出的Platt提出的传统SMO算法的缺陷,则应按照下式对 b b b进行更新:
b n e w = { b 1 n e w ,   0 ≤ α 1 n e w ≤ C b 2 n e w ,   0 ≤ α 2 n e w ≤ C b 1 n e w + b 2 n e w 2 ,   o t h e r s b^{new} = \left\{ \begin{array}{ll} b_1^{new},\ &0 \leq \alpha_1^{new} \leq C\\ b_2^{new},\ &0 \leq \alpha_2^{new} \leq C\\ \frac{b_1^{new}+b_2^{new}}{2},\ &others \end{array} \right. bnew=b1new, b2new, 2b1new+b2new, 0α1newC0α2newCothers

更新完b后,还需要对误差进行更新。记所有支持向量的集合为S,得到误差为:
E i n e w = ∑ S α j y j K i , j + b n e w − y i E_i^{new} = \sum_{S}\alpha_jy_jK_{i,j}+b^{new}-y_i Einew=SαjyjKi,j+bnewyi

最终,当 α i n e w − α i o l d ≤ ϵ \alpha_i^{new}-\alpha_i^{old} \le \epsilon αinewαioldϵ时,检查其是否满足KKT条件,若满足则停止迭代,否则继续迭代。

至此,SMO算法告一段落,修正后的SMO算法待后续补充。