五、SMO 算法
1、简要介绍
时序最小优化(SMO: Sequential Minimal Optimization)是一种可以快速解决 SVM 中二次规划(QP)问题的简单算法。它的好处有两点:一是不需要额外的矩阵存储,二是不需要对二次规划问题进行数值求解。
与之前的一些算法不同,SMO 算法每一步都是解决一个最小规模的优化问题,对于标准的 SVM QP 问题,最小规模优化问题包含两个
Lagrange
乘子(因为
Lagrange
乘子需要遵循一个线性等式约束,所以至少为两个)。在算法的每一步,我们都选择两个
Lagrange
乘子参与优化,在找到这些乘子的最优值后,用新的值更新 SVM 问题。并且 SMO 算法不需要额外的矩阵存储,所以大规模的 SVM 训练问题也可以在一台普通的计算机上进行处理。
总的来说,SMO 由两部分构成:一是运用探索式方法去选择哪个乘子需要优先优化;二是运用解析的方法去解决两乘子(两个
Lagrange
乘子,以下简称两乘子)优化问题。
2、两乘子优化问题
首先来看看两乘子优化问题,由之前的讨论可知,需要解决的优化问题为:
下面要解决的问题是:在 α=(α1,α2,...,αn) 上求上述目标函数的最小值。为了求解这些乘子,不失一般性,每次从中任意抽取两个乘子 α1 和 α2 ,然后固定 α1 和 α2 以外的其它乘子,使得目标函数只是关于 α1 和 α2 的函数。这样,不断地从一堆乘子中任意抽取两个求解,不断地迭代求解子问题,最终达到求解原问题的目的。
现在对偶问题的子问题的目标函数可以表达为:
Ψ(α)=12K11α21+12K22α22+sK12α1α2+y1α1v1+y2α2v2−α1−α2−Ψconst
其中
并且 s=y1y2 。
在寻找最小值的过程中要满足线性等式约束,即
α1y1+α2y2=w0
其中 w0 为常数。进而得出
α1+sα2=α∗1+sα∗2=w0
于是 α1=w0−sα2 ,将此式带入 Ψ 中并且关于 α2 求导,经整理后得到:
α2=α∗2+y2(E1−E2)η
其中 η=K11+K22−2K12 , E1=u∗1−y1 , E2=u∗2−y2 。
于是
α1=α∗1+s(α∗2−α2)
由于对于每个乘子都有 0<αi<C 的限制,所以对结果还要加上一定的限制。
3、探索式方法寻找需要优先优化的乘子
所谓的探索式选择方法主要思想是每次选择拉格朗日乘子的时候,优先选择样本前面系数满足
0≤αi≤C
的
αi
作优化(称为无界样例),因为在界上(
αi
为
0
或
首先我们来看看加入松弛变量的原始问题的
KKT
条件,根据附录1我们得出相应的
KKT
条件为:
根据 αi 的值,现在考虑以下三种情况:
(1)如果 αi=0 ,则 γi=C−αi=C>0 ,于是 ξi=0 ,所以可以得到
yi(wTxi+b)−1≥0
此时对应于两条间隔线外面的点;
(2)如果 0<αi<C ,则
yi(wTxi+b)+ξi−1=0
又由于 γi=C−αi>0 ,于是 ξi=0 ,代入上式则有
yi(wTxi+b)−1=0
此时对应于两条间隔线上的点;
(3)如果 αi=C ,则
yi(wTxi+b)+ξi−1=0
又由于 γi=C−αi=0 ,于是 ξi≥0 ,代入上式则有
yi(wTxi+b)−1≤0
此时对应于两条间隔线里面的点或者是错分点。
接下来就来讨论一下如何寻找 α1 和 α2 ,对于 α1 ,可以通过刚刚说的那三种不满足 KKT 的条件来找,先对所有样例进行循环,循环中碰到违背 KKT 条件的(不管界上还是界内)都进行迭代更新。等这轮过后,如果没有收敛,第二轮就只针对 0<αi<C 的样例进行迭代更新。在第一个乘子选择后,第二个乘子也使用探索式方法选择,第二个乘子的迭代步长大致正比于 |E1−E2| ,选择第二个乘子能够最大化 |E1−E2| 。即当 E1 为正时选择负的绝对值最大的 E2 ,反之,选择正值最大的 E2 。
最后的收敛条件是在界内( 0<αi<C )的样例都能够遵循 KKT 条件,且其对应的 αi 只在极小的范围内变动(注意:在每次更新完两个乘子的优化后,都需要再重新计算 b ,及对应的
最后感谢几位作者:July,pluskid,John C.Platt
文中很多地方参考了他们之前的文章和博客,非常感谢!