序列最小优化算法

来自testwiki
跳转到导航 跳转到搜索

Template:Infobox Algorithm 序列最小优化算法Template:Lang en, SMO)是一种用于解决支持向量机训练过程中所产生优化问题的算法。SMO由微软研究院Template:Link-en于1998年发明[1],目前被广泛使用于SVM的训练过程中,并在通行的SVM库LIBSVM中得到实现。[2][3] 1998年,SMO算法发表在SVM研究领域内引起了轰动,因为先前可用的SVM训练方法必须使用复杂的方法,并需要昂贵的第三方二次规划工具。而SMO算法较好地避免了这一问题。[4]

问题定义

Template:Main SMO算法主要用于解决支持向量机目标函数的最优化问题。考虑数据集(𝐱𝟏,y1),,(𝐱𝐧,yn)的二分类问题,其中𝐱𝐢是输入向量,yi{1,1}是向量的类别标签,只允许取两个值。一个软间隔支持向量机的目标函数最优化等价于求解以下二次规划问题的最大值:

W=maxαi=1nαi12i=1nj=1nyiyjK(xi,xj)αiαj,
满足:
0αiC, for i=1,2,,n,
i=1nyiαi=0,

其中,C是SVM的参数,而K(𝐱𝐢,𝐱𝐣)核函数。这两个参数都需要使用者制定。

算法

SMO是一种解决此类支持向量机优化问题的迭代算法。由于目标函数为凸函数,一般的优化算法都通过梯度方法一次优化一个变量求解二次规划问题的最大值,但是,对于以上问题,由于限制条件i=1nyiαi=0存在,当某个αiαiold更新到αinew时,上述限制条件即被打破。为了克服以上的困难,SMO采用一次更新两个变量的方法。

数学推导

假设算法在某次更新时更新的变量为α1α2,则其余变量都可以视为常量。为了描述方便,规定

Kij=K(𝐱𝐢,𝐱𝐣),f(𝐱𝐢)=j=1nyjαjKij+b,
vi=f(𝐱𝐢)j=12yjαjKijb

因而,二次规划目标值可以写成

W(α1,α2)=i=1nαi12i=1nj=1nyiyjK(xi,xj)αiαj=α1+α212K11α1212K22α22y1y2K12α1α2y1α1v1y2α2v2+constant

由于限制条件i=1nyiαi=0存在,将α3,,αn,y3,,yn看作常数,则有α1y1+α2y2=C成立(C为常数)。由于yi{1,1},从而α1=γsα2γ为变量y1Cs=y1y2)。取α2为优化变量,则上式又可写成

W(α2)=γsα2+α212K11(γsα2)212K22α22sK12(γsα2)α2y1(γsα2)v1y2α2v2+constant

α2偏导以求得最大值,有

W(α2)α2=s+1+sK11γK11α2K22α2+2K12α2sK12γ+y2v1y2v2=0

因此,可以得到

α2new=y2(y2y1+y1γ(K11K12)+v1v2)K11+K222K12

规定误差项Ei=f(𝐱i)yi,取γ=α1old+sα2old,并规定K=K11+K222K12,上述结果可以化简为

α2new=α2old+y2(E1E2)K

再考虑限制条件0αiC(α1,α2)的取值只能为直线α1y1+α2y2=γ落在[0,C]×[0,C]矩形中的部分。因此,具体的SMO算法需要检查α2new的值以确认这个值落在约束区间之内。[1][5]

算法框架

SMO算法是一个迭代优化算法。在每一个迭代步骤中,算法首先选取两个待更新的向量,此后分别计算它们的误差项,并根据上述结果计算出α2newα1new。最后再根据SVM的定义计算出偏移量𝐛。对于误差项而言,可以根据α1newα2newb的增量进行调整,而无需每次重新计算。具体的算法如下:

1 随机数初始化向量权重αi,并计算偏移b
2 初始化误差项Ei
3 选取两个向量作为需要调整的点
4 令α2new=α2old+y2(E1E2)K
5 如果α2new>V
6     令α2new=V
7 如果α2new<U
8     令α2new=U
9 令α1new=α1old+y1y2(α2oldα2new)
10 利用更新的α1newα2new修改Eib的值
11 如果达到终止条件,则停止算法,否则转3

其中,UVα2new的下界和上界。特别地,有

U={max{0,α2oldα1old}y1y2=1max{0,α1old+α2oldC}y1y2=1,V={min{C,C+α2oldα1old}y1y2=1min{C,α2old+α1old}y1y2=1

这一约束的意义在于使得α1newα2new均位于矩形域[0,C]×[0,C]中。[5]

优化向量选择方法

可以采用启发式的方法选择每次迭代中需要优化的向量。第一个向量可以选取不满足支持向量机KKT条件的向量,亦即不满足

yif(𝐱i){>1αi=0=10<α1<C<1αi=C

的向量。而第二个向量可以选择使得|E1E2|最大的向量。[5]

终止条件

SMO算法的终止条件可以为KKT条件对所有向量均满足,或者目标函数W(α)增长率小于某个阈值,即

W(αt+1)W(αt)W(αt)<T[5]

参考资料

Template:Reflist

参见