1. 程式人生 > >人工智障學習筆記——梯度下降(2)優化演算法

人工智障學習筆記——梯度下降(2)優化演算法

四、優化

4-1 Momentum

如果我們把梯度下降法當作小球從山坡到山谷的一個過程,那麼在小球滾動時是帶有一定的初速度,在下落過程,小球積累的動能越來越大,小球的速度也會越滾越大,更快的奔向谷底,受此啟發就有了動量法 Momentum。

動量的引入是為了加速SGD的優化過程。分析上式就會明白動量的作用原理:利用慣性,即當前梯度與上次梯度進行加權,如果方向一致,則累加導致更新步長變大;如果方向不同,則相互抵消中和導致更新趨向平衡。動量 γ 常被設定為0.9或者一個相近的值。

4-2 Nesterov accelerated gradient

帶動量的SGD可以加速超車,但是卻不知道快到達終點時減速。NAG就是用來解決這個問題的。在動量法中,小球下滾過程如果遇到上坡則會減小速度,那麼更好的做法應該是遇到上坡之前就減慢速度。這就是 NAG 的大致思想,相較於動量法,NAG在計算引數的梯度時,在損失函式中減去了動量項,這種方式相當於預估了下一次引數所在的位置。公式如下:

很明顯,同帶動量的SGD相比,梯度不是根據當前位置 θ 計算出來的,而是在移動之後的位置(θ−γνt−1)計算梯度。 (已經確定會移動 γνt−1,那不如之前去看移動後的梯度)。

4-3 Adagrad

能否根據引數的重要性自適應學習率呢?Adagrad 的提出思想是:在學習的過程中自動調整學習率。對於出現頻率低的引數使用較大的學習率,出現頻率高的引數使用較小的學習率。Adagrad為每一個引數 θi提供了一個與自身相關的學習率,公式如下:

其中 Gt為一個對角矩陣,其對角上的每一個元素 Gt,ii為 t時刻前所有施加到引數 θi 上的梯度的平方的和。 ϵ 用來防止除0操作。

簡單分析上式,有三點結論:

(1) 經常出現(累積梯度大)的引數的學習率會被拉低,較少出現(累積梯度小)的引數的學習率會被拉高;

(2) 隨著訓練次數增加,累積梯度肯定會上升,導致分母變大,則學習率會自動下降。因此,Adagrad可以自動調節學習率,而我們只需給其一個初始學習率即可;

(3) 同樣是隨著訓練引數增加,學習率會下降的很快,這可能導致後期學習率過低而學不到東西。

Adagrad 的在日常利用率較高,同時也存在著很多「坑」希望大家儘量避免。以 TensorFlow 為例,θ 是防被除零的項,但 TensorFlow 只提供了累積梯度平方和的初始值,並且預設為 0.1。如果我們設定的較小時,會導致初始學習率偏大。實際使用中,可以調整此引數可能有意外收穫。

4-4 Adadelta

Adadelta 是 Adagrad 的一種改進演算法,更新過程中參照了牛頓法(二階優化方法),它利用 Hessian 矩陣的逆矩陣替代人工設定的學習率,在梯度下降的時候可以完美的找出下降方向,不會陷入區域性最小值。

但是它的缺點十分明顯,求逆矩陣的時間複雜度近似 O(n3),計算代價太高,不適合大資料。

Adagrad 隨著時間增加導致學習率不斷變小導致過早收斂,Adadelta 採用梯度平方的指數移動平均數來調節學習率的變化:

但論文中認為這個引數的更新沒有遵循引數的單元假設,於是作者第二次嘗試採用梯度平方的指數移動平均數來調整得到了:

Adagrad 最大的變化是沒有學習率的設定,但是到訓練後期進入區域性最小值雷區之後就會反覆在區域性最小值附近抖動。

4-5 RMSprop

RMSprop 是 AdaDelta 的一個特例, 基本上等同於未做 單位統一 的Adadelta。它由 Geoff Hinton 在公開課中提出,採用梯度平方的指數移動平均數來調整,當引數更新較大時會對它進行「懲罰」,它的公式如下:

RMSprop 相對  Adagrad 梯度下降得較慢,被廣泛應用在 CNN 領域。RMSprop 在 Inception v4 內取衰減因子γ 設定為0.9

4-6 Adam

Adaptive Moment Estimation (自適應矩估計Adam)是另外一種為每個引數提供自適應學習率的方法。可以看作是 RMSprop 和動量法的結合體。同RMSprop、Adadelta相比,Adam在對梯度平方(二階矩)估計的基礎上增加了對梯度(一階矩)的估計,使得整個學習過程更加穩定。

由於基於指數移動平均數的方式存在偏差,特別是在下降初期 m 和 v 被初始化為0並且接近 1 時。為此,引入偏差修正過程:

於是最終的更新公式為:

通常 β1,β2分別被設定為0.9和0.999

4-7 AdaMax

AdaMax是Adam的一種變種。主要是對原來的二階矩估計擴充套件到無窮階矩。(高階矩往往不穩定,但無窮階矩通常趨於穩定)

通過替換Adam中的分母項:

於是最終的更新公式為:

五、小結

Adam 即 Adaptive Moment Estimation(自適應矩估計),類比於動量法的過程也就是有偏一階矩估計過程,RMSprop 則對應於有偏二階矩估計。在日常使用中,往往採用預設學習率 0.001 就可以取得不錯的結果。

Adam 計算效率高,適用於稀疏資料&大規模資料場景,更新的步長能夠被限制在合理的範圍內,並且引數的更新不受梯度的伸縮變換影響。但它可能導致不收斂,或者收斂區域性最優點。

由於 Adam 可能導致不收斂,或者收斂區域性最優點,因此谷歌在 ICLR 2018 提出了 AMSGrad,該論文中提到這樣一個問題:
對於 SGD 和 AdaGrad 可以保證學習率總是衰減的, 而基於滑動平均的方法則未必。實際上,以 Adam 為代表的自適應演算法存在兩個主要問題:
1、可能不收斂
2、可能收斂於區域性最優點

RMSprop 會對最近增加的值提出比較大的更新,隨著步數梯的增加慢慢消散它的作用;Adagrad 以梯度的平方進行累積,所以說基於滑動平均的方法不一定能夠保證走勢衰減。AMSGrad 在二階區域性更新過程中通過取當前值與上一次的值的最大值用於計算∆x,確保學習率的衰減。

float

float

以上就是現有的主流梯度下降優化演算法,總結一下以上方法,如上圖所示,SDG 的值在鞍點中無法逃離;動量法會在梯度值為0時新增動能之後跳過該點;而 Adadelta 雖然沒有學習率但在收斂過程非常快。