在SVM的前三篇里,我们优化的目标函数最终都是一个关于 α 向量的函数。而怎么极小化这个函数,求出对应的 α 向量,进而求出分离超平面我们没有讲。本篇就对优化这个关于 α 向量的函数的SMO算法做一个总结。
回顾SVM优化目标函数
我们首先回顾下我们的优化目标函数:
minα12∑i=1m∑j=1mαiαjyiyjK(xi,xj)−∑i=1mαis.t.∑i=1mαiyi=00≤αi≤C
我们的解要满足的KKT条件的对偶互补条件为:
α∗i(yi(wTxi+b)−1)=0(1)
根据这个KKT条件的对偶互补条件,我们有:
α∗i=0⇒yi(w∗∙ϕ(xi)+b)−1)≥10<α∗i<C⇒yi(w∗∙ϕ(xi)+b)−1)=1α∗i=C⇒yi(w∗∙ϕ(xi)+b)−1)≤1(2)
由于
w∗=∑j=1mα∗jyjϕ(xj),我们令
g(x)=w∗∙ϕ(x)+b=∑j=1mα∗iyjK(x,xj)+b∗,则有:
α∗i=0⇒yig(xi)≥10<α∗i<C⇒yig(xi)=1α∗i=C⇒yig(xi)≤1(3)
SMO算法的基本思想
上面这个优化式子比较复杂,里面有m个变量组成的向量 α 需要在目标函数极小化的时候求出。直接优化时很难的。SMO算法则采用了一种启发式的方法。它每次只优化两个变量,将其他的变量都视为常数。由于 ∑i=1mαiyi=0.假如将 α3,α4,...,αm固定,那么 α1,α2之间的关系也确定了。这样SMO算法将一个复杂的优化算法转化为一个比较简单的两变量优化问题。
为了后面表示方便,我们定义 Kij=ϕ(xi)∙ϕ(xj)
由于 α3,α4,...,αm都成了常量,所有的常量我们都从目标函数去除,这样我们上一节的目标优化函数变成下式:
minα1,α212K11α21+12K22α22+y1y2K12α1α2−(α1+α2)+y1α1∑i=3myiαiKi1+y2α2∑i=3myiαiKi2s.t.α1y1+α2y2=−∑i=3myiαi=常数ς0≤αi≤Ci=1,2(1)(2)(3)
SMO算法目标函数的优化
本部分的总体思路:首先将目标函数看作是一个关于 α1,α2的二元二次函数 W(α1,α2),然后通过条件 α1y1+α2y2=ς将目标函数转化为一个关于 α2的一元二次函数 W(α2),我们的最终目标是求出 W(α2)在参数 α2可行域范围内的函数最小值。
下文第一部分先求出 W(α2)的极值点 αnew,unclipped2。下文第二部分根据约束条件
( α1y1+α2y2=ς,0≤αi≤Ci=1,2)求出 α2的可行域。下文第三部分,分类讨论一元二次函数 W(α2)的最优解 α∗2在 α2的可行域边界取得还是在极值点取得。第四部分通过 α1,α2的关系,由 α2求出 α1.
1. 不考虑约束条件( α1y1+α2y2=ς,0≤αi≤Ci=1,2),对目标函数求极值点
首先我们的目标函数是一个二元二次函数:
W(α1,α2)=12K11α21+12K22α22+y1y2K12α1α2−(α1+α2)+y1α1∑i=3myiαiKi1+y2α2∑i=3myiαiKi2=12K11α21+12K22α22+y1y2K12α1α2−(α1+α2)+y1α1v1+y2α2v2(4)(5)(6)
其中
⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪vi=∑j=3myjαjKij=g(xi)−∑j=12yjajkij−b,i=1,2g(x)=w∙ϕ(x)+b=∑j=1mαiyjK(x,xj)+b(4)
由于 α1y1+α2y2=ς,并且 y2i=1,可以得到用 α2表达 α1的式子:
α1=y1(ς−α2y2)(7)
将上式带入我们的目标优化函数,就可以消除
α1,得到仅仅包含
α2的式子为:
W(α2)=12K11(ς−a2y2)2+12K22α22+y2K12(ς−a2y2)α2−(y1(ς−α2y2)+α2)+(ς−a2y2)v1+y2α2v2(8)(9)
显然
W(α2)是一个一元二次方程,最优解
α∗2只能是约束条件(
0≤αi≤C)规定的可行域的边界值,或者是
W(α2)的极值点。现在我们先对其求极值点,即对
α2求导并令为0得:
∂W(α2)∂α2=(K11+K22−2K12)α2−K11ςy2+K12ςy2+y1y2−1−v1y2+v2y2=0(10)(5)
这时候我们定义
Ei表示预测值
g(xi)与真实值
yi之差:
Ei=g(xi)−yi(6)
这时我们记优化前的解为
αold1,αold2,优化后的解为
αnew1,αnew2,由约束条件
∑i=1myiαi=0,有
αold1y1+αold2y2=αnew1y1+αnew1y2=ς ,即
αnew1y1+αnew1y2=ς(7)
进行下一步化简,将式子(4)(6)(7)代入式子(5),此时求解出的
αnew2未考虑约束条件(
0≤αi≤C),先记为
αnew,unclipped2:
(K11+K22−2K12)αnew,unclipped2=(K11+K22−2K12)αold2+y2(E1−E2)(8)
我们终于得到了
αnew,unclipped2的表达式:
αnew,unclipped2=αold2+y2(E1−E2)K11+K22−2K12(9)
2. 由约束条件( α1y1+α2y2=ς,0≤αi≤Ci=1,2)求出 α2的可行域
上面求出的 αnew,unclipped2没考虑到的约束条件为:
{0≤αi=1,2≤Cα1y1+α2y2=ς
在二维平面上直观表达上述两个约束条件 :
根据式子
α1y1+α2y2=ς,和
y1,y2只能取值
+1或−1,共有四种情况:
(1)当
y1=1,y2=1,此时的表达式为
α1y1+α2y2=ς,那么对应上图中的右边情况。根据
ς的不同取值,我们可以分为下面几种情况来求
α2的可行域:
-
ς<0,因为 0≤αi≤C,所以此时 α1y1+α2y2=ς与方形区域一定没有任何交集,所以此时 α2的可行域为空集.
-
ς=0,此时 α1y1+α2y2=0,此时与方形区域的交点就是(0,0),那么可行域就是 α2=0.
-
0≤ς≤C时,此时对应上图中右边的靠下的那种直线的情况,所以根据直线和方形区域的相交情况,此时可以求出 α2的可行区间为 [0,ς],即 [0,α1+α2].
- 当 C≤ς≤2C时,可以求出此时对应上图右边情况靠上的那种直线,所以此时可以求出的可行区间为 [ς−C,C],即[α1+α2−C,C]
- 当 ς≥2C时,可行域为空寂,且这种情况也不会发生。
综上所述,当 y1=1且y2=1时,此时的 α2可行域在存在的情况下(即不考虑 ς<0、ς≥2C),其实可以这样表示它的区间:
[max(0,α1+α2−C),min(C,α1+α2)]
(2)当
y1=−1且y2=−1 时,此时的表达式是
α1+α2=−ς,那么首先此时的
ς≤0,此时的各种分类其情况和上面的(1)类似。
(3)当 y1=1且y2=−1时,此时的表达式是 α1−α2=ς,根据 ς的不同取值,我们可以分为下面几种情况来求 α2的可行域:
-
ς>C或者ς<−C时,此时直线与方形区域没有交点,所以此时 α2可行域为空集.
-
0<ς≤C 时,此时对应上面的左图中的靠下的那种直线的情况,此时可以计算出 α2的可行域为[0,C−α1+α2] .
- 当 −C≤ς≤0时,此时对应左图中靠上的那种直线的情况,此时可计算出 alpha2的可行域为[α2−α1,C]
综上所述, α2的可行域为[max(0,α1−α2),min(C,C−α2+α2)]
(4)当 y1=−1且y2=1时,情况和(3)类似。
我们设 α2的可行域为 α2∈[L,H],结合上述(1)~(4)种情况,我们得出不同情况下 α2可行域的边界值L、H:
-
当y1≠y2时,L=max(0,αold2−αold1);H=min(C,C+αold2−αold1)
-
当y1=y2时,L=max(0,αold1+αold2−C);H=min(C,αold2+αold1)
3. 对 αnew,unclipped2进行修剪
好了,目前为止我们手头上有一元二次函数 W(α2)的极值点 αnew,unclipped2,和 α2的可行域的边界值L,H。
下文根据 α2的可行域和一元二次函数 W(α2)的开口方向,讨论 W(α2)在何处取得最小值,共分为3种情况:
(1)无论一元二次函数 W(α2)的开口向上还是向下,只要极值点不在可行域内,该函数的最小值就在可行域的边界值取得,这种情况我们只需要比较 W(L)和W(H)的大小,然后取小者就是函数的最小值。
(2)如果 W(α2)的开口向上,且极值点在可行域内,则函数最小值为极值点。
(3)如果 W(α2)的开口向下,该函数的最小值就在可行域的边界值取得,这种情况我们只需要比较 W(L)和W(H)的大小,然后取小者就是函数的最小值。
综合上述三种情况,就可以对 αnew,unclipped2进行修剪了,最优解就可以记为 αnew2:
αnew2=⎧⎩⎨⎪⎪⎪⎪Hαnew,unclipped2Lαnew,unclipped2>HL≤αnew,unclipped2≤Hαnew,unclipped2<L
4. 通过 αnew2求解 αnew1
由 αold1y1+αold2y2=αnew1y1+αnew2y2=ς得:
αnew1=αold1+y1y2(αold2−αnew2)(11)
SMO算法两个变量的选择
1.第一个变量的选择
第一个变量的选择称为外循环,首先遍历整个样本集,选择违反KKT条件的 αi作为第一个变量,接着依据相关规则选择第二个变量(见下面分析),对这两个变量采用上述方法进行优化。当遍历完整个样本集后,遍历非边界样本集 (0<αi<C)中违反KKT的 αi作为第一个变量,同样依据相关规则选择第二个变量,对此两个变量进行优化。当遍历完非边界样本集后,再次回到遍历整个样本集中寻找,即在整个样本集与非边界样本集上来回切换,寻找违反KKT条件的 αi作为第一个变量。直到遍历整个样本集后,没有违反KKT条件 αi,然后退出。
边界上的样本对应的 αi=0或者 αi=C,在优化过程中很难变化。然而非边界样本 (0<αi<C)会随着对其他变量的优化会有大的变化。
![【机器学习】支持向量机原理(四)SMO算法原理 【机器学习】支持向量机原理(四)SMO算法原理](/default/index/img?u=aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzc0Mi83YzI4M2I4YTFmMGEyNGU1ODkwZTBjMzU0OWU2NmRiNi5wbmc=)
2.第二个变量的选择
SMO称第二个变量的选择过程为内循环,假设在外循环中找个第一个变量记为 α1,第二个变量的选择希望能使 α2有较大的变化,由于 α1是依赖于 |E1−E2|,当 E1为正时,那么选择最小的 Ei作为 E2。如果 E1为负,选择最大 Ei作为 E2,通常为每个样本的 Ei保存在一个列表中,选择最大的 |E1−E2|来近似最大化步长。
有时按照上述的启发式选择第二个变量,不能够使得函数值有足够的下降,这时按下述步骤:
首先在非边界集上选择能够使函数值足够下降的样本作为第二个变量;
如果非边界集上没有,则在整个样本集上选择第二个变量;
如果整个样本集依然不存在,则重新选择第一个变量;
计算阈值 bnew、差值 Ei
每完成对两个变量的优化后,要对b的值进行更新,因为b的值关系到预测值 g(x)的计算,即关系到下次优化时 Ei的计算。
求解 bnew的4种情况
1. 如果 0<αnew1<C,由KKT条件 y1(wTx1+b)=1,且 y2i=1,得到 ∑i=1mαiyiKi1+b=yi,所有有:
bnew1=y1−∑i=3mαiyiKi1−αnew1y1K11−αnew2y2K21(12)
将式子(6)代入上式子,得:
bnew1=−E1−y1K11(αnew1−αold1)−y2K21(αnew2−αold2)+bold(13)
2. 如果
0<αnew2<C,则:
bnew2=−E2−y1K12(αnew1−αold1)−y2K22(αnew2−αold2)+bold(14)
3. 如果
α1,α2同时满足
0<αnewi<C,则:
bnew1=bnew2(15)
4. 如果
α1,α2同时不满足
0<αnew1,2<C,那么
bnew1和
bnew2以及它们之间的数都是符合KKT条件的阈值,这时选择它们的中点作为
bnew
更新差值 Ei
根据式子(4),(6),得到:
Ei=g(xi)−yi=∑j=1mαiyjK(x,xj)+bnew−yi(16)
SMO算法总结
输入是m个样本 (x1,y1),(x2,y2),...,(xm,ym),其中 x为 n维特征向量。y为二元输出,值为+1或-1。精度e.
输出值是近似解,向量 α.
1) 取初值 α0=0,k=0, α的上标表示迭代轮数, k 表示当前迭代为第 k 轮.
2) 按照上文的方法依次选取两个参数 αk1,αk2,求出新的 αk+1,unclipped2.
αk+1,unclipped2=αk2+y2(E1−E2)K11+K22−2K12
3)求出
α2可行域的边界值 L,H:
L,H={当y1≠y2时,L=max(0,αk2−αk1);H=min(C,C+αk2−αk1)当y1=y2时,L=max(0,αk1+αk2−C);H=min(C,αk2+αk1)
3)对 αk+1,unclipped2进行修剪:
αk+12=⎧⎩⎨⎪⎪⎪⎪Hαk+1,unclipped2Lαk+1,unclipped2>HL≤αk+1,unclipped2≤Hαk+1,unclipped2<L
4)求出 αk+11:
αk+11=αk1+y1y2(αk2−αk+12)(17)
5)按照上文的规则,求出 bk+1,并更新 Ei:
Ei=g(xi)−yi=∑j=1mαiyjK(x,xj)+bk+1−yi(18)
6)转至步骤2),进入下一轮优化。直到遍历整个样本集后,没有违反KKT条件
αi,然后退出算法。
参考资料
1.支持向量机原理(四)SMO算法原理
2.第三部分:SMO算法的个人理解
3.【机器学习详解】SMO算法剖析