1. 程式人生 > >SVM中的對偶問題、KKT條件以及對拉格朗日乘子求值得SMO演算法

SVM中的對偶問題、KKT條件以及對拉格朗日乘子求值得SMO演算法


考慮以下優化問題

    clip_image001[9]    

    目標函式是f(w),下面是等式約束。通常解法是引入拉格朗日運算元,這裡使用clip_image003[14]來表示運算元,得到拉格朗日公式為

    clip_image004[6]    

    L是等式約束的個數。

    然後分別對w和clip_image003[15]求偏導,使得偏導數等於0,然後解出w和clip_image006[6]。至於為什麼引入拉格朗日運算元可以求出極值,原因是f(w)的dw變化方向受其他不等式的約束,dw的變化方向與f(w)的梯度垂直時才能獲得極值,而且在極值處,f(w)的梯度與其他等式梯度的線性組合平行,因此他們之間存線上性關係。(參考《最優化與KKT條件》)

然後我們探討有不等式約束的極值問題求法,問題如下:

    clip_image007[6]    

    我們定義一般化的拉格朗日公式

clip_image008[6]

    這裡的clip_image010[50]clip_image012[14]都是拉格朗日運算元。如果按這個公式求解,會出現問題,因為我們求解的是最小值,而這裡的clip_image014[6]已經不是0了,我們可以將clip_image010[51]調整成很大的正值,來使最後的函式結果是負無窮。因此我們需要排除這種情況,我們定義下面的函式:

    clip_image015[6]

    這裡的P代表primal。假設clip_image017[6]或者clip_image019[6],那麼我們總是可以調整clip_image010[52]clip_image012[15]來使得clip_image021[10]有最大值為正無窮。而只有g和h滿足約束時,clip_image021[11]為f(w)。這個函式的精妙之處在於clip_image023[6],而且求極大值。

    因此我們可以寫作

    clip_image024[6]

    這樣我們原來要求的min f(w)可以轉換成求clip_image026[10]了。    

    clip_image027[6]

    我們使用clip_image029[6]來表示clip_image026[11]。如果直接求解,首先面對的是兩個引數,而clip_image010[53]也是不等式約束,然後再在w上求最小值。這個過程不容易做,那麼怎麼辦呢?

    我們先考慮另外一個問題clip_image030[6]

    D的意思是對偶,clip_image031[10]將問題轉化為先求拉格朗日關於w的最小值,將clip_image033[6]clip_image003[16]看作是固定值。之後在clip_image031[11]求最大值的話:

clip_image034[6]

    這個問題是原問題的對偶問題,相對於原問題只是更換了min和max的順序,而一般更換順序的結果是Max Min(X) <= MinMax(X)。然而在這裡兩者相等。用clip_image036[6]來表示對偶問題如下:

    clip_image037[6]

    下面解釋在什麼條件下兩者會等價。假設f和g都是凸函式,h是仿射的(affine,

clip_image038[6])。並且存在w使得對於所有的i,clip_image040[10]。在這種假設下,一定存在clip_image042[14]使得clip_image044[14]是原問題的解,clip_image046[6]是對偶問題的解。還有clip_image047[6]另外,clip_image042[15]滿足庫恩-塔克條件(Karush-Kuhn-Tucker, KKT condition),該條件如下:

    clip_image048[6]

    所以如果clip_image042[16]滿足了庫恩-塔克條件,那麼他們就是原問題和對偶問題的解。讓我們再次審視公式(5),這個條件稱作是KKT dual complementarity條件。這個條件隱含了如果clip_image050[6],那麼clip_image052[10]。也就是說,clip_image052[11]時,w處於可行域的邊界上,這時才是起作用的約束。而其他位於可行域內部(clip_image054[6]的)點都是不起作用的約束,其clip_image056[6]。這個KKT雙重補足條件會用來解釋支援向量和SMO的收斂測試。

    這部分內容思路比較凌亂,還需要先研究下《非線性規劃》中的約束極值問題,再回頭看看。KKT的總體思想是將極值會在可行域邊界上取得,也就是不等式為0或等式約束裡取得,而最優下降方向一般是這些等式的線性組合,其中每個元素要麼是不等式為0的約束,要麼是等式約束。對於在可行域邊界內的點,對最優解不起作用,因此前面的係數為0。

7 最優間隔分類器(optimal margin classifier)

    重新回到SVM的優化問題:

    clip_image057[6]

    我們將約束條件改寫為:

    clip_image058[6]

    從KKT條件得知只有函式間隔是1(離超平面最近的點)的線性約束式前面的係數clip_image060[14],也就是說這些約束式clip_image062[6],對於其他的不在線上的點(clip_image064[6]),極值不會在他們所在的範圍內取得,因此前面的係數clip_image066[14].注意每一個約束式實際就是一個訓練樣本。

    看下面的圖:

    clip_image067[6]

    實線是最大間隔超平面,假設×號的是正例,圓圈的是負例。在虛線上的點就是函式間隔是1的點,那麼他們前面的係數clip_image060[15],其他點都是clip_image066[15]。這三個點稱作支援向量。構造拉格朗日函式如下:    

    clip_image068[6]

    注意到這裡只有clip_image010[54]沒有clip_image012[16]是因為原問題中沒有等式約束,只有不等式約束。

    下面我們按照對偶問題的求解步驟來一步步進行,

    clip_image069[10]

    首先求解clip_image070[10]的最小值,對於固定的clip_image010[55]clip_image070[11]的最小值只與w和b有關。對w和b分別求偏導數。

    clip_image071[6]

    clip_image072[6]

    並得到

    clip_image073[6]

    將上式帶回到拉格朗日函式中得到,此時得到的是該函式的最小值(目標函式是凸函式)

    代入後,化簡過程如下:

     

  最後得到

clip_image074[6]

     由於最後一項是0,因此簡化為

    clip_image075[6]

    這裡我們將向量內積clip_image076[6]表示為clip_image077[6]

    此時的拉格朗日函式只包含了變數clip_image010[56]。然而我們求出了clip_image010[57]才能得到w和b。

    接著是極大化的過程clip_image069[11]

clip_image078[6]

    前面提到過對偶問題和原問題滿足的幾個條件,首先由於目標函式和線性約束都是凸函式,而且這裡不存在等式約束h。存在w使得對於所有的i,clip_image040[11]。因此,一定存在clip_image080[6]使得clip_image044[15]是原問題的解,clip_image082[10]是對偶問題的解。在這裡,求clip_image010[58]就是求clip_image082[11]了。

    如果求出了clip_image010[59],根據clip_image083[6]即可求出w(也是clip_image044[16],原問題的解)。然後

    clip_image084[6]

    即可求出b。即離超平面最近的正的函式間隔要等於離超平面最近的負的函式間隔。

    關於上面的對偶問題如何求解,將留給下一篇中的SMO演算法來闡明。

    這裡考慮另外一個問題,由於前面求解中得到

    clip_image086[6]

    我們通篇考慮問題的出發點是clip_image088[6],根據求解得到的clip_image010[60],我們代入前式得到

    clip_image089[6]

    也就是說,以前新來的要分類的樣本首先根據w和b做一次線性運算,然後看求的結果是大於0還是小於0,來判斷正例還是負例。現在有了clip_image010[61],我們不需要求出w,只需將新來的樣本和訓練資料中的所有樣本做內積和即可。那有人會說,與前面所有的樣本都做運算是不是太耗時了?其實不然,我們從KKT條件中得到,只有支援向量的clip_image060[16],其他情況clip_image066[16]。因此,我們只需求新來的樣本和支援向量的內積,然後運算即可。這種寫法為下面要提到的核函式(kernel)做了很好的鋪墊。這是上篇,先寫這麼多了。


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]以外的所有引數,那麼