SMO算法詳細推導(Sequential Minimal Optimization)

本文針對一般性的“軟判斷的核函數的對偶問題的SVM”,形如下式:

上式問題所在:當採樣點 xix_i 選取50000個點時,則基於核函數變量Θ(xi,xj)\bm{\Theta(x_i,x_j)}將需要大約10GB的RAM來存儲Θ(xi,xj)\bm{\Theta(x_i,x_j)}。這裏介紹前人所提的SMO算法,以降低存儲空間。

一. 算法流程框架

首先,先給出SMO算法的算法流程,如下:
在這裏插入圖片描述
意思是:第一步,選取一對αi\alpha_iαj\alpha_j,選取方法使用啓發式方法。第二步,固定除αi\alpha_iαj\alpha_j之外的其他參數,確定目標函數(即:W(α)W(\alpha)。圖片中用W(α)W(\alpha)表示整個目標函數)取得最大值時的αi\alpha_i^*的取值,並由αi\alpha_i^*計算出αj\alpha_j^*。重複迭代上述兩步,直到收斂。

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

二. 符號定義與基礎回顧

(1)先定義下述三個符號,以便後文表述:

(2)若爲線性核函數分類,由基本二分類SVM可知,最後的分類是根據wTxi+bw^{*T}x_i+b^*來判斷的:若wTxi+b>0w^{*T}x_i+b^*>0則判斷yiy_i屬於某一類,若wTxi+b<0w^{*T}x_i+b^*<0則判斷yiy_i屬於另一類。如果是非線性核函數分類,則是wTϕ(xi)+bw^{*T}\phi(x_i)+b^*與0的大小比較(但是,在實際核函數模型中,我們沒有ϕ(xi)\phi(\bm x_i)的表達式,往往都是直接給出Θ(xi,xj)\bm{\Theta(x_i,x_j)}(而:Θ(xi,xj)\bm{\Theta(x_i,x_j)}=ϕ(xi)Tϕ(xj)\phi(\bm x_i)^T\phi(\bm x_j))。因此,wTxi+bw^{*T}x_i+b^*僅用於線性核函數中,而在非線性核函數裏,並不用ww^{*}來判斷分類的結果。雖然不用,但爲了完整性,這裏還是給出核函數下的ww^{*}),w\bm w^*的具體表達式爲:

w=iαiyiϕ(xi) \begin{aligned} \bm{w^*}=\sum_{i}^{}\alpha_i^*y_i\phi(\bm x_i) \end{aligned}

而對標量bb^*的計算,書上式子(2.75)寫道:

(3)符號EiE_i定義如下:

Ei=f(xi)yi=(j=1nyjαjKij+b)yi=(j=1nyjαjϕ(xj)Tϕ(xi)+b)yi=(wTϕ(xi)+b)yi \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}

顯然,EiE_i是函數f(x)f(x)對輸入xix_i的預測值與真實輸出值yiy_i之差。(備註:1998年原始參考文獻中,預測值f(xi)f(x_i)uiu_i表示的,即Ei=uiyiE_i=u_i-y_i

三. 整理目標函數

四. α2new\alpha_2^{new}的推導(不考慮範圍約束時)

由於下述約束條件成立:

因此,有

其中,CC'是常數。根據式子(2.142),可知:
α1=γsα2 \begin{aligned} \alpha_1 = \gamma -s\alpha_2 \end{aligned}

其中γ=Cy1\gamma=C'y_1s=y1y2s=y_1y_2 (因爲y1y_1只能取+1或-1,因此,除以y1y_1等價於乘以y1y_1)。帶入消除α1\alpha_1後,我們可將式子(2.141)重新整理爲下式:

將上式對α2\alpha_2求導,並令其爲0,得到下式:

解出上式中的α2\alpha_2爲:

上式(2.145)中,α2\alpha_2有個上角標,是表示此爲更新後的α2\alpha_2,或者說是最優的α2\alpha_2,用α2new\alpha_2^{new}表示。

上式經過下面照片中的推導可以化簡,詳細推導過程見照片(可省略不看):

推導結果爲:(此結果也是1998年中論文的結果)

五. α2new,revised\alpha_2^{new,revised}的推導

顯然,上述分析沒有考慮式子(2.97)的約束條件,換句話說,α2new\alpha_2^{new}很可能不在指定區域[0,C][0,C]內,而由於此時已經轉化爲一元函數求極值問題,所有,如果極點不在區域內,那麼最值一定取在邊界點,所有,最優的α2\alpha_2的取值不再是α2new\alpha_2^{new},應該換符號表示,文中採用α2new,revised\alpha_2^{new,revised}表示考慮式子(2.97)中約束的新更新變量。故爲了分析式子(2.97)的約束條件,有下述兩個公式:

(1)當y1y_1y2y_2同號時

(2)當y1y_1y2y_2異號時

解釋一下上述公式:
首先將式子(2.142)兩側同時乘以y1y_1,由於y1y_1只能取正負1,故,分類討論:
(1)解釋:當y1y_1y2y_2同號,所以有:
α1+α2=γ \begin{aligned} \alpha_1+\alpha_2=\gamma \end{aligned}

由於α1\alpha_1α2\alpha_2只能取[0,C]之間的box內,所以,此時有兩種情況,如圖:

(2)解釋:當y1y_1y2y_2異號時,有:

綜合上述兩種情況,我們有:

此時得到的α2new,revised\alpha_2^{new,revised}是完全符合題意的最優的α2\alpha_2值!下面迴帶如公式,反求最優的α1\alpha_1

六. α1new\alpha_1^{new}的推導

由於式子 (2.142)成立(且,算法流程中已提及,疊代α1\alpha_1α2\alpha_2時,需要固定其餘參數,即α3\alpha_3αn\alpha_n是固定不變的,只疊代α1\alpha_1α2\alpha_2),因此,迭代前後的α1\alpha_1α2\alpha_2都滿足下式:

y1α1old+y2α2old=C \begin{aligned} y_1\alpha_1^{old}+y_2\alpha_2^{old}=C' \end{aligned}

y1α1new+y2α2new=C \begin{aligned} y_1\alpha_1^{new}+y_2\alpha_2^{new}=C' \end{aligned}

所以有:

y1α1old+y2α2old=y1α1new+y2α2new \begin{aligned} y_1\alpha_1^{old}+y_2\alpha_2^{old}=y_1\alpha_1^{new}+y_2\alpha_2^{new} \end{aligned}

上述左右同時乘以 y1,可解出α1new\alpha_1^{new}如下:

七. KKT條件

下式KKT條件中的f(xi)f(x_i),代表在當前ww這個分類準則下,輸入爲xix_i時,輸出的分類預測結果。

(但我不太清楚這個是怎麼推出來的,求解釋)這個KKT條件說明,在兩條間隔線外面的點,對應前面的係數αi\alpha_i爲0(即距離線很遠且不起作用的點),在兩條間隔線裏面的對應αi\alpha_i爲C,在兩條間隔線上的對應的係數αi\alpha_i在0和C之間。

八. bb的推導

(1)先說結論:

(2)再說結論的證明過程:

之所以要更新EiE_i,是因爲這個變量有兩個作用,一是用以作爲第二個乘子的選取因子;二是用以作爲判斷算法終止的條件!

九. SMO應用流程

下面是SMO算法詳細流程,該流程比本文第一節中的要詳細,可用於實際應用中:

其中,用啓發式算法選取點的原則爲:

十. 其餘說明:

(1)論文中說,如果採用的是線性核函數,那麼久按照如下方式更新wnew\bm w^{new}

wnew=w+y1(α1newα1)x1+y2(α2new,revisedα2)x2 \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}

上式的結論依據以下兩個公式便可得到:

看完這句話以後我誤會了好久,仔細看公式才發現,之所以文中說“線性核函數”才更新wnew\bm w^{new},是因爲這裏的更新公式中沒有ϕ(.)\phi(.),換言之,並不是w\bm w只能用於線性,而是這裏的公式沒有加核,所以,這個公式裏的w\bm w只能用於線性。若改爲下式,則任何滿足題意的核,都可以用此式來分類:

wnew=w+y1(α1newα1)ϕ(x1)+y2(α2new,revisedα2)ϕ(x2) \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}

(按照更新α1\alpha_1α2\alpha_2的方式,來更新所有需要更新的αi\alpha_i,全部訓練並更新完後,便可將該模型用於分類,最終的wnew\bm w^{new}可按照上述更新兩個參數的方式來推導,但是正如前文所述說,實際中直接給出的是Θ(xi,xj)\bm{\Theta(x_i,x_j)}的矩陣取值(Θ(xi,xj)\bm{\Theta(x_i,x_j)}=ϕ(xi)Tϕ(xj)\phi(\bm x_i)^T\phi(\bm x_j)),並非ϕ(xi)\phi(\bm x_i)。因此,非線性核函數下的wnew\bm w^{new}沒有實際用處,僅用於求解bnewb^{new}

(2)另外一個待更新資料:

下文中,迭代的終止條件是兩次疊代的αold\alpha_{old}αnew\alpha_{new}所對應的fioldf_i^{old}finewf_i^{new}之間的數值小於某個數時,則終止疊代。畢竟選取的α1\alpha_1都是那些不滿足KKT條件的,當都滿足以後,自然每次疊代α\alpha後,其ff改進就會很小了。

算法中,各個所需的阿爾法求解完畢後(即樣本訓練結束以後),最終應用時分類的原則爲:

參考資料:
[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

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