本文针对一般性的“软判断的核函数的对偶问题的SVM”,形如下式:
上式问题所在:当采样点 x i x_i x i 选取50000个点时,则基于核函数变量Θ ( x i , x j ) \bm{\Theta(x_i,x_j)} Θ ( x i , x j ) 将需要大约10GB的RAM来存储Θ ( x i , x j ) \bm{\Theta(x_i,x_j)} Θ ( x i , x j ) 。这里介绍前人所提的SMO算法,以降低存储空间。
一. 算法流程框架
首先,先给出SMO算法的算法流程,如下:
意思是:第一步,选取一对α i \alpha_i α i 和α j \alpha_j α j ,选取方法使用启发式方法。第二步,固定除α i \alpha_i α i 和α j \alpha_j α j 之外的其他参数 ,确定目标函数(即:W ( α ) W(\alpha) W ( α ) 。图片中用W ( α ) W(\alpha) W ( α ) 表示整个目标函数)取得最大值时的α i ∗ \alpha_i^* α i ∗ 的取值,并由α i ∗ \alpha_i^* α i ∗ 计算出α j ∗ \alpha_j^* α j ∗ 。重复迭代上述两步,直到收敛。
SMO之所以高效就是因为在固定其他参数后,对一个参数优化过程很高效。
二. 符号定义与基础回顾
(1)先定义下述三个符号,以便后文表述:
(2)若为线性核函数分类,由基本二分类SVM可知,最后的分类是根据w ∗ T x i + b ∗ w^{*T}x_i+b^* w ∗ T x i + b ∗ 来判断的:若w ∗ T x i + b ∗ > 0 w^{*T}x_i+b^*>0 w ∗ T x i + b ∗ > 0 则判断y i y_i y i 属于某一类,若w ∗ T x i + b ∗ < 0 w^{*T}x_i+b^*<0 w ∗ T x i + b ∗ < 0 则判断y i y_i y i 属于另一类。如果是非线性核函数分类,则是w ∗ T ϕ ( x i ) + b ∗ w^{*T}\phi(x_i)+b^* w ∗ T ϕ ( x i ) + b ∗ 与0的大小比较(但是,在实际核函数模型中,我们没有ϕ ( x i ) \phi(\bm x_i) ϕ ( x i ) 的表达式,往往都是直接给出Θ ( x i , x j ) \bm{\Theta(x_i,x_j)} Θ ( x i , x j ) (而:Θ ( x i , x j ) \bm{\Theta(x_i,x_j)} Θ ( x i , x j ) =ϕ ( x i ) T ϕ ( x j ) \phi(\bm x_i)^T\phi(\bm x_j) ϕ ( x i ) T ϕ ( x j ) )。因此,w ∗ T x i + b ∗ w^{*T}x_i+b^* w ∗ T x i + b ∗ 仅用于线性核函数中,而在非线性核函数里,并不用w ∗ w^{*} w ∗ 来判断分类的结果。虽然不用,但为了完整性,这里还是给出核函数下的w ∗ w^{*} w ∗ ),w ∗ \bm w^* w ∗ 的具体表达式为:
w ∗ = ∑ i α i ∗ y i ϕ ( x i )
\begin{aligned}
\bm{w^*}=\sum_{i}^{}\alpha_i^*y_i\phi(\bm x_i)
\end{aligned}
w ∗ = i ∑ α i ∗ y i ϕ ( x i )
而对标量b ∗ b^* b ∗ 的计算,书上式子(2.75)写道:
(3)符号E i E_i E i 定义如下:
E i = f ( x i ) − y i = ( ∑ j = 1 n y j α j K i j + b ) − y i = ( ∑ j = 1 n y j α j ϕ ( x j ) T ϕ ( x i ) + b ) − y i = ( w ∗ T ϕ ( x i ) + b ) − y i
\begin{aligned}
E_i &=f(\bm x_i)-y_i\\&=(\sum_{j=1}^{n}y_j\alpha_jK_{ij}+b)-y_i
\\&=(\sum_{j=1}^{n}y_j\alpha_j\phi(x_j)^T\phi(x_i)+b)-y_i
\\&=(w^{*T}\phi(x_i)+b)-y_i
\end{aligned}
E i = f ( x i ) − y i = ( j = 1 ∑ n y j α j K i j + b ) − y i = ( j = 1 ∑ n y j α j ϕ ( x j ) T ϕ ( x i ) + b ) − y i = ( w ∗ T ϕ ( x i ) + b ) − y i
显然,E i E_i E i 是函数f ( x ) f(x) f ( x ) 对输入x i x_i x i 的预测值与真实输出值y i y_i y i 之差。(备注:1998年原始参考文献中,预测值f ( x i ) f(x_i) f ( x i ) 用u i u_i u i 表示的,即E i = u i − y i E_i=u_i-y_i E i = u i − y i )
三. 整理目标函数
四. α 2 n e w \alpha_2^{new} α 2 n e w 的推导(不考虑范围约束时)
由于下述约束条件成立:
因此,有
其中,C ′ C' C ′ 是常数。根据式子(2.142),可知:
α 1 = γ − s α 2
\begin{aligned}
\alpha_1 = \gamma -s\alpha_2
\end{aligned}
α 1 = γ − s α 2
其中γ = C ′ y 1 \gamma=C'y_1 γ = C ′ y 1 、s = y 1 y 2 s=y_1y_2 s = y 1 y 2 (因为y 1 y_1 y 1 只能取+1或-1,因此,除以y 1 y_1 y 1 等价于乘以y 1 y_1 y 1 )。带入消除α 1 \alpha_1 α 1 后,我们可将式子(2.141)重新整理为下式:
将上式对α 2 \alpha_2 α 2 求导,并令其为0,得到下式:
解出上式中的α 2 \alpha_2 α 2 为:
上式(2.145)中,α 2 \alpha_2 α 2 有个上角标,是表示此为更新后的α 2 \alpha_2 α 2 ,或者说是最优的α 2 \alpha_2 α 2 ,用α 2 n e w \alpha_2^{new} α 2 n e w 表示。
上式经过下面照片中的推导可以化简,详细推导过程见照片(可省略不看):
推导结果为:(此结果也是1998年中论文的结果)
五. α 2 n e w , r e v i s e d \alpha_2^{new,revised} α 2 n e w , r e v i s e d 的推导
显然,上述分析没有考虑式子(2.97)的约束条件,换句话说,α 2 n e w \alpha_2^{new} α 2 n e w 很可能不在指定区域[ 0 , C ] [0,C] [ 0 , C ] 内,而由于此时已经转化为一元函数求极值问题,所有,如果极点不在区域内,那么最值一定取在边界点,所有,最优的α 2 \alpha_2 α 2 的取值不再是α 2 n e w \alpha_2^{new} α 2 n e w ,应该换符号表示,文中采用α 2 n e w , r e v i s e d \alpha_2^{new,revised} α 2 n e w , r e v i s e d 表示考虑式子(2.97)中约束的新更新变量。故为了分析式子(2.97)的约束条件,有下述两个公式:
(1)当y 1 y_1 y 1 与y 2 y_2 y 2 同号时
(2)当y 1 y_1 y 1 与y 2 y_2 y 2 异号时
解释一下上述公式:
首先将式子(2.142)两侧同时乘以y 1 y_1 y 1 ,由于y 1 y_1 y 1 只能取正负1,故,分类讨论:
(1)解释:当y 1 y_1 y 1 与y 2 y_2 y 2 同号,所以有:
α 1 + α 2 = γ
\begin{aligned}
\alpha_1+\alpha_2=\gamma
\end{aligned}
α 1 + α 2 = γ
由于α 1 \alpha_1 α 1 与α 2 \alpha_2 α 2 只能取[0,C]之间的box内,所以,此时有两种情况,如图:
(2)解释:当y 1 y_1 y 1 与y 2 y_2 y 2 异号时,有:
综合上述两种情况,我们有:
此时得到的α 2 n e w , r e v i s e d \alpha_2^{new,revised} α 2 n e w , r e v i s e d 是完全符合题意的最优的α 2 \alpha_2 α 2 值!下面回带如公式,反求最优的α 1 \alpha_1 α 1 。
六. α 1 n e w \alpha_1^{new} α 1 n e w 的推导
由于式子 (2.142)成立(且,算法流程中已提及,叠代α 1 \alpha_1 α 1 与α 2 \alpha_2 α 2 时,需要固定其余参数,即α 3 \alpha_3 α 3 到α n \alpha_n α n 是固定不变的,只叠代α 1 \alpha_1 α 1 与α 2 \alpha_2 α 2 ),因此,迭代前后的α 1 \alpha_1 α 1 与α 2 \alpha_2 α 2 都满足下式:
y 1 α 1 o l d + y 2 α 2 o l d = C ′
\begin{aligned}
y_1\alpha_1^{old}+y_2\alpha_2^{old}=C'
\end{aligned}
y 1 α 1 o l d + y 2 α 2 o l d = C ′
y 1 α 1 n e w + y 2 α 2 n e w = C ′
\begin{aligned}
y_1\alpha_1^{new}+y_2\alpha_2^{new}=C'
\end{aligned}
y 1 α 1 n e w + y 2 α 2 n e w = C ′
所以有:
y 1 α 1 o l d + y 2 α 2 o l d = y 1 α 1 n e w + y 2 α 2 n e w
\begin{aligned}
y_1\alpha_1^{old}+y_2\alpha_2^{old}=y_1\alpha_1^{new}+y_2\alpha_2^{new}
\end{aligned}
y 1 α 1 o l d + y 2 α 2 o l d = y 1 α 1 n e w + y 2 α 2 n e w
上述左右同时乘以 y1,可解出α 1 n e w \alpha_1^{new} α 1 n e w 如下:
七. KKT条件
下式KKT条件中的f ( x i ) f(x_i) f ( x i ) ,代表在当前w w w 这个分类准则下,输入为x i x_i x i 时,输出的分类预测结果。
(但我不太清楚这个是怎么推出来的,求解释)这个KKT条件说明,在两条间隔线外面的点,对应前面的系数α i \alpha_i α i 为0(即距离线很远且不起作用的点),在两条间隔线里面的对应α i \alpha_i α i 为C,在两条间隔线上的对应的系数α i \alpha_i α i 在0和C之间。
八. b b b 的推导
(1)先说结论:
(2)再说结论的证明过程:
之所以要更新E i E_i E i ,是因为这个变量有两个作用,一是用以作为第二个乘子的选取因子;二是用以作为判断算法终止的条件!
九. SMO应用流程
下面是SMO算法详细流程,该流程比本文第一节中的要详细,可用于实际应用中:
其中,用启发式算法选取点的原则为:
十. 其余说明:
(1)论文中说,如果采用的是线性核函数,那么久按照如下方式更新w n e w \bm w^{new} w n e w :
w n e w = w + y 1 ( α 1 n e w − α 1 ) x 1 + y 2 ( α 2 n e w , r e v i s e d − α 2 ) x 2
\begin{aligned}
\bm w^{new}=\bm w+y_1(\alpha_1^{new}-\alpha_1)\bm x_1+y_2(\alpha_2^{new,revised}-\alpha_2)\bm x_2
\end{aligned}
w n e w = w + y 1 ( α 1 n e w − α 1 ) x 1 + y 2 ( α 2 n e w , r e v i s e d − α 2 ) x 2
上式的结论依据以下两个公式便可得到:
看完这句话以后我误会了好久,仔细看公式才发现,之所以文中说“线性核函数”才更新w n e w \bm w^{new} w n e w ,是因为这里的更新公式中没有ϕ ( . ) \phi(.) ϕ ( . ) ,换言之,并不是w \bm w w 只能用于线性,而是这里的公式没有加核,所以,这个公式里的w \bm w w 只能用于线性。若改为下式,则任何满足题意的核,都可以用此式来分类:
w n e w = w + y 1 ( α 1 n e w − α 1 ) ϕ ( x 1 ) + y 2 ( α 2 n e w , r e v i s e d − α 2 ) ϕ ( x 2 )
\begin{aligned}
\bm w^{new}=\bm w+y_1(\alpha_1^{new}-\alpha_1)\bm \phi(x_1)+y_2(\alpha_2^{new,revised}-\alpha_2)\bm \phi(x_2)
\end{aligned}
w n e w = w + y 1 ( α 1 n e w − α 1 ) ϕ ( x 1 ) + y 2 ( α 2 n e w , r e v i s e d − α 2 ) ϕ ( x 2 )
(按照更新α 1 \alpha_1 α 1 与α 2 \alpha_2 α 2 的方式,来更新所有需要更新的α i \alpha_i α i ,全部训练并更新完后,便可将该模型用于分类,最终的w n e w \bm w^{new} w n e w 可按照上述更新两个参数的方式来推导,但是正如前文所述说,实际中直接给出的是Θ ( x i , x j ) \bm{\Theta(x_i,x_j)} Θ ( x i , x j ) 的矩阵取值(Θ ( x i , x j ) \bm{\Theta(x_i,x_j)} Θ ( x i , x j ) =ϕ ( x i ) T ϕ ( x j ) \phi(\bm x_i)^T\phi(\bm x_j) ϕ ( x i ) T ϕ ( x j ) ),并非ϕ ( x i ) \phi(\bm x_i) ϕ ( x i ) 。因此,非线性核函数下的w n e w \bm w^{new} w n e w 没有实际用处,仅用于求解b n e w b^{new} b n e w
(2)另外一个待更新资料:
下文中,迭代的终止条件是两次叠代的α o l d \alpha_{old} α o l d 与α n e w \alpha_{new} α n e w 所对应的f i o l d f_i^{old} f i o l d 与f i n e w f_i^{new} f i n e w 之间的数值小于某个数时,则终止叠代。毕竟选取的α 1 \alpha_1 α 1 都是那些不满足KKT条件的,当都满足以后,自然每次叠代α \alpha α 后,其f f f 改进就会很小了。
算法中,各个所需的阿尔法求解完毕后(即样本训练结束以后),最终应用时分类的原则为:
参考资料:
[1] 《Sequential Minimal Optimization:
A Fast Algorithm for Training Support Vector Machines》 作者:John C. Platt 时间:1998 (SMO原文)
[2] 《Selected Applications of Convex Optimization》作者:Li Li
[3] 学习网址1
[4] 学习网址2
[5] SMO算法的matiab代码下载网址1
[6] SMO算法的matiab代码下载网址2