拉格朗日乘子法是尋找函數在一組約束下的極值方法。
1、等式約束
形式:(x是d維向量)
min f(x)
s.t. h(x) = 0.
寫成如下形式:
min f(x)+lambda*h(x)(lambda爲參數)
s.t. h(x) = 0.
發現兩者是等價的。
記:拉格朗日函數L(x,lambda) = f(x)+lambda*h(x).
發現約束條件h(x)=0,其實就是對拉格朗日函數L(x,lambda)關於lambda求偏導等於0得到,略去該約束,繼而原約束優化問題就轉化成了對拉格朗日函數L(x,lambda)的無約束優化問題(即令L關於x和lambda的偏導等於0求解)。
幾何解釋:
原目標函數f(x)取得最小化點x*時,可以得到如下結論:
a.約束曲面上的任意點x,該點的梯度正交於約束曲面;
b.在最優點x*,目標函數在該點的梯度正交於約束曲面(可以反正:若目標函數梯度與約束曲面不正交,則總可以在約束曲面上移動該點使目標函數進一步減小)。
所以,在最優點x*,梯度▽f(x*)和▽h(x*)的方向相同或相反,即存在lambda!=0,使:
▽f(x*)+lambda*▽h(x*)=0. (1式)
定義拉格朗日函數:L(x,lambda) = f(x)+lambda*h(x).
令L(x,lambda)對x的偏導數等於0,得到1式;令L(x,lambda)對lambda的偏導數等於0,得到約束條件h(x)=0。於是,原約束優化問題轉化爲無約束優化問題。
2、不等式約束
形式:
min f(x)
s.t. g(x) <= 0.
同樣定義拉格朗日函數L(x,lambda) = f(x)+lambda*g(x).
此時,首先看目標函數f(x)在無約束條件下的最優點,顯然要麼在g(x)<=0的區域內,要麼在g(x)>0的區域內。
若f(x)在無約束條件下的最優點在g(x)<=0區域內,則約束條件g(x)<=0不起作用(即可直接求min f(x),得到的結果必然滿足g(x)<=0),相當於lambda=0;
若f(x)在無約束條件下的最優點不在g(x)<=0區域內,則f(x)在約束條件下的最優點必然在g(x)<=0區域邊界,即在邊界g(x)=0上。此類情形類似於等式約束,但此時梯度▽f(x*)和▽g(x*)的方向相反(梯度方向是函數值增大最快的方向),即存在lambda>0,使▽f(x*)+lambda*▽g(x*)=0。
整合上述兩種情形,必有lambda*g(x) = 0。所以原不等式約束問題就轉化爲:
min L(x,lambda)
s.t. g(x)<=0,
lambda>=0,
lambda*g(x)=0.
上面的約束條件即爲KKT條件。
參考資料:周志華《機器學習》
參考博文:拉格朗日乘子法及KKT條件證明