Gradient And Karush-Kuhn-Tucker Conditions


      最近開始面試,復習當中發現自己有很多基礎的東西有些模糊,借此溫故而知新一下,並提醒自己基礎很重要,踏踏實實、戒驕戒躁。

一、梯度是什么?

1、一個小例子

      假設有單變量實值函數y=f(x),其圖形如下:

 

image      實值函數y=f(x)在點x_0的導數f'(x)的意義是該函數在x=x_0 處的瞬時變化率,即:

   f'(x_0)=\lim_{\Delta x->0}\frac{f(x_0+\Delta x)-f(x_0)}{\Delta x}

在自變量x發生微小變化時,目標函數值的變化可以這么描述:

  dy=f'(x)dx

針對上圖有以下三種情況:

(1)、x_1點位置,此時f'(x_1)>0,在x_1 點做微小正向變化:dx>0,顯然有dy>0,這說明在x_1點往x軸正向有可以使目標函數y=f(x)值增大點存在;

(2)、x_2點位置,此時f'(x_2)<0,在x_2 點做微小負向變化:dx<0,顯然有dy>0,這說明在x_2點往x軸負向有可以使目標函數y=f(x)值增大點存在;

(3)、x_0點位置,此時f'(x_0)=0,不管在x_0 點做微小負向變化還是正向變化都有dy=0,這說明在x_0點是一個最優解。

實際上,在一維情況下目標函數的梯度就是f'(x),它表明了目標函數值變化方向。

2、梯度與方向導數

(1)、方向導數

      以二元函數:y=f(x_0,x_1)為例,設它在點p(x_0,x_1)的某個鄰域U(p)內有定義,以點p(x_0,x_1)出發引射線lp'(x_0+\Delta x_0,x_1+\Delta x_1)l上的且在鄰域U(p)內的任意點,則方向導數的定義為:

                                                     \frac{\partial f}{\partial l} = \lim_{\rho->0^+} {\frac{f(x_0+\Delta x_0,x_1+\Delta x_1)-f(x_0,x_1)}{\rho}}   其中\rho表示pp'兩點之間的歐氏距離:\rho = \sqrt{(\Delta x_0)^2 + (\Delta x_1)^2}

從這個式子可以看到:方向導數與某個方向l有聯系、方向導數是個極限值、方向導數與偏導數似乎有聯系。

實際上,如果y=f(x_0,x_1)在點p(x_0,x_1)可微,則:

                                                    \frac{\partial f}{\partial l} = \frac{\partial f}{\partial x_0} \cos\alpha +\frac{\partial f}{\partial x_1} \cos\beta   其中\alpha\beta分別是兩個維度上的方向角

這里需要注意的一個細節是:沿某個維度的方向導數存在時,其偏導數不一定存在,原因就是方向導數只要求半邊極限存在(\rho->{0^+}),而偏導數則要求雙邊都存在。

(2)、梯度

      把方向導數變換一下形式:

                                                   \frac{\partial f}{\partial l} = \frac{\partial f}{\partial x_0} \cos\alpha +\frac{\partial f}{\partial x_1} \cos\beta

                                                        =(\frac{\partial f}{\partial x_0}\quad \quad \quad ,\quad \quad \quad  \frac{\partial f  }{\partial x_1}) \cdot (\cos\alpha \quad \quad \quad ,\quad \quad \quad \cos\beta)

函數y=f(x_0,x_1)在點p(x_0,x_1)的梯度就被定義為向量

                                                   gradf(x_0,x_1)=\frac{\partial f}{\partial x_0}i + \frac{\partial f  }{\partial x_1}j

與射線l同方向的單位向量被定義為:

                                                   e=\cos \alpha \quad \quad \quad i+ \cos \beta\quad \quad \quad j

於是方向導數變成了:

                                                  \frac{\partial f}{\partial l} = gradf(x_0,x_1)\cdot e

                                                       =|gradf(x_0,x_1)|\cdot \cos(gradf(x_0,x_1)\^ e)

      我的理解是:方向導數描述了由各個維度方向形成的合力方向上函數變化的程度,當這個合力方向與梯度向量的方向相同時,函數變化的最劇烈,我想這就是為什么在梯度上升算法或者梯度下降算法中選擇梯度方向或者負梯度方向的原因吧。換句話說就是:函數在某點的梯度是這樣一個向量,它的方向與取得最大方向導數的方向一致,而它的模為方向導數的最大值

 

image

  某個函數和它的等高線,圖中標出了a點的梯度上升方向

 

3、多維無約束問題

      將開篇的那個小例子擴展到多維的情況,目標函數值將會成為一個向量,向任意個維度方向做微小變動都將對目標函數值產生影響,假設有n個維度,可以用下面的式子描述:

                                                dy=(dy_0,....,dy_n)=grad f\cdot (dx_0,...,dx_n)^T=gradf\cdot dx

                                                                          =|grad f|\cdot |dx|\cdot \cos(grad f \^ dx)

\alpha = grad f \^ dx

(1)、當0\leq \alpha<\frac{\pi}{2},此時dy>0,因此可以從點x移動使得目標函數值增加;

(2)、當\frac{\pi}{2}< \alpha\leq \pi,此時dy<0,因此可以從點x移動使得目標函數值減少;

(3)、當 \alpha=\frac{\pi}{2},梯度向量和dx正交(任一向量為0也視為正交),不管從點x怎樣移動都找不到使目標函數值發生變化的點,於是x點就是目標函數的最優解。

      由於dx可以是任意方向向量,只要點x的梯度向量不為零,從點x出發總可以找到一個變化方向使得目標函數值向我們希望的方向變化(比如就找梯度方向,此時能引起目標函數值最劇烈地變化),理論上當最優解x^*出現時就一定有gradf (x^*)=0(實際上允許以某個誤差\eps結束),比如,對於梯度下降算法,當gradf (x^*)=0時迭代結束,此時的x^*為最優解(可能是全局最優解也可能是局部最優解):

                                               x_{n+1}=x_n - \alpha \cdot gradf(x_n)

 

二、拉格朗日乘數法和KKT條件

      從現在開始,我假設目標函數和約束在某點可微,用符號\nabla f代替符號grad f

1、等式約束

                                           \begin{eqnarray*} 
 &&\min f(x) \\ 
&&s.t. \quad\quad\quad\quad\quad\quad h(x)=0, \quad 
\end{eqnarray*}

 

image      在約束條件的作用下,與點x(它是個向量)可移動方向相關的向量dx就不像無約束問題那樣隨便往哪個方向都能移動了,此時dx只能沿着約束曲線移動,例如,在x1x2處,\nabla f(x)dx不正交,說明還有使目標函數值更小的等高線存在,所以點x還有移動的余地,當移動到x0位置時\nabla f(x)dx正交,得到最優解x0。那么在最優解處\nabla f(x)和約束有什么關系呢?因為此時h(x)=0\nabla h(x) \cdot dx=0,顯然此時有\lambda \cdot \nabla h(x)=\nabla f(x)(其中\lambda是常數),也就是說約束的梯度向量與目標函數的梯度向量在最優解處一定平行

      想到求解此類優化問題時最常用的方法——拉格朗日乘數法,先要構造拉格朗日函數:

                                            L(x,\lambda) = f(x) - \lambda h(x)  其中\lambda \geq0,是常數

為什么求解拉格朗日函數得到的最優解就是原問題的最優解呢?

                                            \frac{\part L(x,\lambda)}{\part x}=\nabla f(x)-\lambda \nabla h(x)

                                            \frac{\part L(x,\lambda)}{\part \lambda}= h(x)

假設x^*\lambda^*L(x,\lambda)的最優解,那么就需要滿足:

                                             \begin{eqnarray*}

   \\ \nabla f(x^*)-\lambda^* \nabla h(x^*)&=& 0\\
  \\    h(x^*)&=&0\\
  \end{eqnarray*}

第一個式子印證了約束的梯度向量與目標函數的梯度向量在最優解處一定平行,第二個式子就是等式約束本身。

於是:

                                             \begin{eqnarray*}
&&L(x,\lambda) &\geq &L(x^*,\lambda^*)\\
\Rightarrow&& f(x)-\lambda h(x) &\geq &f(x^*)-\lambda^* h(x^*) \\
\Rightarrow &&f(x) &\geq & f(x^*)
\end{eqnarray*}

 

2、不等式約束

      實際情況中,約束條件可能是等式約束也可能是不等式約束或者同時包含這兩種約束,下面描述為更一般地情況:

                                           \begin{eqnarray*}
& \min &f(x)\\
& s.t.& h_i(x)=0 \quad (i=0 ... n)\\
&&g_j(x) \leq 0 \quad (j=0...m)
\end{eqnarray*}

依然使用拉格朗日乘數法,構造拉格朗日函數:

                                          L(x,\alpha ,\beta) = f(x) + \sum\limit_{i=0}^n \alpha_i \cdot h_i(x) + \sum\limit_{j=0}^m \beta_j\cdot g_j(x)     其中\alpha_i \geq 0\beta_j \geq 0

在這里不得不說一下Fritz John 定理了,整個證明就不寫了(用局部極小必要條件定理、Gordan 引理可以證明)。

定理1:

依然假設x^*為上述問題的極小值點,問題中涉及到的各個函數一階偏導都存在,則存在不全為零的\lambda _i使得下組條件成立:

                                           \lambda_0 \nabla f(x^*) + \sum\limit_{i=0}^n \lambda_i \cdot \nabla h_i(x^*) + \sum\limit_{j=0}^m \lambda_j\cdot \nabla g_j(x^*)=0

                                          \lambda_j \cdot g_j(x^*) = 0  ,j=0,...m

                                          \lambda_j \geq 0,j=0,...m

      這個定理第一項的形式類似於條件極值必要條件的形式,如果\lambda_0=0則有效約束 \nabla g_j(x)會出現正線性相關,由Gordan 引理知道此時將存在可行方向,就是x^*將不是原問題的極值點,因此令 \nabla g_j(x)則線性無關則\lambda_0>0

      \lambda_j \cdot g_j(x^*) = 0  ,j=1,...m這個條件又叫互不松弛條件(Complementary Slackness),SVM里的支持向量就是從這個條件得來的。

      由Fritz John 定理可知 \nabla g_j(x)線性無關則\lambda_0>0 ,讓每一個拉格朗日乘子除以\lambda_0,即\mu_i=\lambda_i/\lambda_0,得到下面這組原問題在點x^*處取得極小值一階必要條件

定理2:

假設x^*為上述問題的極小值點,問題中涉及到的各個函數一階偏導都存在,有效約束 \nabla g_j(x)線性無關,則下組條件成立:

                                           \frac{\part L(x,\mu_i,\mu_j)}{\par tx} =\nabla f(x^*) + \sum\limit_{i=0}^n \mu^*_i \cdot \nabla h_i(x^*) + \sum\limit_{j=0}^m \mu^*_j\cdot \nabla g_j(x^*)=0

                                          \mu_j^* \cdot g_j(x^*) = 0  ,j=0,...m

                                          \mu^*_j \geq 0,j=0,...m

                                          h_i(x^*)=0,i=0,..,n

                                          g_j(x^*) \leq 0,j=0,...m

這組條件就是Karush-Kuhn-Tucker條件,滿足KKT條件的點就是KKT點,需要注意的是KKT條件是必要條件(當然在某些情況下會升級為充要條件,比如凸優化問題)。

      由此也可以想到求解SVM最大分類間隔器時,不管是解決原問題還是解決對偶問題,不管是用SMO方法或其它方法,優化的過程就是找到並優化違反KKT條件的最合適的乘子。

      KKT條件與對偶理論有密切的關系,依然是解決下面這個問題:

                                        \begin{eqnarray*}
& \min &f(x)\\
& s.t.& h_i(x)=0 \quad (i=0 ... n)\\
&&g_j(x) \leq 0 \quad (j=0...m)
\end{eqnarray*}

構造拉格朗日函數:

                                          L(x,\alpha ,\beta) = f(x) + \sum\limit_{i=0}^n \alpha_i \cdot h_i(x) + \sum\limit_{j=0}^m \beta_j\cdot g_j(x)     其中\alpha_i \geq 0\beta_j \geq 0,它們都是拉格朗日乘子

O_p(x)=\max\limit_{\alpha ,\beta} L(x,\alpha,\beta),原問題可以表示為下面這個形式:

                                          O_p(x)= 
 \left\{

   \begin{array}{c}

   &f(x)& if \quad x \quad satisfies \quad primal \quad constraints&\\

  & \infty& otherwise.&\\

   \end{array}

  \right.

這個式子比較容易理解,當x違反原問題約束條件時有:

                                           O_p(x)=\max\limit_{\alpha ,\beta} L(x,\alpha ,\beta) = \max\limit_{\alpha, \beta} f(x) + \sum\limit_{i=0}^n \alpha_i \cdot h_i(x) + \sum\limit_{j=0}^m \beta_j\cdot g_j(x)=\infty

於是原問題等價為下面這個問題:

                                          \min\limit_x O_p(x)=\min\limit_x \max\limit_{\alpha ,\beta} L(x,\alpha,\beta)       它的最優解記為p^*

 

O_d(\alpha,\beta)=\min\limit_{x} L(x,\alpha,\beta),則有以下形式:

                                          \max\limit_{\alpha,\beta} O_d(\alpha,\beta)=\max\limit_{\alpha,\beta} \min\limit_{x} L(x,\alpha,\beta)   它的最優解記為d^*

     

      上面這兩個形式很像,區別只在於minmax的順序,實際上O_p(x)O_d(\alpha,\beta)互為對偶問題。因為\max\min \leq \min \max ,打個不太恰當的比喻,這就像瘦死的駱駝比馬大,具體的證明就不寫了,所以d^* \leq p*,這個就是弱對偶性,此時存在對偶間隙,它被定義為:gap=p^*-d^*

      有弱對偶性就有強對偶性,它指的是在某些條件下有d^* = p*,比如在以下條件下滿足強對偶性:

目標函數和所有不等式約束函數是凸函數,等式約束函數是仿射函數(形如y=w^tx+b),且所有不等式約束都是嚴格的約束(大於或小於)

KKT條件和強對偶性的關系是:

      KKT條件是強對偶性成立的必要條件,特別的,當原問題是凸優化問題時,KKT條件就是充要條件,強對偶性存在時KKT點既是原問題的解也是對偶問題的解,這個時候對偶間隙為0。

      關於對偶問題可以參考pluskid寫得非常好的一篇文章:http://blog.pluskid.org/?p=702

 

三、總結

      梯度是一個基礎而重要的概念,函數在某點的梯度是這樣一個向量,它的方向與取得最大方向導數的方向一致,而它的模為方向導數的最大值,梯度下降算法正是依據這一原理,還有在求解極大似然問題時也可以用梯度上升的算法進行參數估計;對於約束最優化問題可以使用拉格朗日乘數法解決——如:構造拉格朗日函數,求出KKT條件;當原問題不太好解決的時候可以利用拉格朗日乘數法得到其對偶問題,滿足強對偶性條件時它們的解會是一致的,SVM問題的解決把這一點用的淋漓盡致,同時也為我們提供了一種判斷算法收斂情況的方法——監視可行間隙。

 

四、參考資料

1、Stephen Boyd and Lieven Vandenberghe. 《Convex Optimization》

2、Jorge Nocedal and Stephen J. Wright.《Numerical Optimization》second Edition

3、Andrew Ng.http://v.163.com/special/opencourse/machinelearning.html

4、pluskid. http://blog.pluskid.org/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM