序列最小最优化算法(sequential minimal optimization,简称SMO)是由Platt在1998年提出,用于解决多变量的凸优化问题。当变量个数很多的时候,一般的最优化算法通常无法有效求解最优解。此时,SMO算法的作用就会体现的淋漓尽致。针对多变量的最优解问题,SMO算法通过从变量集中选取两个变量,剩余的变量视为常量来计算局部最优解,然后再以递进的方式求出全局最优解。
SMO算法需要解决的最优化问题: min α 1 2 ∑ i = 1 N ∑ j = 1 N α i α j y i y j K ( x i , x j ) − ∑ i = 1 N α i \min_{\alpha} \quad \frac{1}{2}\sum_{i=1}^N\sum_{j=1}^N\alpha_i\alpha_jy_iy_jK(x_i,x_j)-\sum_{i=1}^N\alpha_i αmin21i=1∑Nj=1∑NαiαjyiyjK(xi,xj)−i=1∑Nαi s . t . ∑ i = 1 N α i y i = 0 s.t. \qquad \sum_{i=1}^N\alpha_iy_i=0 s.t.i=1∑Nαiyi=0 0 ≤ α i ≤ C , i = 1 , 2 , . . . , N 0 \leq \alpha_i \leq C,i=1,2,...,N 0≤αi≤C,i=1,2,...,N其中,目标函数的变量为 ( α 1 , α 2 , . . . , α N ) (\alpha_1,\alpha_2,...,\alpha_N) (α1,α2,...,αN),每一个实例 ( x i , y i ) (x_i,y_i) (xi,yi)对应一个 α i \alpha_i αi。
SMO算法是一种启发式算法,其基本思路是:如果所有变量的解都满足此最优化问题的KKT条件,那么这个最优化问题的解就得到了。因此KKT条件是该最优化问题的充分必要条件。SMO算法的目标是求解满足KKT条件的 ( α 1 , α 2 , . . . , α N ) (\alpha_1,\alpha_2,...,\alpha_N) (α1,α2,...,αN)。方法是选择两个变量,固定其他变量,针对这两个变量构建一个二次规划的子问题。这个二次规划子问题关于这两个变量的解更接近原始二次规划问题的解,因为这会使得原始二次规划问题的目标函数值变得更小。二次规划子问题有两个变量,一个是主动变量,其为违反KKT条件最严重的那一个,另一个被动变量,由主动变量依据约束条件自动确定。如此,SMO算法将原问题不断分解为子问题并对子问题求解,进而达到求解原问题的目的。
对子问题进行求最优解时,假设 α 1 , α 2 \alpha_1,\alpha_2 α1,α2为两个变量,固定 α 3 , α 4 , . . . , α N \alpha_3,\alpha_4,...,\alpha_N α3,α4,...,αN,其满足的约束条件为: α 1 y 1 + α 2 y 2 = − ∑ i = 3 N α i y i = ζ \alpha_1y_1+\alpha_2y_2=-\sum_{i=3}^N\alpha_iy_i=\zeta α1y1+α2y2=−i=3∑Nαiyi=ζ当更新其中一个变量 α 2 \alpha_2 α2时,相应的 α 1 \alpha_1 α1也会自动更新,进而求出子问题的最优解。
假设 α 1 , α 2 \alpha_1,\alpha_2 α1,α2为两个变量,固定 α 3 , α 4 , . . . , α N \alpha_3,\alpha_4,...,\alpha_N α3,α4,...,αN,那么SMO的最优化问题的子问题表达为: min α 1 , α 2 W ( α 1 , α 2 ) = 1 2 K 11 α 1 2 + 1 2 K 22 α 2 2 + y 1 y 2 K 12 α 1 α 2 − ( α 1 + α 2 ) + y 1 α 1 ∑ i = 3 N y i α i K i 1 + y 2 α 2 ∑ i = 3 N y i α i K i 2 \min_{\alpha_1,\alpha_2} \quad W(\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_1\sum_{i=3}^Ny_i\alpha_iK_{i1}+y_2\alpha_2\sum_{i=3}^Ny_i\alpha_iK_{i2} α1,α2minW(α1,α2)=21K11α12+21K22α22+y1y2K12α1α2−(α1+α2)+y1α1i=3∑NyiαiKi1+y2α2i=3∑NyiαiKi2 s . t . α 1 y 1 + α 2 y 2 = − ∑ i = 3 N α i y i = ζ s.t. \quad \alpha_1y_1+\alpha_2y_2=-\sum_{i=3}^N\alpha_iy_i=\zeta s.t.α1y1+α2y2=−i=3∑Nαiyi=ζ 0 ≤ α i ≤ C , i = 1 , 2 0 \leq \alpha_i\leq C,i=1,2 0≤αi≤C,i=1,2其中, K i j = K ( x i , x j ) , i , j = 1 , 2 , . . . , N K_{ij}=K(x_i,x_j),i,j=1,2,...,N Kij=K(xi,xj),i,j=1,2,...,N, ζ \zeta ζ为常数。
为了解决两个变量的最优化问题,首先分析约束条件,找出变量满足的取值范围,并在此范围内求解最优解。
依据变量的上述等式约束和不等式约束, α 1 , α 2 \alpha_1,\alpha_2 α1,α2都在 [ 0 , C ] [0,C] [0,C]范围内,并且 α 1 , α 2 \alpha_1,\alpha_2 α1,α2满足的直线平行于盒子范围的对角线。如果 y 1 = ̸ y 2 y_1=\not y_2 y1≠y2时,则 L = m a x ( 0 , α 2 o l d − α 1 o l d ) , H = m i n ( C , C + α 2 o l d − α 1 o l d ) L=max(0,\alpha_2^{old}-\alpha_1^{old}),H=min(C,C+\alpha_2^{old}-\alpha_1^{old}) L=max(0,α2old−α1old),H=min(C,C+α2old−α1old);如果 y 1 = y 2 y_1= y_2 y1=y2时,则 L = m a x ( 0 , α 2 o l d + α 1 o l d − C ) , H = m i n ( C , α 2 o l d + α 1 o l d ) L=max(0,\alpha_2^{old}+\alpha_1^{old}-C),H=min(C,\alpha_2^{old}+\alpha_1^{old}) L=max(0,α2old+α1old−C),H=min(C,α2old+α1old)。计算的新解 α 1 n e w , α 2 n e w \alpha_1^{new},\alpha_2^{new} α1new,α2new必须满足 [ L , H ] [L,H] [L,H]这一范围,即 L ≤ α 2 n e w ≤ H L\leq \alpha_2^{new}\leq H L≤α2new≤H,接下来两个变量的最优化问题实质上是单变量的最优化问题,因为上述的等式约束,不妨考虑为变量 α 2 \alpha_2 α2的最优化问题。
首先求沿着约束方向不考虑取值范围时的 α 2 \alpha_2 α2的最优解 α 2 n e w , u n c \alpha_2^{new,unc} α2new,unc;然后再求剪辑后 α 2 \alpha_2 α2的解 α 2 n e w \alpha_2^{new} α2new。在此之前,先计算每个实例 x i x_i xi的误差 g ( x ) = ∑ i = 1 N α i y i K ( x i , x ) + b g(x)=\sum_{i=1}^N\alpha_iy_iK(x_i,x)+b g(x)=i=1∑NαiyiK(xi,x)+b E i = g ( x i ) − y i = ( ∑ i = 1 N α i y i K ( x i , x ) + b ) − y i , i = 1 , 2 E_i=g(x_i)-y_i=(\sum_{i=1}^N\alpha_iy_iK(x_i,x)+b)-y_i,i=1,2 Ei=g(xi)−yi=(i=1∑NαiyiK(xi,x)+b)−yi,i=1,2上式中, g ( x i ) g(x_i) g(xi)为实例 x i x_i xi的预测值, E i E_i Ei为实例 x i x_i xi的误差。
最优化问题沿着约束方向不考虑取值范围的解为: α 2 n e w , u n c = α 2 o l d + y 2 ( E 1 − E 2 ) η \alpha_2^{new,unc}=\alpha_2^{old}+\frac{y_2(E_1-E_2)}{\eta} α2new,unc=α2old+ηy2(E1−E2)那么,这个公式是怎么推导出来的呢?接下来就是推导公式的详细步骤: v i = ∑ j = 3 N α j y j K ( x i , x j ) = g ( x i ) − ∑ j = 1 2 α j y j K ( x i , x j ) − b , i = 1 , 2 v_i=\sum_{j=3}^N\alpha_jy_jK(x_i,x_j)=g(x_i)-\sum_{j=1}^2\alpha_jy_jK(x_i,x_j)-b,i=1,2 vi=j=3∑NαjyjK(xi,xj)=g(xi)−j=1∑2αjyjK(xi,xj)−b,i=1,2目标函数可写成 W ( α 1 , α 2 ) = 1 2 K 11 α 1 2 + 1 2 K 22 α 2 2 + y 1 y 2 K 12 α 1 α 2 − ( α 1 + α 2 ) + y 1 α 1 v 1 + y 2 α 2 v 2 W(\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 W(α1,α2)=21K11α12+21K22α22+y1y2K12α1α2−(α1+α2)+y1α1v1+y2α2v2由 α 1 y 1 = ζ − α 2 y 2 \alpha_1y_1=\zeta-\alpha_2y_2 α1y1=ζ−α2y2及 y i 2 = 1 y_i^2=1 yi2=1,可将 α 1 \alpha_1 α1表示为 α 1 = ( ζ − α 2 y 2 ) y 1 \alpha_1=(\zeta-\alpha_2y_2)y_1 α1=(ζ−α2y2)y1代入到上式中,得到只要一个变量 α 2 \alpha_2 α2的目标函数 W ( α 2 ) = 1 2 K 11 ( ζ − α 2 y 2 ) 2 + 1 2 K 22 α 2 2 + y 2 K 12 ( ζ − α 2 y 2 ) α 2 − ( ζ − α 2 y 2 ) y 1 − α 2 + v 1 ( ζ − α 2 y 2 ) + y 2 v 2 α 2 W(\alpha_2)=\frac{1}{2}K_{11}(\zeta-\alpha_2y_2)^2+\frac{1}{2}K_{22}\alpha_2^2+y_2K_{12}(\zeta-\alpha_2y_2)\alpha_2-(\zeta-\alpha_2y_2)y_1-\alpha_2+v_1(\zeta-\alpha_2y_2)+y_2v_2\alpha_2 W(α2)=21K11(ζ−α2y2)2+21K22α22+y2K12(ζ−α2y2)α2−(ζ−α2y2)y1−α2+v1(ζ−α2y2)+y2v2α2对 α 2 \alpha_2 α2求导数 ∂ W ∂ α 2 = K 11 α 2 + K 22 α 2 − 2 K 12 α 2 − K 11 ζ y 2 + K 12 ζ y 2 + y 1 y 2 − 1 − v 1 y 2 + y 2 v 2 \frac{\partial W}{\partial \alpha_2}=K_{11}\alpha_2+K_{22}\alpha_2-2K_{12}\alpha_2-K_{11}\zeta y_2+K_{12}\zeta y_2+y_1y_2-1-v_1y_2+y_2v_2 ∂α2∂W=K11α2+K22α2−2K12α2−K11ζy2+K12ζy2+y1y2−1−v1y2+y2v2令其为0,即 ( K 11 + K 22 − 2 K 12 ) α 2 = y 2 ( y 2 − y 1 + ζ K 11 − ζ K 12 + v 1 − v 2 ) = y 2 [ y 2 − y 1 + ζ K 11 − ζ K 12 + ( g ( x i ) − ∑ j = 1 2 y j α j K 1 j − b ) − ( g ( x 2 − ∑ j = 1 2 y j α j K 2 j − b ) ] (K_{11}+K_{22}-2K_{12})\alpha_2=y_2(y_2-y_1+\zeta K_{11}-\zeta K_{12}+v_1-v_2)\\ =y_2\left[y_2-y_1+\zeta K_{11} - \zeta K_{12} +(g(x_i)-\sum_{j=1}^2y_j\alpha_jK_{1j}-b)-(g(x_2-\sum_{j=1}^2y_j\alpha_jK_{2j}-b)\right] (K11+K22−2K12)α2=y2(y2−y1+ζK11−ζK12+v1−v2)=y2[y2−y1+ζK11−ζK12+(g(xi)−j=1∑2yjαjK1j−b)−(g(x2−j=1∑2yjαjK2j−b)]将 ζ = α 1 o l d y 1 + α 2 o l d y 2 \zeta=\alpha_1^{old}y_1+\alpha_2^{old}y_2 ζ=α1oldy1+α2oldy2代入,得到 ( K 11 + K 22 − 2 K 12 ) α 2 n e w , u n c = y 2 ( ( K 11 + K 22 − 2 K 12 ) α 2 o l d y 2 + y 2 − y 1 + g ( x 1 ) − g ( x 2 ) ) = ( K 11 + K 22 − 2 K 12 ) α 2 o l d + y 2 ( E 1 − E 2 ) \begin{aligned}(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)) \\ &=(K_{11}+K_{22}-2K_{12})\alpha_2^{old}+y_2(E_1-E_2)\end{aligned} (K11+K22−2K12)α2new,unc=y2((K11+K22−2K12)α2oldy2+y2−y1+g(x1)−g(x2))=(K11+K22−2K12)α2old+y2(E1−E2)令 η = K 11 + K 22 − 2 K 12 \eta=K_{11}+K_{22}-2K_{12} η=K11+K22−2K12代入,得到 α 2 n e w , u n c = α 2 o l d + y 2 ( E 1 − E 2 ) η \alpha_2^{new,unc}=\alpha_2^{old}+\frac{y_2(E_1-E_2)}{\eta} α2new,unc=α2old+ηy2(E1−E2)
然后,经过范围的约束得到的新解为
α 2 n e w = { H , α 2 n e w , u n c > H α 2 n e w , u n c , L ≤ α 2 n e w , u n c ≤ H L , α 2 n e w , u n c < L \alpha_2^{new} = \begin{cases} H \qquad, \alpha_2^{new,unc}>H \\ \alpha_2^{new,unc}, L \leq \alpha_2^{new,unc} \leq H \\ L \qquad, \alpha_2^{new,unc} < L \end{cases} α2new=⎩⎪⎨⎪⎧H,α2new,unc>Hα2new,unc,L≤α2new,unc≤HL,α2new,unc<L
由 α 2 n e w \alpha_2^{new} α2new计算得到 α 1 n e w = α 1 o l d + y 1 y 2 ( α 2 o l d − α 2 n e w ) \alpha_1^{new}=\alpha_1^{old}+y_1y_2(\alpha_2^{old}-\alpha_2^{new}) α1new=α1old+y1y2(α2old−α2new)
每次完成两个变量的更新优化后,都要重新计算截距b。当 0 < α 1 n e w < C 0<\alpha_1^{new}<C 0<α1new<C时,由KKT条件可知: ∑ i = 1 N α i y i K i 1 + b = y 1 \sum_{i=1}^N\alpha_iy_iK_{i1}+b=y_1 i=1∑NαiyiKi1+b=y1于是得到: b 1 n e w = y 1 − ∑ i = 3 N α i y i K i 1 − α 1 n e w y 1 K 11 − α 2 n e w y 2 K 21 b_1^{new}=y_1-\sum_{i=3}^N\alpha_iy_iK_{i1}-\alpha_1^{new}y_1K_{11}-\alpha_2^{new}y_2K_{21} b1new=y1−i=3∑NαiyiKi1−α1newy1K11−α2newy2K21由 E 1 E_1 E1的定义: E 1 = ∑ i = 3 N α i y i K i 1 − α 1 o l d y 1 K 11 − α 2 o l d y 2 K 21 + b o l d − y 1 E1=\sum_{i=3}^N\alpha_iy_iK_{i1}-\alpha_1^{old}y_1K_{11}-\alpha_2^{old}y_2K_{21}+b^{old}-y_1 E1=i=3∑NαiyiKi1−α1oldy1K11−α2oldy2K21+bold−y1将上式代入到 E 1 E_1 E1中得到: b 1 n e w = − E 1 − y 1 K 11 ( α 1 n e w − α 1 o l d ) − y 2 K 21 ( α 2 n e w − α 2 o l d ) + b o l d b_1^{new}=-E_1-y_1K_{11}(\alpha_1^{new}-\alpha_1^{old})-y_2K_{21}(\alpha_2^{new}-\alpha_2^{old})+b^{old} b1new=−E1−y1K11(α1new−α1old)−y2K21(α2new−α2old)+bold同理,如果 0 < α 2 n e w < C 0<\alpha_2^{new}<C 0<α2new<C,那么 b 2 n e w = − E 2 − y 1 K 12 ( α 1 n e w − α 1 o l d ) − y 2 K 22 ( α 2 n e w − α 2 o l d ) + b o l d b_2^{new}=-E_2-y_1K_{12}(\alpha_1^{new}-\alpha_1^{old})-y_2K_{22}(\alpha_2^{new}-\alpha_2^{old})+b^{old} b2new=−E2−y1K12(α1new−α1old)−y2K22(α2new−α2old)+bold如果 α 1 n e w , α 2 n e w \alpha_1^{new},\alpha_2^{new} α1new,α2new是0或者C,那么 b n e w = b 1 n e w + b 2 n e w 2 b^{new}=\frac{b_1^{new}+b_2^{new}}{2} bnew=2b1new+b2new。
更新 b n e w b^{new} bnew之后,还要更新对应的 E i E_i Ei: E i n e w = ∑ j = 1 N y j α j K ( x i , x j ) + b n e w − y i E_i^{new}=\sum_{j=1}^Ny_j\alpha_jK(x_i,x_j)+b^{new}-y_i Einew=j=1∑NyjαjK(xi,xj)+bnew−yi
输入:线性可分训练集 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) } T=\left\{(x_1,y_1),(x_2,y_2),...,(x_N,y_N)\right\} T={(x1,y1),(x2,y2),...,(xN,yN)},其中, x i ∈ X = R n , y i ∈ Y = { + 1 , − 1 } , i = 1 , 2 , . . . , N x_i\in \mathcal {X}=R^n,y_i \in \mathcal {Y}=\left\{+1,-1\right\},i=1,2,...,N xi∈X=Rn,yi∈Y={+1,−1},i=1,2,...,N,精度 ε \varepsilon ε
输出:近似解 α \alpha α