了解RMSprop——更快的神經網絡學習!

點擊上方關注,All in AI中國

本文假定正在閱讀的你已經擁有了有關神經網絡優化算法的基本知識。特別是,有關SGD和SGD的知識將對理解這篇文章非常有幫助。

一.導言

RMSprop-是專為神經網絡設計的未發表的優化算法,最一開始是由Geoff Hinton在其在線課程《神經網絡機器學習》的第6講中提出。 RMSprop在自適應學習率方法領域,近年來越來越受歡迎,但也受到一些批評。它以沒有出面世而聞名,大多數深度學習框架包含開箱即用的實施。

有兩種方法可以引入RMSprop。首先,將其視為適用於小批量學習的rprop算法。這是開發此算法的最初動機。另一種方法是看看它與Adagrad 的相似之處,並將RMSprop視為一種處理其急劇下降的學習率的方法。我會嘗試點擊兩個點,以便更清楚算法的工作原理。

二.RPROP

讓我們從瞭解彈性反向傳播(rprop) 算法開始,該算法用於完整批量優化。 Rprop 試圖解決梯度在幅度上可能變化很大的問題。一些梯度可能很小而其他梯度可能很大,這導致非常困難的問題:試圖找到算法的單一全局學習速率。如果我們使用全批量學習,我們只需使用梯度的符號就可以解決這個問題。這樣,我們可以保證所有權重更新都具有相同的尺寸。

這種調整有助於大大提高鞍點和高原,因為我們採取足夠大的步驟,即使是微小的漸變。請注意,我們不能僅僅通過提高學習率來做到這一點,因為我們採用大梯度的步驟將會更大,這將導致分歧。 Rprop結合了僅使用漸變符號的想法和為每個權重單獨調整步長的想法。因此,我們不會查看漸變的大小,而是查看為該特定權重定義的步長。並且該步長隨著時間的推移而單獨調整,以便我們在所需的方向上加速學習。要調整某些權重的步長,請使用以下算法:

首先,我們看一下權重最後兩個梯度的跡象。

如果它們具有相同的符號,那意味著,我們正朝著正確的方向前進,並且應該將其加速一小部分,這意味著我們應該乘以增量步長(例如,增加1.2倍)。如果它們不同,那意味著我們做了太大的步驟並跳過局部最小值,因此我們應該乘法地減小步長(例如0.5倍)。

然後,我們限制兩個值之間的步長。這些值實際上取決於您的應用程序和數據集,默認值為50和百萬分之一的良好值,這是一個良好的開端。

現在我們可以應用權重更新。

注意,作者定義了不同版本的rprop算法。我介紹了最簡單的一個讓你熟悉它。雖然我喜歡用方程式正式定義優化算法,但這個算法通過代碼表達得更好;所以最簡單的版本rprop更新規則可以如下所示:

瞭解RMSprop——更快的神經網絡學習!

三. 從Rprop到RMSprop

當我們擁有非常大的數據集並且需要執行小批量權重更新時,Rprop並不真正起作用。為什麼它不適用於小批量?人們其實已經嘗試過了,但發現很難讓它發揮作用。它不起作用的原因在於它違反了隨機梯度下降背後的核心思想,即當我們具有足夠小的學習率時,它會對連續的小批量的梯度取平均值。考慮權重,在9個小批量上獲得梯度0.1,在十分之一小批量上獲得-0.9的梯度。我們想要的是梯度大致相互抵消,使得停留大致相同。但這不是rprop會發生的。使用rprop,我們將權重增加9倍並且僅減少一次,因此權重增長得更大。

為了結合Rprop的穩健性(通過使用梯度的符號),我們從小批量中獲得效率,以及允許以正確的方式組合梯度的小批量進行平均,我們必須從不同的角度來看rprop。 Rprop相當於使用梯度,但也要除以梯度的大小,因此無論特定梯度有多大,我們都會得到相同的幅度。

