拉格朗日乘子法是爲了解決有約束的優化(最大最小化)問題。html
網上不少博客論壇將KKT條件與不等式優化的乘子法混淆了,而且有不少對於這個概念混沌的地方。我就寫一篇梳理一遍思路。git
已知一個問題的目標與參數的關係是,那麼咱們很容易知道當
時,最優的目標
.可是若是咱們給這個優化過程添加一條約束:
,也就是
必須知足這一約束的狀況下,求解原函數的最小值。則這個問題就得換種思路解決。咱們在此時咱們便引入了拉格朗日乘子法(Lagrange Multiplier Method),有的地方也叫拉格朗日乘數法。github
單個等式約束條件下的拉格朗日乘子法,這種狀況下最簡單,咱們必定要注意計算過程,不眼高手低,我舉一個完整的例子該你們看:機器學習
咱們設拉格朗日乘子爲,則有以下拉格朗日函數:函數
接下來對三個變量分別求偏微分:post
令偏微分都爲0,則有:學習
解出:優化
代入中解得最終
幾種可能的值分別爲
,則此爲最大最小值的集合,可知
,上圖已經徹底解釋了我這一串計算過程。cdn
狀況會稍微複雜一點。對於不等式約束,只要知足必定的條件,依然可使用拉格朗日乘子法解決,這裏的條件即是KKT條件(Karush–Kuhn–Tucker conditions)。KKT條件是以人名命名的,因此沒必要關注其命名的背後含義。我看不少論壇博客上寫的等式約束使用拉格朗日乘子法,不等式約束使用KKT條件法,這是不嚴謹的。KKT條件只是一個條件而已,並非一種方法。等式和不等式約束優化問題所採用的方法都是拉格朗日乘子法。htm
咱們看這樣一個不等式約束的問題:
其對應的拉格朗日函數以下所示:
這時可行解必須落在約束區域之內,下圖給了目標函數的等高線以及約束:
這裏紅色的區域表明的是不等式的區域,藍色表明的原函數的等高線,這裏咱們能夠將其想象成一個碗狀的三維圖形。值得一提的是,咱們這裏暫時只針對凸函數問題,因此咱們能夠看到這個藍色圓心即是最優解。
那麼如今咱們只會有兩種狀況了:一種是原函數的最優解就已經在約束範圍內;另外一種是原函數的最優解在約束範圍邊界上或者以外。咱們來看下面兩圖:
咱們看第一個圖就表明了第一種狀況,藍色圓心在紅色圓內。這樣約束條件沒有起到約束做用,約束以後的最優解仍是原來的最優解。對於第二個圖,咱們看到藍色圓心在紅色區域以外。固然這也包括了恰好在紅色邊界上的狀況。爲何這兩種狀況歸爲一類呢?咱們接着看:咱們必需要知足約束條件,也就是咱們必需要在紅色範圍內找到一個最優解。即便這個最優解並非原函數最優的。因爲原函數是一個凸函數,因此是平滑單個極值。那麼理論上說,咱們在極值往外任意方向上,都是離極值越近,那個值就越優。因此咱們即可知,這個最優值會在約束的邊界上。也就是的時候。這時候就又變成了等式約束了。
以上兩種狀況就是說,要麼可行解落在約束邊界上即得,要麼可行解落在約束區域內部,此時約束不起做用,令
消去約束便可,因此不管哪一種狀況都會獲得:
而在這種狀況下,咱們的不等式約束是和等式約束同解的。這種狀況,就是咱們所說的KKT條件下。因此咱們總結出此問題的KKT條件:
總結:KKT是咱們將不等式約束直接化成等式約束的必要條件,也是這個不等式約束的必要條件。在凸函數優化問題中,升級爲充要條件。通常的,KKT條件很容易知足,咱們論證一下就可使用乘子法解決問題。在拉格朗日對偶中,KKT條件也是十分重要的條件,判斷原問題與對偶問題是否有一致解。這個在《拉格朗日對偶》裏面細說。
上式須要知足的要求是拉格朗日乘子,這個問題能夠舉一個形象的例子,假設你去登山,目標是山頂,但有一個障礙擋住了通向山頂的路,因此只能沿着障礙爬到儘量靠近山頂的位置,而後望着山頂嘆嘆氣,這裏山頂即是目標函數的可行解,障礙即是約束函數的邊界,此時的梯度方向必定是指向山頂的,與障礙的梯度同向,下圖描述了這種狀況 :
固然更通常的問題:
咱們有更爲完整的KKT條件:
知足 KKT 條件後極小化 Lagrangian 便可獲得在不等式約束條件下的可行解。 KKT 條件看起來不少,其實很好理解:
- 拉格朗日取得可行解的必要條件;
- 這就是以上分析的一個比較有意思的約束,稱做鬆弛互補條件;
- 初始的約束條件;
- 初始的約束條件;
- 不等式約束的 Lagrange Multiplier需知足的條件。
主要的KKT條件即是 (3) 和 (5) ,只要知足這倆個條件即可直接用拉格朗日乘子法, SVM 中的支持向量即是來自於此,須要注意的是 KKT 條件與對偶問題也有很大的聯繫
拉格朗日乘子法的思路是:給予違反約束適當的懲罰,使得無約束的拉格朗日函數的解與原優化函數的解一致。拉格朗日乘子法的策略是將有約束的問題轉化成無約束的優化問題。
考慮多個約束條件的原始最優化問題:
咱們對這種多維約束條件,有以下拉格朗日函數:
假設給定某個,若是
違反原始問題的約束條件,即存在某個
使得
或者存在某個
使得
,那麼就有
由於若某個使約束
,則可令
,若某個
使得約束
,則令
使得
,而將其他的
均取爲0。這樣使得不知足約束條件的都取成
,而相反的,知足約束條件的咱們讓
置0,使得拉格朗日函數與原函數解相同。
以上陳述詳細的說明了拉格朗日乘子法的思想。
固然,除了拉格朗日乘子法,還有其餘思路去求解這個約束的最優化問題的。能夠,咱們能夠不像拉格朗日同樣給以違反以懲罰,從側面解出,而是順着約束條件去找這個最優值。可是咱們的現實問題很是複雜,有時候連有沒有最有值或者最優值可不可行都沒法得知,這類方法也就不適用了。
因此:
[1].《統計學習方法》 李航 2012年3月第1版
[4].拉格朗日乘子法和KKT條件
[5].《機器學習》 周志華 2016年1月第1版