本文針對一般性的“軟判斷的核函數的對偶問題的SVM”,形如下式:
上式問題所在:當採樣點 x i x_i x i 選取50000個點時,則基於核函數變量Θ ( x i , x j ) \bm{\Theta(x_i,x_j)} Θ ( x i , x j ) 將需要大約10GB的RAM來存儲Θ ( x i , x j ) \bm{\Theta(x_i,x_j)} Θ ( x i , x j ) 。這裏介紹前人所提的SMO算法,以降低存儲空間。
一. 算法流程框架
首先,先給出SMO算法的算法流程,如下:
意思是:第一步,選取一對α i \alpha_i α i 和α j \alpha_j α j ,選取方法使用啓發式方法。第二步,固定除α i \alpha_i α i 和α j \alpha_j α j 之外的其他參數 ,確定目標函數(即:W ( α ) W(\alpha) W ( α ) 。圖片中用W ( α ) W(\alpha) W ( α ) 表示整個目標函數)取得最大值時的α i ∗ \alpha_i^* α i ∗ 的取值,並由α i ∗ \alpha_i^* α i ∗ 計算出α j ∗ \alpha_j^* α j ∗ 。重複迭代上述兩步,直到收斂。
SMO之所以高效就是因爲在固定其他參數後,對一個參數優化過程很高效。
二. 符號定義與基礎回顧
(1)先定義下述三個符號,以便後文表述:
(2)若爲線性核函數分類,由基本二分類SVM可知,最後的分類是根據w ∗ T x i + b ∗ w^{*T}x_i+b^* w ∗ T x i + b ∗ 來判斷的:若w ∗ T x i + b ∗ > 0 w^{*T}x_i+b^*>0 w ∗ T x i + b ∗ > 0 則判斷y i y_i y i 屬於某一類,若w ∗ T x i + b ∗ < 0 w^{*T}x_i+b^*<0 w ∗ T x i + b ∗ < 0 則判斷y i y_i y i 屬於另一類。如果是非線性核函數分類,則是w ∗ T ϕ ( x i ) + b ∗ w^{*T}\phi(x_i)+b^* w ∗ T ϕ ( x i ) + b ∗ 與0的大小比較(但是,在實際核函數模型中,我們沒有ϕ ( x i ) \phi(\bm x_i) ϕ ( x i ) 的表達式,往往都是直接給出Θ ( x i , x j ) \bm{\Theta(x_i,x_j)} Θ ( x i , x j ) (而:Θ ( x i , x j ) \bm{\Theta(x_i,x_j)} Θ ( x i , x j ) =ϕ ( x i ) T ϕ ( x j ) \phi(\bm x_i)^T\phi(\bm x_j) ϕ ( x i ) T ϕ ( x j ) )。因此,w ∗ T x i + b ∗ w^{*T}x_i+b^* w ∗ T x i + b ∗ 僅用於線性核函數中,而在非線性核函數裏,並不用w ∗ w^{*} w ∗ 來判斷分類的結果。雖然不用,但爲了完整性,這裏還是給出核函數下的w ∗ w^{*} w ∗ ),w ∗ \bm w^* w ∗ 的具體表達式爲:
w ∗ = ∑ i α i ∗ y i ϕ ( x i )
\begin{aligned}
\bm{w^*}=\sum_{i}^{}\alpha_i^*y_i\phi(\bm x_i)
\end{aligned}
w ∗ = i ∑ α i ∗ y i ϕ ( x i )
而對標量b ∗ b^* b ∗ 的計算,書上式子(2.75)寫道:
(3)符號E i E_i E i 定義如下:
E i = f ( x i ) − y i = ( ∑ j = 1 n y j α j K i j + b ) − y i = ( ∑ j = 1 n y j α j ϕ ( x j ) T ϕ ( x i ) + b ) − y i = ( w ∗ T ϕ ( x i ) + b ) − y i
\begin{aligned}
E_i &=f(\bm x_i)-y_i\\&=(\sum_{j=1}^{n}y_j\alpha_jK_{ij}+b)-y_i
\\&=(\sum_{j=1}^{n}y_j\alpha_j\phi(x_j)^T\phi(x_i)+b)-y_i
\\&=(w^{*T}\phi(x_i)+b)-y_i
\end{aligned}
E i = f ( x i ) − y i = ( j = 1 ∑ n y j α j K i j + b ) − y i = ( j = 1 ∑ n y j α j ϕ ( x j ) T ϕ ( x i ) + b ) − y i = ( w ∗ T ϕ ( x i ) + b ) − y i
顯然,E i E_i E i 是函數f ( x ) f(x) f ( x ) 對輸入x i x_i x i 的預測值與真實輸出值y i y_i y i 之差。(備註:1998年原始參考文獻中,預測值f ( x i ) f(x_i) f ( x i ) 用u i u_i u i 表示的,即E i = u i − y i E_i=u_i-y_i E i = u i − y i )
三. 整理目標函數
四. α 2 n e w \alpha_2^{new} α 2 n e w 的推導(不考慮範圍約束時)
由於下述約束條件成立:
因此,有
其中,C ′ C' C ′ 是常數。根據式子(2.142),可知:
α 1 = γ − s α 2
\begin{aligned}
\alpha_1 = \gamma -s\alpha_2
\end{aligned}
α 1 = γ − s α 2
其中γ = C ′ y 1 \gamma=C'y_1 γ = C ′ y 1 、s = y 1 y 2 s=y_1y_2 s = y 1 y 2 (因爲y 1 y_1 y 1 只能取+1或-1,因此,除以y 1 y_1 y 1 等價於乘以y 1 y_1 y 1 )。帶入消除α 1 \alpha_1 α 1 後,我們可將式子(2.141)重新整理爲下式:
將上式對α 2 \alpha_2 α 2 求導,並令其爲0,得到下式:
解出上式中的α 2 \alpha_2 α 2 爲:
上式(2.145)中,α 2 \alpha_2 α 2 有個上角標,是表示此爲更新後的α 2 \alpha_2 α 2 ,或者說是最優的α 2 \alpha_2 α 2 ,用α 2 n e w \alpha_2^{new} α 2 n e w 表示。
上式經過下面照片中的推導可以化簡,詳細推導過程見照片(可省略不看):
推導結果爲:(此結果也是1998年中論文的結果)
五. α 2 n e w , r e v i s e d \alpha_2^{new,revised} α 2 n e w , r e v i s e d 的推導
顯然,上述分析沒有考慮式子(2.97)的約束條件,換句話說,α 2 n e w \alpha_2^{new} α 2 n e w 很可能不在指定區域[ 0 , C ] [0,C] [ 0 , C ] 內,而由於此時已經轉化爲一元函數求極值問題,所有,如果極點不在區域內,那麼最值一定取在邊界點,所有,最優的α 2 \alpha_2 α 2 的取值不再是α 2 n e w \alpha_2^{new} α 2 n e w ,應該換符號表示,文中採用α 2 n e w , r e v i s e d \alpha_2^{new,revised} α 2 n e w , r e v i s e d 表示考慮式子(2.97)中約束的新更新變量。故爲了分析式子(2.97)的約束條件,有下述兩個公式:
(1)當y 1 y_1 y 1 與y 2 y_2 y 2 同號時
(2)當y 1 y_1 y 1 與y 2 y_2 y 2 異號時
解釋一下上述公式:
首先將式子(2.142)兩側同時乘以y 1 y_1 y 1 ,由於y 1 y_1 y 1 只能取正負1,故,分類討論:
(1)解釋:當y 1 y_1 y 1 與y 2 y_2 y 2 同號,所以有:
α 1 + α 2 = γ
\begin{aligned}
\alpha_1+\alpha_2=\gamma
\end{aligned}
α 1 + α 2 = γ
由於α 1 \alpha_1 α 1 與α 2 \alpha_2 α 2 只能取[0,C]之間的box內,所以,此時有兩種情況,如圖:
(2)解釋:當y 1 y_1 y 1 與y 2 y_2 y 2 異號時,有:
綜合上述兩種情況,我們有:
此時得到的α 2 n e w , r e v i s e d \alpha_2^{new,revised} α 2 n e w , r e v i s e d 是完全符合題意的最優的α 2 \alpha_2 α 2 值!下面迴帶如公式,反求最優的α 1 \alpha_1 α 1 。
六. α 1 n e w \alpha_1^{new} α 1 n e w 的推導
由於式子 (2.142)成立(且,算法流程中已提及,疊代α 1 \alpha_1 α 1 與α 2 \alpha_2 α 2 時,需要固定其餘參數,即α 3 \alpha_3 α 3 到α n \alpha_n α n 是固定不變的,只疊代α 1 \alpha_1 α 1 與α 2 \alpha_2 α 2 ),因此,迭代前後的α 1 \alpha_1 α 1 與α 2 \alpha_2 α 2 都滿足下式:
y 1 α 1 o l d + y 2 α 2 o l d = C ′
\begin{aligned}
y_1\alpha_1^{old}+y_2\alpha_2^{old}=C'
\end{aligned}
y 1 α 1 o l d + y 2 α 2 o l d = C ′
y 1 α 1 n e w + y 2 α 2 n e w = C ′
\begin{aligned}
y_1\alpha_1^{new}+y_2\alpha_2^{new}=C'
\end{aligned}
y 1 α 1 n e w + y 2 α 2 n e w = C ′
所以有:
y 1 α 1 o l d + y 2 α 2 o l d = y 1 α 1 n e w + y 2 α 2 n e w
\begin{aligned}
y_1\alpha_1^{old}+y_2\alpha_2^{old}=y_1\alpha_1^{new}+y_2\alpha_2^{new}
\end{aligned}
y 1 α 1 o l d + y 2 α 2 o l d = y 1 α 1 n e w + y 2 α 2 n e w
上述左右同時乘以 y1,可解出α 1 n e w \alpha_1^{new} α 1 n e w 如下:
七. KKT條件
下式KKT條件中的f ( x i ) f(x_i) f ( x i ) ,代表在當前w w w 這個分類準則下,輸入爲x i x_i x i 時,輸出的分類預測結果。
(但我不太清楚這個是怎麼推出來的,求解釋)這個KKT條件說明,在兩條間隔線外面的點,對應前面的係數α i \alpha_i α i 爲0(即距離線很遠且不起作用的點),在兩條間隔線裏面的對應α i \alpha_i α i 爲C,在兩條間隔線上的對應的係數α i \alpha_i α i 在0和C之間。
八. b b b 的推導
(1)先說結論:
(2)再說結論的證明過程:
之所以要更新E i E_i E i ,是因爲這個變量有兩個作用,一是用以作爲第二個乘子的選取因子;二是用以作爲判斷算法終止的條件!
九. SMO應用流程
下面是SMO算法詳細流程,該流程比本文第一節中的要詳細,可用於實際應用中:
其中,用啓發式算法選取點的原則爲:
十. 其餘說明:
(1)論文中說,如果採用的是線性核函數,那麼久按照如下方式更新w n e w \bm w^{new} w n e w :
w n e w = w + y 1 ( α 1 n e w − α 1 ) x 1 + y 2 ( α 2 n e w , r e v i s e d − α 2 ) x 2
\begin{aligned}
\bm w^{new}=\bm w+y_1(\alpha_1^{new}-\alpha_1)\bm x_1+y_2(\alpha_2^{new,revised}-\alpha_2)\bm x_2
\end{aligned}
w n e w = w + y 1 ( α 1 n e w − α 1 ) x 1 + y 2 ( α 2 n e w , r e v i s e d − α 2 ) x 2
上式的結論依據以下兩個公式便可得到:
看完這句話以後我誤會了好久,仔細看公式才發現,之所以文中說“線性核函數”才更新w n e w \bm w^{new} w n e w ,是因爲這裏的更新公式中沒有ϕ ( . ) \phi(.) ϕ ( . ) ,換言之,並不是w \bm w w 只能用於線性,而是這裏的公式沒有加核,所以,這個公式裏的w \bm w w 只能用於線性。若改爲下式,則任何滿足題意的核,都可以用此式來分類:
w n e w = w + y 1 ( α 1 n e w − α 1 ) ϕ ( x 1 ) + y 2 ( α 2 n e w , r e v i s e d − α 2 ) ϕ ( x 2 )
\begin{aligned}
\bm w^{new}=\bm w+y_1(\alpha_1^{new}-\alpha_1)\bm \phi(x_1)+y_2(\alpha_2^{new,revised}-\alpha_2)\bm \phi(x_2)
\end{aligned}
w n e w = w + y 1 ( α 1 n e w − α 1 ) ϕ ( x 1 ) + y 2 ( α 2 n e w , r e v i s e d − α 2 ) ϕ ( x 2 )
(按照更新α 1 \alpha_1 α 1 與α 2 \alpha_2 α 2 的方式,來更新所有需要更新的α i \alpha_i α i ,全部訓練並更新完後,便可將該模型用於分類,最終的w n e w \bm w^{new} w n e w 可按照上述更新兩個參數的方式來推導,但是正如前文所述說,實際中直接給出的是Θ ( x i , x j ) \bm{\Theta(x_i,x_j)} Θ ( x i , x j ) 的矩陣取值(Θ ( x i , x j ) \bm{\Theta(x_i,x_j)} Θ ( x i , x j ) =ϕ ( x i ) T ϕ ( x j ) \phi(\bm x_i)^T\phi(\bm x_j) ϕ ( x i ) T ϕ ( x j ) ),並非ϕ ( x i ) \phi(\bm x_i) ϕ ( x i ) 。因此,非線性核函數下的w n e w \bm w^{new} w n e w 沒有實際用處,僅用於求解b n e w b^{new} b n e w
(2)另外一個待更新資料:
下文中,迭代的終止條件是兩次疊代的α o l d \alpha_{old} α o l d 與α n e w \alpha_{new} α n e w 所對應的f i o l d f_i^{old} f i o l d 與f i n e w f_i^{new} f i n e w 之間的數值小於某個數時,則終止疊代。畢竟選取的α 1 \alpha_1 α 1 都是那些不滿足KKT條件的,當都滿足以後,自然每次疊代α \alpha α 後,其f f f 改進就會很小了。
算法中,各個所需的阿爾法求解完畢後(即樣本訓練結束以後),最終應用時分類的原則爲:
參考資料:
[1] 《Sequential Minimal Optimization:
A Fast Algorithm for Training Support Vector Machines》 作者:John C. Platt 時間:1998 (SMO原文)
[2] 《Selected Applications of Convex Optimization》作者:Li Li
[3] 學習網址1
[4] 學習網址2
[5] SMO算法的matiab代碼下載網址1
[6] SMO算法的matiab代碼下載網址2