SVM算法中目标函数最终是一个关于 a a a向量的函数。本文将通过SMO算法来极小化这个函数。
首先我们再写一下带核函数的优化目标:
m i n ⏟ a 1 2 ∑ i = 1 m ∑ j = 1 m a i a j y i y j K ( x i , x j ) − ∑ i = 1 m a i s . t ∑ i = 1 m a i = 0 0 ≤ a i ≤ C \underbrace{min}_{a} \frac{1}{2}\sum_{i=1}^m \sum_{j=1}^m a_ia_jy_iy_jK(x_i,x_j)-\sum_{i=1}^ma_i\\ s.t \sum_{i=1}^ma_i=0\\ 0\le a_i \le C a min21i=1∑mj=1∑maiajyiyjK(xi,xj)−i=1∑mais.ti=1∑mai=00≤ai≤C
SMO算法则采用了一种启发式的方法。它每次只优化两个变量,将其他的变量都视为常数。由于 ∑ i = 1 m a i = 0 \sum_{i=1}^ma_i=0 ∑i=1mai=0.假如将 a 3 , a 4 , . . . , a m a_3,a_4,...,a_m a3,a4,...,am固定,那么 a 1 a_1 a1, a 2 a_2 a2之间的关系也确定了。这样SMO算法将一个复杂的优化算法转化为一个比较简单的两变量优化问题。为了后面表示方便,定义: K i j = ϕ ( x i ) ⋅ ϕ ( x j ) K_{ij}=\phi(x_i) \cdot \phi(x_j) Kij=ϕ(xi)⋅ϕ(xj)
所以假设我们选择了两个变量: a 1 , a 2 a_1,a_2 a1,a2来作为第一个选择的变量来迭代更新,当然怎么选择也有有原因的,这个后面会讲解。于是其他变量都是常量,那么公式就变为:
m i n ⏟ a i , a j a 1 a 2 y 1 y 2 K 12 + 1 2 a 1 2 K 11 + 1 2 a 2 2 K 22 + 1 2 a 1 y 1 ∑ j = 3 m a j y j K 1 , j + 1 2 a 2 y 2 ∑ j = 3 m a j y j K 2 , j − a 1 − a 2 − ∑ j = 3 m a j s . t a 1 y 1 + a 2 y 2 = − ∑ i = 3 m a i = ε 0 ≤ a i ≤ C , i = 1 , 2 \underbrace{min}_{a_i,a_j}\qquad a_1a_2y_1y_2K_{12}+\frac{1}{2}a_1^2K_{11}+\frac{1}{2}a_2^2K_{22}+\frac{1}{2}a_1y_1\sum_{j=3}^m a_jy_jK_{1,j}+\frac{1}{2}a_2y_2\sum_{j=3}^m a_jy_jK_{2,j}-a_1-a_2-\sum_{j=3}^ma_j\\ s.t \qquad a_1y_1+a_2y_2=-\sum_{i=3}^ma_i=\varepsilon \\ 0\le a_i \le C,i=1,2 ai,aj mina1a2y1y2K12+21a12K11+21a22K22+21a1y1j=3∑majyjK1,j+21a2y2j=3∑majyjK2,j−a1−a2−j=3∑majs.ta1y1+a2y2=−i=3∑mai=ε0≤ai≤C,i=1,2
因为 a 1 y 1 + a 2 y 2 = ε a_1y_1+a_2y_2=\varepsilon a1y1+a2y2=ε,所以得到: a 1 = ε y 1 − a 2 y 2 y 1 a_1=\varepsilon y_1-a_2y_2y_1 a1=εy1−a2y2y1,把 a 1 a_1 a1代入上式,并且为来简单描述,我们必须还用到一些变量来替换公式中的某一类变量:
g ( x ) = w ϕ ( x i ) + b = ∑ j = 1 m a j y j K ( x , x j ) + b v i = ∑ j = 3 m a j y j K i j = g ( x ) − ∑ j = 1 2 a j y j K i j − b = g ( x ) − a 1 y 1 K i 1 − a 2 y 2 K i 2 − b g(x)=w\phi(x_i) +b=\sum_{j=1}^ma_jy_jK(x,x_j)+b \\ v_i=\sum_{j=3}^m a_jy_jK_{ij}=g(x)-\sum_{j=1}^2 a_jy_jK_{ij}-b=g(x)-a_1y_1K_{i1}-a_2y_2K_{i2}-b g(x)=wϕ(xi)+b=j=1∑majyjK(x,xj)+bvi=j=3∑majyjKij=g(x)−j=1∑2ajyjKij−b=g(x)−a1y1Ki1−a2y2Ki2−b
这样 a 1 a_1 a1、 v 1 v_1 v1、 v 2 v_2 v2代入上式,得到 W ( a 1 , a 2 ) W(a_1,a_2) W(a1,a2):
W ( a 1 , a 2 ) = ( ε y 1 − a 2 y 2 y 1 ) a 2 y 1 y 2 K 12 + 1 2 ( ε y 1 − a 2 y 2 y 1 ) 2 K 11 + 1 2 a 2 2 K 22 + 1 2 ( ε y 1 − a 2 y 2 y 1 ) y 1 v 1 + 1 2 a 2 y 2 v 2 − ( ε y 1 − a 2 y 2 y 1 ) − a 2 − ∑ j = 3 m a j W(a_1,a_2)=(\varepsilon y_1-a_2y_2y_1)a_2y_1y_2K_{12}+\frac{1}{2}(\varepsilon y_1-a_2y_2y_1)^2K_{11}+\frac{1}{2}a_2^2K_{22}+\frac{1}{2}(\varepsilon y_1-a_2y_2y_1)y_1v_1+\frac{1}{2}a_2y_2v_2-(\varepsilon y_1-a_2y_2y_1)-a_2-\sum_{j=3}^ma_j W(a1,a2)=(εy1−a2y2y1)a2y1y2K12+21(εy1−a2y2y1)2K11+21a22K22+21(εy1−a2y2y1)y1v1+21a2y2v2−(εy1−a2y2y1)−a2−j=3∑maj
现在 W ( a 1 , a 2 ) W(a_1,a_2) W(a1,a2)公式中只有一个变量 a 2 a_2 a2,求最小值,于是,我们求导:
∂ W ∂ a 2 = K 11 a 2 + K 12 a 2 − 2 K 12 a 2 − K 11 ε y 2 + K 12 ε y 2 + y 1 y 2 − 1 − v 1 y 2 + y 2 v 2 \frac{\partial W}{\partial a_2}=K_{11}a_2+K_{12}a_2-2K_{12}a_2-K_{11}\varepsilon y_2+K_{12}\varepsilon y_2+y_1 y_2 -1- v_1y_2+y_2v_2 ∂a2∂W=K11a2+K12a2−2K12a2−K11εy2+K12εy2+y1y2−1−v1y2+y2v2
让 ∂ W ∂ a 2 = 0 \frac{\partial W}{\partial a_2}=0 ∂a2∂W=0,得到:
a 2 = y 2 ( y 2 − y 1 + K 11 ε − K 12 ε + v 1 − v 2 ) K 11 + K 22 + 2 K 12 a_2=\frac{y_2(y_2-y_1+K_{11}\varepsilon -K_{12}\varepsilon+v_1-v_2)}{K_{11}+K_{22}+2K_{12}} a2=K11+K22+2K12y2(y2−y1+K11ε−K12ε+v1−v2)
这样似乎也算是完事了,但变换一下似乎更好一些,于是,提出一个假设变量 E i E_i Ei:
E i = g ( x i ) − y i = ∑ j = 1 m a j y j K ( x i , x j ) + b − y i E_i=g(x_i)-y_i=\sum_{j=1}^ma_jy_jK(x_i,x_j)+b-y_i Ei=g(xi)−yi=j=1∑majyjK(xi,xj)+b−yi
将变量 E i E_i Ei以及 a 1 y 1 + a 2 y 2 = ε a_1y_1+a_2y_2=\varepsilon a1y1+a2y2=ε代入公式中,有了如下的变换结果:
( K 11 + K 22 + 2 K 12 ) a 2 = ( K 11 + K 22 + 2 K 12 ) a 2 o l d + y 2 ( E 1 − E 2 ) (K_{11}+K_{22}+2K_{12})a_2=(K_{11}+K_{22}+2K_{12})a_2^{old}+y_2(E_1-E_2) (K11+K22+2K12)a2=(K11+K22+2K12)a2old+y2(E1−E2)
于是 a 2 n e w , u n c a_2^{new,unc} a2new,unc:
a 2 n e w , u n c = a 2 o l d + y 2 ( E 1 − E 2 ) K 11 + K 22 + 2 K 12 a_2^{new,unc}=a_2^{old}+\frac{y_2(E_1-E_2)}{K_{11}+K_{22}+2K_{12}} a2new,unc=a2old+K11+K22+2K12y2(E1−E2)
a 2 n e w , u n c a_2^{new,unc} a2new,unc的值并不是最终的更新函数值,因为由于 a 1 a_1 a1、 a 2 a_2 a2的关系被限制在盒子里的一条线段上,所以两变量的优化问题实际上仅仅是一个变量的优化问题。不妨我们假设最终是 a 2 a_2 a2的优化问题。由于我们采用的是启发式的迭代法,假设我们上一轮迭代得到的解是 a 1 o l d a_1^{old} a1old、 a 2 o l d a_2^{old} a2old,假设沿着约束方向 a 2 a_2 a2未经剪辑的解是 a 2 n e w , u n c a_2^{new,unc} a2new,unc,本轮迭代完成后的解为 a 1 n e w a_1^{new} a1new、 a 2 n e w a_2^{new} a2new, a 2 n e w a_2^{new} a2new必须满足上图中的线段约束:
首先 L 的定义是 a 2 a_2 a2的下限:图中红线处(0,-k)点出表示 a 2 a_2 a2的红线处的最小值,于是 L = − k L=-k L=−k,因为 a 1 − a 2 = k a_1-a_2=k a1−a2=k, − k = a 2 − a 1 -k=a_2-a_1 −k=a2−a1,所以 L = − k = a 2 − a 1 L=-k=a_2-a_1 L=−k=a2−a1,
同理对于H,图中黑线(C,C-k),所以 H = C − k H=C-k H=C−k,由于 a 1 − a 2 = k a_1-a_2=k a1−a2=k,所以 H = C − k = C − a 1 + a 2 H=C-k=C-a_1+a_2 H=C−k=C−a1+a2
同时是由于在迭代过程中更新,所以换成上一轮的值: L = a 2 o l d − a 1 o l d L=a_2^{old}-a_1^{old} L=a2old−a1old、 H = C − k = C − a 1 o l d + a 2 o l d H=C-k=C-a_1^{old}+a_2^{old} H=C−k=C−a1old+a2old。综合这两种情况,最终得到:
L = m a x ( 0 , a 2 o l d − a 1 o l d ) H = m i n ( C , C − a 1 o l d + a 2 o l d ) L=max(0,a_2^{old}-a_1^{old}) \\ H=min(C,C-a_1^{old}+a_2^{old}) L=max(0,a2old−a1old)H=min(C,C−a1old+a2old)
L相关的值在红色线上的点(C,k-C),和黑色线的点(k,0),所以:
L = m a x ( 0 , a 1 o l d + a 2 o l d − C ) L=max(0,a_1^{old}+a_2^{old}-C) L=max(0,a1old+a2old−C)
H相关的值在红色线的点(k-C,C)和黑色线的点(0,k),所以:
H = m i n ( C , a 1 o l d + a 2 o l d ) H=min(C,a_1^{old}+a_2^{old}) H=min(C,a1old+a2old)
这其实就是限制了 a i a_i ai的范围,所以选取了两个变量更新之后,某个变量的值更新都满足这些条件,假设求导得到 a 2 n e w , u n c a_2^{new,unc} a2new,unc,于是得到了:
a 2 n e w = { H a 2 n e w , u n c > H a 2 n e w , u n c L < a 2 n e w , u n c < H L a 2 n e w , u n c < L a_2^{new} = \begin{cases} H& a_2^{new,unc}>H\\ a_2^{new,unc}& L
其中
得到 a 1 n e w a_1^{new} a1new和 a 2 n e w a_2^{new} a2new之后,我们可以来计算 b b b,我们先用 a 1 n e w a_1^{new} a1new来得到最新的 b n e w b^{new} bnew,当 0 < a i n e w ≤ C 0
y 1 − ∑ i = 1 m a i y i K i 1 − b 1 = 0 y_1-\sum_{i=1}^{m}a_iy_iK_{i1}-b_1=0\\ y1−i=1∑maiyiKi1−b1=0
转换后得到:
b 1 = y 1 − ∑ i = 3 m a i y i K i 1 − a 1 n e w y 1 K 11 − a 2 n e w y 2 K 21 b_1=y_1-\sum_{i=3}^{m}a_iy_iK_{i1}-a_1^{new}y_1K_{11}-a_2^{new}y_2K_{21} b1=y1−i=3∑maiyiKi1−a1newy1K11−a2newy2K21
同时由于 E 1 = g ( x 1 ) − y 1 = ∑ j = 1 m a j y j K ( x i , x j ) + b − y i = ∑ j = 3 m a j y j K j 1 + a 1 o l d y 1 K 11 + a 2 o l d y 2 K 21 + b o l d − y 1 E_1=g(x_1)-y_1=\sum_{j=1}^ma_jy_jK(x_i,x_j)+b-y_i=\sum_{j=3}^{m}a_jy_jK_{j1}+a_1^{old}y_1K_{11}+a_2^{old}y_2K_{21}+b^{old}-y_1 E1=g(x1)−y1=∑j=1majyjK(xi,xj)+b−yi=∑j=3majyjKj1+a1oldy1K11+a2oldy2K21+bold−y1,替代上述得到更新后的 b 1 n e w b_1^{new} b1new:
b 1 n e w = − E 1 − y 1 K 11 ( a 1 n e w − a 1 o l d ) − y 2 K 21 ( a 2 n e w − a 2 o l d ) + b o l d b_1^{new}=-E_1-y_1K_{11}(a_1^{new}-a_1^{old})-y_2K_{21}(a_2^{new}-a_2^{old})+b^{old} b1new=−E1−y1K11(a1new−a1old)−y2K21(a2new−a2old)+bold
同理可以得到 b 2 n e w b_2^{new} b2new:
b 2 n e w = − E 2 − y 1 K 12 ( a 1 n e w − a 1 o l d ) − y 2 K 22 ( a 2 n e w − a 2 o l d ) + b o l d b_2^{new}=-E_2-y_1K_{12}(a_1^{new}-a_1^{old})-y_2K_{22}(a_2^{new}-a_2^{old})+b^{old} b2new=−E2−y1K12(a1new−a1old)−y2K22(a2new−a2old)+bold
那么问题来了,有两个 b b b,这怎么弄?
b n e w = { b 1 n e w + b 2 n e w 2 a 2 对 应 的 点 是 支 持 向 量 b 1 n e w a 2 对 应 的 点 不 是 支 持 向 量 b^{new} = \begin{cases} \frac{b_1^{new}+b_2^{new}}{2}& a_2对应的点是支持向量 \\ b_1^{new}& a_2对应的点不是支持向量 \end{cases} bnew={2b1new+b2newb1newa2对应的点是支持向量a2对应的点不是支持向量
为什么这么选择?
具体情况参考李航书130页,选择 b n e w = ( b 1 + b 2 ) / 2 b^{new}=(b_1+b_2)/2 bnew=(b1+b2)/2这只是一个工程上的选择而已,因为没有一个确定的b,得到了 b n e w b^{new} bnew之后利用其来更新 E i E_i Ei,公式上述其实有提供,这里再明确一下:
E i n e w = ∑ S y j a j K ( x i , x j ) + b n e w − y i E_i^{new}=\sum_{S}y_ja_jK(x_i,x_j)+b^{new}-y_i Einew=S∑yjajK(xi,xj)+bnew−yi
这里的 S S S是所有的支持向量 x i x_i xi的集合,这里每一个样本 x i x_i xi都对应一个 E i E_i Ei,利用 b n e w b^{new} bnew和 E i n e w E_i^{new} Einew迭代更新。这里的E跟更新 a i a_i ai的表达式场景不同,E1是用于某次迭代中,SMO选中的 a a a对应的计算过程的,而 E i E_i Ei是迭代完毕后,尝试优化更新所有的 E i E_i Ei值的时候。如果只是计算,都是用的这个公式。为什么不用所有支持向量,因为不是支持向量的样本,其值为0,就算放在式子里面也是0,所以可以去掉。
这其中的 E i E_i Ei也在上面的更新 a i a_i ai、 b b b的代码里有提到,这里不详细介绍,大家参考博客来详细了解。
w = ∑ αiyixi ,其中i = 1,2,3,…,N
我们初始化的α是一个全为0的向量,即α1=α2=α3=…=αN=0,w的值即为0.我们进行SMO算法时,每轮挑选出两个变量αi,固定其他的α值,也就是说,那些从来没有被挑选出来过的α,值始终为0,而根据前面所学,支持向量对应的αi是一定满足 0<αi<=C的.有了这个认识之后,为什么不用全集呢,因为不是支持向量的样本点,对应的αi值为0啊,加起来也没有意义,对w产生不了影响,只有支持向量对应的点 (xi,yi)与对应的αi相乘,产生的值才对w有影响啊。从这里也能理解,为什么李航书中,认为支持向量不仅仅是处于间隔边界上的点,还包括那些处于间隔边界和分类超平面之间、分类超平面之上、分类超平面错误的一侧处的点了,因为后面所说的那些点,对应的αi为C,对w的计算可以起到影响作用,换句话说,就是能对w起到影响作用的点,都属于支持向量!
支持向量机原理(四)SMO算法原理
知乎
线性支持向量机中KKT条件的讨论