當前位置:
首頁 > 最新 > 深度學習需要了解的四種神經網路優化演算法

深度學習需要了解的四種神經網路優化演算法

【導讀】近日,Vadim Smolyakov發表了一篇博客,針對當前神經網路的優化演算法進行了總結,並利用簡單的CNN網路在NMIST數據集上進行實驗,探討不同的優化方法的效果好壞。其中考慮了四種神經網路訓練的優化方法:SGD,Nesterov Momentum,RMSProp和Adam,並用TensorFlow進行訓練。作者最終得出結果:使用Nesterov Momentum和Adam的SGD產生的結果更好。如果您對神經網路的優化演算法還不是很了解,那麼相信這篇文章將會給您很好的啟發!專知內容組編輯整理。

Neural Network Optimization Algorithms

——A comparison study based on TensorFlow

神經網路優化演算法

訓練神經網路的最流行的優化演算法有哪些?怎麼進行比較?

本文在MNIST數據集用卷積神經網路(CNN)進行實驗,來回答上述優化問題。

隨機梯度下降(SGD)

SGD通過數據的一個大小為(m)的子集(subset)或一個小批量(mini-batch)來從梯度負方向上更新模型參數(theta):

神經網路由 f(x(i); theta)表示,其中x(i)是訓練數據,y(i)是標籤,損失函數L的梯度是根據模型參數θ計算的。學習率(eps_k)決定了演算法沿著梯度(在最小化的情況下為負方向,在最大化的情況下為正方向)下降的步長大小。

學習率是非常重要的超參數。學習率太高(例如> 0.1)會導致參數的更新錯過最佳值,學習率太低(例如

defstep_decay(epoch):

lr_init =0.001

drop =0.5

epochs_drop =4.0

lr_new = lr_init *

math.pow(drop,math.floor((1+epoch)/epochs_drop))

returnlr_new

一般來說,我們希望學習率(eps_k)滿足Robbins-Monroe條件:

第一個條件確保演算法不論起點如何,都能夠找到一個局部最優解,第二個是控制振蕩。

動量(Momentum)

動量累積以指數方式進行衰減,補償按照過去梯度的均值進行移動:

因此,步長取決於梯度序列的大小和排列的順序,動量參數alpha的通常值設為0.5和0.9。

涅斯捷羅夫動量(Nesterov Momentum)

涅斯捷羅夫動量(Nesterov Momentum)受涅斯捷羅夫加速梯度法的啟發:

涅斯捷羅夫動量和標準動量之間的區別在於對梯度進行評估,涅斯捷羅夫動量是在應用了當前速率後對梯度進行評估,因此涅斯捷羅夫的動量為梯度增加了一個校正因子。

AdaGrad

AdaGrad是一種設置學習率的自適應方法[3]。我們考慮下圖中的兩種情況:

左圖:緩慢變化的對數似然(小梯度)右圖:快速變化的對數似然(大梯度)在目標緩慢變化(左圖)的情況下,梯度通常(在大多數點)進行小幅度變化。 因此,我們需要一個大的學習速率才能快速達到最優解。在目標快速變化(右圖)的情況下,梯度通常是非常大的。使用大的學習速率會導致非常大的步長,來回振蕩,但無法達到最優值。

出現這兩種情況的原因是學習率的設置與梯度無關。AdaGrad通過積累到目前為止所有的梯度的平方,並將學習率除以這個總和的平方根來解決這個問題:

因此,獲得高梯度的參數將會降低其有效學習率,而接收小梯度的參數將增加其學習率。在更平緩的斜率方向上,以及在大學習率的情況下,更謹慎的更新會帶來更大的進步。

RMSProp

RMSProp改進了AdaGrad的方法,將梯度的累積變成指數加權的移動平均值,即不考慮距離很遠的梯度值[4]:

注意,AdaGrad表示,即使在訓練開始階段累積的梯度而導致梯度保持不變,其學習率也會降低。通過引入指數加權移動平均值,離得更近的歷史梯度值相對於離得遠的歷史值被賦予更大的權重。因此,RMSProp已被證明是一種有效的、實用的深度神經網路優化演算法。

Adam

Adam從「自適應時刻」衍生而來,它可以被看作是RMSProp和動量組合的一個變體,它的更新看起來像RMSProp(除了使用平滑版本的梯度來代替原始隨機梯度),Adam的更新還包括一個偏差修正機制[5]:

建議的值是beta_1 = 0.9,beta_2 = 0.999,eps = 1e-8。

實驗

我使用四種不同的優化器:SGD,Nesterov Momentum,RMSProp和Adam,並用TensorFlow以1e-3的學習速率和交叉熵損失在MNIST數據集上訓練CNN網路。下圖顯示了這四種優化器的訓練損失值與迭代值:

從上圖中我們可以看出,Adam和Nesterov Momentum優化器產生的訓練損失最低!

代碼

所有的代碼鏈接:

https://github.com/vsmolyakov/experiments_with_python/blob/master/chp03/tensorflow_optimizers.ipynb

總結:

我們在訓練神經網路的過程中比較了使用不同優化器的效果,並對它們的工作原理有了直觀地認識。我們發現,用TensorFlow在MNIST數據集上訓練簡單CNN時,使用Nesterov Momentum和Adam的SGD產生的結果最好。

References

[1] Ian Goodfellow et. al., 「Deep Learning」, MIT Press, 2016

[2] Andrej Karpathy, http://cs231n.github.io/neural-networks-3/

[3] Duchi, J. ,Hazan, E. and Singer, Y. 「Adaptive subgradient methods for online learning and stochastic optimization」, JMLR, 2011.

[4] Tieleman, T. and Hinton, G. 「Lecture 6.5?—?RMSProp, COURSERA: Neural Networks for Machine Learning」, Technical Report, 2012.

[5] Diederik Kingma and Jimmy Ba, 「Adam: A Method for Stochastic Optimization」, ICLR, 2015

https://towardsdatascience.com/neural-network-optimization-algorithms-1a44c282f61d

-END-

專 · 知

人工智慧領域主題知識資料查看獲取【專知薈萃】人工智慧領域26個主題知識資料全集(入門/進階/論文/綜述/視頻/專家等)

同時歡迎各位用戶進行專知投稿,詳情請點擊

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 專知 的精彩文章:

概率論之概念解析:極大似然估計

TAG:專知 |