【深度學習系列】——梯度下降算法的可視化解釋(動量,AdaGrad,RMSProp,Adam)!

這是深度學習系列的第二篇文章,歡迎關注原創公衆號 【計算機視覺聯盟】,第一時間閱讀我的原創!回覆 【西瓜書手推筆記】 還可獲取我的機器學習純手推筆記!

直達筆記地址:機器學習手推筆記(GitHub地址)


深度學習系列

【深度學習系列】——深度學習簡介


筆記預覽

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述


在這篇文章中,由於有大量的資源可以解釋梯度下降,因此,我想在視覺上引導您瞭解每種方法的工作原理。藉助我構建的梯度下降可視化工具,希望我可以爲您提供一些獨特的見解,或者至少提供許多GIF。

這裏的重點是比較和對比這些方法。

Vanilla Gradient Descent

在機器學習的上下文中,梯度下降的目標通常是使機器學習問題的損失函數最小化。一個好的算法可以快速,可靠地找到最小值(即,它不會卡在局部最小值,鞍點或平穩區域中,而是求出全局最小值)。

基本的梯度下降算法遵循這樣的思想,即梯度的相反方向指向下部區域的位置。因此,它會沿梯度的相反方向迭代。對於每個參數theta,它執行以下操作:

圖片
Theta是您要優化的一些參數(例如,神經網絡中神經元到神經元連接的權重,線性迴歸中特徵的係數等)。機器學習優化設置中可能有成千上萬個這樣的theta。Delta是算法每次迭代後theta的變化量;希望隨着每個這樣的變化,θ逐漸接近最佳值。

由於人類的感知僅限於3維,在我所有的可視化中,假設我們只有兩個參數(或theta)需要優化,它們由圖中的x和y維表示。表面是損失函數。我們想要找到在曲面最低點的(x,y)組合。這個問題對我們來說微不足道,因爲我們可以看到整個表面。但是球卻看不到;它一次只能邁出一步,並探索周圍的環境,就像只用手電筒在黑暗中行走一樣。

梯度下降算法的分步說明

Momentum

動量算法(或簡稱爲動量)的梯度下降借鑑了物理學的思想。想象一下,將球滾動到無摩擦碗內。累積的動量並沒有停止在底部,而是將其向前推動,並且球不斷來回滾動。

圖片

衰減爲1.0時的動量下降(無衰減)

我們可以將動量的概念應用於我們的Vanilla Gradient Descent算法。在每個步驟中,除了規則的漸變以外,它還增加了上一步的運動。在數學上,它通常表示爲:

圖片

如果我稍微改動一下這個等式,並記錄“梯度的(衰減的)累積和”,會更直觀。當我們稍後介紹Adam算法時,這也會使事情變得更簡單。

圖片

圖片

動量下降的分步說明

讓我們考慮兩種極端情況,以便更好地瞭解此衰減率參數。如果衰減率爲0,則它​​與Vanilla Gradient Descent梯度下降完全相同。如果衰減率爲1,則它會像我們在開頭提到的無摩擦碗類推一樣不斷地來回搖擺;你不希望出現這種情況。通常,衰減率大約在0.8-0.9之間選擇-就像一個帶有一點摩擦的表面,因此它最終會減速並停止。

那麼,動量在哪些方面比Vanilla Gradient Descent更好?在下圖的比較中,您可以看到兩個優點:

  1. 動量只是移動得更快(因爲它累積了所有動量)
  2. 動量有逃避局部最小值的作用(因爲動量可能將其推離局部最小值)。同樣,正如我們稍後將看到的那樣,它還將更好地通過高原地區。

AdaGrad

Ada自適應梯度定向算法(簡稱AdaGrad)不是跟蹤動量之類的梯度總和,而是跟蹤梯度平方的總和,並使用它來適應不同方向的梯度。方程通常用張量表示。在這裏,我將避免張量來簡化語言。對於每個維度:

圖片

AdaGrad血統的分步說明

在ML優化中,某些功能非常稀疏。稀疏特徵的平均梯度通常很小,因此以慢得多的速度訓練這些特徵。解決此問題的一種方法是爲每個功能設置不同的學習率,但這會很快變得混亂。

AdaGrad使用這種想法解決了這個問題:您更新的功能越多,將來更新的功能就越少,從而爲其他功能(例如稀疏功能)提供了趕超的機會。用視覺術語來說,您更新了此功能有多少表示您在此維度中已移動了多少,並且此概念是由梯度平方的累積和所捕獲的。注意,在上面的逐步網格圖示中,如果沒有重新調整縮放比例(1b),球將大部分垂直向下移動;通過調整(1d),它會沿對角線移動。

