在求解最優化問題中,拉格朗日乘子法(Lagrange Multiplier)和KKT(Karush Kuhn Tucker)條件是兩種最經常使用的方法。在有等式約束時使用拉格朗日乘子法,在有不等約束時使用KKT條件。html
(1)無約束條件函數
這是最簡單的狀況,解決方法一般是函數對變量求導,令求導函數等於0的點多是極值點。將結果帶回原函數進行驗證便可。優化
(2)等式約束條件spa
設目標函數爲f(x),約束條件爲h_k(x),形如:
s.t. 表示subject to ,「受限於」的意思,l表示有l個約束條件。
複製代碼
則解決方法是消元法或者拉格朗日法。消元法比較簡單不在贅述,這裏主要講拉格朗日法,由於後面提到的KKT條件是對拉格朗日乘子法的一種泛化。.net
例如給定橢球:3d
求這個橢球的內接長方體的最大致積。這個問題實際上就是條件極值問題,即在條件 下,求的最大值。code
固然這個問題實際能夠先根據條件消去(消元法),而後帶入轉化爲無條件極值問題來處理。可是有時候這樣作很困難,甚至是作不到的,這時候就須要用拉格朗日乘數法了。cdn
首先定義拉格朗日函數F(x):(其中λk是各個約束條件的待定係數。)htm
而後解變量的偏導方程:blog
若是個約束條件,就應該有個方程。求出的方程組的解就多是最優化值(高等數學中提到的極值),將結果帶回原方程驗證就可獲得解。
回到上面的題目,經過拉格朗日乘數法將問題轉化爲
對求偏導獲得
聯立前面三個方程獲得和,帶入第四個方程解之
帶入解得最大致積爲:
至於爲何這麼作能夠求解最優化?維基百科上給出了一個比較好的直觀解釋。
舉個二維最優化的例子:
複製代碼
這裏畫出z=f(x,y)的等高線(函數登高線定義見百度百科):
複製代碼
綠線標出的是約束g(x,y)=c的點的軌跡。藍線是f(x,y)的等高線。箭頭表示斜率,和等高線的法線平行。從梯度的方向上來看,顯然有d1>d2。綠色的線是約束,也就是說,只要正好落在這條綠線上的點纔多是知足要求的點。若是沒有這條約束,f(x,y)的最小值應該會落在最小那圈等高線內部的某一點上。而如今加上了約束,最小值點應該在哪裏呢?顯然應該是在f(x,y)的等高線正好和約束線相切的位置,由於若是隻是相交意味着確定還存在其它的等高線在該條等高線的內部或者外部,使得新的等高線與目標函數的交點的值更大或者更小,只有到等高線與目標函數的曲線相切的時候,可能取得最優值。
若是咱們對約束也求梯度∇g(x,y),則其梯度如圖中綠色箭頭所示。很容易看出來,要想讓目標函數f(x,y)的等高線和約束相切,則他們切點的梯度必定在一條直線上(f和g的斜率平行)。
也即在最優化解的時候:∇f(x,y)=λ(∇g(x,y)-C) (其中∇爲梯度算子; 即:f(x)的梯度 = λ* g(x)的梯度,λ是常數,能夠是任何非0實數,表示左右兩邊同向。)
即:▽[f(x,y)+λ(g(x,y)−c)]=0 λ≠0
複製代碼
那麼拉格朗日函數: F(x,y)=f(x,y)+λ(g(x,y)−c) 在達到極值時與f(x,y)相等,由於F(x,y)達到極值時g(x,y)−c總等於零。 min( F(x,λ) )取得極小值時其導數爲0,即▽f(x)+▽∑ni=λihi(x)=0,也就是說f(x)和h(x)的梯度共線。 。簡單的說,在F(x,λ)取得最優化解的時候,即F(x,λ)取極值(導數爲0,▽[f(x,y)+λ(g(x,y)−c)]=0)的時候,f(x)與g(x) 梯度共線,此時就是在條件約束g(x)下,f(x)的最優化解。
(3)不等式約束條件 設目標函數,不等式約束爲,有的教程還會添加上等式約束條件。此時的約束優化問題描述以下:
則咱們定義不等式約束下的拉格朗日函數L,則L表達式爲:
複製代碼
其中f(x)是原目標函數, 是第j個等式約束條件, 是對應的約束係數, 是不等式約束, 是對應的約束係數。
經常使用的方法是KKT條件,一樣地,把全部的不等式約束、等式約束和目標函數所有寫爲一個式子L(a, b, x)= f(x) + ag(x)+bh(x),
KKT條件是說最優值必須知足如下條件:
1)L(a, b, x)對x求導爲零;
2)h(x) =0;
3)a*g(x) = 0;
求取這些等式以後就能獲得候選最優值。其中第三個式子很是有趣,由於g(x)<=0,若是要知足這個等式,必須a=0或者g(x)=0. 這是SVM的不少重要性質的來源,如支持向量的概念。
接下來主要介紹KKT條件,推導及應用。詳細推導過程以下:
當知足必定條件時原問題,對偶問題,的解相同在最優解想處
參考:
【1】拉格朗日乘數法
【2】KKT條件介紹
【3】深刻理解拉格朗日乘子法(Lagrange Multiplier) 和KKT條件
原文: 連接