支持向量机—SMO算法

背景

SVM 的学习问题可以形式化为如下凸二次规划的对偶问题:
minα    12i=1Nj=1NαiαjyiyjK(xi,xj)i=1Nαis.t.  i=1Nαiyi=00αiC \min\limits_{\alpha} \;\; \frac{1}{2}\sum\limits_{i=1}^{N}\sum\limits_{j=1}^{N}\alpha_i\alpha_jy_iy_jK(x_i,x_j) - \sum\limits_{i=1}^{N}\alpha_i\\ s.t. \; \sum\limits_{i=1}^{N}\alpha_iy_i = 0 \\ 0 \leq \alpha_i \leq C
在这个问题中,变量是拉格朗日乘子,一个变量αi\alpha_i 对应一个样本点(xi,yi)(x_i,y_i),变量总数等于训练样本总数。这个问题我们通过序列最小最优算法(SMO)来解决。

SMO算法思路:选择两个变量,固定其他变量,针对这两个变量构建一个二次规划问题,这两个变量分别是:(1)违反KTT条件最严重的那个。(2)另一个由约束条件确定。

SMO算法包括下面两个部分:

  1. 求解两个变量二次规划的解析方法
  2. 选择变量的启发式方法

两个变量二次规划的求解方法

假设选择两个变量是α1,α2\alpha_1,\alpha_2 ,其他变量αi(i=3,4,N)\alpha_i(i=3,4\ldots,N) 是固定的。固定项为常数,可以直接省略。所以SMO的最优化问题可以写成:
minα1,α2W(α1,α2)=12K11α12+12K22α22+y1y2K12α1α2+(α1+α2)+y1α1i=3NyiαiKil+y2α2i=3NyiαiKi2s.t.   α1y1+α2y2=i=3Nyiαi=ς0αiC,i=1,2 \begin{aligned} \min_{\alpha_1,\alpha_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_1\sum_{i=3}^Ny_i\alpha_iK_{il}+y_2\alpha_2\sum_{i=3}^Ny_i\alpha_iK_{i2}\\ s.t. \ \ \ &\alpha_1y_1+\alpha_2y_2=-\sum_{i=3}^Ny_i\alpha_i=\varsigma\\ &0\leqslant\alpha_i\leqslant C, i=1,2 \end{aligned}
其中,Kij=K(xi,xj),ςK_{ij}=K(x_i,x_j),\varsigma 是常数。 最优化问题有两个约束:不等式约束和等式约束。

根据约束条件α1y1+α2y2=k\alpha_1y_1+\alpha_2y_2=kyiy_i 的取值只能是1,-1。 且0αiC,0\leqslant\alpha_i\leqslant C, 所以(α1,α2)(\alpha_1,\alpha_2) 在平行于盒子[0,C]×[0,C][0,C]\times [0,C] 的对角线上。如下图所示:

支持向量机—SMO算法

因此要求的目标函数在一条平行于对角线的线段的最优值。这使得两个变量的最优化问题成为实质上的单变量优化问题(α1=kα2\alpha_1 = k-\alpha_2)。

假设原始问题的初始可行解为α1old,α2old\alpha_1^{old},\alpha_2^{old},本次迭代的最优解为α1new,α2new\alpha_1^{new},\alpha_2^{new},假设沿着约束方向α2\alpha_2未经剪辑(未考虑不等式约束)的解是α2new,unc\alpha_2^{new,unc}

由于设L、H为α2new\alpha_2^{new} 所在对角线的端点。则 α2new\alpha_2^{new} 的取值范围必须满足条件:
Lα2newH L \leq \alpha_2^{new} \leq H
y1y2y_1 \neq y_2 时,如上左图,则:
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})
y1=y2y_1 = y_2 时,如上左图,则:
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\alpha_2^{new} 应该要满足以下情况:
α2new={Hα2new,unc>Hα2new,uncLα2new,uncHLα2new,unc<L \alpha_2^{new}= \begin{cases} H& { \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} ?,通过对目标函数求导可以解决。

引入变量:
g(x)=j=1mαjyjK(x,xj)+bEi=g(xi)yi=j=1mαjyjK(xi,xj)+byivi=j=3myjαjK(xi,xj)=g(xi)j=12yjαjK(xi,xj)b g(x) =\sum\limits_{j=1}^{m}\alpha_j^{*}y_jK(x, x_j)+ b^{*}\\E_i = g(x_i)-y_i = \sum\limits_{j=1}^{m}\alpha_j^{*}y_jK(x_i, x_j)+ b - y_i \\ v_i = \sum\limits_{j=3}^{m}y_j\alpha_jK(x_i,x_j) = g(x_i) - \sum\limits_{j=1}^{2}y_j\alpha_jK(x_i,x_j) -b
注:EiE_i 是样本的真实值与预测值的误差。

v1,v2v_1,v_2 带入目标函数:
W(α1,α2)=12K11α12+12K22α22+y1y2K12α1α2(α1+α2)+y1α1v1+y2α2v2 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
α1y1+α2y2=ς,yi2=1\alpha_1y_1 + \alpha_2y_2 = \varsigma, \quad y_i^2=1 得:
α1=y1(ςα2y2) \alpha_1 = y_1(\varsigma - \alpha_2y_2)
带入W(α1,α2)W(\alpha_1,\alpha_2) 消去α1\alpha_1 ,得:
W(α2)=12K11(ςα2y2)2+12K22α22+y2K12(ςα2y2)α2(ςα2y2)y1α2+(ςα2y2)v1+y2α2v2 W(\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 - (\varsigma - \alpha_2y_2)y_1 - \alpha_2 +(\varsigma - \alpha_2y_2)v_1 + y_2\alpha_2v_2
这样问题就变成了单变量优化问题。接下来我们通过求导来得到α2new,unc\alpha_2^{new,unc}
Wα2=K11α2+K22α22K12α2K11ςy2+K12ςy2+y1y21v1y2+y2v2=0 \frac{\partial W}{\partial \alpha_2} = K_{11}\alpha_2 + K_{22}\alpha_2 -2K_{12}\alpha_2 - K_{11}\varsigma y_2 + K_{12}\varsigma y_2 +y_1y_2 -1 -v_1y_2 +y_2v_2 = 0
整理得:
(K11+K222K12)α2=y2(y2y1+ςK11ςK12+v1v2)=y2[y2y1+ςK11ςK12+(g(x1)j=12yjαjK(x1,xj)b)(g(x2)j=12yjαjK(x2,xj)b)] \begin{aligned} (K_{11} +K_{22}-2K_{12})\alpha_2 &= y_2(y_2-y_1 + \varsigma K_{11} - \varsigma K_{12} + v_1 - v_2) \\ &=y_2\left[y_2-y_1 + \varsigma K_{11} - \varsigma K_{12} + \left(g(x_1) - \sum\limits_{j=1}^{2}y_j\alpha_jK(x_1,x_j) -b\right) - \left(g(x_2) - \sum\limits_{j=1}^{2}y_j\alpha_jK(x_2,x_j) -b\right) \right] \end{aligned}
α1=y1(ςα2y2)\alpha_1 = y_1(\varsigma - \alpha_2y_2) 带入上式:
(K11+K222K12)α2new,unc=y2[y2y1+g(x1)g(x2)+(α1y1+α2oldy2)K11(α1y1+α2oldy2)K12(y1α1K11+y2α2oldK12)+(y1α1K21+y2α2oldK22)]=y2[(K11+K222K12)α2oldy2+y2y1+g(x1)g(x2)]=(K11+K222K12)α2old+y2(E1E2) \begin{aligned} (K_{11} +K_{22}-2K_{12})\alpha_2^{new,unc} &=y_2 [ y_2-y_1 +g(x_1)- g(x_2)+(\alpha_1y_1 + \alpha_2^{old}y_2)K_{11}-(\alpha_1y_1 + \alpha_2^{old}y_2 )K_{12}\\ &\quad-(y_1\alpha_1K_{11}+y_2\alpha_2^{old} K_{12})+(y_1\alpha_1K_{21}+y_2\alpha_2 ^{old}K_{22}) ] \\\\&= 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}
所以:
α2new,unc=α2old+y2(E1E2)K11+K222K12) \alpha_2^{new,unc} = \alpha_2^{old} + \frac{y_2(E_1-E_2)}{K_{11} +K_{22}-2K_{12})}

加上不等式约束,即剪辑后的结果为:
α2new={Hα2new,unc>Hα2new,uncLα2new,uncHLα2new,unc<L \alpha_2^{new}= \begin{cases} H& { \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}
α1oldy1+α2oldy2=α1newy1+α2newy2=ς\alpha_1^{old}y_1 + \alpha_2^{old}y_2 = \alpha_1^{new}y_1 + \alpha_2^{new}y_2 =\varsigma,可得:
α1new=α1old+y1y2(α2oldα2new) \alpha_1^{new} = \alpha_1^{old} + y_1y_2(\alpha_2^{old} - \alpha_2^{new})

选择变量的启发式方法

SMO算法在每个子问题中选择两个变量优化,其中至少一个变量时违反KKT条件的。

第一个变量的选择

SMO称选择第一个变量的过程为外层循环,外层循环选择出不满足KKT条件的样本点。

先来回顾一下KKT条件的对偶互补条件为:
αi(yi(wTxi+b)1+ξi)=0 \alpha_{i}^{*}(y_i(w^Tx_i + b) - 1 + \xi_i^{*}) = 0
g(x)=j=1mαjyjK(x,xj)+bg(x) =\sum\limits_{j=1}^{m}\alpha_j^{*}y_jK(x, x_j)+ b^{*}所以有:
αi=0yig(xi)10<αi<Cyig(xi)=1αi=Cyig(xi)1 \alpha_{i}^{*} = 0 \Rightarrow y_ig(x_i) \geq 1\\ 0 <\alpha_{i}^{*} < C \Rightarrow y_ig(x_i) = 1\\ \alpha_{i}^{*}= C \Rightarrow y_ig(x_i) \leq 1
选择的顺序是:首先选择违反0<αi<Cyig(xi)=10 <\alpha_{i}^{*} < C \Rightarrow y_ig(x_i) = 1 这个条件的点,即在间隔边界上的支持向量点。如果满足,再选择违反 αi=0yig(xi)1αi=Cyig(xi)1\alpha_{i}^{*} = 0 \Rightarrow y_ig(x_i) \geq 1,\alpha_{i}^{*}= C \Rightarrow y_ig(x_i) \leq 1 这个条件的点。

第二个变量的选择

在确定第一个变量α1\alpha_1 的条件下,寻找第二个变量α2\alpha_2 。由公式可知:
α2new,unc=α2old+y2(E1E2)K11+K222K12 \alpha_2^{new,unc} = \alpha_2^{old} + \frac{y_2(E_1-E_2)}{K_{11} +K_{22}-2K_{12}}
可知:α2new\alpha_2^{new} 依赖于E1E2|E_1-E_2| 。选择α2\alpha_2 的一个标准是:使得E1E2|E_1-E_2| 最大。因为α1\alpha_1 已经确定,E1E_1 也确定了。所以:

(1)当E1>0E_1>0 时,选择最小的EiE_i 作为E2E_2

(2)当E10E_1 \leq 0 时,选择最大的EiE_i 作为E2E_2

注:为了节省计算时间。通常把所有的EiE_i 的值保存在一个列表中。

计算阈值b和差值EiE_i

每次完成两个变量的优化后,都要重新计算阈值bb。当0<α1new<C0<\alpha_1^{new}<C 时,由KKT条件:0<αi<Cyig(xi)=10 <\alpha_{i}^{*} < C \Rightarrow y_ig(x_i) = 1 可知:
y1=i=1NαiyiKi1+b1 y_1 = \sum\limits_{i=1}^{N}\alpha_iy_iK_{i1} +b_1
所以:
b1new=y1i=3NαiyiKi1α1newy1K11α2newy2K21 b_1^{new} = y_1 - \sum\limits_{i=3}^{N}\alpha_iy_iK_{i1} - \alpha_{1}^{new}y_1K_{11} - \alpha_{2}^{new}y_2K_{21}
E1E_1 的定义式得:
E1=g(x1)y1=i=3NαiyiKi1+α1oldy1K11+α2oldy2K21+boldy1 E_1 = g(x_1) - y_1 = \sum\limits_{i=3}^{N}\alpha_iy_iK_{i1} + \alpha_{1}^{old}y_1K_{11} + \alpha_{2}^{old}y_2K_{21} + b^{old} -y_1
所以:
y1i=3NαiyiKi1=α1oldy1K11+α2oldy2K21+boldE1 y_1 - \sum\limits_{i=3}^{N}\alpha_iy_iK_{i1} = \alpha_{1}^{old}y_1K_{11} + \alpha_{2}^{old}y_2K_{21} + b^{old} - E_1
带入b1newb_1^{new} 得:
b1new=E1y1K11(α1newα1old)y2K21(α2newα2old)+bold 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}
0<α2new<C0<\alpha_2^{new}<C 时,同理可得:
b2new=E2y1K12(α1newα1old)y2K22(α2newα2old)+bold 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}
所以:
bnew=b1new+b2new2 b^{new} = \frac{b_1^{new} + b_2^{new}}{2}
更新EiE_i:
Ei=SyjαjK(xi,xj)+bnewyi E_i = \sum\limits_{S}y_j\alpha_jK(x_i,x_j) + b^{new} -y_i
其中,SS 是所有支持向量得集合。

SMO算法

输入是m个样本(x1,y1),(x2,y2),...,(xm,ym),{(x_1,y_1), (x_2,y_2), ..., (x_m,y_m),} 其中,$x_i \in \mathcal X = \mathbf R^n $ ,yiY=1,+1i=1,2,Ny_i \in \mathcal Y = {-1,+1},i=1,2\ldots,N,精度ε\varepsilon ;

输出:近似解α^\hat \alpha

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

(2) 选取优化变量α1k,α2k\alpha_1^{k},\alpha_2^{k},解析求解两个变量的最优化问题,求解得最优解α1(k+1),α2(k+1)\alpha_1^{(k+1)},\alpha_2^{(k+1)} ,更新α\alphaαk+1\alpha^{k+1}

(3)若在精度ε\varepsilon 范围内满足停机条件:
i=1mαiyi=0,0αiC,i=1,2...mαik+1=0yig(xi)10<αik+1<Cyig(xi)=1αik+1=Cyig(xi)1 \sum\limits_{i=1}^{m}\alpha_iy_i = 0,\quad 0 \leq \alpha_i \leq C, i =1,2...m \\ \alpha_{i}^{k+1} = 0 \Rightarrow y_ig(x_i) \geq 1 \\ 0 <\alpha_{i}^{k+1} < C \Rightarrow y_ig(x_i) = 1 \\ \alpha_{i}^{k+1}= C \Rightarrow y_ig(x_i) \leq 1
其中:
g(x)=j=1NαjyjK(x,xj)+b g(x) =\sum\limits_{j=1}^{N}\alpha_j^{*}y_jK(x, x_j)+ b^{*}
则转(4),否则令k=k+1k=k+1 ,转(2);

(4)取 α^=α(k+1)\hat \alpha = \alpha^{(k+1)}