牛頓法

牛頓法是梯度下降法的進一步發展,梯度下降法利用了目標函式的一階導數資訊,以負梯度方向作為搜尋方向,只考慮目標函式在迭代點的區域性性質,而牛頓法為代表的二階近似方法除了一階導數資訊外,還利用二階導數資訊把握了梯度變化的趨勢,因而能夠確定更合適的搜尋方向加快收斂,具有二階收斂速度。 牛頓法與擬牛頓法學習筆記 首先介紹了原始牛頓法,然後在此基礎上加入了線性搜尋,提出了阻尼牛頓法。但是牛頓法存在以下缺點:

牛頓法對目標函式有比較高的要求,必須一階二階可導,海森矩陣必須

正定

計算量比較大,除了計算梯度以外,還要計算海森矩陣及其逆矩陣;

當目標函式不是完全的凸函式時,容易陷入

鞍點

,導致更新朝著錯誤的方向移動;

針對上述問題,提出了擬牛頓法,基本思想:在“擬牛頓條件”的約束下,不用計算二階偏導數而構造近似海森矩陣(或其逆)的正定對稱陣。

擬牛頓法

DFP演算法就是透過迭代更新單位矩陣來構造近似海森矩陣的逆的近似矩陣;與此同時,BFGS演算法是透過迭代更新單位矩陣來直接構造近似海森矩陣的近似矩陣。二者存在共同的問題,需要儲存近似矩陣

O(N^2)

,當N很大時,會消耗巨大的儲存空間,不適用於大規模的問題。

為了減少記憶體開銷,LBFGS應運而生,它不再儲存構造的近似矩陣,而是儲存迭代過程中與之相關的向量序列,每次用到時,重新計算這個近似矩陣。並且,只儲存最近的M個向量,做進一步的近似計算,將空間消耗降低到

O(MN)

共軛梯度法

共軛梯度法介於梯度下降法與牛頓法之間。共軛梯度法把共軛性與最速下降法相結合,利用迭代點處的梯度構造一組共軛方向,並沿共軛方向進行搜尋,當前方向上極小值的搜尋不會影響已經搜尋過的方向的極值,因此共軛梯度法具有二次終止性。

首先何為

共軛

H

是海森矩陣,如果滿足

d_t^T H d_{t-1} = 0,

則兩個方向

d_t

d_{t-1}

共軛。

此處高亮梯度下降法和共軛梯度法有何異同?中王哲的回答;

《Deep Learning》這本書中也對共軛梯度法做了闡述,具體如下:

在應用共軛梯度法的時候,我們尋求一個和先前線性搜尋方向共軛的搜尋方向,即不會撤銷該方向上的進展,在訓練迭代

t

時,下一步的搜尋方向

d_t

的形式如下:

d_t = \triangledown_\theta J(\theta) + \beta_t d_{t-1}

其中,

\beta_t

控制我們應沿

d_{t-1}

加回多少到當前搜尋方向上。適應共軛的直接方法會涉及到

H

特徵向量的計算來選擇

\beta_t

,計算量是非常大的。為了避免這些計算,產生了以FR為代表的兩種流行的演算法來計算

\beta_t

神經網路及其他深度學習模型的目標函式比二次函式複雜得多,但經驗上,共軛梯度法在這種情況下仍然適用。當目標函式是高於二次的連續函式(即目標函式的梯度存在)時,其對應的解方程是

非線性

方程,非線性問題的目標函式可能存在區域性極值,並且破壞了二次截止性,共軛梯度法需要在兩個方面加以改進後,仍然可以用於實際的反演計算,但共軛梯度法不能確保收斂到全域性極值。

(1)首先是共軛梯度法不能在n維空間內依靠n步搜尋到達極值點,需要重啟共軛梯度法,繼續迭代,以完成搜尋極值點的工作。

(2)在目標函式複雜,在計算時,由於需要區域性線性化,需計算Hessian矩陣,且計算工作量比較大,矩陣A也有可能是病態的。Fletcher-Reeves演算法最為常用,拋棄了矩陣的計算。

共軛梯度法僅需一階導數資訊,但克服了最速下降法收斂慢的缺點,又避免了牛頓法需要儲存和計算Hesse矩陣並求逆的缺點,共軛梯度法不僅是解決大型線性方程組最有用的方法之一,也是解大型非線性最最佳化最有效的演算法之一。