【乾貨】深度學習需要了解的四種神經網絡優化算法

2021-03-02 專知

【導讀】近日,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)會導致參數的更新錯過最佳值,學習率太低(例如<1e-5)將導致過長訓練時間。一個好的策略是學習率初始化為1e-3,並使用學習率調度器來降低學習率(例如,每四個時間段(epoch)將學習速率減半的一個步長調度器):

def step_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))
return lr_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

相關焦點

  • 前沿| 利用遺傳算法優化神經網絡:Uber提出深度學習訓練新方式
    許多人認為,SGD 算法有效計算梯度的能力對於這種訓練能力而言至關重要。但是,Uber 近日發布的五篇論文表明,神經進化(neuroevolution)這種利用遺傳算法的神經網絡優化策略,也是訓練深度神經網絡解決強化學習(RL)問題的有效方法。
  • 深度學習:神經網絡算法的昨天、今天和明天
    深度學習就是人工神經網絡(Artificial Neural Network)。神經網絡算法得名於其對於動物神經元傳遞信息方式的模擬,而深度學習這一「俗稱」又來自於多層級聯的神經元:眾多的層讓信息的傳遞實現了「深度」。
  • 聽說你了解深度學習最常用的學習算法:Adam優化算法?
    By蔣思源2017年7月12日  深度學習常常需要大量的時間和機算資源進行訓練,這也是困擾深度學習算法開發的重大原因。雖然我們可以採用分布式並行訓練加速模型的學習,但所需的計算資源並沒有絲毫減少。而唯有需要資源更少、令模型收斂更快的最優化算法,才能從根本上加速機器的學習速度和效果,Adam算法正為此而生!
  • 神經網絡與深度學習
    從此之後,原本處於研究邊緣狀態的神經網絡又迅速火熱了起來,深度學習也逐漸佔據了計算機視覺的主導地位。注意:這裡有必要解釋一下模型和算法的概念,通常我們所說的像支持向量機(Support Vector Machine,以下簡稱SVM)之類的所謂機器學習十大算法其實不應該稱之為算法,更應該稱之為模型。機器學習算法應該是在給定模型和訓練策略的情況下採取的優化算法,比如梯度下降、牛頓法等。
  • 深度學習最常用的學習算法:Adam優化算法
    聽說你了解深度學習最常用的學習算法:Adam優化算法?-深度學習世界。深度學習常常需要大量的時間和機算資源進行訓練,這也是困擾深度學習算法開發的重大原因。雖然我們可以採用分布式並行訓練加速模型的學習,但所需的計算資源並沒有絲毫減少。而唯有需要資源更少、令模型收斂更快的最優化算法,才能從根本上加速機器的學習速度和效果,Adam 算法正為此而生!
  • 深度學習和深度神經網絡
    深度學習深度學習是眾多機器學習方法中的一種。主要是通過神經網絡來實現。「深度」是指神經網絡的層數。
  • 算法之「算法」:所有機器學習算法都可以表示為神經網絡
    但是眾所周知,神經網絡是算法的算法及機器學習的巔峰。我們可以說,神經網絡是對機器學習的普遍概括,而不是僅僅一次嘗試。與其說神經網絡是簡單的算法,不如說是框架和概念,這是顯而易見的,因為在構建神經網絡時有很大的自由度——比如對於隱藏層&節點個數、激活函數、優化器、損失函數、網絡類型(卷積神經網絡、循環神經網絡等)以及特殊層(批歸一化、隨機失活等)。
  • 機器學習算法匯總:人工神經網絡、深度學習及其它
    常見算法有邏輯回歸(Logistic Regression)和反向傳遞神經網絡(Back Propagation Neural Network) 非監督式學習: 人工神經網絡算法模擬生物神經網絡,是一類模式匹配算法。
  • 深度學習筆記 | 第3講:深度學習優化算法之從SGD到Adam
    又到了每周一狗熊會的深度學習時間了。在上一期中,小編和大家介紹了機器學習和深度學習中的核心任務以及神經網絡的正則化方法和dropout方法來防止過擬合。本期將借著第一期推送小編關於模型與算法的討論的引子,和大家深入探討機器學習和深度學習的數學本質,並在此基礎上重點介紹深度學習中常用的優化算法。
  • matlab使用貝葉斯優化的深度學習:卷積神經網絡CNN
    p=7954此示例說明如何將貝葉斯優化應用於深度學習,以及如何為卷積神經網絡找到最佳網絡超參數和訓練選項。要訓練深度神經網絡,必須指定神經網絡架構以及訓練算法的選項。選擇和調整這些超參數可能很困難並且需要時間。貝葉斯優化是一種非常適合用於優化分類和回歸模型的超參數的算法。  準備數據下載CIFAR-10數據集[1]。
  • 典型的深度學習算法(一):卷積神經網絡(CNN)
    通過上一篇文章,相信大家對深度學習的概念、原理已經有了大致了解,近期企通查將會對深度學習中的幾種典型算法進行介紹。在深度學習領域中,已經驗證的典型成熟算法有卷積神經網絡(CNN)、循環神經網絡(RNN)、生成對抗網絡(GAN)、深度強化學習(DRL)等,下面企通查將帶領大家對典型的深度學習算法之一——卷積神經網絡(CNN)一探究竟。
  • 多倫多大學2021《機器學習》課程,講述深度學習理論中的神經網絡訓練動力學
    人們原本以為,這種成功需要克服理論上存在的重大障礙。畢竟,深度學習優化是非凸的、高度非線性的、高維的,那麼我們為什麼能夠訓練這些網絡呢?在許多情況下,它們擁有的參數遠遠多於記憶數據所需的參數,那麼為什麼它們能夠很好地推廣呢?儘管這些主題已經佔據了機器學習研究領域的大部分注意力,但當涉及到更簡單的模型時,神經網絡領域的原則是先數據訓練再說。顯然,這招奏效了。
  • 火爆網絡的《神經網絡與深度學習》,有人把它翻譯成了中文版!
    ,第一時間送達今天給大家介紹一本非常好的深度學習入門書籍,就是《Neural Network and Deep Learning》,中文譯為《神經網絡與深度學習》。非常適合用來入門神經網絡和深度學習!全書共分為六章,目錄如下:第一章:使用神經網絡識別手寫數字第二章:反向傳播算法如何工作第三章:改進神經網絡的學習方法第四章:神經網絡可以計算任何函數的可視化證明第五章
  • 走近深度學習:神經網絡工作原理解析
    神經網絡是一種模仿生物神經網絡的結構和功能的數學模型或計算模型,由大量的人工神經元聯結進行計算。在深度學習時代,基於神經網絡的目標檢測算法也大放異彩。為了能夠幫助大家更好的了解目標檢測領域,猩算法開設「目標檢測」系列文章,精選乾貨文章,持續分享。
  • 算法的算法:人工神經網絡
    在上周的人工神經網絡課程中介紹了機器學習中的支持向量機(SVM:Support Vector Machine)與前饋網絡RBF的之間的聯繫,而對於由傳遞函數為線性函數組成的單層網絡的代表自適應線性單元(ADLINE:Adaptive  Linear Element)更是和傳統信號處理中的自適應濾波器相類似。
  • 什麼是深度學習? - 45分鐘理解深度神經網絡和深度學習
    基於卷積神經網絡的深度學習所得到的人臉圖像的分層特徵。(圖片來自於Stanford大學的論文) 筆者認為,利用神經科學的神經元或神經網絡來解釋深度學習中的人工神經網絡,這僅僅是類比而已。從我們的分析可知,深度學習中的人工神經網絡並沒有真正的認知和學習!如果我們人類對自己的認知系統無法完全了解的話,我們是很難發展出真正的人工智慧技術。
  • 深度強化學習算法與應用研究現狀綜述
    概述了基於值函數和策略梯度的兩類深度強化學習算法,詳細闡述了深度Q網絡、深度策略梯度及相關改進算法的原理,並綜述了深度強化學習在視頻遊戲、導航、多智能體協作以及推薦系統等領域的應用研究進展。最後,對深度強化學習的算法和應用進行展望,針對一些未來的研究方向和研究熱點給出了建議。
  • (圖解)類神經網絡的復興:深度學習簡史
    更糟的是,梯度消失問題會隨著神經網絡層數的增加而更加嚴重,意即,隨著梯度逐層不斷消散、導致神經網絡對其神經元權重調整的功用越來越小,所以只能轉而處理淺層結構(比如2層)的網絡,從而限制了性能。單層感知機失敗的原因乃不能切分非線性關係的資料;雖然1986年的學界提出了反向傳播算法,卻仍無法解決非線性資料的優化問題,多層感知機仍然無法實踐。
  • 人工智慧-Andrew Ng版|神經網絡和深度學習|深度學習概述
    About this Course這裡列一下本系列深度學習專項課程有哪些:第一門課程 Nerual Networks and Deep Le arning 神經網絡和深度學習將學習神經網絡和深度學習將學習如何建立神經網絡(
  • 神經網絡和深度學習簡史(全)
    讓我告訴你,說來話長——這不僅僅是一個有關神經網絡的故事,也不僅僅是一個有關一系列研究突破的故事,這些突破讓深度學習變得比「大型神經網絡」更加有趣,而是一個有關幾位不放棄的研究員如何熬過黑暗數十年,直至拯救神經網絡,實現深度學習夢想的故事。