支持向量機 三:序列最小最優化算法---SMO

一、SMO的背景介紹

序列最小最優化算法(sequential minimal optimization,SMO)於1998年被John Platt發明,是一種用於解決支持向量機訓練期間出現的二次規劃問題的算法。在SMO之前也有一些算法用於解決此類問題,但是這些算法都比較複雜,所以高效的SMO提出之時就在SVM社區引起了一陣轟動。

二、從SVM說起—SMO要解決什麼

如何優化SVM的參數?首先我們通過拉格朗日乘子法建立拉格朗日函數,再根據拉格朗日的對偶性求解極大極小值問題。這些,我已經在《支持向量機一:線性支持向量機介紹》、《支持向量機二:非線性支持向量機》中介紹,感興趣的朋友可以看一下。
非線性優化最終要解決一個二次規劃問題,即mina  12i=1Nj=1NaiajyiyjK(xi,xj)i=1Nai  ...  (1) s.t.  i=1Naiyi=0,   i=1,2,.,N  ...  (2) 0aiC,   i=1,2,.,N  ...  (3)min_a \ \ \frac{1}{2}\sum_{i=1}^N\sum_{j=1}^Na_ia_jy_iy_jK(x_i,x_j)-\sum_{i=1}^Na_i\ \ ... \ \ (1)\\\ s.t. \ \ \sum_{i=1}^Na_iy_i=0,\ \ \ i=1,2,.,N\ \ ...\ \ (2)\\\ 0\leq a_i\leq C,\ \ \ i=1,2,.,N\ \ ...\ \ (3)我們知道(不知道的請打開上面兩個鏈接)非線性SVM的超平面可以寫成i=1NaiyiK(xi,x)+b=0  ...  (4)\sum_{i=1}^Na_iy_iK(x_i,x)+b=0\ \ ...\ \ (4)分類決策函數可以寫成f(x)=sign(i=1NaiyiK(xi,x)+b)  ...  (5)f(x)=sign(\sum_{i=1}^Na_iy_iK(x_i,x)+b)\ \ ...\ \ (5)此時式(4)(5)中的ai,ba_i,b都是未知數,需要求解。如何通過數據集D={(x1,y1),(x2,y2),...,(xN,yN)}D=\{(x_1,y_1),(x_2,y_2),...,(x_N,y_N)\}求得非線性SVM的分離超平面和分類決策函數?

首先,我們通過SMO算法求解式(1)(2)(3)的最優解a=(a1,a2,...,aN)Ta^*=(a_1^*,a_2^*,...,a_N^*)^T其次,我們從aa^*中選擇一個分量aja_j^* (0<aj<C0<a_j^*< C,即支持向量中的樣本點對應的aja_j),根據支持向量滿足的條件得b=yji=1NaiyiK(xi,x)b^*=y_j-\sum_{i=1}^Na_i^*y_iK(x_i,x)於是,我們求得分離超平面:i=1NaiyiK(xi,x)+b=0\sum_{i=1}^Na_i^*y_iK(x_i,x)+b^*=0還有分類決策函數:f(x)=sign(i=1NaiyiK(xi,x)+b)f(x)=sign(\sum_{i=1}^Na_i^*y_iK(x_i,x)+b^*)

從以上的過程,你應該明白SMO主要用在求解式(1)(2)(3)中的aia_i的。

三、SMO的策略

你需要求得不是一個aia_i,而是一連串的a=(a1,a2,...,aN)Ta=(a_1,a_2,...,a_N)^Taia_i是拉格朗日乘子,從式(5)也能看出,一個aia_i對應一個樣本點(xi,yi)(x_i,y_i),也就是說數據集DD的樣本容量N越大,需要求解的參數aia_i就越多。考慮一下你做過的數據集,是不是N在一百以內已經是一個小數據集?
面對如此多的參數,以前的解決算法侷限明顯,直到SMO出世,並且SMO的出世還帶火了SVM(是不是像硬件的提升帶火了深度學習)。
面對如此多的參數aia_i,SMO是如何求解的呢?既然一下子求這麼多參數難求,不如一次只求解兩個,即 “固定其他變量,一次只求兩個變量,直到求出所有變量”
沒懂?我再羅嗦點。對於a=(a1,a2,...,aN)Ta=(a_1,a_2,...,a_N)^T,求解步驟如下:

  1. 設定a(0)=0a^{(0)}=0;
  2. 按一定規則選取a1a2a_1,a_2,固定其它的ai (i3)a_i \ (i \geq 3)
  3. 優化a1a2a_1,a_2直至其滿足條件,此時求解了參數a1a2a_1,a_2
  4. 按一定規則選取a3a4a_3,a_4,固定其他參數aia_i,此時包含計算好的a1a2a_1,a_2
  5. 優化a3a4a_3,a_4直至其滿足條件,此時求解了參數a3a4a_3,a_4
  6. 然後重複以上方法求 (a5,a6),(a7,a8),....(a_5,a_6),(a_7,a_8),....