圖片

在具有鞍點的地形上,AdaGrad(白色)對梯度下降(青色)。AdaGrad的學習率設置爲高於梯度下降的學習率,但是無論學習率如何,AdaGrad的路徑筆直的觀點在很大程度上仍然正確。

此屬性使AdaGrad(以及其他類似的基於梯度平方的方法,如RMSProp和Adam)可以更好地逃避鞍點。AdaGrad將採取直線路徑,而梯度下降(或與此相關的,動量)採取的辦法“讓我先滑下陡坡也許擔心慢方向後”。有時,香草梯度下降可能會在兩個方向的梯度均爲0且在此處完全滿足的鞍點處停止。

RMSProp

AdaGrad的問題在於它的運行速度非常慢。這是因爲梯度平方的總和只會增加而不會縮小。RMSProp加入衰減因子修復該問題。

圖片

更精確地,梯度平方的和實際上是梯度平方的衰減的和。衰減率僅表示最近的梯度²很重要,而很久以前的梯度基本上已被忘記。附帶說明一下,術語“衰減率”有點用詞不當。與我們在動量中看到的衰減率不同,除衰減外,此處的衰減率還具有縮放效果:它將整個項按比例縮小(1-delay_rate)。換句話說,如果將delay_rate設置爲0.99,則除了衰減外,梯度平方的總和將爲AdaGrad的sqrt(1- 0.99)= 0.1,因此對於相同的步驟,該步長約爲10倍。學習率。

圖片

RMSProp(綠色)與AdaGrad(白色)。第一輪只是顯示球;第二輪也顯示了由平方代表的梯度平方和。

爲了瞭解衰減的影響,在這種直接對比中,AdaGrad white(白色)最初與RMSProp(綠色)保持一致,這與調整後的學習速率和衰減速率一樣。但是AdaGrad的平方平方和累積起來如此之快,以至於很快就變得龐大起來(由動畫中的平方大小證明)。他們付出了沉重的代價,最終AdaGrad實際上停止了前進。另一方面,由於衰減率,RMSProp始終將正方形保持在可管理的大小範圍內。這使得RMSProp比AdaGrad更快。

Adam

最後但並非最不重要的,Adam(Adaptive Moment Estimation的簡稱)開出最好的動量和RMSProp的兩全其美。Adam在經驗上表現良好,因此近年來,它通常是深度學習問題的首選。

讓我們看一下它是如何工作的:

圖片

Beta1是第一時刻的衰減率,即梯度(又稱爲動量)之和,通常設置爲0.9。Beta 2是第二個時刻的衰減率,是梯度平方的總和,通常設置爲0.999。

圖片

Adam從動量獲得速度,並從RMSProp獲得了在不同方向適應梯度的能力。兩者的結合使其功能強大。

總結

總之,梯度下降是一類算法,旨在通過遵循梯度來找到函數上的最小點。Vanilla Gradient Descent正好遵循梯度(由學習率定標)。改善梯度下降的兩個常用工具是梯度的總和(第一力矩)和梯度平方的總和(第二動量)。動量法使用具有衰減率的一階矩來獲得速度。AdaGrad使用無衰減的二階矩來處理稀疏特徵。RMSProp使用第二時刻通過一個衰減率來從AdaGrad加速。Adam同時使用第一刻和第二刻,通常是最佳選擇。

Reference

http://www.cs.toronto.edu/~tijmen/csc321/slides/lecture_slides_lec6.pdf

https://ruder.io/optimizing-gradient-descent/index.html#adagrad

https://bl.ocks.org/EmilienDupont/aaf429be5705b219aaaf8d691e27ca87

原文鏈接:https://towardsdatascience.com/a-visual-explanation-of-gradient-descent-methods-momentum-adagrad-rmsprop-adam-f898b102325c

思考

你平時都使用什麼優化算法呢?歡迎留言區說出你的觀點!

有收穫嗎?來個關注和點贊吧,讓更多的人看到這篇文章

  1. 點贊,讓更多的人看到這篇文章
  2. 文章首發原創公衆號 【計算機視覺聯盟】,第一時間閱讀文章,回覆 【西瓜書手推筆記】 獲取PDF下載!
  3. 歡迎關注我的博客,我們一起學習進步!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章