一、SMO的背景介紹
序列最小最優化算法(sequential minimal optimization,SMO)於1998年被John Platt發明,是一種用於解決支持向量機訓練期間出現的二次規劃問題的算法。在SMO之前也有一些算法用於解決此類問題,但是這些算法都比較複雜,所以高效的SMO提出之時就在SVM社區引起了一陣轟動。
二、從SVM說起—SMO要解決什麼
如何優化SVM的參數?首先我們通過拉格朗日乘子法建立拉格朗日函數,再根據拉格朗日的對偶性求解極大極小值問題。這些,我已經在《支持向量機一:線性支持向量機介紹》、《支持向量機二:非線性支持向量機》中介紹,感興趣的朋友可以看一下。
非線性優化最終要解決一個二次規劃問題,即mina 21i=1∑Nj=1∑NaiajyiyjK(xi,xj)−i=1∑Nai ... (1) s.t. i=1∑Naiyi=0, i=1,2,.,N ... (2) 0≤ai≤C, i=1,2,.,N ... (3)我們知道(不知道的請打開上面兩個鏈接)非線性SVM的超平面可以寫成i=1∑NaiyiK(xi,x)+b=0 ... (4)分類決策函數可以寫成f(x)=sign(i=1∑NaiyiK(xi,x)+b) ... (5)此時式(4)(5)中的ai,b都是未知數,需要求解。如何通過數據集D={(x1,y1),(x2,y2),...,(xN,yN)}求得非線性SVM的分離超平面和分類決策函數?
首先,我們通過SMO算法求解式(1)(2)(3)的最優解a∗=(a1∗,a2∗,...,aN∗)T其次,我們從a∗中選擇一個分量aj∗ (0<aj∗<C,即支持向量中的樣本點對應的aj),根據支持向量滿足的條件得b∗=yj−i=1∑Nai∗yiK(xi,x)於是,我們求得分離超平面:i=1∑Nai∗yiK(xi,x)+b∗=0還有分類決策函數:f(x)=sign(i=1∑Nai∗yiK(xi,x)+b∗)
從以上的過程,你應該明白SMO主要用在求解式(1)(2)(3)中的ai的。
三、SMO的策略
你需要求得不是一個ai,而是一連串的a=(a1,a2,...,aN)T。ai是拉格朗日乘子,從式(5)也能看出,一個ai對應一個樣本點(xi,yi),也就是說數據集D的樣本容量N越大,需要求解的參數ai就越多。考慮一下你做過的數據集,是不是N在一百以內已經是一個小數據集?
面對如此多的參數,以前的解決算法侷限明顯,直到SMO出世,並且SMO的出世還帶火了SVM(是不是像硬件的提升帶火了深度學習)。
面對如此多的參數ai,SMO是如何求解的呢?既然一下子求這麼多參數難求,不如一次只求解兩個,即 “固定其他變量,一次只求兩個變量,直到求出所有變量”。
沒懂?我再羅嗦點。對於a=(a1,a2,...,aN)T,求解步驟如下:
- 設定a(0)=0;
- 按一定規則選取a1,a2,固定其它的ai (i≥3);
- 優化a1,a2直至其滿足條件,此時求解了參數a1,a2;
- 按一定規則選取a3,a4,固定其他參數ai,此時包含計算好的a1,a2;
- 優化a3,a4直至其滿足條件,此時求解了參數a3,a4;
- 然後重複以上方法求 (a5,a6),(a7,a8),....
如果懂了,就繼續閱讀下去吧。
四、SMO的求解過程
我們探討a1、a2的求解過程,此時固定參數ai (i=3,4,...,N)。因此,SMO最優化式(1)(2)(3)的子問題可以寫成mina1,a2 W(a1,a2)=21K11a12+21K22a22+y1y2K12a1a2−(a1+a2)+y1a13∑NyiaiKi1+y2a2i=3∑NyiaiKi2 ... (6) s.t. a1y1+a2y2=−i=3∑Nyiai=ς ... (7) 0≤ai≤C, i=1,2 ... (8)其中,Kij=K(xi,xj),i,j=1,2,..,N,ς是常數,並且式(6)中省略了不含a1,a2的常數項。
在我們固定了a3,a4,...,aN之後,剩下兩個變量a1,a2,但是這兩個變量中只有一個自由變量,即當求得其中一個變量後,另外一個變量也順應求出。例如當求出a2後,由式(2)可求得a1=−y1i=2∑Naiyi
我們迭代求a,必然牽涉到新的值和舊的值,並且我們還需要判斷求得的a是否滿足式(7)(8),因此我們設初始可行解位a1old,a2old,新解但未判斷是否滿足式(7)(8)的解爲a1new,unc,a2new,unc,新解並判斷滿足式(7)(8)的解爲a1new,a2new。
對於限制條件式(7)(8),還是不夠直觀,我們先把式(7)(8)寫成不等式的樣子。以a2爲例,首先,式(7)(8)給出了a2的限制條件,並且式(7)含有變量yi,但是我麼已知yi∈−1,1,即y1,y2存在兩種情況:y1=y2、y1=y2。
當y1=y2時,根據式(7)(8),有max(0,a2old+a1old−C)≤a2new≤min(C,a2old+a1old)當y1=y2時,根據式(7)(8),有max(0,a2old−a1old)≤a2new≤min(C,C+a2old−a1old)兩種情況下,得到的a2new的形式是一樣的,我們統一令左邊的項爲L,令右邊的項爲H,則有L≤a2new≤H ... (9)
4.1 根據aold求解anew,unc
首先初始化 aold=0,bold=0 或者初始化爲其他合理值。
接下來,我們先求a2。我們標記g(xi)=i=1∑NaiyiK(xi,x)+b ... (10) vi=j=3∑NajyjK(xi,xj)=g(xi)−j=1∑2ajyjK(xj,xi)−b, i=1,2 ... (11)此時,目標函數可以寫成W(a1,a2)=21K11a12+21K22a22+y1y2K12a1a2−(a1+a2)+y1v1a1+y2v2a2 ... (12)由a1y1=ς−a2y2及yi2=1,可將a1表示爲a1=(ς−y2a2)y1代入式(12)得到只有a2的W(a2)=21K11(ς−a2y2)2+21K22a22+y2K12(ς−a2y2)a2−(ς−a2y2)y1−a2+v1(ς−a2y2)+y2v2a2對a2求導數∂a2∂W=K11a2+K22a2−2K12a2−K11ςy2+K12ςy2+y1y2−1−v1y2+y2v2令其爲0,得到(K11+K22−2K12)a2=y2(y2−y1+ςK11−ςK12+v1−v2) =y2[y2−y1+ςK11−ςK12+(g(x1)−j=1∑2yjajK1j−b)−(g(x2)−j=1∑2yjajK2j−b)]將ς=a1oldy1+a2oldy2代入,得到(K11+K22−2K12)a2new,unc=y2((K11+K22−2K12)a2oldy2+y2−y1+g(x1)−g(x2)) =(K11+K22−2K12)a2old+y2[(g(x1)−y1)−(g(x2)−y2)] ... ... (13)現在令Ei=g(xi)−yi=(j=1∑NajoldyjK(xj,xi)+bold)−yi,i=1,2 ... (14)再令η=K11+K22−2K12,代入上式(13),於是得到未經裁剪的a2new,unc=a2old+ηy2(E1−E2) ... (15)
從式(14)(15)知,a2new,unc與aold=(a1old,a2old,...,aNold)T,bold有關。
4.2 根據限制條件從a2new,unc得到a2new,並計算a1new
由式(9),可得經剪輯後的a2的解a2new=⎩⎪⎨⎪⎧H, a2new,unc, L,a2new,unc>HL≤a2new,unc≤Ha2new,unc<L
由a2new求得a1new得a1new=a1old+y1y2(a2old−a2new)
4.3 計算bnew和Einew
當0<ainew<C,i=1,2,對應的樣本點是支持向量,即由支持向量的滿足條件∑i=1Nai∗yiK(xi,x)+b∗−yi=0得,
b1new=y1−i=3∑NaiyiKi1−a1newy1K11−a2newy2K21這裏面還包括了vi=∑i=3NaiyiKi1,我們根據式(14)將b1new換成只與a1,E1,b1有關,即b1new=−E1−y1K11(a1new−a1old)−y2K21(a2new−a2old)+bold同樣有b2new=−E2−y1K12(a1new−a1old)−y2K22(a2new−a2old)+bold
這裏給出結論,當a1new,a2new同時滿足條件0<ainew<C,i=1,2,則有b1new=b2new。
當ainew=0或C,i=1,2,此時一般取bnew=(b1new+b2new)/2。
ainew,bnew的取值與Ei有關,我們在計算了ainew,bnew後,還需要更新一下Ei,得Einew=i=1∑NyjajK(xi,xj)+bnew−yi ... (16)
4.4 如何選取a1,a2
在推SVM時,我們希望所有的樣本對(xi,yi)到超平面的函數距離都大於最小的函數距離,並且我們設最小的函數距離爲1,即我們希望所有的樣本對(xi,yi)都使得 yij=1∑NajyjK(xi,xj)+b≥1 ... (17)這也是原始問題的限制條件。當參數還沒優化之前,顯然不滿足這個條件,因此SMO算法在選擇變量時,希望優化哪些不滿足式(17)的變量,所以a1,a2至少有一個不滿足式(7)。
外層循環— a1的選擇:
SMO稱選擇第1個變量的過程爲外層循環。該變量選擇的原則是,其對應的樣本對(xi,yi)在所有的樣本對中最不符合式(7)(對應着不滿足拉格朗日乘子法的KKT條件)。
該檢測是在ε範圍內進行的,即所有點在ε範圍內都滿足式(7),則優化完成,這也是終止條件。
內層循環— a2的選擇:
SMO稱選擇第2個變量的過程爲內層循環。當已經找到了a1,內層循環希望a2的改變要足夠大。由式(15),a2改變足夠大意味着∣E1−E2∣變化足夠大,由式(16),當a1確定時,E1也確定了,所以我們可以根據式(16)尋找相應使∣E1−E2∣最大的樣本對對應的ai作爲a2。若找不到合適的a2,此時應放棄現在的a1並重新尋找a1。
五、總結
終於完成了SMO算法的博客書寫,如果有什麼疑問歡迎各位指出。