如果懂了,就繼續閱讀下去吧。

四、SMO的求解過程

我們探討a1a_1a2a_2的求解過程,此時固定參數ai (i=3,4,...,N)a_i\ (i=3,4,...,N)。因此,SMO最優化式(1)(2)(3)的子問題可以寫成mina1,a2   W(a1,a2)=12K11a12+12K22a22+y1y2K12a1a2(a1+a2)+y1a13NyiaiKi1+y2a2i=3NyiaiKi2  ...  (6) s.t.   a1y1+a2y2=i=3Nyiai=ς  ...  (7) 0aiC,   i=1,2   ...  (8)min_{a_1,a_2}\ \ \ W(a_1,a_2)=\frac{1}{2}K_{11}a_1^2+\frac{1}{2}K_{22}a_2^2+y_1y_2K_{12}a_1a_2-(a_1+a_2)+y_1a_1\sum_3^Ny_ia_iK_{i1}+y_2a_2\sum_{i=3}^Ny_ia_iK_{i2}\ \ ...\ \ (6)\\\ s.t.\ \ \ a_1y_1+a_2y_2=-\sum_{i=3}^Ny_ia_i=\varsigma\ \ ...\ \ (7)\\\ 0\leq a_i\leq C,\ \ \ i=1,2\ \ \ ...\ \ (8)其中,Kij=K(xi,xj),i,j=1,2,..,NK_{ij}=K(x_i,x_j),i,j=1,2,..,Nς\varsigma是常數,並且式(6)中省略了不含a1,a2a_1,a_2的常數項。
在我們固定了a3,a4,...,aNa_3,a_4,...,a_N之後,剩下兩個變量a1,a2a_1,a_2,但是這兩個變量中只有一個自由變量,即當求得其中一個變量後,另外一個變量也順應求出。例如當求出a2a_2後,由式(2)可求得a1=y1i=2Naiyia_1=-y_1\sum_{i=2}^Na_iy_i
我們迭代求aa,必然牽涉到新的值和舊的值,並且我們還需要判斷求得的aa是否滿足式(7)(8),因此我們設初始可行解位a1old,a2olda_1^{old},a_2^{old},新解但未判斷是否滿足式(7)(8)的解爲a1new,unc,a2new,unca_1^{new,unc},a_2^{new,unc},新解並判斷滿足式(7)(8)的解爲a1new,a2newa_1^{new},a_2^{new}

對於限制條件式(7)(8),還是不夠直觀,我們先把式(7)(8)寫成不等式的樣子。以a2a_2爲例,首先,式(7)(8)給出了a2a_2的限制條件,並且式(7)含有變量yiy_i,但是我麼已知yi11y_i∈{-1,1},即y1,y2y_1,y_2存在兩種情況:y1=y2y_1=y_2y1y2y_1\neq y_2

y1=y2y_1=y_2時,根據式(7)(8),有max(0,a2old+a1oldC)a2newmin(C,a2old+a1old)max(0,a_2^{old}+a_1^{old}-C)\leq a_2^{new}\leq min(C,a_2^{old}+a_1^{old})y1y2y1 \neq y_2時,根據式(7)(8),有max(0,a2olda1old)a2newmin(C,C+a2olda1old)max(0,a_2^{old}-a_1^{old})\leq a_2^{new}\leq min(C,C+a_2^{old}-a_1^{old})兩種情況下,得到的a2newa_2^{new}的形式是一樣的,我們統一令左邊的項爲LL,令右邊的項爲HH,則有La2newH   ...   (9)L\leq a_2^{new}\leq H\ \ \ ...\ \ \ (9)

4.1 根據aolda^{old}求解anew,unca^{new,unc}

首先初始化 aold=0,bold=0a^{old}=0,b^{old}=0 或者初始化爲其他合理值。

接下來,我們先求a2a_2。我們標記g(xi)=i=1NaiyiK(xi,x)+b  ...  (10) vi=j=3NajyjK(xi,xj)=g(xi)j=12ajyjK(xj,xi)b,  i=1,2  ...  (11)g(x_i)=\sum_{i=1}^Na_iy_iK(x_i,x)+b\ \ ...\ \ (10) \\\ v_i=\sum_{j=3}^Na_jy_jK(x_i,x_j)=g(x_i)-\sum_{j=1}^2a_jy_jK(x_j,x_i)-b,\ \ i=1,2\ \ ...\ \ (11)此時,目標函數可以寫成W(a1,a2)=12K11a12+12K22a22+y1y2K12a1a2(a1+a2)+y1v1a1+y2v2a2  ...  12W(a_1,a_2)=\frac{1}{2}K_{11}a_1^2+\frac{1}{2}K_{22}a_2^2+y_1y_2K_{12}a_1a_2-(a_1+a_2)+y_1v_1a_1+y_2v_2a_2\ \ ...\ \ (12)a1y1=ςa2y2a_1y_1=\varsigma-a_2y_2yi2=1y_i^2=1,可將a1a_1表示爲a1=(ςy2a2)y1a_1=(\varsigma-y_2a_2)y_1代入式(12)得到只有a2a_2W(a2)=12K11(ςa2y2)2+12K22a22+y2K12(ςa2y2)a2(ςa2y2)y1a2+v1(ςa2y2)+y2v2a2W(a_2)=\frac{1}{2}K_{11}(\varsigma-a_2y_2)^2+\frac{1}{2}K_{22}a_2^2+y_2K_{12}(\varsigma-a_2y_2)a_2-(\varsigma-a_2y_2)y_1-a_2+v_1(\varsigma-a_2y_2)+y_2v_2a_2a2a_2求導數Wa2=K11a2+K22a22K12a2K11ςy2+K12ςy2+y1y21v1y2+y2v2\frac{\partial W}{\partial a_2}=K_{11}a_2+K_{22}a_2-2K_{12}a_2-K_{11}\varsigma y_2+K_{12}\varsigma y_2+y_1y_2-1-v_1y_2+y_2v_2令其爲0,得到(K11+K222K12)a2=y2(y2y1+ςK11ςK12+v1v2) =y2[y2y1+ςK11ςK12+(g(x1)j=12yjajK1jb)(g(x2)j=12yjajK2jb)](K_{11}+K_{22}-2K_{12})a_2=y_2(y_2-y_1+\varsigma K_{11}-\varsigma K_{12}+v_1-v_2)\\\ =y_2[y_2-y_1+\varsigma K_{11}-\varsigma K_{12}+(g(x_1)-\sum_{j=1}^2y_ja_jK_{1j}-b)-(g(x_2)-\sum_{j=1}^2y_ja_jK_{2j}-b)]ς=a1oldy1+a2oldy2\varsigma=a_1^{old}y_1+a_2^{old}y_2代入,得到(K11+K222K12)a2new,unc=y2((K11+K222K12)a2oldy2+y2y1+g(x1)g(x2)) =(K11+K222K12)a2old+y2[(g(x1)y1)(g(x2)y2)]  ...  ...  (13)(K_{11}+K_{22}-2K_{12})a_2^{new,unc}=y_2((K_{11}+K_{22}-2K_{12})a_2^{old}y_2+y_2-y_1+g(x_1)-g(x_2))\\\ =(K_{11}+K_{22}-2K_{12})a_2^{old}+y_2[(g(x_1)-y_1)-(g(x_2)-y_2)]\ \ ...\ \ ...\ \ (13)現在令Ei=g(xi)yi=(j=1NajoldyjK(xj,xi)+bold)yii=1,2  ...  (14)E_i=g(x_i)-y_i=(\sum_{j=1}^Na_j^{old}y_jK(x_j,x_i)+b^{old})-y_i,i=1,2\ \ ...\ \ (14)再令η=K11+K222K12\eta=K_{11}+K_{22}-2K_{12},代入上式(13),於是得到未經裁剪的a2new,unc=a2old+y2(E1E2)η  ...  (15)a_2^{new,unc}=a_2^{old}+\frac{y_2(E_1-E_2)}{\eta}\ \ ...\ \ (15)
從式(14)(15)知,a2new,unca_2^{new,unc}aold=(a1old,a2old,...,aNold)T,bolda^{old}=(a_1^{old},a_2^{old},...,a_N^{old})^T,b^{old}有關。

4.2 根據限制條件從a2new,unca_2^{new,unc}得到a2newa_2^{new},並計算a1newa_1^{new}

由式(9),可得經剪輯後的a2a_2的解a2new={H,a2new,unc>H a2new,unc,La2new,uncH L,a2new,unc<La_2^{new}=\begin{cases}H, & a_2^{new,unc}>H \\\ a_2^{new,unc}, & L\leq a_2^{new,unc}\leq H\\\ L, & a_2^{new,unc}<L \end{cases}
a2newa_2^{new}求得a1newa_1^{new}a1new=a1old+y1y2(a2olda2new)a_1^{new}=a_1^{old}+y_1y_2(a_2^{old}-a_2^{new})

4.3 計算bnewb^{new}EinewE_i^{new}

0<ainew<C,i=1,20<a_i^{new}<C,i=1,2,對應的樣本點是支持向量,即由支持向量的滿足條件i=1NaiyiK(xi,x)+byi=0\sum_{i=1}^Na_i^*y_iK(x_i,x)+b^*-y_i=0得,

b1new=y1i=3NaiyiKi1a1newy1K11a2newy2K21b_1^{new}=y_1-\sum_{i=3}^Na_iy_iK_{i1}-a_1^{new}y_1K_{11}-a_2^{new}y_2K_{21}這裏面還包括了vi=i=3NaiyiKi1v_i=\sum_{i=3}^Na_iy_iK_{i1},我們根據式(14)將b1newb_1^{new}換成只與a1,E1,b1a_1,E_1,b_1有關,即b1new=E1y1K11(a1newa1old)y2K21(a2newa2old)+boldb_1^{new}=-E_1-y_1K_{11}(a_1^{new}-a_1^{old})-y_2K_{21}(a_2^{new}-a_2^{old})+b^{old}同樣有b2new=E2y1K12(a1newa1old)y2K22(a2newa2old)+boldb_2^{new}=-E_2-y_1K_{12}(a_1^{new}-a_1^{old})-y_2K_{22}(a_2^{new}-a_2^{old})+b^{old}
這裏給出結論,當a1new,a2newa_1^{new},a_2^{new}同時滿足條件0<ainew<C,i=1,20<a_i^{new}<C,i=1,2,則有b1new=b2newb_1^{new}=b_2^{new}

ainew=0C,i=1,2a_i^{new}=0或C,i=1,2,此時一般取bnew=(b1new+b2new)/2b_{new}=(b_1^{new}+b_2^{new})/2

ainew,bnewa_i^{new},b^{new}的取值與EiE_i有關,我們在計算了ainew,bnewa_i^{new},b^{new}後,還需要更新一下EiE_i,得Einew=i=1NyjajK(xi,xj)+bnewyi  ...  (16)E_i^{new}=\sum_{i=1}^{N}y_ja_jK(x_i,x_j)+b^{new}-y_i\ \ ...\ \ (16)

4.4 如何選取a1,a2a_1,a_2

在推SVM時,我們希望所有的樣本對(xi,yi)(x_i,y_i)到超平面的函數距離都大於最小的函數距離,並且我們設最小的函數距離爲1,即我們希望所有的樣本對(xi,yi)(x_i,y_i)都使得 yij=1NajyjK(xi,xj)+b1  ...  (17)y_i\sum_{j=1}^Na_jy_jK(x_i,x_j)+b\geq 1\ \ ... \ \ (17)這也是原始問題的限制條件。當參數還沒優化之前,顯然不滿足這個條件,因此SMO算法在選擇變量時,希望優化哪些不滿足式(17)的變量,所以a1,a2a_1,a_2至少有一個不滿足式(7)。

外層循環— a1a_1的選擇
SMO稱選擇第1個變量的過程爲外層循環。該變量選擇的原則是,其對應的樣本對(xi,yi)(x_i,y_i)在所有的樣本對中最不符合式(7)(對應着不滿足拉格朗日乘子法的KKT條件)。
該檢測是在ε\varepsilon範圍內進行的,即所有點在ε\varepsilon範圍內都滿足式(7),則優化完成,這也是終止條件

內層循環— a2a_2的選擇:
SMO稱選擇第2個變量的過程爲內層循環。當已經找到了a1a_1,內層循環希望a2a_2的改變要足夠大。由式(15),a2a_2改變足夠大意味着E1E2|E_1-E_2|變化足夠大,由式(16),當a1a_1確定時,E1E_1也確定了,所以我們可以根據式(16)尋找相應使E1E2|E_1-E_2|最大的樣本對對應的aia_i作爲a2a_2。若找不到合適的a2a_2,此時應放棄現在的a1a_1並重新尋找a1a_1

五、總結

終於完成了SMO算法的博客書寫,如果有什麼疑問歡迎各位指出。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章