深入理解拉格朗日乘子法(Lagrange Multiplier) 和KKT條件


轉:https://blog.csdn.net/lijil168/article/details/69395023?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.add_param_isCf&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.add_param_isCf

在求解最優化問題中,拉格朗日乘子法(Lagrange Multiplier)和KKT(Karush Kuhn Tucker)條件是兩種最常用的方法。在有等式約束時使用拉格朗日乘子法,在有不等約束時使用KKT條件。

  我們這里提到的最優化問題通常是指對於給定的某一函數,求其在指定作用域上的全局最小值(因為最小值與最大值可以很容易轉化,即最大值問題可以轉化成最小值問題)。提到KKT條件一般會附帶的提一下拉格朗日乘子。對學過高等數學的人來說比較拉格朗日乘子應該會有些印象。二者均是求解最優化問題的方法,不同之處在於應用的情形不同。

      一般情況下,最優化問題會碰到一下三種情況:

(1)無約束條件

  這是最簡單的情況,解決方法通常是函數對變量求導,令求導函數等於0的點可能是極值點。將結果帶回原函數進行驗證即可。

(2)等式約束條件

      設目標函數為f(x),約束條件為h_k(x),形如:

        s.t. 表示subject to ,“受限於”的意思,l表示有l個約束條件。

        

   則解決方法是消元法或者拉格朗日法。消元法比較簡單不在贅述,這里主要講拉格朗日法,因為后面提到的KKT條件是對拉格朗日乘子法的一種泛化。

   例如給定橢球:

               

    求這個橢球的內接長方體的最大體積。這個問題實際上就是條件極值問題,即在條件      下,求的最大值。

    當然這個問題實際可以先根據條件消去 z (消元法),然后帶入轉化為無條件極值問題來處理。但是有時候這樣做很困難,甚至是做不到的,這時候就需要用拉格朗日乘數法了。  

    首先定義拉格朗日函數F(x):

          ( 其中λk是各個約束條件的待定系數。)                                                           

        然后解變量的偏導方程:

          ......,

   如果有l個約束條件,就應該有l+1個方程。求出的方程組的解就可能是最優化值(高等數學中提到的極值),將結果帶回原方程驗證就可得到解。

   回到上面的題目,通過拉格朗日乘數法將問題轉化為

         

   對求偏導得到

          

   聯立前面三個方程得到,帶入第四個方程解之

          

   帶入解得最大體積為:

          

  

 

(3)不等式約束條件

       設目標函數f(x),不等式約束為g(x),有的教程還會添加上等式約束條件h(x)。此時的約束優化問題描述如下:

        

        則我們定義不等式約束下的拉格朗日函數L,則L表達式為:

        

      其中f(x)是原目標函數,hj(x)是第j個等式約束條件,λj是對應的約束系數,gk是不等式約束,uk是對應的約束系數。

  常用的方法是KKT條件,同樣地,把所有的不等式約束、等式約束和目標函數全部寫為一個式子L(a, b, x)= f(x) + a*g(x)+b*h(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條件,推導及應用。詳細推導過程如下:

 

????從幾何角度看拉格朗日乘子法的物理意義:

 


      該方法適用於約束條件下求極值的問題。對於沒有約束的極值問題,顯然,如果某一點是極值的必要條件是該點的各方向的偏導數皆為零,也就是說,如果偏導數不全為零,那么就不可能是極值。

例如,一個三元函數w(x,y,z), 它是x,y,z的函數,且在一個約束條件下求它的極值。我們假設圖中的曲面就是約束方程g(x,y,z)=0的圖像,即約束面。之前沒有約束面時,w取極值的必要條件是各個方向偏導數為零,而對於可微函數各個方向偏導為零的充分必要條件是沿x,y,z 方向的偏導為零。現在有了約束面,我們不再需要這么苛刻的必要條件,因為有了約束面,x,y,z在一定程度上被限制了,只能在約束面內移動,因此只需要沿約束面內的各個方向運動時的偏導數(變化化率)為零就可以了,此時自由度由三維下降到兩維。滿足在約束面內的各個方向偏導為零,也就是說,w取極值的必要條件減弱為待求函數的方向導數(梯度)垂直於約束面,從數學上看,也就是方向導數和約束面的法線方向同向(一個向量等於另一個向量的常數倍),而不需要梯度為零,因為和梯度垂直的方向偏導數一定為零,這樣,沿約束面各個方向運動時w的偏導數也就為零了。這便是拉格朗日乘子法求極值的幾何意義。

 

個人總結:

想象一下我們爬山(優化函數)找最高點(求最大值),要想最快的上,要找最陡的方向,陡峭的程度以坡度(方向導數)度量,最陡的方向即為最大坡度(梯度)決定的方向,理想情況下,當無法再上升,坡度(梯度)變成0時,找到最高點(求得最大值)。但是,當我們必須繞圓弧行盤山路爬行時,盤山路(約束條件)約束了我們的路徑及方向,我們必須沿着盤山路最陡的方向(梯度,注意此時退化為一維,只有一個方向,為道路切向),當道路不再上升(及切向為0),即找到最高點。

再想想一下我們是海水,從山底向上移動(集體作戰),領袖沿着盤山路行進,每一步我們可以找到同海拔的海岸線(等高線),海岸線與盤山路想交,我們可以繼續向上移動,直到海岸線與盤山路向切,此時,找到最高海拔,海岸線(等高線)同時與約束方程確定的邊界相切。

在極值點,優化函數的等高線、優化函數與約束方程的交線、約束方程的投影線(類似約束曲面的等高線,約束曲線)相切於一點。等高線與約束曲線法向相同(不考慮正負),而優化函數的梯度數值等於其等高線的法向數值,約束方程的梯度數值等於約束曲線的法向數值。故∆f=λ∆g,λ!=0

極值點的2個條件:

1、極值點在優化函數及約束方程上;

2、在極值點,優化函數的等高線、優化函數與約束方程交線、約束曲線相切,優化函數與約束方程交線的梯度(導數)為0

可利用這2個條件求解:

一、根據1將約束方程帶入優化函數消元、降維變成無約束低維問題求解,根據2求梯度為0

二、根據2構造似然函數L(X,λ),使在特殊條件下滿足1和2,對L(X,λ)解特殊條件。


免責聲明!

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



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