小批量的問題是我們每次都按不同的梯度劃分,那麼為什麼不強制我們除以相鄰的小批量相似的數字呢? RMSprop的核心思想則是保持每個權重的平方梯度的移動平均值。然後我們將梯度除以平均值的平方根。這就是為什麼它被稱為RMSprop(均方根反向傳播)。使用數學方程式,更新規則如下所示:

瞭解RMSprop——更快的神經網絡學習!

E [g] - 平方梯度的移動平均值。 dC / dw - 成本函數相對於權重的梯度。 n - 學習

從上面的等式可以看出,我們通過除以平方梯度的根來調整學習率,但由於我們只有當前小批量的梯度估計,所以我們需要使用它的移動平均值。您可以在項目中使用的移動平均參數的默認值為0.9。它適用於大多數應用程序。在代碼中,算法可能如下所示:

瞭解RMSprop——更快的神經網絡學習!

E [g] - 平方梯度的移動平均值。 dC / dw - 成本函數相對於權重的梯度。 n - 學習

四.與Adagrad相似

Adagrad 是自適應學習速率算法,看起來很像RMSprop。Adagrad根據每個維度中的歷史平方和添加梯度的元素縮放。這意味著我們保持一個連續的平方梯度總和。然後我們通過將學習率除以該總和來調整學習率,在代碼中我們可以這樣表達:

瞭解RMSprop——更快的神經網絡學習!

在訓練過程中會發生什麼?步長變得越來越小,因為我們不斷更新平方梯度在訓練中的增長。所以我們每次除以更大的數字。在凸優化中,這很有意義,因為當我們接近minina時我們想要減速。在非凸的情況下,它的情況很糟糕,因為我們可能會陷入鞍點。我們可以將RMSprop看作是能夠解決這個問題的算法。

使用RMSprop,我們仍然可以保持平方梯度的估計值,但是,不是讓這個估計值不斷累積在訓練上,而是保持它的移動平均值。

五.結果

我發現了很棒的可視化效果,可以用於不同的優化算法,顯示了它們在不同情況下的行為方式。

瞭解RMSprop——更快的神經網絡學習!

正如您所看到的,在鞍點的情況下,RMSprop直線向下,無論梯度有多小並不重要,RMSprop會縮放學習速率,因此算法比大多數算法更快地通過鞍點。

瞭解RMSprop——更快的神經網絡學習!

在這種情況下,算法從具有非常大的初始梯度的點開始。 RMSprop幾乎是最佳路徑,而動量方法則超過了很多。

六.結論

RMSprop是一款優秀、快速且非常流行的優化器。 Andrej Karpathy的《機器學習趨勢一瞥》表明它是深度學習中最流行的優化算法之一,其受歡迎程度僅次於Adam。如果您想了解有關深度學習優化的更多信息,請查看以下一些來源:正如您所看到的,在鞍點的情況下,RMSprop(黑線)直線向下,梯度有多小並不重要,RMSprop會縮放學習速率,因此算法比大多數算法更快地通過鞍點。

在這種情況下,算法從具有非常大的初始梯度的點開始。 RMSprop幾乎是最佳路徑,而動量方法則超過了很多。

RMSprop是一款優秀、快速且非常流行的優化器。 Andrej Karpathy的《機器學習趨勢一窺》表明它是深度學習中最流行的優化算法之一,其受歡迎程度僅次於Adam 。如果您想了解有關深度學習優化的更多信息,請查看以下一些來源:

  1. Sebastian Ruder的博客有幾篇關於深度學習優化趨勢的文章。(http://ruder.io/optimizing-gradient-descent/index.html#fn:15)
  2. fast.ai是一個關於深度學習的好課程,他們通過最流行的優化算法,在excel表上解釋它們。(http://www.fast.ai/)
  3. 吳恩達在coursera上的第二門深度學習專業課也涉及到一些流行的算法,並用了非常清晰的方式解釋它們。(https://www.coursera.org/learn/deep-neural-network/home/welcome)
瞭解RMSprop——更快的神經網絡學習!


分享到:


相關文章: