详解SVM系列(六):深入解析 序列最小最优化SMO算法一

SMO算法是干啥的

首先要先搞明白一个基本的问题: SMO算法是干啥的?
通过前面的介绍,我们现在掌握了线性不可分支持向量机。其形式为如下的凸二次规划:
m i n 1 2 i = 1 N J = 1 N α i α j y i y j K ( x i x j ) i = 1 N α i min\frac{1}{2}\displaystyle\sum_{i=1}^{N}\displaystyle\sum_{J=1}^{N}α_iα_jy_iy_jK(x_ix_j)-\displaystyle\sum_{i=1}^{N}α_i
s . t . i = 1 N α i y i = 0 s.t.\displaystyle\sum_{i=1}^{N}α_iy_i=0
0 α i C 0≤α_i≤C
但是到现在为止,都没有讲解到底如何求解其中的参数 α α (通过对偶形式求解, α α 是拉格朗日乘子)
如果我们找到了一个 α α 向量, α = α 1 , α 1 , α N α=(α_1,α_1,……α_N) 是最优解,就可以利用KKT条件来计算出原问题的最优解 ( w , b ) (w,b)
w = i = 1 N α i y i x i w=\displaystyle\sum_{i=1}^{N}α_iy_ix_i
取一个 α i > 0 , b = y i w T x i α_i >0,b=y_i-w^Tx_i 就可以得到分离超平面。

那么问题来了,针对一个这样的凸二次规划问题,如何求解?难点在哪?
现有的求解凸二次规划问题的算法,都有一个瓶颈,那就是当训练样本的容量非常大时,算法往往变的比较低效,甚至无法求解。

SMO算法是如何求解这个凸二次规划问题的呢?它没有想着怎么去直接让目标函数变小,而是采用一个启发式算法,想着法的让这些 α α 变量满足KKT条件。因为KKT条件是该最优化问题的充分必要条件。
具体怎么优化 α α ?在优化的过程中需要遵循2个基本原则:
1)每次优化时,必须同时优化 α = α 1 , α 2 , α N α=(α_1,α_2,……α_N) 的两个分量,因为只优化一个分量的话,新的 α α 向量就不再满足KKT条件里面的初始限制条件中的等式约束了( s . t . i = 1 N α i y i = 0 s.t.\displaystyle\sum_{i=1}^{N}α_iy_i=0
2)每次优化的两个分量应当是违反KKT条件比较多的,还有一个重要的考量,就是经过一次优化后,两个分量要有尽可能多的改变,这样才能用尽可能少的迭代优化次数让它们得到最优解。

SMO算法是一种 启发式算法,其基本思路是:
1)如果 α = α 1 , α 2 , α N α=(α_1,α_2,……α_N) 的每一个分量都满足该二次规划的KKT条件,那么这个最优化问题的解就得到了。(因为KKT条件是该最优化问题的充分必要条件)
2)否则,一次选择两个变量,固定其他变量,针对这两个变量构建一个二次规划问题。这个二次规划问题关于这两个变量的解应该更接近原始二次规划问题的解,因为这会使得原始二次规划问题的目标函数值变的更小。更重要的是,这时子问题可以通过解析方法求解,这样就可以大大提高整个算法的计算速度。
3)子问题有两个变量,一个是违反KKT条件最严重的那一个(怎么衡量严重性?),另一个由约束条件自动确定(没那么简单)。,如此SMO算法不断将原问题分解为子问题并对子问题求解,进而得到求解原问题的目的。

两个变量的二次规划求解方法

先不考虑具体如何选择两个变量 α 1 , α 2 α_1,α_2 ,我们先来看下如何求解二次规划问题。
不失一般性,假设选择的两个变量时 α 1 , α 2 α_1,α_2 ,其他变量 α i ( i = 3 , 4 , N ) α_i(i=3,4,……N) 是固定的。于是SMO的最优化问题:
m i n 1 2 i = 1 N J = 1 N α i α j y i y j K ( x i x j ) i = 1 N α i min\frac{1}{2}\displaystyle\sum_{i=1}^{N}\displaystyle\sum_{J=1}^{N}α_iα_jy_iy_jK(x_ix_j)-\displaystyle\sum_{i=1}^{N}α_i
s . t . i = 1 N α i y i = 0 s.t.\displaystyle\sum_{i=1}^{N}α_iy_i=0
0 α i C 0≤α_i≤C
可以写成下面的形式:
m i n α 1 , α 2 W ( α 1 , α 2 ) = 0.5 K 11 α 1 2 + 0.5 K 22 α 2 2 + y 1 y 2 K 12 α 1 α 2 ( α 1 + α 2 ) + y 1 α 1 v 1 + y 2 α 2 v 2 + C o n s t a n t min_{α_1,α_2}W(α_1,α_2)=0.5K_{11}α_1^2+0.5K_{22}α_2^2+y_1y_2K_{12}α_1α_2-(α_1+α_2)+y_1α_1v_1+y_2α_2v_2+Constant ____________________________(1)
其中, v i = j = 3 N α j y j K ( x i , x j ) , i = 1 , 2 v_i=\displaystyle\sum_{j=3}^{N}α_jy_jK(x_i,x_j),i=1,2
C o n s t a n t = j = 3 N α j Constant=\displaystyle\sum_{j=3}^{N}α_j ,不和 α 1 , α 2 α_1,α_2 有关,直接去掉即可。
约束条件变成下面:
等式约束: y 1 α 1 + y 2 α 2 = j = 3 N α j y j = ζ ( ) y_1α_1+y_2α_2=-\displaystyle\sum_{j=3}^{N}α_jy_j=ζ(常数)
不等式约束: 0 α i C , i = 1 , 2 0≤α_i≤C,i=1,2

为了求解2个变量的二次规划问题,首先分析约束条件,然后在此约束条件下求极小值(从这句话可以看出求解这个二次规划的思路,先分析约束条件,在可行域中求最小值
1)因为对于一个关于 α 1 , α 2 α_1,α_2 的二次函数(根据等式约束本质上是一个一元二次的函数),求其极小值十分简单,只需要求导令其导数为0即可
2) 但是对于一个有约束的问题,还要考虑其定义域(可行域),你的极值点不在可行域里怎么处理?(不在可行域的话要考察其边界点,初中数学的知识)

所以我们先来看这个问题的可行域是什么样子的?
1)首先由于不等式约束 0 α i C , i = 1 , 2 0≤α_i≤C,i=1,2 ,则 α 1 , α 2 α_1,α_2 在一个[0,C]X[0,C]的矩形里面,
2)由等式约束 y 1 α 1 + y 2 α 2 = ζ ( ) y_1α_1+y_2α_2=ζ(常数) ,使得 α 1 , α 2 (α_1,α_2) 在平行于矩形[0,C]X[0,C]的对角线的直线上。

因此要求的是目标函数在一条平行于对角线的线段上的最优值。如下图所示:
在这里插入图片描述
如何理解上面的两个图:
上面的图说白了就是等式约束 y 1 α 1 + y 2 α 2 = ζ ( ) y_1α_1+y_2α_2=ζ(常数) 和不等式约束 0 α i C , i = 1 , 2 0≤α_i≤C,i=1,2 的几何解释:
我们可以这样理解:
1)首先对于等式约束 y 1 α 1 + y 2 α 2 = ζ y_1α_1+y_2α_2=ζ y 1 , y 2 y_1,y_2 的取值只能是+1或者-1,上图中左边的图对应着 y 1 y 2 y_1≠y_2 的情况,右边对应着 y 1 = y 2 y_1=y_2 的情况
2)那有人说了,为啥左边的图形中要画两条线?其实这个事SMO论文里面的图,我觉得应该再加上一条线,那就是矩形的对角线,为啥?因为对角线是 α 1 , α 2 α_1,α_2 大小的分界线。

搞清楚了这两点,我们接下来分析可行域(考虑 α 2 α_2
先看左边的图,即 y 1 y 2 y_1≠y_2 的情况,此时 α 1 α 2 = ζ α_1-α_2=ζ
1)当 ζ ζ < C ζ>C或者ζ<-C ,很明显此时的直线与方形区域没有交点,此时 α 2 α_2 的可行域为空集
2)当 0 < ζ < C 0<ζ<C 时,此时对应左边图中靠下的那条直线,此时 α 2 0 C ζ 0 C α 1 + α 2 α_2取值范围(0,C-ζ)即(0,C-α_1+α_2)
3)当 C < ζ < 0 -C<ζ<0 ,此时对应着左边图中靠上的那条直线,此时 α 2 α 2 α 1 C α_2取值范围(α_2-α_1,C)
综上所述: α 2 [ m a x ( 0 , α 2 α 1 ) , m i n ( C , C α 1 + α 2 ) ] α_2的可行域为[max(0,α_2-α_1),min(C,C-α_1+α_2)]

对于右边的图:此时 α 1 + α 2 = ζ α_1+α_2=ζ
1)当 ζ 2 ζ < 0 ζ>2C或者ζ<0 时,显然直线与方形区域没有交点,此时 α 2 α_2 的可行域为空集
2)当 0 < ζ < C 0<ζ<C 时,对应靠下的那条直线,此时此时 α 2 0 α 1 + α 2 α_2取值范围(0,α_1+α_2)
3)当 C < ζ < 2 C C<ζ<2C 时,对应靠上的那条直线,此时此时 α 2 α 1 + α 2 C C α_2取值范围(α_1+α_2-C,C)
综上所述: α 2 [ m a x ( 0 , α 2 + α 1 C ) , m i n ( C α 1 + α 2 ) ] α_2的可行域为[max(0,α_2+α_1-C),min(C,α_1+α_2)]

下面首先求沿着约束方向未经剪辑(即未考虑不等式约束 0 α i C , i = 1 , 2 0≤α_i≤C,i=1,2 )的情况下, α 2 α_2 的最优解 α 2 n e w , u n c α_2^{new,unc}
首先根据等式约束 y 1 α 1 + y 2 α 2 = ζ y_1α_1+y_2α_2=ζ y i 2 = 1 y_i^2=1 可以用 α 2 α_2 代替 α 1 α_1
α 1 = ( ζ α 2 y 2 ) y 1 α_1=(ζ-α_2y_2)y_1 α 1 α_1 带入上面的式子 W ( α 1 , α 2 ) W(α_1,α_2) 得到

W ( α 2 ) = 0.5 K 11 [ ( ζ α 2 y 2 ) y 1 ] 2 + 0.5 K 22 α 2 2 + y 2 K 12 ( ζ α 2 y 2 ) α 2 ( ζ α 2 y 2 ) y 1 α 2 + v 1 ( ζ α 2 y 2 ) + y 2 v 2 α 2 W(α_2)=0.5K_{11}[(ζ-α_2y_2)y_1]^2+0.5K_{22}α_2^{2}+y_2K_{12}(ζ-α_2y_2)α_2-(ζ-α_2y_2)y_1-α_2+v_1(ζ-α_2y_2)+y_2v_2α_2
接下来对唯一的变量 α 2 α_2 求导令其等于0:
得到:
Δ W Δ α 2 = K 11 α 2 + K 22 α 2 2 K 12 α 2 K 11 ζ y 2 + K 12 ζ y 2 + y 1 y 2 1 v 1 y 2 + y 2 v 2 \frac{ΔW}{Δα_2}=K_{11}α_2+K_{22}α_2-2K_{12}α_2-K_{11}ζy_2+K_{12}ζy_2+y_1y_2-1-v_1y_2+y_2v_2
令其等于0,得到:
( K 11 2 K 12 + K 22 ) α 2 = y 2 ( y 2 y 1 + K 11 ζ K 12 ζ + v 1 v 2 ) (K_{11}-2K_{12}+K_{22})α_2=y_2(y_2-y_1+K_{11}ζ-K_{12}ζ+v_1-v_2)
( K 11 2 K 12 + K 22 ) α 2 = y 2 [ y 2 y 1 + K 11 ζ K 12 ζ + ( g ( x 1 ) j = 1 2 y j α K 1 j b ) ( g ( x 2 ) j = 1 2 y j α K 2 j b ) ] (K_{11}-2K_{12}+K_{22})α_2=y_2[y_2-y_1+K_{11}ζ-K_{12}ζ+(g(x_1)-\displaystyle\sum_{j=1}^{2}y_jαK_{1j}-b)-(g(x_2)-\displaystyle\sum_{j=1}^{2}y_jαK_{2j}-b)]
(把 ( v 1 , v 2 ) g ( x 1 ) j = 1 2 y j α K 1 j b g ( x 2 ) j = 1 2 y j α K 2 j b ) (v_1,v_2)分别用g(x_1)-\displaystyle\sum_{j=1}^{2}y_jαK_{1j}-b与g(x_2)-\displaystyle\sum_{j=1}^{2}y_jαK_{2j}-b)代替 )
再将 α 1 o l d y 1 + α 2 o l d y 2 = ζ α_1^{old}y_1+α_2^{old}y_2=ζ 带入得:
( K 11 2 K 12 + K 22 ) α 2 n e w , u n c = y 2 ( ( K 11 2 K 12 + K 22 ) α 2 o l d y 2 + y 2 y 1 + g ( x 1 ) g ( x 2 ) ) (K_{11}-2K_{12}+K_{22})α_2^{new,unc}=y_2((K_{11}-2K_{12}+K_{22})α_2^{old}y_2+y_2-y_1+g(x_1)-g(x_2))

( K 11 2 K 12 + K 22 ) α 2 n e w , u n c = ( K 11 2 K 12 + K 22 ) α 2 o l d + y 2 ( E 1 E 2 ) (K_{11}-2K_{12}+K_{22})α_2^{new,unc}=(K_{11}-2K_{12}+K_{22})α_2^{old}+y_2(E_1-E_2)

η = K 11 2 K 12 + K 22 η=K_{11}-2K_{12}+K_{22} 带入,于是得到

α 2 n e w , u n c = α 2 o l d + y 2 ( E 1 E 2 ) η α_2^{new,unc}=α_2^{old}+\frac{y_2(E_1-E_2)}{η}

考虑约束条件,即要满足不等式约束则:
在这里插入图片描述

变量的选择方法

上面已经介绍了如何求解2个变量的最优化问题,前提是从N个变量里面已经取出来了2个变量了。现在讨论的是如何高效的从这N个变量中选择出两个变量进行优化。

1)优化违反KKT条件的参数 α α 可以减少目标函数的值,所以我们在寻找 α 1 α 2 α_1和α_2 时,就是要找那些违反KKT条件的样本。
2)SMO算法在每个子问题中都选择两个变量优化,其中至少一个变量是违反KKT条件的。

第一个变量的选择:
SMO称选择第1个变量的过程称作外层循环。外层循环在训练样本中选取违反KKT条件最严重的样本点,并将其对应的变量作为第一个变量。
具体,检验训练样本点 ( x i , y i ) (x_i,y_i) 是否满足KKT条件:即
α i = 0 y i g ( x i ) 1 α_i=0等价于y_ig(x_i)≥1 (非支持向量) (1)
0 α i C y i g ( x i ) = 1 0<α_i<C等价于y_ig(x_i)=1 (边界上的支持向量)(2)
α i = C y i g ( x i ) 1 α_i=C等价于y_ig(x_i)≤1 (边界内的支持向量)(3)
其中, g ( x i ) = j = 1 N α j y j K ( x i , x j ) + b g(x_i)=\displaystyle\sum_{j=1}^{N}α_jy_jK(x_i,x_j)+b
(上面的KKT条件是从原始KKT条件推导过来的,推导过程很简单)

我们如何理解违反KKT条件的呢?
1)我是这样理解的,首先我们的样本可以分成2大类,3小类:即 非支持向量与支持向量,其中支持向量又可细分为 边界上的支持向量( 0 α i C y i g ( x i ) = 1 0<α_i<C等价于y_ig(x_i)=1 )与边界内的支持向量( α i = C y i g ( x i ) 1 α_i=C等价于y_ig(x_i)≤1
2)那这三种样本都可能违反KKT条件。首先我们要根据 α i α_i 的取值(是等于0?大于0小于C?还是等于C)来判断该样本的类别;然后再拿相应的标准衡量(是 y i g ( x i ) 1 y_ig(x_i)≥1 ?还是 y i g ( x i ) = 1 y_ig(x_i)=1 ?或者 y i g ( x i ) < 1 y_ig(x_i)<1 )是否违反了KKT条件
3)那这三种样本都可能违反KKT条件,那么我们在选择第一个变量的时候怎么选呢?有没有什么规则?如果我们不区分优先级遍历整个数据集的话,无疑效率是不高的。
SMO算法要求,在检验过程中,外层循环首先遍历所有满足条件( 0 α i C 0<α_i<C )的样本点,即在间隔边界上的支持向量点,检验他们是否满足KKT条件?
如果这些样本点都满足KKT条件,那么遍历整个训练集,检验它们是否满足KKT条件。

第2个变量的选择:
SMO称选择第2个变量的过程称作内层循环。假设在外层循环中已经找到第1个变量 α 1 α_1 ,现在要在内层循环中找第2个变量 α 2 α_2 ,第2个变量选择的标准是希望能使 α 2 α_2 有足够的变化。

α 2 n e w , u n c = α 2 o l d + y 2 ( E 1 E 2 ) η α_2^{new,unc}=α_2^{old}+\frac{y_2(E_1-E_2)}{η} 可知, α 2 n e w α_2^{new} 是依赖于 E 1 E 2 |E_1-E_2| 的,为了加快计算速度,一种简单的做法是选择 α 2 α_2 ,使其对应的 E 1 E 2 |E_1-E_2| 最大。因为 α 1 α_1 已定, E 1 E_1 也已经确定。如果 E 1 E_1 是正的,那么选择最小的 E i E_i 作为 E 2 E_2 ,如果 E 1 E_1 是负的,选择最大的 E i E_i 作为 E 2 E_2 ,为了节省计算时间,将所有的 E i E_i 值保存在一个列表中。

在特殊情况下,如果内层循环通过以上方法选择的 α 2 α_2 不能使目标函数有足够大的下降,那么采用以下启发式规则继续选择 α 2 α_2

遍历在间隔边界上的支持向量点,依次将其对应的变量作为 α 2 α_2 试用,直到目标函数有足够的下降。如果在这些支持向量里面找不到合适的变量 α 2 α_2 ,那么遍历训练数据集,若仍旧找不到合适的 α 2 α_2 ,则放弃第1个 α 1 α_1 ,再通过外层循环寻找另外的 α 1 α_1

说白了就是一个查找顺序的问题:在 α 1 α_1 确定的其概况下,先找能使 E 1 E 2 |E_1-E_2| 最大的变量作为 α 2 α_2 ,如果这样的 α 2 α_2 不能使得目标函数有足够的下降;则去支持向量里面遍历,依次作为 α 2 α_2 ,如果还是不行,则在整个训练数据集里面查找,如果还不行,那么说明第一个变量 α 1 α_1 选的不合适,那么再次通过外层循环选择新的 α 1 α_1

计算阀值b和差值 E i E_i
在每次完成两个变量的优化后,都要重新计算阀值b(因为在内层循环中计算误差 E i E_i 需要用到新的b)
0 < α 1 n e w < C 0<α_1^{new}<C 由KKT y i g ( x i ) = 1 y_ig(x_i)=1 条件可知:
i = 1 N α i y i K i 1 + b = y 1 \displaystyle\sum_{i=1}^{N}α_iy_iK_{i1}+b=y_1
于是
b 1 n e w = y 1 i = 3 N α i y i K i 1 α 1 n e w y 1 K 11 α 2 n e w y 2 K 21 b_1^{new}=y_1-\displaystyle\sum_{i=3}^{N}α_iy_iK_{i1}-α_1^{new}y_1K_{11}-α_2^{new}y_2K_{21}
E 1 E_1 的定义式: E i = g ( x i ) y i = ( j = 1 N α j y j K ( x j , x i ) + b ) y i E_i=g(x_i)-y_i=(\displaystyle\sum_{j=1}^{N}α_jy_jK(x_j,x_i)+b)-y_i
得到:
E 1 = ( j = 3 N α j y j K ( x j , x i ) + α 1 o l d y 1 K 11 + α 2 o l d y 2 K 21 + b o l d y 1 E_1=(\displaystyle\sum_{j=3}^{N}α_jy_jK(x_j,x_i)+α_1^{old}y_1K_{11}+α_2^{old}y_2K_{21}+b^{old}-y_1
y 1 i = 3 N α i y i K i 1 = E 1 + α 1 o l d y 1 K 11 + α 2 o l d y 2 K 21 + b o l d y_1-\displaystyle\sum_{i=3}^{N}α_iy_iK_{i1}=-E_1+α_1^{old}y_1K_{11}+α_2^{old}y_2K_{21}+b^{old}
带入 b 1 n e w b_1^{new} 的迭代式子:
b 1 n e w = E 1 y 1 K 11 ( α 1 n e w α 1 o l d ) y 2 K 21 ( α 2 n e w α 2 o l d ) + b o l d b_1^{new}=-E_1-y_1K_{11}(α_1^{new}-α_1^{old})-y_2K_{21}(α_2^{new}-α_2^{old})+b^{old}
同理:
如果 0 < α 2 n e w < C 0<α_2^{new}<C ,那么
b 2 n e w = E 2 y 1 K 12 ( α 1 n e w α 1 o l d ) y 2 K 22 ( α 2 n e w α 2 o l d ) + b o l d b_2^{new}=-E_2-y_1K_{12}(α_1^{new}-α_1^{old})-y_2K_{22}(α_2^{new}-α_2^{old})+b^{old}
1)如果 α 1 n e w , α 2 n e w α_1^{new},α_2^{new} 同时满足条件 0 < α i n e w < C 0<α_i^{new}<C ,那么 b 1 n e w = b 2 n e w b_1^{new}=b_2^{new}
2)如果 α 1 n e w , α 2 n e w α_1^{new},α_2^{new} 是0或者C,那么 b 1 n e w b 2 n e w b_1^{new}和b_2^{new} 以及他们之间的数都是符合KKT条件的阀值,这是选择他们的中点作为 b n e w b^{new}

在每次完成两个变量的优化之后,还必须更新对应的 E i E_i 值,并将他们保存在列表中。
E i E_i 值的更新要用到 b n e w b^{new} ,以及所有支持向量对应的 α j α_j
E i n e w = S y j α j K ( x i , x j ) + b n e w y i E_i^{new}=\displaystyle\sum_{S}y_jα_jK(x_i,x_j)+b^{new}-y_i
其中,S是所有支持向量 x j x_j 的集合。

猜你喜欢

转载自blog.csdn.net/qq_16608563/article/details/83899051