拉格朗日乘子法
拉格朗日乘子法(Lagrange multipliers)是一種尋找多元函數在一組約束下的極值的方法。通過引入拉格朗日乘子,可將有d 個變量與k 個約束條件的最優化問題轉化爲具有d+k 個變量的無約束優化問題求解
基本的拉格朗日乘子法就是求函數f(x1,x2,...) 在g(x1,x2,...)=0 的約束條件下的極值的方法。主要思想是將約束條件與原函數聯繫在一起,使能配成與變量數量相等的等式方程,從而求得原函數極值的各個變量的解。
例子:假設需要求極值的目標函數爲f(x) ,約束條件爲ϕ(x,y)=M
設g(x,y)=M−ϕ(x,y) ,定義一個新函數F(x,y,λ)=f(x,y)+λg(x,y)
求偏導:
⎧⎩⎨⎪⎪⎪⎪∂F∂x=0∂F∂y=0∂F∂λ=0
求出x,y,λ 的值,代入即可得到目標函數的極值。
機器學習中的拉格朗日乘子法,一般用於求解約束優化問題的方法,當目標函數是凸函數時,求解最小值,使用拉格朗日乘子法求得的局部最優解就是全局最優解。類似的,在凹函數中,求得的最大值,局部最大解就是全局最大解。
在沒有約束條件下,直接使用求導取指即可,但是有了約束條件後,就不能這樣任意的小了,需要首先滿足約束條件之後再求解。
在二維空間中求解,假設約束條件是一個曲線:
環線是目標函數的取值的等高線,需要緊貼約束線來滿足約束條件求得理想值。
圖中可以很清晰的看出來,與約束條件相切的等高線正合適。至於其他的與約束條件曲線相切的都不能考慮,因爲這種取值一部分是符合約束條件的,一部分不能滿足約束條件。
曲線相切,實際上就是法線向量平行,同方向或者反方向。最優解處,f和g的斜率平行。也就是說,存在一個非零實數與其中一個斜率相乘,等於另外一個曲線的斜率。這個實數稱之爲λ ,或者−λ 隨便啦
∇[f(x,y)+λ(g(x,y)−c)]=0
一旦求出λ的值,將其套入下式,易求在無約束極值和極值所對應的點。
F(x,y)=f(x,y)+λ(g(x,y)−c)
新方程F(x,y) 在達到極值時與f(x,y) 相等,因爲F(x,y) 達到極值時g(x,y)−c 總等於零。
定義拉格朗日函數:L(x,λ)=f(x)+λg(x) 將其對x 的偏導數∇xL(x,λ) 置零即得式子∇f(x)+λg(x)=0 ;同時對λ 的偏導數∇λL(x,λ) 置零即得約束條件g(x)=0 。所以原約束問題轉換成了對拉格朗日函數L(x,λ) 的無約束優化問題。
KKT
KKT
現在考慮不等式g(x)≤0 ,如上圖,此時最優點x 或者在g(x)<0 也就是環形區域內;或者在g(x)=0 環形線上。
對於g(x)<0 的情況,約束g(x)≤0 不起作用,可以直接通過條件∇f(x)=0 來獲得最優點,這裏等價於將λ=0 之後求解∇xL(x,λ)=0
g(x)=0 的情況類似與上圖左側,但是有一些區別。在拉格朗日乘子中,約束條件g(x) 與f(x) 保持梯度平行即可,可就是說參數λ 無關正負;到了這裏,我們好好分析一下,假設兩者的梯度是同方向的,都是向外(就是環線區域外,相反方向當然也可以)。我們都知道,函數是按沿着梯度方向增大,所以f(x) 在區域外的值是大於區域內的值,也就是說,區域內的值是小值。我們的目標就是在約束條件下求minf(x) ,這裏區域內是滿足約束條件的,所以最優值顯然不在環線上取,而是在區域內取。如果我們非要在環線上取怎麼辦?兩個函數的梯度方向相反。這樣才符合我們的認知嘛,梯度相反,同一個方向一個變小一個變大,環線是臨界值,很符合人們的羅輯思維。
接着說不等式約束條件,整合上面的兩種情況:
- g(x)<0 ,約束條件不起作用,使λ=0
- g(x)=0 ,約束條件使得λ>0
所以必有λg(x)=0
KKT條件推出來了:
⎧⎩⎨⎪⎪g(x)≤0;λ≥0;μjgj(x)=0;
推廣
推廣到多個約束,考慮有m個等式約束和n個不等式約束,優化問題
minxf(x)s.t.hi(x)=0 (i=1,...,m),gj(x)≤0 (j=1,...,n).
引入拉格朗日乘子λ=(λ1,λ2,...,λm)T 和μ=(μ1,μ2,...,μn)T ,相應的拉格朗日函數爲
L(x,λ,μ)=f(x)+∑i=1mλihi(x)+∑j=1nμjgj(x)
引入的拉格朗日乘子條件與KKT條件爲:
⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪hi(x)=0;λi≠0;gj(x)≤0;μj≥0;μjgj(x)=0.