支持向量机SVM(五)SMO算法
11 SMO優(yōu)化算法(Sequential minimal optimization)
SMO算法由Microsoft Research的John C. Platt在1998年提出,并成為最快的二次規(guī)劃優(yōu)化算法,特別針對線性SVM和數(shù)據(jù)稀疏時性能更優(yōu)。關于SMO最好的資料就是他本人寫的《Sequential Minimal Optimization A Fast Algorithm for Training Support Vector Machines》了。
我拜讀了一下,下面先說講義上對此方法的總結。
首先回到我們前面一直懸而未解的問題,對偶函數(shù)最后的優(yōu)化問題:
要解決的是在參數(shù)上求最大值W的問題,至于和都是已知數(shù)。C由我們預先設定,也是已知數(shù)。
按照坐標上升的思路,我們首先固定除以外的所有參數(shù),然后在上求極值。等一下,這個思路有問題,因為如果固定以外的所有參數(shù),那么將不再是變量(可以由其他值推出),因為問題中規(guī)定了
因此,我們需要一次選取兩個參數(shù)做優(yōu)化,比如和,此時可以由和其他參數(shù)表示出來。這樣回帶到W中,W就只是關于的函數(shù)了,可解。
這樣,SMO的主要步驟如下:
意思是,第一步選取一對和,選取方法使用啟發(fā)式方法(后面講)。第二步,固定除和之外的其他參數(shù),確定W極值條件下的,由表示。
SMO之所以高效就是因為在固定其他參數(shù)后,對一個參數(shù)優(yōu)化過程很高效。
下面討論具體方法:
假設我們選取了初始值滿足了問題中的約束條件。接下來,我們固定,這樣W就是和的函數(shù)。并且和滿足條件:
由于都是已知固定值,因此為了方面,可將等式右邊標記成實數(shù)值。
當和異號時,也就是一個為1,一個為-1時,他們可以表示成一條直線,斜率為1。如下圖:
橫軸是,縱軸是,和既要在矩形方框內,也要在直線上,因此
,
同理,當和同號時,
,
然后我們打算將用表示:
然后反代入W中,得
展開后W可以表示成。其中a,b,c是固定值。這樣,通過對W進行求導可以得到,然而要保證滿足,我們使用表示求導求出來的,然而最后的,要根據(jù)下面情況得到:
這樣得到后,我們可以得到的新值。
下面進入Platt的文章,來找到啟發(fā)式搜索的方法和求b值的公式。
這邊文章使用的符號表示有點不太一樣,不過實質是一樣的,先來熟悉一下文章中符號的表示。
文章中定義特征到結果的輸出函數(shù)為
與我們之前的實質是一致的。
原始的優(yōu)化問題為:
求導得到:
經過對偶后為:
s.t.
這里與W函數(shù)是一樣的,只是符號求反后,變成求最小值了。和是一樣的,都表示第i個樣本的輸出結果(1或-1)。
經過加入松弛變量后,模型修改為:
由公式(7)代入(1)中可知,
這個過程和之前對偶過程一樣。
重新整理我們要求的問題為:
與之對應的KKT條件為:
這個KKT條件說明,在兩條間隔線外面的點,對應前面的系數(shù)為0,在兩條間隔線里面的對應為C,在兩條間隔線上的對應的系數(shù)在0和C之間。
將我們之前得到L和H重新拿過來:
之前我們將問題進行到這里,然后說將用表示后代入W中,這里將代入中,得
其中
這里的和代表某次迭代前的原始值,因此是常數(shù),而和是變量,待求。公式(24)中的最后一項是常數(shù)。
由于和滿足以下公式
因為的值是固定值,在迭代前后不會變。
那么用s表示,上式兩邊乘以時,變?yōu)?#xff1a;
其中
代入(24)中,得
這時候只有是變量了,求導
如果的二階導數(shù)大于0(凹函數(shù)),那么一階導數(shù)為0時,就是極小值了。
假設其二階導數(shù)為0(一般成立),那么上式化簡為:
將w和v代入后,繼續(xù)化簡推導,得(推導了六七行推出來了)
我們使用來表示:
通常情況下目標函數(shù)是正定的,也就是說,能夠在直線約束方向上求得最小值,并且。
那么我們在(30)兩邊都除以可以得到
這里我們使用表示優(yōu)化后的值,是迭代前的值,。
與之前提到的一樣不是最終迭代后的值,需要進行約束:
那么
在特殊情況下,可能不為正,如果核函數(shù)K不滿足Mercer定理,那么目標函數(shù)可能變得非正定,可能出現(xiàn)負值。即使K是有效的核函數(shù),如果訓練樣本中出現(xiàn)相同的特征x,那么仍有可能為0。SMO算法在不為正值的情況下仍有效。為保證有效性,我們可以推導出就是的二階導數(shù),,沒有極小值,最小值在邊緣處取到(類比),時更是單調函數(shù)了,最小值也在邊緣處取得,而的邊緣就是L和H。這樣將和分別代入中即可求得的最小值,相應的還是也可以知道了。具體計算公式如下:
至此,迭代關系式出了b的推導式以外,都已經推出。
b每一步都要更新,因為前面的KKT條件指出了和的關系,而和b有關,在每一步計算出后,根據(jù)KKT條件來調整b。
b的更新有幾種情況:
來自羅林開的ppt
這里的界內指,界上就是等于0或者C了。
前面兩個的公式推導可以根據(jù)
和對于有的KKT條件推出。
這樣全部參數(shù)的更新公式都已經介紹完畢,附加一點,如果使用的是線性核函數(shù),我們就可以繼續(xù)使用w了,這樣不用掃描整個樣本庫來作內積了。
w值的更新方法為:
根據(jù)前面的
公式推導出。
12 SMO中拉格朗日乘子的啟發(fā)式選擇方法
終于到了最后一個問題了,所謂的啟發(fā)式選擇方法主要思想是每次選擇拉格朗日乘子的時候,優(yōu)先選擇樣本前面系數(shù)的作優(yōu)化(論文中稱為無界樣例),因為在界上(為0或C)的樣例對應的系數(shù)一般不會更改。
這條啟發(fā)式搜索方法是選擇第一個拉格朗日乘子用的,比如前面的。那么這樣選擇的話,是否最后會收斂。可幸的是Osuna定理告訴我們只要選擇出來的兩個中有一個違背了KKT條件,那么目標函數(shù)在一步迭代后值會減小。違背KKT條件不代表,在界上也有可能會違背。是的,因此在給定初始值=0后,先對所有樣例進行循環(huán),循環(huán)中碰到違背KKT條件的(不管界上還是界內)都進行迭代更新。等這輪過后,如果沒有收斂,第二輪就只針對的樣例進行迭代更新。
在第一個乘子選擇后,第二個乘子也使用啟發(fā)式方法選擇,第二個乘子的迭代步長大致正比于,選擇第二個乘子能夠最大化。即當為正時選擇負的絕對值最大的,反之,選擇正值最大的。
最后的收斂條件是在界內()的樣例都能夠遵循KKT條件,且其對應的只在極小的范圍內變動。
至于如何寫具體的程序,請參考John C. Platt在論文中給出的偽代碼。
13 總結
這份SVM的講義重點概括了SVM的基本概念和基本推導,中規(guī)中矩卻又讓人醍醐灌頂。起初讓我最頭疼的是拉格朗日對偶和SMO,后來逐漸明白拉格朗日對偶的重要作用是將w的計算提前并消除w,使得優(yōu)化函數(shù)變?yōu)槔窭嗜粘俗拥膯我粎?shù)優(yōu)化問題。而SMO里面迭代公式的推導也著實讓我花費了不少時間。
對比這么復雜的推導過程,SVM的思想確實那么簡單。它不再像logistic回歸一樣企圖去擬合樣本點(中間加了一層sigmoid函數(shù)變換),而是就在樣本中去找分隔線,為了評判哪條分界線更好,引入了幾何間隔最大化的目標。
之后所有的推導都是去解決目標函數(shù)的最優(yōu)化上了。在解決最優(yōu)化的過程中,發(fā)現(xiàn)了w可以由特征向量內積來表示,進而發(fā)現(xiàn)了核函數(shù),僅需要調整核函數(shù)就可以將特征進行低維到高維的變換,在低維上進行計算,實質結果表現(xiàn)在高維上。由于并不是所有的樣本都可分,為了保證SVM的通用性,進行了軟間隔的處理,導致的結果就是將優(yōu)化問題變得更加復雜,然而驚奇的是松弛變量沒有出現(xiàn)在最后的目標函數(shù)中。最后的優(yōu)化求解問題,也被拉格朗日對偶和SMO算法化解,使SVM趨向于完美。
另外,其他很多議題如SVM背后的學習理論、參數(shù)選擇問題、二值分類到多值分類等等還沒有涉及到,以后有時間再學吧。其實樸素貝葉斯在分類二值分類問題時,如果使用對數(shù)比,那么也算作線性分類器。
出處:http://www.cnblogs.com/jerrylead/archive/2011/03/18/1988419.html
總結
以上是生活随笔為你收集整理的支持向量机SVM(五)SMO算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 支持向量机SVM(四)
- 下一篇: (EM算法)The EM Algorit