真正理解拉格朗日乘子法和KKT條件
這篇博文中直觀上講解了拉格朗日乘子法和 KKT 條件,對偶問題等內容。 首先從無約束的優化問題講起,一般就是要使一個表示式取到最小值:
如果問題是 也可以通過取反轉化為求最小值,這個是一個習慣。對於這類問題在高中就學過怎麼做。只要對它的每一個變數求導,然後讓偏導為零,解方程組就行了。
所以在極值點處一定滿足 (只是必要條件,比如 在 處就不是極值點),然後對它進行求解,再代入驗證是否真的是極值點就行了。對於有些問題可以直接通過這種方法求出解析解(如最小二乘法)。
但是也有很多問題解不出來或者很難解,所以就需要梯度下降法、牛頓法、座標下降法之類的數值迭代演算法了(感知機 、logistic 迴歸中用到)。
對於這些迭代演算法就像下面這張圖一樣,我們希望找到其中的最小值。一個比較直觀的想法是先找一個起點,然後不斷向最低點靠近。就先把一個小球放到一個碗裡一樣。
一開始要找一個起始點,然後確定走的方向和距離,最後還要知道什麼時候停止。這三步中最難的應該是確定走的方向。走的慢點還可以接受,要是方向錯了就找不到最小值了~。所以走的距離可以簡單的設為一個比較小的值。起始點可以隨機選一個 。關鍵是方向,可以選擇
對 求極小值的流程就是:
- 隨機選定
- 得到函式在 的梯度,然後從 向前走一步。計算式是:
- 重複第 2 步,直到梯度接近於 (小於一個事先設定的很小的數),或者到達指定的迭代上限。
除了這種方法之外,其中第 2 步還可以這樣做,固定 , 把它作為常數。就變成只有一個變數的優化問題了,直接求導為 0 就可以得到最優點,向前走到 處,然後固定 , 對 進行相同的操作。這種每次只優化一個變數的方法叫做座標下降法。
然後就是進一步的,我們可能要在滿足一定約束條件的情況下最小化目標函式,比如有一個等式約束:
解決這個的時候問題不能先用上面的方法求出 的極值點,然後留下滿足方程 的。因為這個問題的解可能根本不是 的解,它們是沒有關係的。那麼還是要從問題本身去找線索:
如圖,其中的圓圈是指目標函式 投影在平面上的等值線,表示在同一個圓圈上,黑線是約束條件的函式影象。所以等值線與函式影象相交的點其實就是所有滿足約束的點。那麼極值點只有可能在等值線與函式影象相切的地方取到,因為如果在相交的地方取到,那麼沿著 的影象往前走或者往後走,一定還有其它的等值線與它相交,也就是 的值還能變大和變小,所以交點不是極值點,只有相切的時候才有可能是極值點(不可能同時變大和變小了)。在相切的地方 的梯度和 的梯度應該是在同一條直線上的。(這一點可以這麼想,在切點處兩個函式的梯度都與切平面垂直,所以在一條直線上)
所以滿足條件的極值點一定滿足: