1. 程式人生 > >2017年深度學習優化演算法最新綜述

2017年深度學習優化演算法最新綜述

梯度下降演算法是機器學習中使用非常廣泛的優化演算法,也是眾多機器學習演算法中最常用的優化方法。幾乎當前每一個先進的(state-of-the-art)機器學習庫或者深度學習庫都會包括梯度下降演算法的不同變種實現。

但是,它們就像一個黑盒優化器,很難得到它們優缺點的實際解釋。

An overview of gradient descent optimization algorithms

這篇文章旨在提供梯度下降演算法中的不同變種的介紹,幫助使用者根據具體需要進行使用。

詳細對比了梯度下降演算法中的不同變種,並幫助使用者根據具體需要進行使用。 近日Ruder在針對2017年優化演算法的一些新方法,在之前綜述的基礎上,整理出2017深度學習優化研究亮點,值得關注。

深度學習的終極目標是找到一個能夠很好進行泛化的最小值,如果可以快速而可靠地找到這個值當然更好了。主要的方法是隨機梯度下降(SGD)法,該演算法已有60年曆史(Robbins and Monro,1951),它對於當前的深度學習的反向傳播演算法來說是非常重要的。

近年來提出了不同的優化演算法,分別利用不同的公式來更新模型的引數。Adam(Kingma and Ba,2015)自從2015年被推出後,一直到今天仍然是最常用的優化演算法之一。這表明從機器學習從業者的角度來看,深度學習的優化的最好的方法在很大程度上並沒有多大改變。

然而,今年已經產生了一些新的想法來改進深度學習的優化方法,這可能會成為未來我們模型的優化方式。在這篇博文中,我將深入探討深度學習最令人激動的亮點和最有前景的方向。請注意,這篇博文事先假定你已經熟悉SGD和自適應學習速率方法。要想提高學習的速度,請先了解現有梯度下降優化演算法,可參閱我的另一個部落格文章(http://ruder.io/optimizing-gradient-descent/index.html)。

理解泛化

優化與泛化密切相關,因為模型收斂的最小值定義了模型泛化的程度。因此,提升優化與理解這種極小值泛化行為的理論進展密切相關,更普遍的是,對深度學習的泛化能力有更深的理解。

然而,我們對深度神經網路泛化行為的理解仍然很淺。 最新工作表明,可能的區域性極小值數量隨引數的數量呈指數增長(Kawaguchi,2016)。考慮到目前深度學習架構的引數數量巨大,這樣的模型能收斂並且泛化的還不錯,看起來很神奇,尤其是考慮到他們可以完全記住隨機輸入(Zhang等,2017)。

Keskar等(2017)將最小值的清晰度確定為不良泛化的一個來源:特別的,他們表明,批量梯度下降發現的明確的極小值具有較高的泛化誤差。這是直觀的,因為我們通常會希望我們的函式是平滑的,明確的最小值表示相應誤差曲面具有高度不規則性。 然而,近期工作表明,清晰度可能並不是一個好的指標,因為它表明區域性最小值能夠很好地泛化(Dinh et al,2017)。 Eric Jang的quora問答也討論了這些文章。

一份ICLR 2018投稿論文通過一系列消融分析表明,一個模型在啟用空間中對單個方向的依賴(即單個單元或特徵圖的啟用)是其泛化效能的良好表現。他們證明了這種模式適用於不同資料集的模型,以及不同程度的標籤損壞。 同時他們發現dropout並沒有幫助解決這個問題,而批量規範化阻礙了單方向依賴。

雖然這些發現表明我們在深度學習優化方面仍然有許多不知道的,但重要的是要記住,收斂保證和存在於凸優化中的大量工作,在一定程度上現有的想法和見解也可以應用於非凸優化。 NIPS 2016的大規模優化教程提供了該領域更多理論工作的精彩概述。

梯度下降優化框架

批量梯度下降(Batch gradient descent)

每次使用所有訓練集樣本來更新模型引數,即:  

θ=θ−η⋅∇θJ(θ)

其中,每次使用全部訓練集樣本計算損失函式的梯度,然後使用學習速率朝著梯度相反方向去更新模型的每個引數。  

批量梯度下降每次學習都使用整個訓練集,因此其優點在於每次更新都會朝著正確的方向進行,最後能夠保證收斂於極值點(凸函式收斂於全域性極值點,非凸函式可能會收斂於區域性極值點),但是其缺點在於每次學習時間過長,並且如果訓練集很大以至於需要消耗大量的記憶體,並且批量梯度下降不能進行線上模型引數更新。

隨機梯度下降(Stochastic gradient descent)

隨機梯度下降演算法每次從訓練集中隨機選擇一個樣本來進行學習,即:   

θ=θ−η⋅∇θJ(θ;xi;yi) 

批量梯度下降演算法每次都會使用全部訓練樣本,因此計算是冗餘的,因為每次都使用完全相同的樣本集。

而隨機梯度下降演算法每次只隨機選擇一個樣本來更新模型引數,因此每次的學習是非常快速的,並且可以進行線上更新。

隨機梯度下降最大的缺點在於每次更新可能並不會按照正確的方向進行,因此可以帶來優化波動,如下圖:

0?wx_fmt=png

圖1 SGD

不過從另一個方面來看,隨機梯度下降所帶來的波動有個好處就是,對於類似盆地區域(即很多區域性極小值點)那麼這個波動的特點可能會使得優化的方向從當前的區域性極小值點跳到另一個更好的區域性極小值點,這樣便可能對於非凸函式,最終收斂於一個較好的區域性極值點,甚至全域性極值點。

由於波動,因此會使得迭代次數(學習次數)增多,即收斂速度變慢。

不過最終其會和全量梯度下降演算法一樣,具有相同的收斂性,即凸函式收斂於全域性極值點,非凸損失函式收斂於區域性極值點。

熱重啟(Warm restarts)  

熱重啟的SGD(SGD with restarts)  

SGDR(Loshchilov andHutter,2017)是近期提出的一個有效的方法,這是一種使用熱重啟替代學習速率退火的SGD方法。在每次重新啟動時,學習速率被初始化為某個值,並且將減少。重要的是,重啟是熱重啟,因為優化不是從頭開始,而是從最後一個步驟中模型收斂的引數開始。關鍵因素是用積極的餘弦退火方案使學習率下降,這會迅速降低學習率,如下所示:

0?wx_fmt=png

0?wx_fmt=png

學習速率熱重啟方案

重新啟動後的初始的高學習率用於基本上將引數從它們先前收斂的最小值彈射到不同的損失表面(loss surface)。激進的退火使模型能夠快速收斂到一個新的更好的解決方案。作者根據經驗發現,熱重啟的SGD需要的時間比學習速率退火少2〜4倍,並且能達到相當或更好的效能。  

學習率退火與熱重啟也稱為週期性學習率,最初由Smith(2017)提出。 fast.ai(最近開始教這個方法)的學生還有兩篇文章討論熱啟動和迴圈學習的速率,其地址在(https://medium.com/@bushaev/improving-the-way-we-work-with-learning-rate-5e99554f163b)和(http://teleported.in/posts/cyclic-learning-rate/)。

小批量梯度下降(Mini-batch gradient descent) 

Mini-batch梯度下降綜合了batch梯度下降與stochastic梯度下降,在每次更新速度與更新次數中間取得一個平衡,其每次更新從訓練集中隨機選擇m(其中m<n)個樣本進行學習,即:   

θ=θ−η⋅∇θJ(θ;xi:i+m;yi:i+m)

相對於隨機梯度下降,Mini-batch梯度下降降低了收斂波動性,即降低了引數更新的方差,使得更新更加穩定。

相對於批量梯度下降,其提高了每次學習的速度。並且其不用擔心記憶體瓶頸從而可以利用矩陣運算進行高效計算。

一般而言每次更新隨機選擇[50,256]個樣本進行學習,但是也要根據具體問題而選擇,實踐中可以進行多次試驗,選擇一個更新速度與更新次數都較適合的樣本數。

mini-batch梯度下降雖然可以保證收斂性。mini-batch梯度下降常用於神經網路中。

問題與挑戰

雖然梯度下降演算法效果很好,並且廣泛使用,但同時其也存在一些挑戰與問題需要解決:  

  • 選擇一個合理的學習速率很難

    如果學習速率過小,則會導致收斂速度很慢。如果學習速率過大,那麼其會阻礙收斂,即在極值點附近會振盪。  

  • 學習速率調整(又稱學習速率排程,Learning rate schedules)[11]

    試圖在每次更新過程中,改變學習速率,如退火。一般使用某種事先設定的策略或者在每次迭代中衰減一個較小的閾值。無論哪種調整方法,都需要事先進行固定設定,這邊便無法自適應每次學習的資料集特點[10]。  

  • 微調學習速率(Tuning the learning rate)

在許多情況下,除了超引數我們的模型是不需要改進和調整的。

最近的語言建模例項證明,與更復雜的模型相比,僅僅調整LSTM引數(Melis等,2017)[20] 和正則化引數(Merity等,2017)就可以產生更好的結果。  學習速率η是深度學習中一個重要的優化超引數。實際上,SGD已經被證明需要一個學習率退火方案,以收斂到一個好的最小值。人們經常認為,像Adam這樣的自適應學習速率方法對於不同的學習速率更具有魯棒性,因為他們自己更新了學習速率。但是,即使對於這些方法,好的學習速率和最佳的學習速率之間也可能有很大的差別。

Zhang等(2017)表明,具有調整學習率退火方案和動量引數的SGD不僅可以與Adam競爭,而且收斂速度更快。另一方面,雖然我們可能認為Adam學習速率的適應性可以模仿學習速率退火,但是明確使用退火方案仍然是有益的:如果我們對Adam增加SGD的學習速率退火,它在機器翻譯任務中(Denkowski和Neubig,2017)收斂速度更快。  

事實上,學習速率退火方案似乎是新的特徵工程,因為我們經常可以找到改進的學習速率退火方案,來改善了我們模型的最終收斂行為。一個有趣的例子如Vaswani等(2017)。

雖然通常看到一個模型的超引數要經過大規模的超引數優化,但有趣的是將學習速率退火方案看作是對細節同樣重視的焦點:作者在Adam中使用引數β1= 0.9,非預設β2= 0.98,ε= 10^-9,學習率η可能是最複雜的退火方案之一: 0?wx_fmt=png

其中,dmodel是模型引數的數量,且 warmup_steps=4000  史密斯等人最近的另一篇論文(2017)展示了學習率和batch大小之間有一定的聯絡,兩個超引數通常被認為是相互獨立的:他們表明,衰減學習率相當於增加batch大小,然而batch可以並行的增加。

相反,我們可以減少模型更新次數,從而通過提高學習速度和縮放batch來加快訓練速度。這對於大規模的深度學習有影響,現在可以重新調整現有的訓練方案,而不需要調整超引數。

  • 模型所有的引數每次更新都是使用相同的學習速率

    如果資料特徵是稀疏的或者每個特徵有著不同的取值統計特徵與空間,那麼便不能在每次更新中每個引數使用相同的學習速率,那些很少出現的特徵應該使用一個相對較大的學習速率。  

  • 對於非凸目標函式,容易陷入那些次優的區域性極值點中

    如在神經網路中。那麼如何避免呢。Dauphin[3]指出更嚴重的問題不是區域性極值點,而是鞍點(These saddle points are usually surrounded by a plateau of the same error, which makes it notoriously hard for SGD to escape, as the gradient is close to zero in all dimensions.)。

梯度下降優化演算法

下面將討論一些在深度學習社群中經常使用用來解決上訴問題的一些梯度優化方法,不過並不包括在高維資料中不可行的演算法,如牛頓法。  

Momentum     

如果在峽谷地區(某些方向較另一些方向上陡峭得多,常見於區域性極值點)[1],SGD會在這些地方附近振盪,從而導致收斂速度慢。這種情況下,動量(Momentum)便可以解決[2]。動量在引數更新項中加上一次更新量(即動量項),即:

νt=γνt−1+η ∇θJ(θ)  

θ=θ−νt  

其中動量項超引數γ<1一般是小於等於0.9。 

其作用如下圖所示:

0?wx_fmt=png

圖2 沒有動量

0?wx_fmt=png

圖3 加上動量

加上動量項就像從山頂滾下一個球,球往下滾的時候累積了前面的動量(動量不斷增加),因此速度變得越來越快,直到到達終點。

同理,在更新模型引數時,對於那些當前的梯度方向與上一次梯度方向相同的引數,那麼進行加強,即這些方向上更快了;對於那些當前的梯度方向與上一次梯度方向不同的引數,那麼進行削減,即這些方向上減慢了。因此可以獲得更快的收斂速度與減少振盪。

NAG[7]     

從山頂往下滾的球會盲目地選擇斜坡。更好的方式應該是在遇到傾斜向上之前應該減慢速度。     

Nesterov accelerated gradient(NAG,涅斯捷羅夫梯度加速)不僅增加了動量項,並且在計算引數的梯度時,在損失函式中減去了動量項,即計算∇θJ(θ−γνt−1),這種方式預估了下一次引數所在的位置。即:   

νt=γνt−1+η⋅∇θJ(θ−γνt−1)  

θ=θ−νt  

如下圖所示:

0?wx_fmt=png

圖4 NAG更新

詳細介紹可以參見Ilya Sutskever的PhD論文[9]。假設動量因子引數γ=0.9,首先計算當前梯度項,如上圖小藍色向量,然後加上動量項,這樣便得到了大的跳躍,如上圖大藍色的向量。這便是隻包含動量項的更新。而NAG首先來一個大的跳躍(動量項),然後加上一個小的使用了動量計算的當前梯度(上圖紅色向量)進行修正得到上圖綠色的向量。這樣可以阻止過快更新來提高響應性,如在RNNs中[8]。     

通過上面的兩種方法,可以做到每次學習過程中能夠根據損失函式的斜率做到自適應更新來加速SGD的收斂。下一步便需要對每個引數根據引數的重要性進行各自自適應更新。

Adagrad     

Adagrad[3]也是一種基於梯度的優化演算法,它能夠對每個引數自適應不同的學習速率,對稀疏特徵,得到大的學習更新,對非稀疏特徵,得到較小的學習更新,因此該優化演算法適合處理稀疏特徵資料。Dean等[4]發現Adagrad能夠很好的提高SGD的魯棒性,google便用起來訓練大規模神經網路(看片識貓:recognize cats in Youtube videos)。Pennington等[5]在GloVe中便使用Adagrad來訓練得到詞向量(Word Embeddings), 頻繁出現的單詞賦予較小的更新,不經常出現的單詞則賦予較大的更新。

在前述中,每個模型引數θi使用相同的學習速率η,而Adagrad在每一個更新步驟中對於每一個模型引數θi使用不同的學習速率ηi,設第t次更新步驟中,目標函式的引數θi梯度為gt,i,即:   

gt,i=∇θJ(θi)    

那麼SGD更新方程為:  

θt+1,i=θt,i−η⋅gt,i   

而Adagrad對每一個引數使用不同的學習速率,其更新方程為:  

0?wx_fmt=png

其中,Gt∈Rd×d是一個對角矩陣,其中第i行的對角元素eii為過去到當前第i個引數θi的梯度的平方和,epsilon是一個平滑引數,為了使得分母不為0(通常ϵ=1e−8),另外如果分母不開根號,演算法效能會很糟糕。     

進一步,將所有Gt,ii,gt,i 的元素寫成向量Gt,gt,這樣便可以使用向量點乘操作:  

0?wx_fmt=png

Adagrad主要優勢在於它能夠為每個引數自適應不同的學習速率,而一般的人工都是設定為0.01。同時其缺點在於需要計算引數梯度序列平方和,並且學習速率趨勢是不斷衰減最終達到一個非常小的值。

RMSprop

其實RMSprop是Adadelta的中間形式,也是為了降低Adagrad中學習速率衰減過快問題,即:

0?wx_fmt=png

Hinton建議γ=0.9,η=0.001。

Adam

Adaptive Moment Estimation(Adam) 也是一種不同引數自適應不同學習速率方法,與Adadelta與RMSprop區別在於,它計算曆史梯度衰減方式不同,不使用歷史平方衰減,其衰減方式類似動量,如下:   

mt=β1mt−1+(1−β1)gt 

vt=β2vt−1+(1−beta2)g2t 

mt與vt分別是梯度的帶權平均和帶權有偏方差,初始為0向量,Adam的作者發現他們傾向於0向量(接近於0向量),特別是在衰減因子(衰減率)β1,β2接近於1時。為了改進這個問題,對mt與vt進行偏差修正(bias-corrected):

0?wx_fmt=png

最終,Adam的更新方程為:

0?wx_fmt=png

論文中建議預設值:β1=0.9,β2=0.999,ϵ=10−8。論文中將Adam與其它的幾個自適應學習速率進行了比較,效果均要好。 

各優化方法比較     

下面兩幅圖視覺化形象地比較上述各優化方法,詳細參見這裡,如圖:

0?wx_fmt=gif

圖5 SGD各優化方法在損失曲面上的表現     

從上圖可以看出, Adagrad、Adadelta與RMSprop在損失曲面上能夠立即轉移到正確的移動方向上達到快速的收斂。而Momentum 與NAG會導致偏離(off-track)。同時NAG能夠在偏離之後快速修正其路線,因為其根據梯度修正來提高響應性。

0?wx_fmt=gif

圖6 SGD各優化方法在損失曲面鞍點處上的表現     

從上圖可以看出,在鞍點(saddle points)處(即某些維度上梯度為零,某些維度上梯度不為零),SGD、Momentum與NAG一直在鞍點梯度為零的方向上振盪,很難打破鞍點位置的對稱性;Adagrad、RMSprop與Adadelta能夠很快地向梯度不為零的方向上轉移。    

從上面兩幅圖可以看出,自適應學習速率方法(Adagrad、Adadelta、RMSprop與Adam)在這些場景下具有更好的收斂速度與收斂性。

如何選擇SGD優化器     

如果你的資料特徵是稀疏的,那麼你最好使用自適應學習速率SGD優化方法(Adagrad、Adadelta、RMSprop與Adam),因為你不需要在迭代過程中對學習速率進行人工調整。     

RMSprop是Adagrad的一種擴充套件,與Adadelta類似,但是改進版的Adadelta使用RMS去自動更新學習速率,並且不需要設定初始學習速率。而Adam是在RMSprop基礎上使用動量與偏差修正。RMSprop、Adadelta與Adam在類似的情形下的表現差不多。Kingma[15]指出收益於偏差修正,Adam略優於RMSprop,因為其在接近收斂時梯度變得更加稀疏。因此,Adam可能是目前最好的SGD優化方法。     

有趣的是,最近很多論文都是使用原始的SGD梯度下降演算法,並且使用簡單的學習速率退火調整(無動量項)。現有的已經表明:SGD能夠收斂於最小值點,但是相對於其他的SGD,它可能花費的時間更長,並且依賴於魯棒的初始值以及學習速率退火調整策略,並且容易陷入區域性極小值點,甚至鞍點。因此,如果你在意收斂速度或者訓練一個深度或者複雜的網路,你應該選擇一個自適應學習速率的SGD優化方法。

並行與分散式SGD     

如果你處理的資料集非常大,並且有機器叢集可以利用,那麼並行或分散式SGD是一個非常好的選擇,因為可以大大地提高速度。SGD演算法的本質決定其是序列的(step-by-step)。因此如何進行非同步處理便是一個問題。雖然序列能夠保證收斂,但是如果訓練集大,速度便是一個瓶頸。如果進行非同步更新,那麼可能會導致不收斂。下面將討論如何進行並行或分散式SGD,並行一般是指在同一機器上進行多核並行,分散式是指叢集處理。  

  • Hogwild     

Niu[23]提出了被稱為Hogwild的並行SGD方法。該方法在多個CPU時間進行並行。處理器通過共享記憶體來訪問引數,並且這些引數不進行加鎖。它為每一個cpu分配不重疊的一部分引數(分配互斥),每個cpu只更新其負責的引數。該方法只適合處理資料特徵是稀疏的。該方法幾乎可以達到一個最優的收斂速度,因為cpu之間不會進行相同資訊重寫。  

  • Downpour SGD     

Downpour SGD是Dean[4]提出的在DistBelief(Google TensorFlow的前身)使用的SGD的一個非同步變種。它在訓練子集上訓練同時多個模型副本。這些副本將各自的更新發送到引數伺服器(PS,parameter server),每個引數伺服器只更新互斥的一部分引數,副本之間不會進行通訊。因此可能會導致引數發散而不利於收斂。  

  • Delay-tolerant Algorithms for SGD     

McMahan與Streeter[12]擴充套件AdaGrad,通過開發延遲容忍演算法(delay-tolerant algorithms),該演算法不僅自適應過去梯度,並且會更新延遲。該方法已經在實踐中表明是有效的。  

  • TensorFlow     

TensorFlow[13]是Google開源的一個大規模機器學習庫,它的前身是DistBelief。它已經在大量移動裝置上或者大規模分散式叢集中使用了,已經經過了實踐檢驗。其分散式實現是基於圖計算,它將圖分割成多個子圖,每個計算實體作為圖中的一個計算節點,他們通過Rend/Receive來進行通訊。具體參見這裡。  

  • Elastic Averaging SGD     

Zhang等[14]提出Elastic Averaging SGD(EASGD),它通過一個elastic force(儲存引數的引數伺服器中心)來連線每個work來進行引數非同步更新。This allows the local variables to fluctuate further from the center variable, which in theory allows for more exploration of the parameter space. They show empirically that this increased capacity for exploration leads to improved performance by finding new local optima. 這句話不太懂,需要去看論文。

更多的SGD優化策略  

接下來介紹更多的SGD優化策略來進一步提高SGD的效能。另外還有眾多其它的優化策略,可以參見[22]。  

  • Shuffling and Curriculum Learning     

為了使得學習過程更加無偏,應該在每次迭代中隨機打亂訓練集中的樣本。     

另一方面,在很多情況下,我們是逐步解決問題的,而將訓練集按照某個有意義的順序排列會提高模型的效能和SGD的收斂性,如何將訓練集建立一個有意義的排列被稱為Curriculum Learning[16]。    

Zaremba與Sutskever[17]在使用Curriculum Learning來訓練LSTMs以解決一些簡單的問題中,表明一個相結合的策略或者混合策略比對訓練集按照按照訓練難度進行遞增排序要好。

  • Batch normalization     

為了方便訓練,我們通常會對引數按照0均值1方差進行初始化,隨著不斷訓練,引數得到不同程度的更新,這樣這些引數會失去0均值1方差的分佈屬性,這樣會降低訓練速度和放大引數變化隨著網路結構的加深。     

Batch normalization[18]在每次mini-batch反向傳播之後重新對引數進行0均值1方差標準化。這樣可以使用更大的學習速率,以及花費更少的精力在引數初始化點上。Batch normalization充當著正則化、減少甚至消除掉Dropout的必要性。  

  • Early stopping     

在驗證集上如果連續的多次迭代過程中損失函式不再顯著地降低,那麼應該提前結束訓練,詳細參見NIPS 2015 Tutorial slides,或者參見防止過擬合的一些方法。  

  • Gradient noise     

Gradient noise[21]即在每次迭代計算梯度中加上一個高斯分佈N(0,σ2t)的隨機誤差,即 :

gt,i=gt,i+N(0,σ2t)     

高斯誤差的方差需要進行退火:

0?wx_fmt=png

對梯度增加隨機誤差會增加模型的魯棒性,即使初始引數值選擇地不好,並適合對特別深層次的負責的網路進行訓練。其原因在於增加隨機噪聲會有更多的可能性跳過區域性極值點並去尋找一個更好的區域性極值點,這種可能性在深層次的網路中更常見。 

總結     

在上文中,對梯度下降演算法的三種框架進行了介紹,並且mini-batch梯度下降是使用最廣泛的。隨後,我們重點介紹了SGD的一些優化方法:Momentum、NAG、Adagrad、Adadelta、RMSprop與Adam,以及一些非同步SGD方法。

最後,介紹了一些提高SGD效能的其它優化建議,如:訓練集隨機洗牌與課程學習(shuffling and curriculum learning)、batch normalization,、early stopping與Gradient noise。     

希望這篇文章能給你提供一些關於如何使用不同的梯度優化演算法方面的指導。如果還有更多的優化建議或方法還望大家提出來?或者你使用什麼技巧和方法來更好地訓練SGD可以一起交流?Thanks。

引用

[1] Sutton, R. S. (1986). Two problems with backpropagation and other steepest-descent learning procedures for networks. Proc. 8th Annual Conf. Cognitive Science Society.

[2] Qian, N. (1999). On the momentum term in gradient descent learning algorithms. Neural Networks : The Official Journal of the International Neural Network Society, 12(1), 145–151.http://doi.org/10.1016/S0893-6080(98)00116-6.

[3] Duchi, J., Hazan, E., & Singer, Y. (2011). Adaptive Subgradient Methods for Online Learning and Stochastic Optimization. Journal of Machine Learning Research, 12, 2121–2159. Retrieved fromhttp://jmlr.org/papers/v12/duchi11a.html.

[4] Dean, J., Corrado, G. S., Monga, R., Chen, K., Devin, M., Le, Q. V, … Ng, A. Y. (2012). Large Scale Distributed Deep Networks. NIPS 2012: Neural Information Processing Systems, 1–11.http://doi.org/10.1109/ICDAR.2011.95.

[5] Pennington, J., Socher, R., & Manning, C. D. (2014). Glove: Global Vectors for Word Representation. Proceedings of the 2014 Conference on Empirical Methods in Natural Language Processing, 1532–1543. http://doi.org/10.3115/v1/D14-1162.

[6] Zeiler, M. D. (2012). ADADELTA: An Adaptive Learning Rate Method. Retrieved fromhttp://arxiv.org/abs/1212.5701.

[7] Nesterov, Y. (1983). A method for unconstrained convex minimization problem with the rate of convergence o(1/k2). Doklady ANSSSR (translated as Soviet.Math.Docl.), vol. 269, pp. 543– 547.

[8] Bengio, Y., Boulanger-Lewandowski, N., & Pascanu, R. (2012). Advances in Optimizing Recurrent Networks. Retrieved from http://arxiv.org/abs/1212.0901.

[9] Sutskever, I. (2013). Training Recurrent neural Networks. PhD Thesis.

[10] Darken, C., Chang, J., & Moody, J. (1992). Learning rate schedules for faster stochastic gradient search. Neural Networks for Signal Processing II Proceedings of the 1992 IEEE Workshop, (September), 1–11. http://doi.org/10.1109/NNSP.1992.253713.

[11] H. Robinds and S. Monro, “A stochastic approximation method,” Annals of Mathematical Statistics, vol. 22, pp. 400–407, 1951.

[12] Mcmahan, H. B., & Streeter, M. (2014). Delay-Tolerant Algorithms for Asynchronous Distributed Online Learning. Advances in Neural Information Processing Systems (Proceedings of NIPS), 1–9. Retrieved from http://papers.nips.cc/paper/5242-delay-tolerant-algorithms-for-asynchronous-distributed-online-learning.pdf.

[13] Abadi, M., Agarwal, A., Barham, P., Brevdo, E., Chen, Z., Citro, C., … Zheng, X. (2015). TensorFlow : Large-Scale Machine Learning on Heterogeneous Distributed Systems.

[14] Zhang, S., Choromanska, A., & LeCun, Y. (2015). Deep learning with Elastic Averaging SGD. Neural Information Processing Systems Conference (NIPS 2015), 1–24. Retrieved fromhttp://arxiv.org/abs/1412.6651.

[15] Kingma, D. P., & Ba, J. L. (2015). Adam: a Method for Stochastic Optimization. International Conference on Learning Representations, 1–13

[16] Bengio, Y., Louradour, J., Collobert, R., & Weston, J. (2009). Curriculum learning. Proceedings of the 26th Annual International Conference on Machine Learning, 41–48.http://doi.org/10.1145/1553374.1553380.

[17] Zaremba, W., & Sutskever, I. (2014). Learning to Execute, 1–25. Retrieved fromhttp://arxiv.org/abs/1410.4615.

[18] Ioffe, S., & Szegedy, C. (2015). Batch Normalization : Accelerating Deep Network Training by Reducing Internal Covariate Shift. arXiv Preprint arXiv:1502.03167v3.

[19] Dauphin, Y., Pascanu, R., Gulcehre, C., Cho, K., Ganguli, S., & Bengio, Y. (2014). Identifying and attacking the saddle point problem in high-dimensional non-convex optimization. arXiv, 1–14. Retrieved from http://arxiv.org/abs/1406.2572.

[20] Sutskever, I., & Martens, J. (2013). On the importance of initialization and momentum in deep learning. http://doi.org/10.1109/ICASSP.2013.6639346.

[21] Neelakantan, A., Vilnis, L., Le, Q. V., Sutskever, I., Kaiser, L., Kurach, K., & Martens, J. (2015). Adding Gradient Noise Improves Learning for Very Deep Networks, 1–11. Retrieved fromhttp://arxiv.org/abs/1511.06807.

[22] LeCun, Y., Bottou, L., Orr, G. B., & Müller, K. R. (1998). Efficient BackProp. Neural Networks: Tricks of the Trade, 1524, 9–50. http://doi.org/10.1007/3-540-49430-8_2.

[23] Niu, F., Recht, B., Christopher, R., & Wright, S. J. (2011). Hogwild ! : A Lock-Free Approach to Parallelizing Stochastic Gradient Descent, 1–22.

[24] Duchi et al. [3] give this matrix as an alternative to the full matrix containing the outer products of all previous gradients, as the computation of the matrix square root is infeasible even for a moderate number of parameters dd.