SVM(四) 支撐向量機,二次規划問題


SMO優化算法(Sequential minimal optimization)

SMO算法由Microsoft Research的John C. Platt在1998年提出,並成為最快的二次規划優化算法,特別針對線性SVM和數據稀疏時性能更優。關於SMO最好的資料就是他本人寫的《Sequential Minimal Optimization A Fast Algorithm for Training Support Vector Machines》了。

我拜讀了一下,下面先說講義上對此方法的總結。

首先回到我們前面一直懸而未解的問題,對偶函數最后的優化問題:

clip_image001

要解決的是在參數clip_image003上求最大值W的問題,至於clip_image005clip_image007都是已知數。C由我們預先設定,也是已知數。

按照坐標上升的思路,我們首先固定除clip_image009以外的所有參數,然后在clip_image009[1]上求極值。等一下,這個思路有問題,因為如果固定clip_image009[2]以外的所有參數,那么clip_image009[3]將不再是變量(可以由其他值推出),因為問題中規定了

clip_image010

因此,我們需要一次選取兩個參數做優化,比如clip_image009[4]clip_image012,此時clip_image012[1]可以由clip_image009[5]和其他參數表示出來。這樣回帶到W中,W就只是關於clip_image009[6]的函數了,可解。

這樣,SMO的主要步驟如下:

clip_image013

意思是,第一步選取一對clip_image015clip_image017,選取方法使用啟發式方法(后面講)。第二步,固定除clip_image015[1]clip_image017[1]之外的其他參數,確定W極值條件下的clip_image015[2]clip_image017[2]clip_image015[3]表示。

SMO之所以高效就是因為在固定其他參數后,對一個參數優化過程很高效。

下面討論具體方法:

假設我們選取了初始值clip_image003[1]滿足了問題中的約束條件。接下來,我們固定clip_image019,這樣W就是clip_image009[7]clip_image012[2]的函數。並且clip_image009[8]clip_image012[3]滿足條件:

clip_image020

由於clip_image019[1]都是已知固定值,因此為了方面,可將等式右邊標記成實數值clip_image022

clip_image023

clip_image025clip_image027異號時,也就是一個為1,一個為-1時,他們可以表示成一條直線,斜率為1。如下圖:

image

橫軸是clip_image009[9],縱軸是clip_image012[4]clip_image009[10]clip_image012[5]既要在矩形方框內,也要在直線上,因此

clip_image044clip_image046

同理,當clip_image025[1]clip_image027[1]同號時,

clip_image048clip_image050

然后我們打算將clip_image009[11]clip_image012[6]表示:

clip_image051

然后反代入W中,得

clip_image052

展開后W可以表示成clip_image054。其中a,b,c是固定值。這樣,通過對W進行求導可以得到clip_image012[7],然而要保證clip_image012[8]滿足clip_image056,我們使用clip_image058表示求導求出來的clip_image012[9],然而最后的clip_image012[10],要根據下面情況得到:

clip_image059

這樣得到clip_image061后,我們可以得到clip_image009[12]的新值clip_image063

下面進入Platt的文章,來找到啟發式搜索的方法和求b值的公式。

這邊文章使用的符號表示有點不太一樣,不過實質是一樣的,先來熟悉一下文章中符號的表示。

文章中定義特征到結果的輸出函數為

clip_image064

與我們之前的clip_image066實質是一致的。

原始的優化問題為:

clip_image067

求導得到:

clip_image068

經過對偶后為:

clip_image069

s.t. clip_image070

clip_image071

這里與W函數是一樣的,只是符號求反后,變成求最小值了。clip_image073clip_image075是一樣的,都表示第i個樣本的輸出結果(1或-1)。

經過加入松弛變量clip_image077后,模型修改為:

clip_image078

clip_image079

由公式(7)代入(1)中可知,

clip_image080

這個過程和之前對偶過程一樣。

重新整理我們要求的問題為:

clip_image081

與之對應的KKT條件為:

clip_image082

這個KKT條件說明,在兩條間隔線外面的點,對應前面的系數clip_image084為0,在兩條間隔線里面的對應clip_image084[1]為C,在兩條間隔線上的對應的系數clip_image084[2]在0和C之間。

將我們之前得到L和H重新拿過來:

clip_image085

clip_image086

之前我們將問題進行到這里,然后說將clip_image009[13]clip_image012[11]表示后代入W中,這里將代入clip_image088中,得

clip_image090

其中

clip_image091

這里的clip_image093clip_image095代表某次迭代前的原始值,因此是常數,而clip_image009[14]clip_image012[12]是變量,待求。公式(24)中的最后一項是常數。

由於clip_image009[15]clip_image012[13]滿足以下公式

clip_image097

因為clip_image099的值是固定值,在迭代前后不會變。

那么用s表示clip_image101,上式兩邊乘以clip_image103時,變為:

clip_image104

其中

clip_image106

代入(24)中,得

clip_image107

這時候只有clip_image012[14]是變量了,求導

clip_image109

如果clip_image088[1]的二階導數大於0(凹函數),那么一階導數為0時,就是極小值了。

假設其二階導數為0(一般成立),那么上式化簡為:

clip_image110

將w和v代入后,繼續化簡推導,得(推導了六七行推出來了)

clip_image112

我們使用clip_image114來表示:

clip_image115

通常情況下目標函數是正定的,也就是說,能夠在直線約束方向上求得最小值,並且clip_image117

那么我們在(30)兩邊都除以clip_image114[1]可以得到

clip_image118

這里我們使用clip_image061[1]表示優化后的值,clip_image012[15]是迭代前的值,clip_image120

與之前提到的一樣clip_image061[2]不是最終迭代后的值,需要進行約束:

clip_image121

那么

clip_image122

在特殊情況下,clip_image114[2]可能不為正,如果核函數K不滿足Mercer定理,那么目標函數可能變得非正定,clip_image114[3]可能出現負值。即使K是有效的核函數,如果訓練樣本中出現相同的特征x,那么clip_image114[4]仍有可能為0。SMO算法在clip_image114[5]不為正值的情況下仍有效。為保證有效性,我們可以推導出clip_image114[6]就是clip_image088[2]的二階導數,clip_image124clip_image088[3]沒有極小值,最小值在邊緣處取到(類比clip_image126),clip_image128時更是單調函數了,最小值也在邊緣處取得,而clip_image012[16]的邊緣就是L和H。這樣將clip_image130clip_image132分別代入clip_image088[4]中即可求得clip_image088[5]的最小值,相應的clip_image130[1]還是clip_image132[1]也可以知道了。具體計算公式如下:

clip_image134

至此,迭代關系式出了b的推導式以外,都已經推出。

b每一步都要更新,因為前面的KKT條件指出了clip_image084[3]clip_image136的關系,而clip_image138和b有關,在每一步計算出clip_image084[4]后,根據KKT條件來調整b。

b的更新有幾種情況:

clip_image140

來自羅林開的ppt

這里的界內指clip_image142,界上就是等於0或者C了。

前面兩個的公式推導可以根據clip_image144

和對於clip_image142[1]clip_image146的KKT條件推出。

這樣全部參數的更新公式都已經介紹完畢,附加一點,如果使用的是線性核函數,我們就可以繼續使用w了,這樣不用掃描整個樣本庫來作內積了。

w值的更新方法為:

clip_image147

根據前面的

clip_image068[1]

公式推導出。

12 SMO中拉格朗日乘子的啟發式選擇方法

終於到了最后一個問題了,所謂的啟發式選擇方法主要思想是每次選擇拉格朗日乘子的時候,優先選擇樣本前面系數clip_image142[2]clip_image084[5]作優化(論文中稱為無界樣例),因為在界上(clip_image084[6]為0或C)的樣例對應的系數clip_image084[7]一般不會更改。

這條啟發式搜索方法是選擇第一個拉格朗日乘子用的,比如前面的clip_image012[17]。那么這樣選擇的話,是否最后會收斂。可幸的是Osuna定理告訴我們只要選擇出來的兩個clip_image084[8]中有一個違背了KKT條件,那么目標函數在一步迭代后值會減小。違背KKT條件不代表clip_image142[3],在界上也有可能會違背。是的,因此在給定初始值clip_image084[9]=0后,先對所有樣例進行循環,循環中碰到違背KKT條件的(不管界上還是界內)都進行迭代更新。等這輪過后,如果沒有收斂,第二輪就只針對clip_image142[4]的樣例進行迭代更新。

在第一個乘子選擇后,第二個乘子也使用啟發式方法選擇,第二個乘子的迭代步長大致正比於clip_image149,選擇第二個乘子能夠最大化clip_image149[1]。即當clip_image151為正時選擇負的絕對值最大的clip_image153,反之,選擇正值最大的clip_image153[1]

最后的收斂條件是在界內(clip_image142[5])的樣例都能夠遵循KKT條件,且其對應的clip_image084[10]只在極小的范圍內變動。

至於如何寫具體的程序,請參考John C. Platt在論文中給出的偽代碼。

13 總結

這份SVM的講義重點概括了SVM的基本概念和基本推導,中規中矩卻又讓人醍醐灌頂。起初讓我最頭疼的是拉格朗日對偶和SMO,后來逐漸明白拉格朗日對偶的重要作用是將w的計算提前並消除w,使得優化函數變為拉格朗日乘子的單一參數優化問題。而SMO里面迭代公式的推導也着實讓我花費了不少時間。

對比這么復雜的推導過程,SVM的思想確實那么簡單。它不再像logistic回歸一樣企圖去擬合樣本點(中間加了一層sigmoid函數變換),而是就在樣本中去找分隔線,為了評判哪條分界線更好,引入了幾何間隔最大化的目標。

之后所有的推導都是去解決目標函數的最優化上了。在解決最優化的過程中,發現了w可以由特征向量內積來表示,進而發現了核函數,僅需要調整核函數就可以將特征進行低維到高維的變換,在低維上進行計算,實質結果表現在高維上。由於並不是所有的樣本都可分,為了保證SVM的通用性,進行了軟間隔的處理,導致的結果就是將優化問題變得更加復雜,然而驚奇的是松弛變量沒有出現在最后的目標函數中。最后的優化求解問題,也被拉格朗日對偶和SMO算法化解,使SVM趨向於完美。

另外,其他很多議題如SVM背后的學習理論、參數選擇問題、二值分類到多值分類等等還沒有涉及到,以后有時間再學吧。其實朴素貝葉斯在分類二值分類問題時,如果使用對數比,那么也算作線性分類器。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM