真正理解拉格朗日乘子法和 KKT 條件

這篇博文中直觀上講解了拉格朗日乘子法和 KKT 條件,對偶問題等內容。首先從無約束的優化問題講起,一般就是要使一個表達式取到最小值:。如果問題是 max f(x)也可以通過取反轉化爲求最小值 min −f(x),這個是一個習慣。對於這類問題在高中就學過怎麼做。只要對它的每一個變量求導,然後讓偏導爲零,解方程組就行了。

所以在極值點處一定滿足(只是必要條件,比如在 x=0處就不是極值點),然後對它進行求解,再代入驗證是否真的是極值點就行了。對於有些問題可以直接通過這種方法求出解析解(如最小二乘法)。

然後就是進一步的,我們可能要在滿足一定約束條件的情況下最小化目標函數,比如有一個等式約束:

解決這個的時候問題不能先用上面的方法求出 f(x)的極值點,然後留下滿足方程 h(x)=0的。因爲這個問題的解可能根本不是 min f(x)的解,它們是沒有關係的。那麼還是要從問題本身去找線索:

如圖,其中的圓圈是指目標函數 f(x,y)投影在平面上的等值線,表示在同一個圓圈上,黑線是約束條件 h(x)=0 的函數圖像。所以等值線與函數圖像相交的點其實就是所有滿足約束的點。那麼極值點只有可能在等值線與函數圖像相切的地方取到,因爲如果在相交的地方取到,那麼沿着 h(x) 的圖像往前走或者往後走,一定還有其它的等值線與它相交,也就是 f(x,y) 的值還能變大和變小,所以交點不是極值點,只有相切的時候纔有可能是極值點(不可能同時變大和變小了)。在相切的地方 h(x) 的梯度和 f(x,y) 的梯度應該是在同一條直線上的。(這一點可以這麼想,在切點處兩個函數的梯度都與切平面垂直,所以在一條直線上)

所以滿足條件的極值點一定滿足:( λ=0 是允許的,表示 f(x,y) 本身的極值點剛好在切點上),然後和原來的等式方程 h(x,y)=0 聯立,然後只要解出這個方程組,就可以得到問題的解析解了。當然也存在解不出來的情況,就需要用罰函數法之類的方法求數值解了。

爲了方便和好記,就把原來的優化問題寫成 f(x,y)+λh(x,y) 的形式,然後分別對 λ,x,y 求偏導,並且令偏導爲 0 就行了,和之前得到的方程組是一樣的。這種方法叫拉格朗日乘數法。
如果有多個等式約束怎麼辦呢,如下圖:

這裏的平面和球面分別代表了兩個約束 h1(x) 和 h2(x),那麼這個問題的可行域就是它們相交的那個圓。這裏藍色箭頭表示平面的梯度,黑色箭頭表示球面的梯度,那麼相交的圓的梯度就是它們的線性組合(只是直觀上的~),所以在極值點的地方目標函數的梯度和約束的梯度的線性組合在一條直線上。所以就滿足:

大於2個約束的情況也一樣。爲了好記,將原來的約束的問題寫成 的形式,然後對 x、λ 求偏導,然後讓它們爲 0。結果像上面一樣直接列方程組是一樣的。這個可以看做是一種簡記,或者是對偶問題,這個函數叫做拉格朗日函數。

再進一步,如果問題中既有等式約束,又有不等式約束怎麼辦呢?對於:

當然也同樣約定不等式是 ≤,如果是 ≥ 只要取反就行了。對於這個問題先不看等式約束,對於不等式約束和目標函數的圖:

陰影部分就是可行域,也就是說可行域從原來的一條線變成了一塊區域。那麼能取到極值點的地方可能有兩種情況:

  1. 還是在 h(x) 和 等值線相切的地方
  2. f(x) 的極值點本身就在可行域裏面。

因爲如果不是相切,那麼同樣的,對任意一個在可行域中的點,如果在它附近往裏走或者往外走,f(x) 一般都會變大或者變小,所以絕大部分點都不會是極值點。除非這個點剛好在交界處,且和等值線相切;或者這個點在可行域內部,但是本身就是 f(x) 的極值點。如下圖(維基百科上的圖~):

對於第一種情況,不等式約束就變成等式約束了,對f(x)+λh(x)+μg(x) 用拉格朗日乘子法:

這裏需要解釋一下,爲什麼不是 μ≠0 而是 μ≥0。後面的約束比前面的更強。看“不等式約束”那個圖,我們已經知道了問題中的可行域是在 g(x)≤0 一側,而 g(x) 的梯度是指向大於 0 的一側,也就是不是可行域的一側。而求的問題是極小值,所以 f(x) 在交點處的梯度是指向可行域的一側,也就是說兩個梯度一定是相反的。所以也就可以確定這裏的係數一定是大於 0 的。而等式約束由於不知道 h(x) 的梯度方向,所以對它沒有約束,那麼爲什麼 μ 還能等於 0 呢,因爲極值點可能剛好在 g(x) 上。

對於第二種情況,不等式約束就相當於沒有,對 f(x)+λh(x) 用拉格朗日乘子法:

最好把兩種情況用同一組方程表示出來。對比一下兩個問題,不同的是第一種情況中有 μ≥0 且 g(x)=0, 第二種情況 μ=0 且 g(x)≤0。綜合兩種情況,可以寫成 μg(x)=0 且 μ≥0 且 g(x)≤0:

這個就是 KKT 條件。它的含義是這個優化問題的極值點一定滿足這組方程組。(不是極值點也可能會滿足,但是不會存在某個極值點不滿足的情況)它也是原來的優化問題取得極值的必要條件,解出來了極值點之後還是要代入驗證的。但是因爲約束比較多,情況比較複雜,KKT 條件並不是對於任何情況都是滿足的。要滿足 KKT 條件需要有一些規範性條件(Regularity conditions),就是要求約束條件的質量不能太差,常見的比如:

  1. LCQ:如果 h(x) 和 g(x) 都是形如 Ax+b 的仿射函數,那麼極值一定滿足 KKT 條件。
  2. LICQ:起作用的 g(x) 函數(即 g(x) 相當於等式約束的情況)和 h(x) 函數在極值點處的梯度要線性無關,那麼極值一定滿足 KKT 條件。
  3. Slater 條件:如果優化問題是個凸優化問題,且至少存在一個點滿足 h(x)=0 和 g(x)=0,極值一定滿足 KKT 條件。並且滿足強對偶性質(下面會講)。

這裏的 Slater 條件比較重要,因爲它可以推導出強對偶性質(下面會講到,它比 KKT 條件還好)。它需要原問題是凸優化問題。所謂凸優化就是這個優化問題的優化函數是凸函數,並且可行域是凸集。可行域數凸集就要求其中的 h(x)≤0 的條件中 h(x) 必須也是凸函數,而 g(x)≤0 中的 g(x) 必須是 Ax+b 形式的,也就是仿射函數(比如二維的情況,可行域就在 g(x) 這條曲線上,那麼 g(x) 必須得是直線才能滿足凸集的定義)。

其它條件還有很多,可以看維基百科
如果有多組等式約束 gi(x)=0(i=1,..,n), 和不等式約束 hi(x)≠0(i=1,..,n)也是一樣,只要做個線性組合就行了:

問題到這裏就大致解決了,KKT 條件雖然從理論上給出了極值的必要條件,但是一般實際解的時候直接方程也是很困難的(特別是約束很多的時候),一般也會採用罰函數法等數值方法。
爲了更好的解決這個優化問題,數學家還找到了它的對偶問題。找一個優化問題的對偶問題的一般因爲是對偶問題比原問題更好解決,並且對偶問題的解和原問題是一樣的。上面的拉格朗日函數也可以看做原問題的對偶問題。

爲了去掉問題中的約束,可以把它們作爲懲罰項加到目標函數中  其中 M, N 是兩個很大的正數,在數值解法中可以直接這樣做,這個就是罰函數法的思路 。不過在理論推導時這樣做是不嚴謹的,除非 M, N 爲無窮大。所以就把原問題改寫 。這個式子可以這麼理解,現在外層給定任意一個 x0 值,然後內層在給定的 x0 下優化那個函數,讓它最小。然後外層選能夠讓內層得到的值最大的一個 x0,得到的函數表達式就是:

所以外層選的那個 x0 一定滿足約束,否則,內層的 max 的時候會讓 μ 或者 λ 爲無窮大。外層不會選那些能讓內層得到無窮大的 x 值。這樣改寫就和原來的帶約束形式完全一致了,但是形式不同。這樣可以利用這個公式(這個很好理解,, 然後就有這個公式了),得到原問題的最小值的一個下界,就是:

前面的就是原函數,後面的是它的一個下界。那麼爲什麼要這樣做呢? 是因爲後面的一定是一個凸規劃(理論上證明了的),比較好解決。但是這個只是一個下界,它們之間還是有一定的差距。這個差距叫對偶誤差(duality gap)。對偶誤差如果爲 0 其實是一個非常好的性質,表示可以直接求解後面的問題得到原問題的解,這種性質叫強對偶性質,否則就只是弱對偶。

強對偶性質非常好,但是要求也很苛刻,比 KKT 條件要苛刻。如果問題滿足強對偶一定也滿足 KKT 條件,反之不一定。對於這類優化問題,KKT 條件、強對偶、規範性條件之間的關係是:

對於強對偶推出 KKT 可以參看這篇博客

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章