1.簡介
拉格朗日乘子法,是尋找多元函數在一組約束(可以是等式約束也可以是不等式約束)下的極值
的方法。通過引入拉格朗日乘子,將d個變量與k的約束條件的有約束優化問題轉化為d+k個變量的無
約束優化問題。
2.無約束優化
在無約束優化問題中,如果一個函數是凸函數,那么總能通過求偏導等於0的方法求得函數的全局
極小值點。如果不是凸函數,可能會陷入局部極小值點
3.等式約束的優化問題

在這里我們優化一個等式約束的問題,假設

則可以在下圖中將這兩個函數圖像表示出來,其中圓表示等式約束條件,

f(x)的梯度為(1,1),g(x)的梯度為半徑向外方向,不難看出有以下結論:
- 對於約束平面上的點(在本例中就是圓上的點),其梯度方向正交於約束平面。
- 對於目標函數上的點,其在約束條件下取極值時,其梯度方向也正交於約束平面(圖中藍色所標出的箭頭)
從上面的例子中可以看出在等式約束的優化問題中,取最優點時,其目標函數的梯度和約束條件的梯度方向保持相同或者相反。
即

上式中a為最優點,lambda為拉格朗日乘子
所以上述的等式約束條件下的優化問題可以寫成下面的拉格朗日函數:

因為上述拉格朗日函數的最小值和原約束條件下的優化函數具有同等的最優點,所以就將原等式約束下的優化問題轉換為無約束條件的優化問題。
這樣就可以簡單的分別對x和lambda求偏導為0時函數的值,從而得到最優值(凸函數)。
4.不等式約束條件
還是上述的例子,而改為g(x)<=0

這次約束條件所取點的范圍在整個圓的內部,包括邊界。
我們分兩種情況來討論:
- 第一種情況為g(x)<0
也就是說找到的最優點(如果這種情況存在的話)在圓的內部,這種情況下這個約束條件是沒用的,應為落在內部的最優點完全可以通過對目標函數求偏導=0就可以確定。只有當目標在約束條件所確定的平面之外時,才會試着突破約束去達到目標,這時候約束條件才能起到約束的作用。
- 第二種情況g(x)=0
這種情況就是等式約束條件中所說的情況。不過值得注意的一點是,這時拉格朗日乘子lambda為正數,可以這么想象:因為目標在約束平面之外,目標函數的梯度不斷的“拉扯”點往外走,約束條件為使得這個點不能突破約束,其梯度就“拉扯”着點往內走,梯度提供了點運動的力。當點穩定時,作用在點上的力,作用在同一直線上且方向相反。
因此就得出了Karush-Kuhn-Tucker(KKT)條件

下面對上式解釋:
KKT條件的第一式:原來的約束條件
KKT條件的第二式:lambda>=0就是上面說的兩個力方向相反,即梯度的方向相反
KKT條件的第三式:若最優點在約束平面內部,則lambda=0,約束條件無用
若最優點在約束平面的邊界,g(x)=0
5.推廣到多個約束

可以轉換為:

須滿足的KKT條件為:

