在求解最優(yōu)化問題中,拉格朗日乘子法(Lagrange Multiplier)和KKT(Karush Kuhn Tucker)條件是兩種最常用的方法。在有等式約束時使用拉格朗日乘子法,在有不等約束時使用KKT條件。
我們這里提到的最優(yōu)化問題通常是指對于給定的某一函數(shù),求其在指定作用域上的全局最小值(因為最小值與最大值可以很容易轉(zhuǎn)化,即最大值問題可以轉(zhuǎn)化成最小值問題)。提到KKT條件一般會附帶的提一下拉格朗日乘子。對學(xué)過高等數(shù)學(xué)的人來說比較拉格朗日乘子應(yīng)該會有些印象。二者均是求解最優(yōu)化問題的方法,不同之處在于應(yīng)用的情形不同。
一般情況下,最優(yōu)化問題會碰到一下三種情況:
(1)無約束條件
這是最簡單的情況,解決方法通常是函數(shù)對變量求導(dǎo),令求導(dǎo)函數(shù)等于0的點可能是極值點。將結(jié)果帶回原函數(shù)進(jìn)行驗證即可。
(2)等式約束條件
設(shè)目標(biāo)函數(shù)為f(x),約束條件為h_k(x),形如: s.t. 表示subject to ,“受限于”的意思,l表示有l(wèi)個約束條件。

則解決方法是消元法或者拉格朗日法。消元法比較簡單不在贅述,這里主要講拉格朗日法,因為后面提到的KKT條件是對拉格朗日乘子法的一種泛化。
首先定義拉格朗日函數(shù)F(x):
( 其中λk是各個約束條件的待定系數(shù)。)

然后解變量的偏導(dǎo)方程:


如果有l(wèi)個約束條件,就應(yīng)該有l(wèi)+1個方程。求出的方程組的解就可能是最優(yōu)化值(高等數(shù)學(xué)中提到的極值),將結(jié)果帶回原方程驗證就可得到解。
至于為什么這么做可以求解最優(yōu)化?維基百科上給出了一個比較好的直觀解釋。
舉個二維最優(yōu)化的例子:
min f(x,y)
s.t. g(x,y) = c
這里畫出z=f(x,y)的等高線(函數(shù)登高線定義見百度百科):

綠線標(biāo)出的是約束g(x,y)=c的點的軌跡。藍(lán)線是f(x,y)的等高線。箭頭表示斜率,和等高線的法線平行。從梯度的方向上來看,顯然有d1>d2。綠色的線是約束,也就是說,只要正好落在這條綠線上的點才可能是滿足要求的點。如果沒有這條約束,f(x,y)的最小值應(yīng)該會落在最小那圈等高線內(nèi)部的某一點上。而現(xiàn)在加上了約束,最小值點應(yīng)該在哪里呢?顯然應(yīng)該是在f(x,y)的等高線正好和約束線相切的位置,因為如果只是相交意味著肯定還存在其它的等高線在該條等高線的內(nèi)部或者外部,使得新的等高線與目標(biāo)函數(shù)的交點的值更大或者更小,只有到等高線與目標(biāo)函數(shù)的曲線相切的時候,可能取得最優(yōu)值。
如果我們對約束也求梯度?g(x,y),則其梯度如圖中綠色箭頭所示。很容易看出來,要想讓目標(biāo)函數(shù):?f(x,y)=λ(?g(x,y)-C) 的等高線和約束相切,則他們切點的梯度一定在一條直線上(f和g的斜率平行)。
*也即在最優(yōu)化解的時候:▽[f(x,y)+λ(g(x,y)?c)]=0λ≠0 (其中?為梯度算子; 即:f(x)的梯度 = λ g(x)的梯度,λ是常數(shù),可以是任何非0實數(shù),表示左右兩邊同向。)
即:▽[f(x,y)+λ(g(x,y)?c)]=0λ≠0
那么拉格朗日函數(shù): F(x,y)=f(x,y)+λ(g(x,y)?c) 在達(dá)到極值時與f(x,y)相等,因為F(x,y)達(dá)到極值時g(x,y)?c總等于零。
min( F(x,λ) )取得極小值時其導(dǎo)數(shù)為0,即▽f(x)+▽∑ni=λihi(x)=0,也就是說f(x)和h(x)的梯度共線。
簡單的說,在F(x,λ)取得最優(yōu)化解的時候,即F(x,λ)取極值(導(dǎo)數(shù)為0,▽[f(x,y)+λ(g(x,y)?c)]=0)的時候,f(x)與g(x) 梯度共線,此時就是在條件約束g(x)下,f(x)的最優(yōu)化解。
參考:拉格朗日乘子法與KKT條件
https://www.cnblogs.com/sddai/p/5728195.html