淺談共軛梯度法的原理

       共軛梯度法作爲優化算法中常見算法,在很多基於梯度優化的機器學習算法中可以見到它的身影,比如在稀疏編碼(sparsenet)中。本文主要參考清華大學出版社,陳寶林編寫的最優化教材中對共軛梯度的介紹。

       寫這個文章的起源是我最近在思考一個簡單的函數:.........................................1

或者更加複雜的二次型函數:....................................2,在這裏x拔是數據中心

第一個問題是如何保證輸出 f 始終大於0,由線性代數的知識知道我們知道保證矩陣A是正定的,而如果A是半正定的,那麼就能保證輸出非負。第二個問題就是這種二次型函數的幾何意義。先從最簡單的二次型函數說起,   ............3

其中。將公式3寫成公式2的形式爲,其中。這個函數的形狀是什麼樣子的呢?首先爲了保證非負,我們將a取值分別爲-1,0,1三個數值。然後,我們畫出函數形狀如→:

  在圖中,由於A是2*2的方陣,我們得到的是三個三維的曲面。曲面圖像都位於x-y平面的上方,說明了非負性。對於每一層,代表的是不同的a數值下的曲面(共3層)。而在某一層上,每一個等值線(也就是等高線)代表的是不同的輸出值,我們都已經在圖中標了出來,我們發現曲面投影到x-y平面是一個旋轉之後的橢圓(如下)。

               而推廣更一般形式的,當A的維數大於2時候就會得到超曲面,這個時候的等值線(準確的講是等值面)的形式爲:這個是以x拔爲中心的橢球面。由於在x拔處的梯度爲。A正定,從而x拔是函數的極小點(記住這個正是我們想要的)。假設在這個橢球面上(也就是等值面上)有一個點

,那麼在這個點處,等值面的法向量爲,還是舉二維的例子


我們假設d(1)是在點處的切向量,d(2)是沿着該點和中心點的連線的方向的向量,即

。法向量垂直於平面的任何向量,自然也垂直於切向量,我們有:

對於last equation 我們說d(1) 和d(2)關於A是共軛的。

寫到這兒終於將梯度和共軛都說出來了。對於這個last equation我們認爲二維等值線上的任意一點處的切向量是與這一點的指向極小值點的向量關於A共軛,也就意味着二次函數的話經過兩次迭代就可以找出極小值點。對於多維的情況,也是能在有限步內收斂到極小值點的。具體證明可以參考教材。

     於是我們在進行最優化中極小值的尋找的時候,我們一直尋找極小值點,而可以先找到指向它的方向,尋找方向還得尋找與之共軛的方向,與之共軛的方向還可以通過與該方向共軛的方向來獲得,這樣的依次往前推,最後我們在開始共軛梯度之前首先是計算初始點的最速下降方向。

     下面基於上述思路介紹FR共軛梯度法。給定一個初始點x(1)計算它的梯度d(1),然後將這個d(1)作爲切向量方向,沿它的方向搜索得到x(2),計算x(2)處的梯度g(2),利用g(2)和d(1)構造新的搜索方向d(2),一次下去。這個過程需要計算兩個量,一個是每一步的搜索步長,一個是下一步的搜索方向。搜索步長採用比較通用的計算公式,而在計算下一步的搜索方向的時候 體現出了共軛的特點。

  具體算法實現步驟和實現參考:http://blog.sciencenet.cn/blog-54276-569356.html。


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