背景
SVM 的学习问题可以形式化为如下凸二次规划的对偶问题:
αmin21i=1∑Nj=1∑NαiαjyiyjK(xi,xj)−i=1∑Nαis.t.i=1∑Nαiyi=00≤αi≤C
在这个问题中,变量是拉格朗日乘子,一个变量αi 对应一个样本点(xi,yi),变量总数等于训练样本总数。这个问题我们通过序列最小最优算法(SMO)来解决。
SMO算法思路:选择两个变量,固定其他变量,针对这两个变量构建一个二次规划问题,这两个变量分别是:(1)违反KTT条件最严重的那个。(2)另一个由约束条件确定。
SMO算法包括下面两个部分:
- 求解两个变量二次规划的解析方法
- 选择变量的启发式方法
两个变量二次规划的求解方法
假设选择两个变量是α1,α2 ,其他变量αi(i=3,4…,N) 是固定的。固定项为常数,可以直接省略。所以SMO的最优化问题可以写成:
α1,α2minW(α1,α2)=s.t. 21K11α12+21K22α22+y1y2K12α1α2+(α1+α2)+y1α1i=3∑NyiαiKil+y2α2i=3∑NyiαiKi2α1y1+α2y2=−i=3∑Nyiαi=ς0⩽αi⩽C,i=1,2
其中,Kij=K(xi,xj),ς 是常数。 最优化问题有两个约束:不等式约束和等式约束。
根据约束条件α1y1+α2y2=k ,yi 的取值只能是1,-1。 且0⩽αi⩽C, 所以(α1,α2) 在平行于盒子[0,C]×[0,C] 的对角线上。如下图所示:

因此要求的目标函数在一条平行于对角线的线段的最优值。这使得两个变量的最优化问题成为实质上的单变量优化问题(α1=k−α2)。
假设原始问题的初始可行解为α1old,α2old,本次迭代的最优解为α1new,α2new,假设沿着约束方向α2未经剪辑(未考虑不等式约束)的解是α2new,unc 。
由于设L、H为α2new 所在对角线的端点。则 α2new 的取值范围必须满足条件:
L≤α2new≤H
当y1=y2 时,如上左图,则:
L=max(0,α2old−α1old)H=min(C,C+α2old−α1old)
当y1=y2 时,如上左图,则:
L=max(0,α2old+α1old−C)H=min(C,α2old+α1old)
所以,最终的α2new 应该要满足以下情况:
α2new=⎩⎪⎨⎪⎧Hα2new,uncLα2new,unc>HL≤α2new,unc≤Hα2new,unc<L
那么应该如何求α2new,unc ?,通过对目标函数求导可以解决。
引入变量:
g(x)=j=1∑mαj∗yjK(x,xj)+b∗Ei=g(xi)−yi=j=1∑mαj∗yjK(xi,xj)+b−yivi=j=3∑myjαjK(xi,xj)=g(xi)−j=1∑2yjαjK(xi,xj)−b
注:Ei 是样本的真实值与预测值的误差。
将v1,v2 带入目标函数:
W(α1,α2)=21K11α12+21K22α22+y1y2K12α1α2−(α1+α2)+y1α1v1+y2α2v2
由α1y1+α2y2=ς,yi2=1 得:
α1=y1(ς−α2y2)
带入W(α1,α2) 消去α1 ,得:
W(α2)=21K11(ς−α2y2)2+21K22α22+y2K12(ς−α2y2)α2−(ς−α2y2)y1−α2+(ς−α2y2)v1+y2α2v2
这样问题就变成了单变量优化问题。接下来我们通过求导来得到α2new,unc :
∂α2∂W=K11α2+K22α2−2K12α2−K11ςy2+K12ςy2+y1y2−1−v1y2+y2v2=0
整理得:
(K11+K22−2K12)α2=y2(y2−y1+ςK11−ςK12+v1−v2)=y2[y2−y1+ςK11−ςK12+(g(x1)−j=1∑2yjαjK(x1,xj)−b)−(g(x2)−j=1∑2yjαjK(x2,xj)−b)]
将α1=y1(ς−α2y2) 带入上式:
(K11+K22−2K12)α2new,unc=y2[y2−y1+g(x1)−g(x2)+(α1y1+α2oldy2)K11−(α1y1+α2oldy2)K12−(y1α1K11+y2α2oldK12)+(y1α1K21+y2α2oldK22)]=y2[(K11+K22−2K12)α2oldy2+y2−y1+g(x1)−g(x2)]=(K11+K22−2K12)α2old+y2(E1−E2)
所以:
α2new,unc=α2old+K11+K22−2K12)y2(E1−E2)
加上不等式约束,即剪辑后的结果为:
α2new=⎩⎪⎨⎪⎧Hα2new,uncLα2new,unc>HL≤α2new,unc≤Hα2new,unc<L
由α1oldy1+α2oldy2=α1newy1+α2newy2=ς,可得:
α1new=α1old+y1y2(α2old−α2new)
选择变量的启发式方法
SMO算法在每个子问题中选择两个变量优化,其中至少一个变量时违反KKT条件的。
第一个变量的选择
SMO称选择第一个变量的过程为外层循环,外层循环选择出不满足KKT条件的样本点。
先来回顾一下KKT条件的对偶互补条件为:
αi∗(yi(wTxi+b)−1+ξi∗)=0
令g(x)=j=1∑mαj∗yjK(x,xj)+b∗所以有:
αi∗=0⇒yig(xi)≥10<αi∗<C⇒yig(xi)=1αi∗=C⇒yig(xi)≤1
选择的顺序是:首先选择违反0<αi∗<C⇒yig(xi)=1 这个条件的点,即在间隔边界上的支持向量点。如果满足,再选择违反 αi∗=0⇒yig(xi)≥1,αi∗=C⇒yig(xi)≤1 这个条件的点。
第二个变量的选择
在确定第一个变量α1 的条件下,寻找第二个变量α2 。由公式可知:
α2new,unc=α2old+K11+K22−2K12y2(E1−E2)
可知:α2new 依赖于∣E1−E2∣ 。选择α2 的一个标准是:使得∣E1−E2∣ 最大。因为α1 已经确定,E1 也确定了。所以:
(1)当E1>0 时,选择最小的Ei 作为E2
(2)当E1≤0 时,选择最大的Ei 作为E2
注:为了节省计算时间。通常把所有的Ei 的值保存在一个列表中。
计算阈值b和差值Ei
每次完成两个变量的优化后,都要重新计算阈值b。当0<α1new<C 时,由KKT条件:0<αi∗<C⇒yig(xi)=1 可知:
y1=i=1∑NαiyiKi1+b1
所以:
b1new=y1−i=3∑NαiyiKi1−α1newy1K11−α2newy2K21
由E1 的定义式得:
E1=g(x1)−y1=i=3∑NαiyiKi1+α1oldy1K11+α2oldy2K21+bold−y1
所以:
y1−i=3∑NαiyiKi1=α1oldy1K11+α2oldy2K21+bold−E1
带入b1new 得:
b1new=−E1−y1K11(α1new−α1old)−y2K21(α2new−α2old)+bold
当0<α2new<C 时,同理可得:
b2new=−E2−y1K12(α1new−α1old)−y2K22(α2new−α2old)+bold
所以:
bnew=2b1new+b2new
更新Ei:
Ei=S∑yjαjK(xi,xj)+bnew−yi
其中,S 是所有支持向量得集合。
SMO算法
输入是m个样本(x1,y1),(x2,y2),...,(xm,ym), 其中,$x_i \in \mathcal X = \mathbf R^n $ ,yi∈Y=−1,+1,i=1,2…,N,精度ε ;
输出:近似解α^
(1)取初值α(0)=0 ,令k=0 。
(2) 选取优化变量α1k,α2k,解析求解两个变量的最优化问题,求解得最优解α1(k+1),α2(k+1) ,更新α 为αk+1 。
(3)若在精度ε 范围内满足停机条件:
i=1∑mαiyi=0,0≤αi≤C,i=1,2...mαik+1=0⇒yig(xi)≥10<αik+1<C⇒yig(xi)=1αik+1=C⇒yig(xi)≤1
其中:
g(x)=j=1∑Nαj∗yjK(x,xj)+b∗
则转(4),否则令k=k+1 ,转(2);
(4)取 α^=α(k+1)