轉(zhuǎn)自https://blog.csdn.net/heyongluoyao8/article/details/52478715缸匪。
該文翻譯自An overview of gradient descent optimization algorithms。
眾所周知准夷,梯度下降算法是機(jī)器學(xué)習(xí)中使用非常廣泛的優(yōu)化算法钥飞,也是眾多機(jī)器學(xué)習(xí)算法中最常用的優(yōu)化方法。幾乎當(dāng)前每一個(gè)先進(jìn)的(state-of-the-art)機(jī)器學(xué)習(xí)庫或者深度學(xué)習(xí)庫都會包括梯度下降算法的不同變種實(shí)現(xiàn)冕象。但是代承,它們就像一個(gè)黑盒優(yōu)化器汁蝶,很難得到它們優(yōu)缺點(diǎn)的實(shí)際解釋渐扮。
這篇文章旨在提供梯度下降算法中的不同變種的介紹,幫助使用者根據(jù)具體需要進(jìn)行使用掖棉。
這篇文章首先介紹梯度下降算法的三種框架墓律,然后介紹它們所存在的問題與挑戰(zhàn),接著介紹一些如何進(jìn)行改進(jìn)來解決這些問題幔亥,隨后耻讽,介紹如何在并行環(huán)境中或者分布式環(huán)境中使用梯度下降算法。最后帕棉,指出一些有利于梯度下降的策略针肥。
梯度下降算法是通過沿著目標(biāo)函數(shù)J(θ)和參數(shù)θ的梯度(一階導(dǎo)數(shù))相反方向??θJ(θ)來不斷更新模型參數(shù)來到達(dá)目標(biāo)函數(shù)的極小值點(diǎn)(收斂),更新步長為η香伴。詳細(xì)的介紹參見:梯度下降慰枕。
三種梯度下降優(yōu)化框架
有三種梯度下降算法框架,它們不同之處在于每次學(xué)習(xí)(更新模型參數(shù))使用的樣本個(gè)數(shù)即纲,每次更新使用不同的樣本會導(dǎo)致每次學(xué)習(xí)的準(zhǔn)確性和學(xué)習(xí)時(shí)間不同具帮。
全量梯度下降(Batch gradient descent)
每次使用全量的訓(xùn)練集樣本來更新模型參數(shù),即:代碼如下:
for i in range(epochs):
params_grad = evaluate_gradient(loss_function,data,params)
params = params - learning_rate * params_grad
epochs 是用戶輸入的最大迭代次數(shù)低斋。通過上訴代碼可以看出蜂厅,每次使用全部訓(xùn)練集樣本計(jì)算損失函數(shù)loss_function的梯度params_grad,然后使用學(xué)習(xí)速率learning_rate朝著梯度相反方向去更新模型的每個(gè)參數(shù)params膊畴。一般各現(xiàn)有的一些機(jī)器學(xué)習(xí)庫都提供了梯度計(jì)算api掘猿。如果想自己親手寫代碼計(jì)算,那么需要在程序調(diào)試過程中驗(yàn)證梯度計(jì)算是否正確唇跨,具體驗(yàn)證方法可以參見:這里术奖。
全量梯度下降每次學(xué)習(xí)都使用整個(gè)訓(xùn)練集,因此其優(yōu)點(diǎn)在于每次更新都會朝著正確的方向進(jìn)行轻绞,最后能夠保證收斂于極值點(diǎn)(凸函數(shù)收斂于全局極值點(diǎn)采记,非凸函數(shù)可能會收斂于局部極值點(diǎn)),但是其缺點(diǎn)在于每次學(xué)習(xí)時(shí)間過長政勃,并且如果訓(xùn)練集很大以至于需要消耗大量的內(nèi)存唧龄,并且全量梯度下降不能進(jìn)行在線模型參數(shù)更新。
隨機(jī)梯度下降(Stochastic gradient descent)
隨機(jī)梯度下降算法每次從訓(xùn)練集中隨機(jī)選擇一個(gè)樣本來進(jìn)行學(xué)習(xí)奸远,即:批量梯度下降算法每次都會使用全部訓(xùn)練樣本既棺,因此這些計(jì)算是冗余的讽挟,因?yàn)槊看味际褂猛耆嗤臉颖炯6S機(jī)梯度下降算法每次只隨機(jī)選擇一個(gè)樣本來更新模型參數(shù)丸冕,因此每次的學(xué)習(xí)是非车⒚罚快速的,并且可以進(jìn)行在線更新胖烛。
其代碼如下:
for i in range(epochs):
np.random.shuffle(data)
for example in data:
params_grad = evaluate_gradient(loss_function,example,params)
params = params - learning_rate * params_grad
隨機(jī)梯度下降最大的缺點(diǎn)在于每次更新可能并不會按照正確的方向進(jìn)行眼姐,因此可以帶來優(yōu)化波動(擾動),如下圖:不過從另一個(gè)方面來看佩番,隨機(jī)梯度下降所帶來的波動有個(gè)好處就是众旗,對于類似盆地區(qū)域(即很多局部極小值點(diǎn))那么這個(gè)波動的特點(diǎn)可能會使得優(yōu)化的方向從當(dāng)前的局部極小值點(diǎn)跳到另一個(gè)更好的局部極小值點(diǎn),這樣便可能對于非凸函數(shù)趟畏,最終收斂于一個(gè)較好的局部極值點(diǎn)贡歧,甚至全局極值點(diǎn)。
由于波動赋秀,因此會使得迭代次數(shù)(學(xué)習(xí)次數(shù))增多利朵,即收斂速度變慢。不過最終其會和全量梯度下降算法一樣猎莲,具有相同的收斂性绍弟,即凸函數(shù)收斂于全局極值點(diǎn),非凸損失函數(shù)收斂于局部極值點(diǎn)益眉。
小批量梯度下降(Mini-batch gradient descent)
Mini-batch梯度下降綜合了batch梯度下降與stochastic梯度下降晌柬,在每次更新速度與更新次數(shù)中間取得一個(gè)平衡,其每次更新從訓(xùn)練集中隨機(jī)選擇m,m<n個(gè)樣本進(jìn)行學(xué)習(xí)郭脂,即:其代碼如下:
for i in range(epochs):
np.random.shuffle(data)
for batch in get_batches(data, batch_size=50):
params_grad = evaluate_gradient(loss_function,batch,params)
params = params - learning_rate * params_grad
相對于隨機(jī)梯度下降年碘,Mini-batch梯度下降降低了收斂波動性,即降低了參數(shù)更新的方差展鸡,使得更新更加穩(wěn)定屿衅。相對于全量梯度下降,其提高了每次學(xué)習(xí)的速度莹弊。并且其不用擔(dān)心內(nèi)存瓶頸從而可以利用矩陣運(yùn)算進(jìn)行高效計(jì)算涤久。一般而言每次更新隨機(jī)選擇[50,256]個(gè)樣本進(jìn)行學(xué)習(xí),但是也要根據(jù)具體問題而選擇忍弛,實(shí)踐中可以進(jìn)行多次試驗(yàn)响迂,選擇一個(gè)更新速度與更次次數(shù)都較適合的樣本數(shù)。
mini-batch梯度下降雖然可以保證收斂性细疚。mini-batch梯度下降常用于神經(jīng)網(wǎng)絡(luò)中蔗彤。
問題與挑戰(zhàn)
雖然梯度下降算法效果很好,并且廣泛使用,但同時(shí)其也存在一些挑戰(zhàn)與問題需要解決:
- 選擇一個(gè)合理的學(xué)習(xí)速率很難然遏。如果學(xué)習(xí)速率過小贫途,則會導(dǎo)致收斂速度很慢。如果學(xué)習(xí)速率過大待侵,那么其會阻礙收斂丢早,即在極值點(diǎn)附近會振蕩;
- 學(xué)習(xí)速率調(diào)整(又稱學(xué)習(xí)速率調(diào)度秧倾,Learning rate schedules)[11]試圖在每次更新過程中怨酝,改變學(xué)習(xí)速率,如退火中狂。一般使用某種事先設(shè)定的策略或者在每次迭代中衰減一個(gè)較小的閾值凫碌。無論哪種調(diào)整方法扑毡,都需要事先進(jìn)行固定設(shè)置胃榕,這邊便無法自適應(yīng)每次學(xué)習(xí)的數(shù)據(jù)集特點(diǎn)[10];
- 模型所有的參數(shù)每次更新都是使用相同的學(xué)習(xí)速率瞄摊。如果數(shù)據(jù)特征是稀疏的或者每個(gè)特征有著不同的取值統(tǒng)計(jì)特征與空間勋又,那么便不能在每次更新中每個(gè)參數(shù)使用相同的學(xué)習(xí)速率,那些很少出現(xiàn)的特征應(yīng)該使用一個(gè)相對較大的學(xué)習(xí)速率换帜;
- 對于非凸目標(biāo)函數(shù)楔壤,容易陷入那些次優(yōu)的局部極值點(diǎn)中,如在神經(jīng)網(wǎng)路中惯驼。那么如何避免呢蹲嚣。Dauphin[19]指出更嚴(yán)重的問題不是局部極值點(diǎn),而是鞍點(diǎn)(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.)祟牲。
梯度下降優(yōu)化算法
下面將討論一些在深度學(xué)習(xí)社區(qū)中經(jīng)常使用用來解決上訴問題的一些梯度優(yōu)化方法隙畜,不過并不包括在高維數(shù)據(jù)中不可行的算法,如牛頓法说贝。
Momentum
如果在峽谷地區(qū)(某些方向較另一些方向上陡峭得多议惰,常見于局部極值點(diǎn))[1],SGD會在這些地方附近振蕩乡恕,從而導(dǎo)致收斂速度慢言询。這種情況下,動量(Momentum)便可以解決[2]傲宜。動量在參數(shù)更新項(xiàng)中加上一次更新量(即動量項(xiàng)),即:
其中動量項(xiàng)超參數(shù)γ<1一般是小于等于0.9运杭。
NAG[7]
從山頂往下滾的球會盲目地選擇斜坡。更好的方式應(yīng)該是在遇到傾斜向上之前應(yīng)該減慢速度梆砸。
Nesterov accelerated gradient(NAG,涅斯捷羅夫梯度加速)不僅增加了動量項(xiàng)转质,并且在計(jì)算參數(shù)的梯度時(shí),在損失函數(shù)中減去了動量項(xiàng)帖世,即計(jì)算?θJ(θ?γνt?1)休蟹,這種方式預(yù)估了下一次參數(shù)所在的位置。即:
詳細(xì)介紹可以參見Ilya Sutskever的PhD論文[9]日矫。假設(shè)動量因子參數(shù)γ=0.9赂弓,首先計(jì)算當(dāng)前梯度項(xiàng),如上圖小藍(lán)色向量哪轿,然后加上動量項(xiàng)盈魁,這樣便得到了大的跳躍,如上圖大藍(lán)色的向量窃诉。這便是只包含動量項(xiàng)的更新杨耙。而NAG首先來一個(gè)大的跳躍(動量項(xiàng)),然后加上一個(gè)小的使用了動量計(jì)算的當(dāng)前梯度(上圖紅色向量)進(jìn)行修正得到上圖綠色的向量飘痛。這樣可以阻止過快更新來提高響應(yīng)性珊膜,如在RNNs中[8]。
通過上面的兩種方法敦冬,可以做到每次學(xué)習(xí)過程中能夠根據(jù)損失函數(shù)的斜率做到自適應(yīng)更新來加速SGD的收斂辅搬。下一步便需要對每個(gè)參數(shù)根據(jù)參數(shù)的重要性進(jìn)行各自自適應(yīng)更新。
Adagrad
Adagrad[3]也是一種基于梯度的優(yōu)化算法脖旱,它能夠?qū)γ總€(gè)參數(shù)自適應(yīng)不同的學(xué)習(xí)速率堪遂,對稀疏特征,得到大的學(xué)習(xí)更新萌庆,對非稀疏特征溶褪,得到較小的學(xué)習(xí)更新,因此該優(yōu)化算法適合處理稀疏特征數(shù)據(jù)践险。Dean等[4]發(fā)現(xiàn)Adagrad能夠很好的提高SGD的魯棒性猿妈,google便用起來訓(xùn)練大規(guī)模神經(jīng)網(wǎng)絡(luò)(看片識貓:recognize cats in Youtube videos)吹菱。Pennington等[5]在GloVe中便使用Adagrad來訓(xùn)練得到詞向量(Word Embeddings), 頻繁出現(xiàn)的單詞賦予較小的更新,不經(jīng)常出現(xiàn)的單詞則賦予較大的更新彭则。
在前述中鳍刷,每個(gè)模型參數(shù)θi使用相同的學(xué)習(xí)速率η,而Adagrad在每一個(gè)更新步驟中對于每一個(gè)模型參數(shù)θi使用不同的學(xué)習(xí)速率ηi俯抖,設(shè)第t次更新步驟中输瓜,目標(biāo)函數(shù)的參數(shù)θi梯度為gt,i,即:
其中尤揣,Gt∈Rd×d是一個(gè)對角矩陣,其中第i行的對角元素eii為過去到當(dāng)前第i個(gè)參數(shù)θi的梯度的平方和柬祠,epsilon是一個(gè)平滑參數(shù)北戏,為了使得分母不為0(通常?=1e?8),另外如果分母不開根號漫蛔,算法性能會很糟糕嗜愈。
進(jìn)一步,將所有Gt,ii,gt,i 的元素寫成向量Gt,gt惩猫,這樣便可以使用向量點(diǎn)乘操作:
Adadelta
Adadelta是Adagrad的一種擴(kuò)展奶镶,為了降低Adagrad中學(xué)習(xí)速率衰減過快問題,其改進(jìn)了三處陪拘,一是使用了窗口w厂镇;二是對于參數(shù)梯度歷史窗口序列(不包括當(dāng)前)不再使用平方和,而是使用均值代替左刽;三是最終的均值是歷史窗口序列均值與當(dāng)前梯度的時(shí)間衰減加權(quán)平均捺信。即:其中γ與動量項(xiàng)中的一樣,都是小于1的超參數(shù)欠痴。
RMSprop
其實(shí)RMSprop是Adadelta的中間形式迄靠,也是為了降低Adagrad中學(xué)習(xí)速率衰減過快問題,即:
Adam
Adaptive Moment Estimation(Adam) 也是一種不同參數(shù)自適應(yīng)不同學(xué)習(xí)速率方法掌挚,與Adadelta與RMSprop區(qū)別在于,它計(jì)算歷史梯度衰減方式不同菩咨,不使用歷史平方衰減吠式,其衰減方式類似動量陡厘,如下:各優(yōu)化方法比較
下面兩幅圖可視化形象地比較上述各優(yōu)化方法功舀,詳細(xì)參見這里,如圖:
從上面兩幅圖可以看出,自適應(yīng)學(xué)習(xí)速率方法(Adagrad备籽、Adadelta舶治、RMSprop與Adam)在這些場景下具有更好的收斂速度與收斂性。
如何選擇SGD優(yōu)化器
如果你的數(shù)據(jù)特征是稀疏的车猬,那么你最好使用自適應(yīng)學(xué)習(xí)速率SGD優(yōu)化方法(Adagrad霉猛、Adadelta、RMSprop與Adam)诈唬,因?yàn)槟悴恍枰诘^程中對學(xué)習(xí)速率進(jìn)行人工調(diào)整韩脏。
RMSprop是Adagrad的一種擴(kuò)展,與Adadelta類似铸磅,但是改進(jìn)版的Adadelta使用RMS去自動更新學(xué)習(xí)速率赡矢,并且不需要設(shè)置初始學(xué)習(xí)速率杭朱。而Adam是在RMSprop基礎(chǔ)上使用動量與偏差修正。RMSprop吹散、Adadelta與Adam在類似的情形下的表現(xiàn)差不多弧械。Kingma[15]指出收益于偏差修正,Adam略優(yōu)于RMSprop空民,因?yàn)槠湓诮咏諗繒r(shí)梯度變得更加稀疏刃唐。因此,Adam可能是目前最好的SGD優(yōu)化方法界轩。
有趣的是画饥,最近很多論文都是使用原始的SGD梯度下降算法,并且使用簡單的學(xué)習(xí)速率退火調(diào)整(無動量項(xiàng))∽腔現(xiàn)有的已經(jīng)表明:SGD能夠收斂于最小值點(diǎn)抖甘,但是相對于其他的SGD,它可能花費(fèi)的時(shí)間更長葫慎,并且依賴于魯棒的初始值以及學(xué)習(xí)速率退火調(diào)整策略衔彻,并且容易陷入局部極小值點(diǎn),甚至鞍點(diǎn)偷办。因此艰额,如果你在意收斂速度或者訓(xùn)練一個(gè)深度或者復(fù)雜的網(wǎng)絡(luò),你應(yīng)該選擇一個(gè)自適應(yīng)學(xué)習(xí)速率的SGD優(yōu)化方法椒涯。
并行與分布式SGD
如果你處理的數(shù)據(jù)集非常大柄沮,并且有機(jī)器集群可以利用,那么并行或分布式SGD是一個(gè)非常好的選擇逐工,因?yàn)榭梢源蟠蟮靥岣咚俣日∠GD算法的本質(zhì)決定其是串行的(step-by-step)。因此如何進(jìn)行異步處理便是一個(gè)問題泪喊。雖然串行能夠保證收斂,但是如果訓(xùn)練集大髓涯,速度便是一個(gè)瓶頸袒啼。如果進(jìn)行異步更新,那么可能會導(dǎo)致不收斂纬纪。下面將討論如何進(jìn)行并行或分布式SGD蚓再,并行一般是指在同一機(jī)器上進(jìn)行多核并行,分布式是指集群處理包各。
- Hogwild
Niu[23]提出了被稱為Hogwild的并行SGD方法摘仅。該方法在多個(gè)CPU時(shí)間進(jìn)行并行。處理器通過共享內(nèi)存來訪問參數(shù)问畅,并且這些參數(shù)不進(jìn)行加鎖娃属。它為每一個(gè)cpu分配不重疊的一部分參數(shù)(分配互斥)六荒,每個(gè)cpu只更新其負(fù)責(zé)的參數(shù)。該方法只適合處理數(shù)據(jù)特征是稀疏的矾端。該方法幾乎可以達(dá)到一個(gè)最優(yōu)的收斂速度掏击,因?yàn)閏pu之間不會進(jìn)行相同信息重寫。 - Downpour SGD
Downpour SGD是Dean[4]提出的在DistBelief(Google TensorFlow的前身)使用的SGD的一個(gè)異步變種秩铆。它在訓(xùn)練子集上訓(xùn)練同時(shí)多個(gè)模型副本砚亭。這些副本將各自的更新發(fā)送到參數(shù)服務(wù)器(PS,parameter server),每個(gè)參數(shù)服務(wù)器只更新互斥的一部分參數(shù)殴玛,副本之間不會進(jìn)行通信捅膘。因此可能會導(dǎo)致參數(shù)發(fā)散而不利于收斂。 - Delay-tolerant Algorithms for SGD
McMahan與Streeter[12]擴(kuò)展AdaGrad滚粟,通過開發(fā)延遲容忍算法(delay-tolerant algorithms)篓跛,該算法不僅自適應(yīng)過去梯度,并且會更新延遲坦刀。該方法已經(jīng)在實(shí)踐中表明是有效的愧沟。 - TensorFlow
TensorFlow[13]是Google開源的一個(gè)大規(guī)模機(jī)器學(xué)習(xí)庫,它的前身是DistBelief鲤遥。它已經(jīng)在大量移動設(shè)備上或者大規(guī)模分布式集群中使用了蹬竖,已經(jīng)經(jīng)過了實(shí)踐檢驗(yàn)。其分布式實(shí)現(xiàn)是基于圖計(jì)算井仰,它將圖分割成多個(gè)子圖磁奖,每個(gè)計(jì)算實(shí)體作為圖中的一個(gè)計(jì)算節(jié)點(diǎn),他們通過Rend/Receive來進(jìn)行通信钢坦。具體參見這里究孕。 - Elastic Averaging SGD
Zhang等[14]提出Elastic Averaging SGD(EASGD),它通過一個(gè)elastic force(存儲參數(shù)的參數(shù)服務(wù)器中心)來連接每個(gè)work來進(jìn)行參數(shù)異步更新爹凹。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優(yōu)化策略
接下來介紹更多的SGD優(yōu)化策略來進(jìn)一步提高SGD的性能禾酱。另外還有眾多其它的優(yōu)化策略微酬,可以參見[22]。
- Shuffling and Curriculum Learning
為了使得學(xué)習(xí)過程更加無偏颤陶,應(yīng)該在每次迭代中隨機(jī)打亂訓(xùn)練集中的樣本颗管。
另一方面,在很多情況下滓走,我們是逐步解決問題的垦江,而將訓(xùn)練集按照某個(gè)有意義的順序排列會提高模型的性能和SGD的收斂性,如何將訓(xùn)練集建立一個(gè)有意義的排列被稱為Curriculum Learning[16]搅方。
Zaremba與Sutskever[17]在使用Curriculum Learning來訓(xùn)練LSTMs以解決一些簡單的問題中比吭,表明一個(gè)相結(jié)合的策略或者混合策略比對訓(xùn)練集按照按照訓(xùn)練難度進(jìn)行遞增排序要好绽族。 - Batch normalization
為了方便訓(xùn)練,我們通常會對參數(shù)按照0均值1方差進(jìn)行初始化梗逮,隨著不斷訓(xùn)練项秉,參數(shù)得到不同程度的更新,這樣這些參數(shù)會失去0均值1方差的分布屬性慷彤,這樣會降低訓(xùn)練速度和放大參數(shù)變化隨著網(wǎng)絡(luò)結(jié)構(gòu)的加深娄蔼。
Batch normalization[18]在每次mini-batch反向傳播之后重新對參數(shù)進(jìn)行0均值1方差標(biāo)準(zhǔn)化。這樣可以使用更大的學(xué)習(xí)速率底哗,以及花費(fèi)更少的精力在參數(shù)初始化點(diǎn)上岁诉。Batch normalization充當(dāng)著正則化、減少甚至消除掉Dropout的必要性跋选。 - Early stopping
在驗(yàn)證集上如果連續(xù)的多次迭代過程中損失函數(shù)不再顯著地降低涕癣,那么應(yīng)該提前結(jié)束訓(xùn)練,詳細(xì)參見NIPS 2015 Tutorial slides前标,或者參見防止過擬合的一些方法坠韩。 - Gradient noise
Gradient noise[21]即在每次迭代計(jì)算梯度中加上一個(gè)高斯分布N(0,σ2t)的隨機(jī)誤差,即
對梯度增加隨機(jī)誤差會增加模型的魯棒性炼列,即使初始參數(shù)值選擇地不好只搁,并適合對特別深層次的負(fù)責(zé)的網(wǎng)絡(luò)進(jìn)行訓(xùn)練。其原因在于增加隨機(jī)噪聲會有更多的可能性跳過局部極值點(diǎn)并去尋找一個(gè)更好的局部極值點(diǎn)俭尖,這種可能性在深層次的網(wǎng)絡(luò)中更常見氢惋。
總結(jié)
在上文中,對梯度下降算法的三種框架進(jìn)行了介紹稽犁,并且mini-batch梯度下降是使用最廣泛的焰望。隨后,我們重點(diǎn)介紹了SGD的一些優(yōu)化方法:Momentum已亥、NAG熊赖、Adagrad、Adadelta陷猫、RMSprop與Adam秫舌,以及一些異步SGD方法。最后绣檬,介紹了一些提高SGD性能的其它優(yōu)化建議,如:訓(xùn)練集隨機(jī)洗牌與課程學(xué)習(xí)(shuffling and curriculum learning)嫂粟、batch normalization,娇未、early stopping與Gradient noise。
其他一些類似的梯度下降優(yōu)化的較好的博客:
https://blog.csdn.net/qq_28031525/article/details/79535942
https://zhuanlan.zhihu.com/p/32626442
引用
[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 from http://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 from http://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 from http://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 from http://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 from http://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.