關於拉格朗日乘子法和KKT條件


 

解密SVM系列(一):關於拉格朗日乘子法和KKT條件

標簽: svm算法支持向量機
 分類:
 

寫在之前

支持向量機(SVM),一個神秘而眾知的名字,在其出來就受到了莫大的追捧,號稱最優秀的分類算法之一,以其簡單的理論構造了復雜的算法,又以其簡單的用法實現了復雜的問題,不得不說確實完美。 
本系列旨在以基礎化的過程,實例化的形式一探SVM的究竟。曾經也只用過集成化的SVM軟件包,效果確實好。因為眾人皆說原理復雜就對其原理卻沒怎么研究,最近經過一段時間的研究感覺其原理還是可以理解,這里希望以一個從懵懂到略微熟知的角度記錄一下學習的過程。 
其實網絡上講SVM算法的多不勝數,博客中也有許多大師級博主的文章,寫的也很簡單明了,可是在看過之和總是感覺像差點什么,當然對於那些基礎好的可能一看就懂了,然而對於像我們這些薄基礎的一遍下來也能馬馬虎虎懂,過一兩天后又忘了公式怎么來的了。比如說在研究SVM之前,你是否聽說過拉格朗日乘子法?你是否知道什么是對偶問題?你是否了解它們是怎么解決問題的?Ok這些不知道的話,更別說什么是KKT條件了,哈哈,有沒有說到你的心聲,不用怕,學學就會了。話說像拉格朗日乘子法,在大學里面學數學的話,不應該沒學過,然你學會了嗎?你知道是干什么的嗎?如果那個時候就會了,那你潛質相當高了。作為一個剛過來的人,將以簡單實例化形式記錄自己的學習過程,力圖幫助新手級學習者少走彎路。

(一)關於拉格朗日乘子法

首先來了解拉格朗日乘子法,那么為什么需要拉格朗日乘子法?記住,有拉格朗日乘子法的地方,必然是一個組合優化問題。那么帶約束的優化問題很好說,就比如說下面這個: 

minf=2x21+3x22+7x23s.t.2x1+x2=12x2+3x3=2

 

這是一個帶等式約束的優化問題,有目標值,有約束條件。那么想想假設沒有約束條件這個問題是怎么求解的呢?是不是直接f對各個x求導等於0,,解x就可以了,可以看到沒有約束的話,求導為0,那么各個x均為0吧,這樣f=0了,最小。但是x都為0不滿足約束條件呀,那么問題就來了。這里在說一點的是,為什么上面說求導為0就可以呢?理論上多數問題是可以的,但是有的問題不可以。如果求導為0一定可以的話,那么f一定是個凸優化問題,什么是凸的呢?像下面這個左圖: 
這里寫圖片描述

凸的就是開口朝一個方向(向上或向下)。更准確的數學關系就是: 

f(x1)+f(x2)2>f(x1+x22)f(x1)+f(x2)2<f(x1+x22)

注意的是這個條件是 對函數的任意x取值。如果滿足第一個就是開口向上的凸,第二個是開口向下的凸。可以看到對於凸問題,你去求導的話,是不是只有一個極點,那么他就是最優點,很合理。類似的看看上圖右邊這個圖,很明顯這個條件對任意的x取值不滿足,有時滿足第一個關系,有時滿足第二個關系,對應上面的兩處取法就是,所以這種問題就不行,再看看你去對它求導,會得到好幾個極點。然而從圖上可以看到,只有其中一個極點是最優解,其他的是局部最優解,那么當真實問題的時候你選擇那個?說了半天要說啥呢,就是拉格朗日法是一定適合於凸問題的,不一定適合於其他問題,還好我們最終的問題是凸問題。

 

回頭再來看看有約束的問題,既然有了約束不能直接求導,那么如果把約束去掉不就可以了嗎?怎么去掉呢?這才需要拉格朗日方法。既然是等式約束,那么我們把這個約束乘一個系數加到目標函數中去,這樣就相當於既考慮了原目標函數,也考慮了約束條件,比如上面那個函數,加進去就變為: 

minf=2x21+3x22+7x23+α1(2x1+x21)+α2(2x2+3x32)

這里可以看到與 α1,α2相乘的部分都為0,所以α1,α2的取值為全體實數。現在這個優化目標函數就沒有約束條件了吧,既然如此,求法就簡單了,分別對x求導等於0,如下: 
fx1=4x1+2α1=0x1=0.5α1fx2=6x2+α1+2α2=0x2=α1+2α26fx3=14x3+3α2=0x3=3α314

 

把它在帶到約束條件中去,可以看到,2個變量兩個等式,可以求解,最終可以得到α1=0.39,α2=1.63,這樣再帶回去求x就可以了。那么一個帶等式約束的優化問題就通過拉格朗日乘子法完美的解決了。那么更高一層的,帶有不等式的約束問題怎么辦?那么就需要用更一般化的拉格朗日乘子法即KKT條件來解決這種問題了。

(二)關於KKT條件

繼續討論關於帶等式以及不等式的約束條件的凸函數優化。任何原始問題約束條件無非最多3種,等式約束,大於號約束,小於號約束,而這三種最終通過將約束方程化簡化為兩類:約束方程等於0和約束方程小於0。再舉個簡單的方程為例,假設原始約束條件為下列所示: 

minf=x212x1+1+x22+4x2+4s.t.x1+10x2>1010x110x2<10

那么把約束條件變個樣子: 
s.t.10x110x2<010x1x210<0

 

為什么都變成等號與小於號,方便后面的,反正式子的關系沒有發生任何變化就行了。

現在將約束拿到目標函數中去就變成: 

L(x,α)=f(x)+α1g1(x)+α2g2(x)=x212x1+1+x22+4x2+4+α1(10x110x2)+α2(10x1x210)

那么KKT條件的定理是什么呢?就是如果一個優化問題在轉變完后變成
L(x,α,β)=f(x)+αigi(x)+βihi(x)

其中g是不等式約束,h是等式約束(像上面那個只有不等式約束,也可能有等式約束)。那么KKT條件就是函數的最優值必定滿足下面條件:

 

(1) L對各個x求導為零; 
(2) h(x)=0; 
(3) αigi(x)=0αi0

這三個式子前兩個好理解,重點是第三個式子不好理解,因為我們知道在約束條件變完后,所有的g(x)<=0,且αi0,然后求和還要為0,無非就是告訴你,要么某個不等式gi(x)=0,要么其對應的αi=0。那么為什么KKT的條件是這樣的呢?

假設有一個目標函數,以及它的約束條件,形象的畫出來就如下: 
這里寫圖片描述
假設就這么幾個吧,最終約束是把自變量約束在一定范圍,而函數是在這個范圍內尋找最優解。函數開始也不知道該取哪一個值是吧,那就隨便取一個,假設某一次取得自變量集合為x1*,發現一看,不滿足約束,然后再換呀換,換到了x2*,發現可以了,但是這個時候函數值不是最優的,並且x2*使得g1(x)與g2(x)等於0了,而g3(x)還是小於0。這個時候,我們發現在x2的基礎上再尋找一組更優解要靠誰呢?當然是要靠約束條件g1(x)與g2(x),因為他們等於0了,很極限呀,一不小心,走錯了就不滿足它們兩了,這個時候我們會選擇g1(x)與g2(x)的梯度方向往下走,這樣才能最大程度的拜托g1(x)與g2(x)=0的命運,使得他們滿足小於0的約束條件對不對。至於這個時候需不需要管g2(x)呢?正常來說管不管都可以,如果管了,也取g3在x2*處的梯度的話,因為g3已經滿足了小於0的條件,這個時候在取在x2*處的梯度,你能保證它是往好的變了還是往差的變了?答案是都有可能。運氣好,往好的變了,可以更快得到結果,運氣不好,往差的變了,反而適得其反。那么如果不管呢?因為g1(x)與g2(x)已經在邊緣了,所以取它的梯度是一定會讓目標函數變好的。綜合來看,這個時候我們就不選g3。那么再往下走,假設到了自變量優化到了x3*,這個時候發現g2(x)與g3(x)等於0,也就是走到邊了,而g1(x)小於0,可變化的空間綽綽有余,那么這個時候舉要取g2(x)與g3(x)的梯度方向作為變化的方向,而不用管g1(x)。那么一直這樣走呀走,最終找到最優解。可以看到的是,上述如果g1(x)、g2(x)=0的話,我們是需要優化它的,又因為他們本身的條件是小於0的,所以最終的公式推導上表明,是要乘以一個正系數α作為他們梯度增長的倍數,而那些不需要管的g(x)為了統一表示,這個時候可以將這個系數設置為0,那么這一項在這一次的優化中就沒有了。那么把這兩種綜合起來就可以表示為 
αigi(x)=0αi0。 
也即是某次的g(x)在為最優解起作用,那么它的系數值(可以)不為0。如果某次g(x)沒有為下一次的最優解x的獲得起到作用,那么它的系數就必須為0,這就是這個公式的含義。

