SMO算法(Sequential minimal optimization)要解决的对偶问题

maxα 12i=1mj=1mαiαjy(i)y(j)x(i),x(j)+i=1mαi

s.t. i=1mαiyi=0

0αiC, i=1,...,m

该问题的收敛条件
αi=0y(i)(wTx(i)+b)1αi=Cy(i)(wTx(i)+b)10<αi<Cy(i)(wTx(i)+b)=1

SMO算法中的“minimal”表示我们希望一次迭代改变最小数量的αi,在该算法中只需要改变2个

Coordinate ascent
SMO算法
坐标上升法的特点是,尽管可能需要比较多的迭代次数,但是每一步迭代的代价非常低

SMO算法采用了Coordinate ascent的思想

考虑满足约束条件的α1,α2,...,αm,现在我们采用Coordinate ascent的思想来完成一次迭代,假设我们固定α2,...,αm,取α1进行优化,这样做可行吗?

回答是不可行,因为约束i=1mαiyi=0始终是存在的,这意味着固定α2,...,αm,则α1的取值只能是唯一的,所以不能只取αi进行优化,而应该取一对αiαj进行优化

假设我们固定α3,,αm,取α1α2进行优化

α1y(1)+α2y(2)=ζ

α1α2为坐标轴,画出如下示意图

由于α1α2需要满足下列3个条件
0α1C
0α2C
α1y(1)+α2y(2)=ζ

(α1,α2)可行的位置为图中红色线段,α1α2各自可行的位置为图中绿色线段,换句话说,α1α2的取值范围被各自限定在一个区间内

假设我们选取α2进行优化,并设α2可行的上下界分别为HL,即Lα2H

首先我们利用α1y(1)+α2y(2)=ζ消去α1,最终得到一个只包含α2的式子,这个式子的最高次数为2,可以直接套用公式求出最优解α2(初中就已经学过如何求二次函数的最值)

然后还需要检查α2是否在区间[L,H]内,如果不是,需要进行处理,得到迭代后的α2new,处理方法如下

α2new={(46)Hif α2>H(47)α2if Lα2H(48)Lif α2<L

再利用α1newy(1)+α2newy(2)=ζ求出α1new,此时,本次迭代的工作完成

【重新思考】

假设参数更新前为[α1oldα2oldα3oldα4oldαmold]

我们选择变量α1α2进行更新

参数更新后为[α1newα2newα3oldα4oldαmold]

那么有
α1old+α2old=i=3mαiold=ζ
α1new+α2new=i=3mαiold=ζ

为了计算ζ,可以使用α1old+α2old计算,或者使用i=3mαiold计算,显然,计算简单的是后者

这就是为什么需要使用α1oldα2old的原因

相关文章: