最近開始面試,復習當中發現自己有很多基礎的東西有些模糊,借此溫故而知新一下,並提醒自己基礎很重要,踏踏實實、戒驕戒躁。
一、梯度是什么?
1、一個小例子
假設有單變量實值函數,其圖形如下:
在自變量發生微小變化時,目標函數值的變化可以這么描述:
針對上圖有以下三種情況:
(1)、點位置,此時
,在
點做微小正向變化:
,顯然有
,這說明在
點往
軸正向有可以使目標函數
值增大點存在;
(2)、點位置,此時
,在
點做微小負向變化:
,顯然有
,這說明在
點往
軸負向有可以使目標函數
值增大點存在;
(3)、點位置,此時
,不管在
點做微小負向變化還是正向變化都有
,這說明在
點是一個最優解。
實際上,在一維情況下目標函數的梯度就是,它表明了目標函數值變化方向。
2、梯度與方向導數
(1)、方向導數
以二元函數:為例,設它在點
的某個鄰域
內有定義,以點
出發引射線
,
為
上的且在鄰域
內的任意點,則方向導數的定義為:
其中
表示
和
兩點之間的歐氏距離:
從這個式子可以看到:方向導數與某個方向有聯系、方向導數是個極限值、方向導數與偏導數似乎有聯系。
實際上,如果在點
可微,則:
其中
和
分別是兩個維度上的方向角
這里需要注意的一個細節是:沿某個維度的方向導數存在時,其偏導數不一定存在,原因就是方向導數只要求半邊極限存在(),而偏導數則要求雙邊都存在。
(2)、梯度
把方向導數變換一下形式:
函數在點
的梯度就被定義為向量:
與射線同方向的單位向量被定義為:
於是方向導數變成了:
我的理解是:方向導數描述了由各個維度方向形成的合力方向上函數變化的程度,當這個合力方向與梯度向量的方向相同時,函數變化的最劇烈,我想這就是為什么在梯度上升算法或者梯度下降算法中選擇梯度方向或者負梯度方向的原因吧。換句話說就是:函數在某點的梯度是這樣一個向量,它的方向與取得最大方向導數的方向一致,而它的模為方向導數的最大值。
某個函數和它的等高線,圖中標出了a點的梯度上升方向
3、多維無約束問題
將開篇的那個小例子擴展到多維的情況,目標函數值將會成為一個向量,向任意個維度方向做微小變動都將對目標函數值產生影響,假設有n個維度,可以用下面的式子描述:
令
(1)、當,此時
,因此可以從點
移動使得目標函數值增加;
(2)、當,此時
,因此可以從點
移動使得目標函數值減少;
(3)、當,梯度向量和
正交(任一向量為0也視為正交),不管從點
怎樣移動都找不到使目標函數值發生變化的點,於是
點就是目標函數的最優解。
由於可以是任意方向向量,只要點
的梯度向量不為零,從點
出發總可以找到一個變化方向使得目標函數值向我們希望的方向變化(比如就找梯度方向,此時能引起目標函數值最劇烈地變化),理論上當最優解
出現時就一定有
(實際上允許以某個誤差
結束),比如,對於梯度下降算法,當
時迭代結束,此時的
為最優解(可能是全局最優解也可能是局部最優解):
二、拉格朗日乘數法和KKT條件
從現在開始,我假設目標函數和約束在某點可微,用符號代替符號
。
1、等式約束
在約束條件的作用下,與點
(它是個向量)可移動方向相關的向量
就不像無約束問題那樣隨便往哪個方向都能移動了,此時
只能沿着約束曲線移動,例如,在
、
處,
和
不正交,說明還有使目標函數值更小的等高線存在,所以點
還有移動的余地,當移動到
位置時
和
正交,得到最優解
。那么在最優解處
和約束有什么關系呢?因為此時
,
,顯然此時有
(其中
是常數),也就是說約束的梯度向量與目標函數的梯度向量在最優解處一定平行。
想到求解此類優化問題時最常用的方法——拉格朗日乘數法,先要構造拉格朗日函數:
其中
,是常數
為什么求解拉格朗日函數得到的最優解就是原問題的最優解呢?
假設、
為
的最優解,那么就需要滿足:
第一個式子印證了約束的梯度向量與目標函數的梯度向量在最優解處一定平行,第二個式子就是等式約束本身。
於是:
2、不等式約束
實際情況中,約束條件可能是等式約束也可能是不等式約束或者同時包含這兩種約束,下面描述為更一般地情況:
依然使用拉格朗日乘數法,構造拉格朗日函數:
其中
且
在這里不得不說一下Fritz John 定理了,整個證明就不寫了(用局部極小必要條件定理、Gordan 引理可以證明)。
定理1:
依然假設為上述問題的極小值點,問題中涉及到的各個函數一階偏導都存在,則存在不全為零的
使得下組條件成立:
這個定理第一項的形式類似於條件極值必要條件的形式,如果則有效約束
會出現正線性相關,由Gordan 引理知道此時將存在可行方向,就是
將不是原問題的極值點,因此令
則線性無關則
。
這個條件又叫互不松弛條件(Complementary Slackness),SVM里的支持向量就是從這個條件得來的。
由Fritz John 定理可知線性無關則
,讓每一個拉格朗日乘子除以
,即
,得到下面這組原問題在點
處取得極小值一階必要條件。
定理2:
假設為上述問題的極小值點,問題中涉及到的各個函數一階偏導都存在,有效約束
線性無關,則下組條件成立:
這組條件就是Karush-Kuhn-Tucker條件,滿足KKT條件的點就是KKT點,需要注意的是KKT條件是必要條件(當然在某些情況下會升級為充要條件,比如凸優化問題)。
由此也可以想到求解SVM最大分類間隔器時,不管是解決原問題還是解決對偶問題,不管是用SMO方法或其它方法,優化的過程就是找到並優化違反KKT條件的最合適的乘子。
KKT條件與對偶理論有密切的關系,依然是解決下面這個問題:
構造拉格朗日函數:
其中
且
,它們都是拉格朗日乘子
令,原問題可以表示為下面這個形式:
這個式子比較容易理解,當違反原問題約束條件時有:
於是原問題等價為下面這個問題:
它的最優解記為
令,則有以下形式:
它的最優解記為
上面這兩個形式很像,區別只在於和
的順序,實際上
和
互為對偶問題。因為
,打個不太恰當的比喻,這就像瘦死的駱駝比馬大,具體的證明就不寫了,所以
,這個就是弱對偶性,此時存在對偶間隙,它被定義為:
。
有弱對偶性就有強對偶性,它指的是在某些條件下有,比如在以下條件下滿足強對偶性:
目標函數和所有不等式約束函數是凸函數,等式約束函數是仿射函數(形如),且所有不等式約束都是嚴格的約束(大於或小於)。
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/