這篇博文中直觀上講解了拉格朗日乘子法和 KKT 條件,對偶問題等內容。
首先從無約束的優化問題講起,通常就是要使一個表達式取到最小值:
\[min \quad f(x)\]
若是問題是 \(max \quad f(x)\) 也能夠經過取反轉化爲求最小值 \(min \quad-f(x)\),這個是一個習慣。對於這類問題在高中就學過怎麼作。只要對它的每個變量求導,而後讓偏導爲零,解方程組就好了。
html
極值點示意圖
因此在極值點處必定知足
\(\frac {df(x)}{dx}=0\)(只是必要條件,好比
\(f(x)=x^3\) 在
\(x=0\) 處就不是極值點),而後對它進行求解,再代入驗證是否真的是極值點就好了。對於有些問題能夠直接經過這種方法求出解析解(如最小二乘法)。
可是也有不少問題解不出來或者很難解,因此就須要梯度降低法、牛頓法、座標降低法之類的數值迭代算法了(感知機 、logistic 迴歸中用到)。
對於這些迭代算法就像下面這張圖同樣,咱們但願找到其中的最小值。一個比較直觀的想法是先找一個起點,而後不斷向最低點靠近。就先把一個小球放到一個碗裏同樣。
迭代算法
一開始要找一個起始點,而後肯定走的方向和距離,最後還要知道何時中止。這三步中最難的應該是肯定走的方向。走的慢點還能夠接受,要是方向錯了就找不到最小值了~。因此走的距離能夠簡單的設爲一個比較小的值。起始點能夠隨機選一個
\((x_0,y_0)\)。關鍵是方向,能夠選擇
\((x_0,y_0)\) 處的梯度的反方向,這是函數在這個點降低最快的方向(緣由能夠看
知乎中憶臻的回答)。它是一個向量,而後它的大小就是走的距離,爲了防止太大而走過頭,致使不斷在最小值附近震盪,須要乘上一個比較小的值(稱爲學習率),最終的中止條件就是梯度的大小很接近於 0(在極值點處的梯度大小就是 0)就好了。這種方法依靠梯度肯定降低方向的方法叫作梯度降低法。
對
\(f(x)\) 求極小值的流程就是:
- 隨機選定 \(x_0\)
- 獲得函數在 \(x_0\) 的梯度,而後從 \(x_0\) 向前走一步。計算式是:\(x_0^{new}=x_0^{old} - \alpha\nabla f(x)\)
- 重複第 2 步,直到梯度接近於 0(小於一個事先設定的很小的數),或者到達指定的迭代上限。
梯度降低法
除了這種方法以外,其中第 2 步還能夠這樣作,固定 \(x\), 把它做爲常數。就變成只有一個變量的優化問題了,直接求導爲 0 就能夠獲得最優勢,向前走到 \((x_0, y_1)\) 處,而後固定 \(y_1\), 對 \(x\) 進行相同的操做。這種每次只優化一個變量的方法叫作座標降低法。
算法
座標降低法
而後就是進一步的,咱們可能要在知足必定約束條件的狀況下最小化目標函數,好比有一個等式約束:
\[\begin{align*} min \quad f(x)\\ & s.t. \quad h(x) = 0 \end{align*}\]
解決這個的時候問題不能先用上面的方法求出
\(f(x)\) 的極值點,而後留下知足方程
\(h(x)=0\) 的。由於這個問題的解可能根本不是
\(min \quad f(x)\) 的解,它們是沒有關係的。那麼仍是要從問題自己去找線索:
帶約束的極值
如圖,其中的圓圈是指目標函數
\(f(x,y)\) 投影在平面上的等值線,表示在同一個圓圈上,黑線是約束條件
\(h(x)=0\) 的函數圖像。因此等值線與函數圖像相交的點其實就是全部知足約束的點。那麼極值點只有可能在等值線與函數圖像相切的地方取到,由於若是在相交的地方取到,那麼沿着
\(h(x)\) 的圖像往前走或者日後走,必定還有其它的等值線與它相交,也就是
\(f(x,y)\) 的值還能變大和變小,因此交點不是極值點,只有相切的時候纔有多是極值點(不可能同時變大和變小了)。在相切的地方
\(h(x)\) 的梯度和
\(f(x,y)\) 的梯度應該是在同一條直線上的。(這一點能夠這麼想,在切點處兩個函數的梯度都與切平面垂直,因此在一條直線上)
因此知足條件的極值點必定知足:
\(\nabla f(x,y)=\lambda \nabla h(x,y)\) (
\(\lambda = 0\) 是容許的,表示 f(x,y) 自己的極值點恰好在切點上),而後和原來的等式方程
\(h(x,y)=0\) 聯立,而後只要解出這個方程組,就能夠獲得問題的解析解了。固然也存在解不出來的狀況,就須要用罰函數法之類的方法求數值解了。
爲了方便和好記,就把原來的優化問題寫成
\(f(x,y) + \lambda h(x,y)\) 的形式,而後分別對
\(\lambda,x,y\) 求偏導,而且令偏導爲
\(0\) 就好了,和以前獲得的方程組是同樣的。這種方法叫拉格朗日乘數法。
若是有多個等式約束怎麼辦呢,以下圖:
多個約束的極值
這裏的平面和球面分別表明了兩個約束
\(h_1(x)\) 和
\(h_2(x)\),那麼這個問題的可行域就是它們相交的那個圓。這裏藍色箭頭表示平面的梯度,黑色箭頭表示球面的梯度,那麼相交的圓的梯度就是它們的線性組合(只是直觀上的~),因此在極值點的地方目標函數的梯度和約束的梯度的線性組合在一條直線上。因此就知足:
\[\nabla f(x) = \lambda \sum_{i=1}^{2}\mu_{i}\nabla h_i(x)=\sum_{i=1}^{2}\lambda_{i}\nabla h_i(x)\\ h_1(x)=0\\ h_2(x)=0\]
大於2個約束的狀況也同樣。爲了好記,將原來的約束的問題寫成
\(L(x,\lambda)=f(x)+\sum_{i-1}^{n}\lambda_{i}\nabla h_{i}(x)\)的形式,而後對
\(x\)、
\(\lambda\) 求偏導,而後讓它們爲 0。結果像上面同樣直接列方程組是同樣的。這個能夠看作是一種簡記,或者是對偶問題,這個函數叫作拉格朗日函數。
再進一步,若是問題中既有等式約束,又有不等式約束怎麼辦呢?對於:
\[\begin{align*} min \quad f(x)\\ & s.t. \quad h(x) = 0\\ &\quad \quad \quad g(x) \leq 0 \end{align*}\]
固然也一樣約定不等式是
\(\leq\),若是是
\(\geq\) 只要取反就好了。對於這個問題先不看等式約束,對於不等式約束和目標函數的圖:
不等式約束
陰影部分就是可行域,也就是說可行域從原來的一條線變成了一塊區域。那麼能取到極值點的地方可能有兩種狀況:
- 仍是在 \(h(x)\) 和 等值線相切的地方
- \(f(x)\) 的極值點自己就在可行域裏面。
由於若是不是相切,那麼一樣的,對任意一個在可行域中的點,若是在它附近往裏走或者往外走,\(f(x)\) 通常都會變大或者變小,因此絕大部分點都不會是極值點。除非這個點恰好在交界處,且和等值線相切;或者這個點在可行域內部,可是自己就是 \(f(x)\) 的極值點。以下圖(維基百科上的圖~):
函數
不等式約束下的極值
對於第一種狀況,不等式約束就變成等式約束了,對
\(f(x) + \lambda h(x) + \mu g(x)\) 用拉格朗日乘子法:
\[\nabla f(x)+\lambda \nabla h(x)+\mu \nabla g(x) = 0\\ h(x)=0\\ g(x)=0\\ \mu \geq 0\]
這裏須要解釋一下,爲何不是
\(\mu \neq0\) 而是
\(\mu \geq 0\)。後面的約束比前面的更強。看「不等式約束」那個圖,咱們已經知道了問題中的可行域是在
\(g(x)\leq0\) 一側,而
\(g(x)\) 的梯度是指向大於 0 的一側,也就是否是可行域的一側。而求的問題是極小值,因此
\(f(x)\) 在交點處的梯度是指向可行域的一側,也就是說兩個梯度必定是相反的。因此也就能夠肯定這裏的係數必定是大於 0 的。而等式約束因爲不知道
\(h(x)\) 的梯度方向,因此對它沒有約束,那麼爲何
\(\mu\) 還能等於 0 呢,由於極值點可能恰好在
\(g(x)\) 上。
對於第二種狀況,不等式約束就至關於沒有,對 $f(x) + \lambda h(x) $ 用拉格朗日乘子法:
\[\nabla f(x)+\lambda \nabla h(x)= 0\\ h(x)=0\\ g(x) \leq 0\]
最好把兩種狀況用同一組方程表示出來。對比一下兩個問題,不一樣的是第一種狀況中有
\(\mu \geq 0\) 且
\(g(x)=0\), 第二種狀況
\(\mu = 0\) 且
\(g(x) \leq 0\) 。綜合兩種狀況,能夠寫成
\(\mu g(x) = 0\) 且
\(\mu \geq 0\) 且
\(g(x) \leq 0\):
\[\nabla f(x)+\lambda \nabla h(x)+\mu \nabla g(x) = 0\\ \mu g(x) = 0\\ \mu \geq 0 \\ h(x)=0\\ g(x) \leq 0\]
這個就是 KKT 條件。它的含義是這個優化問題的極值點必定知足這組方程組。(不是極值點也可能會知足,可是不會存在某個極值點不知足的狀況)它也是原來的優化問題取得極值的必要條件,解出來了極值點以後仍是要代入驗證的。可是由於約束比較多,狀況比較複雜,KKT 條件並非對於任何狀況都是知足的。要知足 KKT 條件須要有一些規範性條件(Regularity conditions),就是要求約束條件的質量不能太差,常見的好比:
- LCQ:若是 \(h(x)\) 和 \(g(x)\) 都是形如 \(Ax+b\) 的仿射函數,那麼極值必定知足 KKT 條件。
- LICQ:起做用的 \(g(x)\) 函數(即 \(g(x)\) 至關於等式約束的狀況)和 \(h(x)\) 函數在極值點處的梯度要線性無關,那麼極值必定知足 KKT 條件。
- Slater 條件:若是優化問題是個凸優化問題,且至少存在一個點知足 \(h(x) = 0\) 和 \(g(x) = 0\),極值必定知足 KKT 條件。而且知足強對偶性質(下面會講)。
這裏的 Slater 條件比較重要,由於它能夠推導出強對偶性質(下面會講到,它比 KKT 條件還好)。它須要原問題是凸優化問題。所謂凸優化就是這個優化問題的優化函數是凸函數,而且可行域是凸集。可行域數凸集就要求其中的 \(h(x)\leq0\) 的條件中 \(h(x)\) 必須也是凸函數,而 \(g(x) \leq0\) 中的 \(g(x)\) 必須是 \(Ax+b\) 形式的,也就是仿射函數(好比二維的狀況,可行域就在 \(g(x)\) 這條曲線上,那麼 \(g(x)\) 必須得是直線才能知足凸集的定義)。
其它條件還有不少,能夠看維基百科。
若是有多組等式約束 \(h_i(x) =0 \quad (i=1,..,n)\), 和不等式約束 \(g_i(x) \leq0 \quad (i=1,..,n)\)也是同樣,只要作個線性組合就好了:
\[\nabla f(x)+\sum_{i=1}^{n}\lambda_i \nabla h_i(x)+\sum_{i=1}^{n}\mu_i \nabla g_i(x) = 0\\ \mu_i g(x)_i = 0\\ \mu_i \geq 0\\ h_i(x)=0\\ g_i(x) \leq 0\\ i = 1,2,...,n\]
問題到這裏就大體解決了,KKT 條件雖然從理論上給出了極值的必要條件,可是通常實際用的時候直接解方程也是很困難的(特別是約束不少的時候),通常也會採用罰函數法等數值方法。
爲了更好的解決這個優化問題,數學家還找到了它的對偶問題。找一個優化問題的對偶問題的通常由於是對偶問題比原問題更好解決,而且對偶問題的解和原問題是同樣的。上面的拉格朗日函數也能夠看作原問題的對偶問題。
爲了去掉問題中的約束,能夠把它們做爲懲罰項加到目標函數中 \(min_{x}f(x) + M h(x) + N g(x)\) 其中 M, N 是兩個很大的正數,在數值解法中能夠直接這樣作,這個就是罰函數法的思路 。不過在理論推導時這樣作是不嚴謹的,除非 M, N 爲無窮大。因此就把原問題改寫 \(L(x,\mu,\lambda) = min_{x}max_{\mu,\lambda}f(x) + \lambda h(x) + \mu g(x)\) 。這個式子能夠這麼理解,如今外層給定任意一個 \(x_{0}\) 值,而後內層在給定的 \(x_{0}\) 下優化那個函數,讓它最小。而後外層選可以讓內層獲得的值最大的一個 \(x_{0}\),獲得的函數表達式就是:
\[ L(x,\mu,\lambda)= \left\{\begin{matrix} f(x) & (x \quad知足約束)\\ \infty & (x \quad不知足約束)\\ \end{matrix}\right. \]
因此外層選的那個 \(x_{0}\) 必定知足約束,不然,內層的 max 的時候會讓 $\mu $ 或者 \(\lambda\) 爲無窮大。外層不會選那些能讓內層獲得無窮大的 \(x\) 值。這樣改寫就和原來的帶約束形式徹底一致了,可是形式不一樣。這樣能夠利用 \(max \quad min f(x) \leq min \quad max(f(x))\) 這個公式(這個很好理解,\(min f(x) \leq min\quad max f(x)\), 而後就有這個公式了),獲得原問題的最小值的一個下界,就是:
\[min_{x}max_{\mu,\lambda}f(x) + \lambda h(x) + \mu g(x) \geq max_{\mu,\lambda}min_{x}f(x) + \lambda h(x) + \mu g(x) \]
前面的就是原函數,後面的是它的一個下界。那麼爲何要這樣作呢? 是由於後面的必定是一個凸規劃(理論上證實了的),比較好解決。可是這個只是一個下界,它們之間仍是有必定的差距。這個差距叫對偶偏差(duality gap)。對偶偏差若是爲 0 實際上是一個很是好的性質,表示能夠直接求解後面的問題獲得原問題的解,這種性質叫強對偶性質,不然就只是弱對偶。
強對偶性質很是好,可是要求也很苛刻,比 KKT 條件要苛刻。若是問題知足強對偶必定也知足 KKT 條件,反之不必定。對於這類優化問題,KKT 條件、強對偶、規範性條件之間的關係是:
學習
RC、KKT 和強對偶的關係
對於強對偶推出 KKT 能夠參看
這篇博客。
這篇博文到這裏就結束了,這些優化方法都是很經典的方法,在 SVM 的推導中也用到了。優化
參考連接:spa
- 拉格朗日乘數法
- Karush–Kuhn–Tucker conditions
- 支持向量機:Duality
如需轉載,請註明出處.
出處:http://www.cnblogs.com/xinchen1111/p/8804858.html3d