比如上面例子的目標值與約束: 

minf=x212x1+1+x22+4x2+4s.t.10x110x2<010x1x210<0

將約束提到函數中有: 
L(x,α)=x212x1+1+x22+4x2+4+α1(10x110x2)+α2(10x1x210)

此時分別對x1、x2求導數: 
Lx1=2x12α1+10α2=0x1=0.5(α110α2+2)Lx2=2x2+410α1α2=0x2=0.5(10α1+α24)

而我們還有一個條件就是αg(x)=0,那么也就是: 
α1g1(x)=α1(10x110x2)=0α2g2(x)=α2(10x1x210)=0

這樣我們就去討論下,要么g=0,要么α=0,這里兩個g兩個α,這樣我們就需要討論四種情況,可能你會說,這是約束條件少的情況,那么如果有10個約束條件,這樣就有10個g和10個α,你去給我討論?多少種組合,不知道,但是換個思路,我們非得去10個一起去討論?機智的學者想到一種方法,考慮到αigi(x)=0這個條件,那么我兩個兩個討論不就可以了,比如現在我就討論α7α8,讓其他的α不變,為什么選或者至少選兩個討論呢,因為這個式子求和為0,改變一個顯然是不行的,那就改變兩個,你增我就減,這樣和可以為0。再問為什么不討論3個呢?也可以,這不是麻煩嘛,一個俗語怎么說來着,三個和尚沒水喝,假設你改變了一個,另外兩個你說誰去減或者加使得和為0,還是兩個都變化一點呢?不好說吧,自然界都是成雙成對的才和諧,沒有成三成四的(有的話也少)。這里順便提一下后面會介紹到的內容,就是實現SVM算法的SMO方法,在哪里,會有很多α,那么人們怎么解決的呢,就是隨便選擇兩個α去變化,看看結果好的話,就接受,不好的話就舍棄在選擇兩個α,如此反復,后面介紹。

 

說回來,這里有四種情況,正好兩個α,也不用挑不用減的,一次完事。那么我們分着討論吧, 
(1)α1=α2=0,那么看上面的關系可以得到x1=1,x2=1,再把兩個x帶到不等式約束,發現第一個就是需要滿足(10-1+20=29<0)顯然不行,29>0的。舍棄

(2)g1(x)=g2(x)=0,帶進去解得,x1=110/101;x2=90/101,再帶回去求解α1α2,發現α1=58/101α2=4/101,它們滿足大於0的條件,那么顯然這組解是可以的。

(3)其他兩種情況再去討論發現是不行的。

可以看到像這種簡單的討論完以后就可以得到解了。 
x1=110/101=1.08;x2=90/101=0.89,那么它得到結果對不對呢?這里因為函數簡單,可以在matlab下畫出來,同時約束條件也可以畫出來,那么原問題以及它的約束面畫出來就如下所示: 
這里寫圖片描述 
這是截取下來的符合約束要求的目標面 
這里寫圖片描述 
可以看到最優解確實就是上面我們求的那個解。既然簡單的問題可以這樣解,那么復雜一點的只需要簡單化,照樣可以解,至此KKT條件解這類約束性問題就是這樣,它對后續的SVM求解最優解至關重要。


免責聲明!

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



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