大規(guī)模分布式深度網(wǎng)絡(luò)
(Large Scale Distributed Deep Networks)
Jeffrey Dean, Greg S. Corrado, Rajat Monga, Kai Chen, Matthieu Devin, Quoc V. Le,
Mark Z. Mao, Marc’Aurelio Ranzato, Andrew Senior, Paul Tucker, Ke Yang, Andrew Y. Ng
Google Inc., Mountain View, CA
摘要
最近關(guān)于無監(jiān)督特征學(xué)習(xí)(unsupervised feature learning)和深度學(xué)習(xí)(deep learning)的工作表明,,具有訓(xùn)練大型模型能力的系統(tǒng)能夠顯著地提升深度神經(jīng)網(wǎng)絡(luò)的訓(xùn)練效果。在這篇文章中,,我們針對的問題是利用多達(dá)10^4數(shù)量的CPU來訓(xùn)練一個具有10^9數(shù)量的參數(shù)(parameter)的深度網(wǎng)絡(luò),。為了達(dá)到訓(xùn)練的目的,我們開發(fā)了稱為DistBelief的軟件框架,,其利用具有上千節(jié)點(譯者注:為了一致性,,譯文中的節(jié)點均指機器,即計算節(jié)點,;而神經(jīng)網(wǎng)絡(luò)中的節(jié)點,,均稱為單元)的計算集群來訓(xùn)練大型模型。在該框架中,,實現(xiàn)了兩個算法用于大規(guī)模分布訓(xùn)練:(i)Downpour(譯者注:猜測這里的Downpour主要是指并行地參數(shù)更新,,就像傾盆大雨中,,雨點從多處同時落下一樣)SGD(stochastic gradient descent),一個支持大量模型副本的異步隨機梯度下降過程,。(ii) Sandblaster(譯者注:形容來自coordinator的命令像砂粒一樣噴向集群其他節(jié)點),,一個支持多種批量(batch)計算的分布優(yōu)化方法,包含了L-BFGS的分布式實現(xiàn),,Downpour SGD和Sandblaster L-BFGS 都具有提升系統(tǒng)擴展能力和加速深度網(wǎng)絡(luò)訓(xùn)練的能力,。我們已經(jīng)成功地利用DistBelief訓(xùn)練出一個比先前研究中提到的大30余倍的深度網(wǎng)絡(luò)模型,并且獲得了針對ImageNet(一個具有21K個分類和10M圖像視覺識別任務(wù))的最先進的訓(xùn)練效果,。同時,,我們還證明了,以上提及的技術(shù)能夠顯著地提升一個中等大小的,,用作商用語音識別服務(wù)的深度網(wǎng)絡(luò)的訓(xùn)練效果,。盡管我們的這些技術(shù)主要用在大型神經(jīng)網(wǎng)絡(luò)的訓(xùn)練上,但是相關(guān)的算法同樣適用于任何基于梯度的機器學(xué)習(xí)算法,。
1.介紹
深度學(xué)習(xí)和無監(jiān)督特征學(xué)習(xí)給許多實際應(yīng)用帶了新的巨大希望,。它在包括語音識別[1, 2]、視覺物體識別[3, 4]和文本處理[5, 6]等不同領(lǐng)域上體現(xiàn)了最領(lǐng)先的性能優(yōu)勢和效果,。
先前研究已經(jīng)證明,,通過增加樣本數(shù)量和模型參數(shù)數(shù)量等不同手段,可以顯著地提升分類算法的最終精確度[3, 4, 7],。該結(jié)論掀起了研究可擴展的深度學(xué)習(xí)訓(xùn)練和推斷算法和提高其適用性等優(yōu)化方法的熱潮[7, 9],。近年來,在中等大小深度網(wǎng)絡(luò)的訓(xùn)練上,,一個重要的進步是因GPU的使用,,使其變得更加的實用[1, 2, 3, 8]。但GPU眾所周知的缺陷是,,當(dāng)其內(nèi)存(通常小于6G)無法存放下模型時,,訓(xùn)練的提升效果變得不再明顯。這時,,為了有效地使用GPU,,研究者往往通過減少樣本或變量規(guī)模的途徑使得CPU和GPU之間的數(shù)據(jù)交換不在成為瓶頸。雖然數(shù)據(jù)或變量的減少對小規(guī)模問題(如針對于聲學(xué)模型的語音識別)有效,,但對具有大量樣本和高維度變量的問題(如高分辨率圖像)將失去效果,。
在本文中,我們提出了一個替代的方法,,使用大規(guī)模的計算集群來分布地對深度網(wǎng)絡(luò)進行訓(xùn)練和推斷,。我們開發(fā)了一個既能提升節(jié)點內(nèi)(通過多線程方式)又可提升節(jié)點間(通過消息傳遞)并行訓(xùn)練能力的軟件框架,稱為DistBelief,。它管理了如并行計算,、同步化和通信等底層的細(xì)節(jié),。除了支持模型并行,DistBelief同時還支持?jǐn)?shù)據(jù)并行,,通過單一模型的多個分布副本的方式來優(yōu)化同一目標(biāo),。在該框架中,我們設(shè)計并實現(xiàn)了兩個用于大規(guī)模分布式訓(xùn)練的新方法:i)Downpuur SGD,,一個利用自適應(yīng)學(xué)習(xí)速率和支持大量模型副本的異步隨機梯度下降過程,;(ii)Sandblaster L-BFGS,L-BFGS過程的一個分布式實現(xiàn),,其利用了數(shù)據(jù)和模型的并行(原作者注:我們利用Sandblaster方法實現(xiàn)了L-BFGS,,但是Sandblaster同樣廣泛適用于其他批量方法的優(yōu)化)。兩個方法相比較于常規(guī)的SGD或L-BFGS方法都獲得了顯著的速度提升,。
關(guān)于大規(guī)模非凸方法優(yōu)化,,我們的實驗呈現(xiàn)了一些出人意料的結(jié)果。首先,,異步梯度下降,,一個很少被用到非凸問題的方法,尤其是與Adagrad[10]自適應(yīng)學(xué)習(xí)速率結(jié)合時,,用以訓(xùn)練深度網(wǎng)絡(luò)的效果很好,。其次,當(dāng)計算資源充足時,,L-BFGS方法能夠和許多SGD的變種方法相匹敵,,甚至優(yōu)于后者。
對于深度學(xué)習(xí)的特定應(yīng)用,,我們提出了兩項發(fā)現(xiàn):前面提及的分布式優(yōu)化方法,,不僅可以加速中等規(guī)模模型的訓(xùn)練,同時它也可以訓(xùn)練規(guī)模大于想象的模型,。為了證明第一點,,我們利用分布式集群來訓(xùn)練中等大小語音識別模型,獲得了與GPU相同的分類精度,,而耗時僅是后者的1/10,。為了證明第二點,我們訓(xùn)練了一個具有1G數(shù)量參數(shù)的大型神經(jīng)網(wǎng)絡(luò),,并用訓(xùn)練結(jié)果把ImageNet(計算機視覺領(lǐng)域最大的數(shù)據(jù)庫之一)判別分類結(jié)果提升到了最先進的水平。
2.前期工作
近年來,,用于商業(yè)和學(xué)術(shù)的機器學(xué)習(xí)數(shù)據(jù)集呈空前增長的趨勢,。因此,一些研究者開始探索可擴展的機器學(xué)習(xí)算法來處理這些泛洪數(shù)據(jù)[11, 12, 13, 14, 15, 16, 17],。但大量的研究仍著眼于線性凸模型[11, 12, 17],。在凸模型中,,分布式梯度計算自然是第一步,但是有時因為同步的問題會遭遇訓(xùn)練速度減慢,。針對該問題,,已經(jīng)有一些有效果的工作,如異步隨機梯度下降算法中的無鎖參數(shù)更新(如Hogwild![19]),。不幸的是,,將這些方法擴展到的非凸情況的研究,如處理訓(xùn)練深度網(wǎng)絡(luò)中遇到的問題,,還是一片未知的領(lǐng)域,。特別地,在存在多個局部最小解的情況下,,是否能夠使用參數(shù)平均或者執(zhí)行密集的異步參數(shù)更新方法,,還是未知的問題。
在深度學(xué)習(xí)范疇中,,大多數(shù)工作仍然集中在利用單節(jié)點訓(xùn)練較小規(guī)模模型(如Theano[20])上,。關(guān)于向上擴展深度學(xué)習(xí)的一些有意思的建議是,利用GPU來訓(xùn)練多個小型模型,,然后將分別的預(yù)測結(jié)果取平均[21],,或者修改標(biāo)準(zhǔn)的深度網(wǎng)絡(luò)使其能夠從本質(zhì)上并行化。而與這些前期工作不同,,我們關(guān)注于擴展深度網(wǎng)絡(luò)用于訓(xùn)練具有10^9參數(shù)數(shù)量的超大模型,,同時避免給模型形式引入限制。在分布式擴展方面,,模型的并行,,其思想和[23]類似,是一個主要的組成部分,,同時其也必須和巧妙的分布優(yōu)化方法相結(jié)合以利用數(shù)據(jù)的并行性,。
我們也考慮了用一些現(xiàn)有的大規(guī)模計算工具,如Mapreduce和GraphLab等來處理大規(guī)模深度學(xué)習(xí),。我們發(fā)現(xiàn)為數(shù)據(jù)并行處理而設(shè)計的Mapreduce,,極其不適合深度網(wǎng)絡(luò)訓(xùn)練中固有的迭代計算;而用于通用(通常是無結(jié)構(gòu)的)圖計算的GraphLab,,同樣沒有利用深度網(wǎng)絡(luò)中典型的分層圖結(jié)構(gòu)來提升計算效率,。
圖1:DistBelief中模型并行的一個例子,描述了一個局部連通的五層深度神經(jīng)網(wǎng)絡(luò),,被劃分到四個節(jié)點上(藍(lán)色矩形),。只有和跨越劃分邊界的連接邊(粗線)相連的單元(Unit)需要在機器間傳輸其狀態(tài),即使單元和多條跨越邊界的邊相連,,也只需傳輸一次其狀態(tài)到其他機器,。對于每個劃分區(qū)(節(jié)點)而言,,其內(nèi)部單元的計算被并行指派到所有CPU上。
3.模型并行
為了使超大規(guī)模深度網(wǎng)絡(luò)的訓(xùn)練變得容易,,我們開發(fā)了軟件框架——DistBelief,,用以支持神經(jīng)網(wǎng)絡(luò)的并行計算和分層圖形模型。用戶只需定義發(fā)生在每個單元上的計算過程以單元在向上傳遞和向下傳遞(原作者注:對于神經(jīng)網(wǎng)絡(luò)而言,,“向上”和“向下”指的是“前饋”和“反向傳播”,,而對于隱式Markov模型,它們與“前向”和“后向”意思更相近)時需發(fā)送的消息,。對于大型模型,,用戶可能會將模型加以劃分(如圖1所示),使得不同節(jié)點的計算任務(wù)被分配到了不同機器上,。DistBelief自動地利用CPU資源將節(jié)點內(nèi)計算并行化,,同時它還管理了底層通信、同步化和在訓(xùn)練和推斷時的機器間數(shù)據(jù)傳輸,。
將深度網(wǎng)絡(luò)分布到多個機器上所帶來的性能提升主要取決于模型的連通結(jié)構(gòu)和計算需求,。具有大量參數(shù)或高計算需求的模型通過增加CPU和內(nèi)存數(shù)量通常可以提升訓(xùn)練速度,,直到增加到通信開銷成為系統(tǒng)的瓶頸,。我們已成功地在144個劃分(機器)上運行DistBelief框架,且獲得了顯著的性能提升,,同時在8或16個劃分上運行的一個中等大小模型,,也獲得了很好的效果(請參考第5節(jié)中模型并行化基準(zhǔn)測試中的實驗結(jié)果)。顯然地,,局部連通的網(wǎng)絡(luò)模型,,因為需要更少的網(wǎng)絡(luò)通信,所以比全連通網(wǎng)絡(luò)模型更易于分布化,。導(dǎo)致性能退化的一個主要原因是因不同機器上處理時間的不同,,導(dǎo)致大量的機器在等待一個或單個節(jié)點完成本階段任務(wù)(譯者注:和MapReduce中Map階段的長尾問題類似)。盡管如此,,對于我們最大的模型來講,,我們?nèi)钥梢愿咝У赜每偣灿?/span>512核CPU 的32臺機器(每臺機器平均使用16核CPU的計算資源)來訓(xùn)練單個神經(jīng)網(wǎng)絡(luò)。當(dāng)和下一節(jié)中講到的利用模型多副本方法的分布式優(yōu)化算法相結(jié)合時,,將使得在多達(dá)10K的CPU數(shù)量上訓(xùn)練單個網(wǎng)絡(luò)成為可能,,從而進一步減少總的訓(xùn)練時間。
4.分布式優(yōu)化算法
DistBelief框架中的并行計算方法使我們能夠部署和運行比前期工作中提到的大得多的神經(jīng)網(wǎng)絡(luò)模型,。但是為了在合理時間內(nèi)訓(xùn)練如此規(guī)模的模型,,這就要求我們不僅需實現(xiàn)單個DistBelief實例內(nèi)的并行,而且需要將訓(xùn)練任務(wù)分發(fā)到多個DistBelief實例。在本節(jié)中,,我們將具體闡述這第二級的并行,即采用多個DistBelief模型的實例(或副本),,同時來達(dá)到一個優(yōu)化目標(biāo),。
圖2.左:Downpour SGD,模型的副本采用異步方式從參數(shù)服務(wù)器(Parameter Server)中獲取參數(shù)w和上傳
到參數(shù)服務(wù)器,。右:Sandblaster L-BFGS:單個協(xié)調(diào)器(Coordinator)實例發(fā)送簡短消息(message)到模型副本和參數(shù)服務(wù)器以協(xié)調(diào)批量優(yōu)化過程,。
下面我們來對這兩個分布優(yōu)化方法做比較:Downpour SGD是在線方法,而L-BFGS是批量方法,。兩方法中模型副本都利用了中心分割化服務(wù)器組的概念來共享參數(shù),,也都利用了每個模型副本中DistBelief的并行性。但更重要的是,,對不同副本的處理時間的不同,,甚至整個模型副本的失效、移除和重啟等情況都在兩方法的考慮范圍之內(nèi),。
4.1 Downpour SGD
隨機梯度下降(SGD)方法,,應(yīng)該是最常用的訓(xùn)練深度神經(jīng)網(wǎng)絡(luò)的優(yōu)化方法[26, 27, 3]。但不幸的是,,傳統(tǒng)SGD方法本質(zhì)上的順序性,,使得在大型數(shù)據(jù)集下變得不再適用,因為這種完全串行方式所需要的機器間數(shù)據(jù)移動是非常耗時的,。
為了將SGD應(yīng)用到大數(shù)據(jù)集上,,我們提出了Downpour SGD,一個使用單個DistBelief模型的多個分布副本的異步隨機梯度下降變種,。它的基本方法如下:將訓(xùn)練集劃分若干子集,,并對每個子集運行一個單獨的模型副本。模型副本之間的通信均通過中心參數(shù)服務(wù)器組,,該參數(shù)服務(wù)器組維護了模型參數(shù)的當(dāng)前狀態(tài),,并分割到多臺機器上(例如,如果我們參數(shù)服務(wù)器組有10個節(jié)點,,那么每個節(jié)點將負(fù)責(zé)存儲和更新模型參數(shù)的1/10,,如圖2所示)。該方法在兩個方面體現(xiàn)異步性:(i)模型副本之間運行獨立,,(ii)參數(shù)服務(wù)器組各節(jié)點之間同樣是獨立的,。
考慮Downpour SGD的一個最簡單的實現(xiàn),在處理每個mini-batch(譯者注:小型批量)之前,,模型副本都會向參數(shù)服務(wù)器請求最新的模型參數(shù),。因為DistBelief框架也是分布在多臺機器上,所以其框架的每個節(jié)點只需和參數(shù)服務(wù)器組中包含和該節(jié)點有關(guān)的模型參數(shù)的那部分節(jié)點進行通信。在DistBelief副本獲得更新后的模型參數(shù)后,,運行一次mini-batch樣本來計算參數(shù)的梯度,,并推送到參數(shù)服務(wù)器,以用于更新當(dāng)前的模型參數(shù)值,。
可以通過設(shè)定每次mini-batch操作向參數(shù)服務(wù)器獲取一次更新后的參數(shù)和每次mini-batch操作推送一次梯度更新到參數(shù)服務(wù)器(這里不一定和相等),。事實上,獲取參數(shù),,推送梯度和處理訓(xùn)練樣本三種操作,,可以以三個采用弱同步的線程實現(xiàn)(參見附錄中的偽代碼)。為了簡單起見,,同時也是為了和傳統(tǒng)SGD方法相比較,,在下面的實驗中,我們設(shè)定,。
在處理機器失效方面,,Downpour SGD比標(biāo)準(zhǔn)(同步)SGD要魯棒。對于同步SGD來講,,如果一臺機器失效,,整個訓(xùn)練過程將會延時;但是對于異步SGD來講,,如果某個模型副本的一臺機器失效,,其他模型副本仍然繼續(xù)處理樣本并更新參數(shù)服務(wù)器中的模型參數(shù)。另一方面,,Downpour SGD帶來的多種異步處理形式給優(yōu)化過程帶來了進一步的隨機性,。這里面最顯而易見的是,模型實例最可能是使用一個稍微過時的參數(shù)來計算梯度,,因為這時其他的副本可能已經(jīng)更新了參數(shù)服務(wù)器上的參數(shù),。但是,除此之外還有其他隨機的來源:因為參數(shù)服務(wù)器組的每臺機器是行為獨立的,,所以無法保證在給定時間點上,,每個節(jié)點的參數(shù)被更新的次數(shù)相同,或者以同樣的順序被更新,。更進一步的,,因為模型副本使用不同的線程來獲取參數(shù)和推送梯度值,故在同一時間戳上,,單個副本內(nèi)的參數(shù)將有額外的稍微不一致的現(xiàn)象,。盡管對于非凸問題的這些操作的安全性缺乏理論基礎(chǔ),但是在實踐中,,我們發(fā)現(xiàn)放松一致性要求的做法是相當(dāng)有效的,。
我們發(fā)現(xiàn),,另外一項能極大提高Downpour SGD魯棒性的技術(shù)是使用Adagrad[10]自適應(yīng)學(xué)習(xí)速率方法。與使用固定的值(如圖2中的η)作為學(xué)習(xí)速率的方式不同,,Adagrad的每個參數(shù)使用單獨的自適應(yīng)學(xué)習(xí)速率,。假設(shè)是第i個參數(shù)在第K次迭代時的學(xué)習(xí)速率,是其梯度值,,那么:
可以看出,,因為學(xué)習(xí)速率的計算僅與參數(shù)歷史梯度值的平方和有關(guān),所以Adagrad易于在每個參數(shù)服務(wù)器節(jié)點上單獨實現(xiàn),。所有學(xué)習(xí)速率共享的縮放常量因子γ,通常大于(可能有一個數(shù)量級)不使用Adagrad情況下,,采用固定學(xué)習(xí)速率的最優(yōu)值,。Adagrad的使用能夠增加并發(fā)訓(xùn)練的模型副本數(shù)量,同時,,采用“熱啟動”(即在啟動其他副本之前,,用單個模型來訓(xùn)練參數(shù))的模型訓(xùn)練方法,幾乎消除了在Downpour SGD中可能會出現(xiàn)的穩(wěn)定性問題(參見第5節(jié)的測試結(jié)果),。
4.2 Sandblaster L-BFGS
已經(jīng)證實批量處方法在小型深度網(wǎng)絡(luò)的訓(xùn)練上效果很好[7],。為了將這些方法運用到大型模型和大型數(shù)據(jù)集上,我們引入了Sandblaster批量優(yōu)化框架,,同時討論了L-BFGS在該框架的一個實現(xiàn),。
Sandblaster的主要思路是將參數(shù)的存儲和操作分布化,算法(如L-BFGS)的核心位于協(xié)調(diào)器(coordinator)中(如圖2),。該協(xié)調(diào)器并不直接獲取模型參數(shù),,相反地,它發(fā)出一系列命令(如內(nèi)積,,向量縮放,,系數(shù)相關(guān)加法,乘法)到參數(shù)服務(wù)器節(jié)點,,并且這些命令能在節(jié)點范圍內(nèi)執(zhí)行,。一些額外的信息,如L-BFGS的歷史數(shù)據(jù)緩存,,同樣保存在計算出它的參數(shù)服務(wù)器節(jié)點上,。這使得運行大型模型(10億級參數(shù))成為現(xiàn)實,而且不會因傳輸參數(shù)和梯度過度集中在一個節(jié)點上而導(dǎo)致性能下降,。
在典型的L-BFGS的并行實現(xiàn)中,,數(shù)據(jù)被分布到許多機器上,每個機器負(fù)責(zé)對樣本數(shù)據(jù)的一個特定的子集計算梯度,,而后梯度值被傳輸回中心服務(wù)器(或者通過樹形結(jié)構(gòu)來聚合[16]),。因為許多方法都需要等待最慢的機器處理完畢,所以它并不能很好地擴展到大型共享集群中。為了解決該(擴展性)問題,,我們采用了如下的負(fù)載均衡的方案:協(xié)調(diào)器分配給這N個模型副本一小部分的任務(wù)量,,并且該計算任務(wù)遠(yuǎn)小于總批量的 ,每當(dāng)副本完成計算處于閑置狀態(tài)時,,立即給其分配新的計算任務(wù),,如此下去。為了在整個批量計算的最后階段進一步優(yōu)化慢速副本的任務(wù)處理,,協(xié)調(diào)器調(diào)度最快結(jié)束的副本同時計算未完成的任務(wù),,從最先結(jié)束的副本處取得計算結(jié)果。該方案和MapReduce中的“備份任務(wù)”的使用相類似[24],。數(shù)據(jù)預(yù)取方式和通過將順序數(shù)據(jù)傳輸?shù)酵簧a(chǎn)者以提高數(shù)據(jù)親和性的方法一道,,使得數(shù)據(jù)的獲取不再是問題。和Downpour SGD中和參數(shù)服務(wù)器之間的高頻率,,高吞吐參數(shù)同步方式相反,,Sandblaster中的計算者僅僅需在每次批處理的開始階段獲取參數(shù),并且只需在極少的結(jié)束部分(用以免遭備份失效和重啟)處需要傳輸梯度到參數(shù)服務(wù)器,。
5.測試
我們用兩個不同的深度學(xué)習(xí)問題來衡量了我們設(shè)計的優(yōu)化算法:(i)靜態(tài)圖像的物體識別和(ii)語音識別的聲學(xué)處理,。
語音識別任務(wù)是將一小段音頻的中心區(qū)域(或幀)歸類為數(shù)千種類型之一。我們使用了一個五層的深度網(wǎng)絡(luò):四個隱藏層,,每個有2560個單元,,并以sigmoid為激勵函數(shù);一個有8192個單元的softmax輸出層,。輸入層是11個長度為25ms連續(xù)的相互重疊的語音,,每個由40個對數(shù)動能值表示。層與層之間是全連接的,,因此整個網(wǎng)絡(luò)的參數(shù)數(shù)量有42M,。我們用1.1G個弱標(biāo)記樣本集來訓(xùn)練模型,并且用保留的部分樣本做測試集來衡量精確度,。簡單深度網(wǎng)絡(luò)的配置和訓(xùn)練過程請參照[28],。
對于可視物體識別,我們訓(xùn)練了一個更大的局部區(qū)域連通的神經(jīng)網(wǎng)絡(luò),,并作用于ImageNet的有1.6*10^7圖像的數(shù)據(jù)集上,,每個圖像被縮放到100X100像素大小。整個網(wǎng)絡(luò)有三個階段,,每個階段都包含了過濾,,池化,局部對比度歸一化等操作,,過濾層的每一個單元都和其前一層的10X10的小塊圖像相連接,。我們的基礎(chǔ)設(shè)施允許多個單元都和同一小塊圖像相連接,,我們的實驗中,同一連接單元數(shù)量從8增加到36不等,。輸出層由2.1*10^4個一對多模式的logistic分類器組成,,每個分別代表ImageNet的一個物體種類。相似的深度網(wǎng)絡(luò)配置和訓(xùn)練過程請參照[30],。
模型并行基準(zhǔn)測試
為了測試DistBelief模型的并行性擴展,,實驗中以運行單個模型實例的劃分(機器)數(shù)量作為變量,我們測量了用簡單SGD訓(xùn)練處理單個mini-batch的平均時間,。在圖3中,,我們通過計算訓(xùn)練的平均加速比來量化N個節(jié)點對并行化的影響:使用單個節(jié)點訓(xùn)練花費的時間對使用N個節(jié)點訓(xùn)練花費的時間的比值。模型中推斷過程的加速比是相似的,,因而沒有顯示出來,。
中等大小的語音模型在8個機器節(jié)點上運行是最快的,相比于單個節(jié)點,,加速比大約是2.2(每臺機器配置其使用不超過20核CPU來訓(xùn)練模型)。將模型劃分在大于8個機器節(jié)點上實際上會減緩訓(xùn)練過程,,因為模型的全連通結(jié)構(gòu)使得此時網(wǎng)絡(luò)開銷開始起決定性因素,,同時節(jié)點的增加使得每個節(jié)點的計算量也相應(yīng)地減少。
圖3:四個不同規(guī)模的深度網(wǎng)絡(luò)使用單個DistBelief實例訓(xùn)練在集群機器不同規(guī)模下的加速比,。具有較多參數(shù)的模型在機器增加時比較少參數(shù)模型獲得更高的加速比,。
圖4:左圖:采用不同的優(yōu)化方法,在(在一部分訓(xùn)練集)上的訓(xùn)練精度,。右圖:訓(xùn)練時間的變化下,,測試集的分類精度的變化曲線。Downpour SGD和Sandblaster實驗均采用了10小時平凡SGD熱啟動方式來初始化,。
相反地,,比語音識別模型規(guī)模更大,且具有局部連通性的圖像模型,,能夠通過持續(xù)給每個模型副本增加節(jié)點數(shù)量,,來提升加速比??梢钥闯?,具有1.7*10^9個參數(shù)的最大模型加速比最高,在使用了81個節(jié)點的情況下,,獲了12倍的加速比,。對于大型模型來講,通過持續(xù)增加機器數(shù)量始終能提升訓(xùn)練速度,,但是獲得的性能回報逐漸變少,。
優(yōu)化方法的比較:為了衡量提出的分布優(yōu)化方式的性能,,我們在不同的配置下,運行前面提及的語音模型,??紤]兩種基準(zhǔn)方式(譯者注:作為比較的靶對象):(i)用傳統(tǒng)(單個副本)SGD方法訓(xùn)練DistBelief模型(在8個劃分上),(ii)用CUDA[28]在GPU上訓(xùn)練與(i)中同樣的模型,。三個和基準(zhǔn)方式相比較的分布優(yōu)化方法是:(i)固定學(xué)習(xí)速率的Downpour SGD,,(ii)使用Adagrad自適應(yīng)學(xué)習(xí)速率的Downpour SGD,(iii)Sandblaster L-BFGS,。
圖4說明了對于不同的優(yōu)化方法,,以訓(xùn)練時間作為分類的性能時的模型比較。我們的目標(biāo)是忽略資源要求下,,在最短的訓(xùn)練時間內(nèi),,獲得最佳的測試集分類精度。傳統(tǒng)單副本的SGD(黑色曲線)是最慢速的,。具有20個副本的Downpour SGD方法(藍(lán)色曲線)在此基礎(chǔ)上獲得了顯著的提升,。20個副本的Downpour SGD和Adagrad相結(jié)合(橙色曲線)是可以被認(rèn)為是中等速率的,而使用了2000個模型副本的Sandblaster L-BFGS更加快速(綠色曲線),。但是,,最快的是200個模型副本并和Adagrad相結(jié)合的Downpour SGD方法(紅色曲線)??梢?,只要供給足夠的CPU資源,Sandblaster L-BFGS和Downpour SGD方法對模型的訓(xùn)練都能從本質(zhì)上快于高性能GPU,。
盡管我們沒有限制以上實驗的資源使用,,但是我們可以考慮這些優(yōu)化方法是如何用硬件資源來換取性能提升的。將測試集精度設(shè)定為固定值(16%),,在改變機器數(shù)量和CPU數(shù)量的條件下,,測試上述方法達(dá)到該精度所需訓(xùn)練時間,以此方式來分析資源使用和性能的關(guān)系,,如圖5,。每條曲線的四個點其中之一對應(yīng)于圖4中的訓(xùn)練配置,其他三個點是替代的配置,。
圖5:在不同機器數(shù)量(左圖)和CPU數(shù)量(右圖)下,,幾種優(yōu)化策略達(dá)到固定精度值(16%)所花費的時間
在此坐標(biāo)圖中,距原點較近的點更優(yōu),,因為它們在更少硬件資源的條件下,,花費的訓(xùn)練時間更少。從這個角度上講,,使用Adagrad的Downpour SGD方法看起來是最好的權(quán)衡:對于任意固定機器數(shù)量或CPU數(shù)量條件下,,該方法比Downpour SGD或Sandblaster L-BFGS花費更少的時間達(dá)到精度目標(biāo),。對于任意給定達(dá)到精度目標(biāo)的訓(xùn)練時間,使用Adagrad的Downpour SGD比Sandblaster L-BFGS使用更少的資源,,并且在多數(shù)情況下,,使用固定學(xué)習(xí)速率的Downpour SGD甚至都不能在最后期限內(nèi)完成訓(xùn)練目標(biāo)。Sandblaster L-BFGS看起來還能通過持續(xù)增加CPU數(shù)量來提高加速比,,表明在極其大的(如3*10^4CPU使用量)資源使用條件下,,應(yīng)該會獲得最快的訓(xùn)練時間。
應(yīng)用到ImageNet
先前的實驗證明了,,我們的技術(shù)可以加速具有10^7參數(shù)數(shù)量的神經(jīng)網(wǎng)絡(luò)訓(xùn)練,。但是,對于這些基于集群的分布式優(yōu)化方法來講,,最有價值的優(yōu)點,,是它能擴展到遠(yuǎn)大于單個機器能夠容納得下的模型,更不用說單個GPU了,。為了測試訓(xùn)練大型神經(jīng)網(wǎng)絡(luò)的能力,,我們使用Downpour SGD訓(xùn)練了之前提及的具有1.7*10^9個參數(shù)的圖像模型,用于分類任務(wù),。正如[30]中的細(xì)節(jié)描述,,在ImageNet分類任務(wù)中,這個網(wǎng)絡(luò)的訓(xùn)練結(jié)果獲得了大約錯誤率15%交叉驗證(Cross-Validation)的分類精度,,比我們所已知的先前最高的精度提高了60%多,。
6.結(jié)論
在這篇文章中,,我們介紹了DistBelief,,一個深度網(wǎng)絡(luò)的分布并行訓(xùn)練的框架,并在該框架中發(fā)現(xiàn)了一些有效的分布優(yōu)化策略,。我們提出了Downpour SGD,,一個高度異步的SGD變種算法,用以訓(xùn)練非凸的深度學(xué)習(xí)模型,,其結(jié)果出乎意料的好,。Sandblaster L-BFGS, L-BFGS的分布式實現(xiàn),,其與SGD相比具有競爭力,。同時,對網(wǎng)絡(luò)帶寬的高效利用,,使得其能夠擴展到更大數(shù)量的并發(fā)線程來訓(xùn)練同一模型,。這就是說,當(dāng)具有2000數(shù)量CPU或更少時,,Downpour SGD和Adagrad自適應(yīng)學(xué)習(xí)速率方法的結(jié)合是最有效的方法,。
Adagrad方法本身不是為異步SGD的使用而設(shè)計的,,并且該方法最典型的應(yīng)用也不是在非凸問題上。但是,,在高度非線性的深度網(wǎng)絡(luò)中,,兩者的結(jié)合的效果卻如此的好。我們推測,,在面對劇烈的異步更新時,,Adagrad自動地對不穩(wěn)定參數(shù)起到了穩(wěn)定的效果,并且很自然地根據(jù)不同的深度網(wǎng)絡(luò)層數(shù)的變化來調(diào)整學(xué)習(xí)速率,。
實驗結(jié)果表明,,即使在中等規(guī)模的模型訓(xùn)練上,使用我們的大規(guī)模(分布式)方法,,集群方法也比GPU要快,,并且沒有GPU對模型規(guī)模的限制。為了證明其訓(xùn)練更大模型的能力,,我們通過訓(xùn)練一個超過10^9數(shù)量參數(shù)的模型,,在ImageNet物體識別上獲得了比先前最優(yōu)的更好的精度水平。
Acknowledgments
The authors would like to thank Samy Bengio, Tom Dean, John Duchi, Yuval Netzer, Patrick Nguyen, Yoram Singer, Sebastian Thrun, and Vincent Vanhoucke for their indispensable advice, support, and comments.
References
[1]G. Dahl, D. Yu, L. Deng, and A. Acero. Context-dependent pre-trained deep neural networks for large vocabulary speech recognition. IEEE Transactions on Audio, Speech, and Language Processing, 2012.
[2]G. Hinton, L. Deng, D. Yu, G. Dahl, A. Mohamed, N. Jaitly, A. Senior, V. Vanhoucke, P. Nguyen, T. Sainath, and B. Kingsbury. Deep neural networks for acoustic modeling in speech recognition. IEEE Signal Processing Magazine, 2012.
[3] D. C. Ciresan, U. Meier, L. M. Gambardella, and J. Schmidhuber. Deep big simple neural nets excel on handwritten digit recognition. CoRR, 2010.
[4] A. Coates, H. Lee, and A. Y. Ng. An analysis of single-layer networks in unsupervised feature learning. In AISTATS 14, 2011.
[5] Y. Bengio, R. Ducharme, P. Vincent, and C. Jauvin. A neural probabilistic language model. Journal of Machine Learning Research, 3:1137–1155, 2003.
[6] R. Collobert and J. Weston. A unified architecture for natural language processing: Deep neural networks with multitask learning. In ICML, 2008.
[7] Q.V. Le, J. Ngiam, A. Coates, A. Lahiri, B. Prochnow, and A.Y. Ng. On optimization methods for deep learning. In ICML, 2011.
[8] R. Raina, A. Madhavan, and A. Y. Ng. Large-scale deep unsupervised learning using graphics processors. In ICML, 2009.
[9] J. Martens. Deep learning via hessian-free optimization. In ICML, 2010.
[10] J. C. Duchi, E. Hazan, and Y. Singer. Adaptive subgradient methods for online learning and stochastic optimization. Journal of Machine Learning Research, 12:2121–2159, 2011.
[11] Q. Shi, J. Petterson, G. Dror, J. Langford, A. Smola, A. Strehl, and V. Vishwanathan. Hash kernels. In AISTATS, 2009.
[12] J. Langford, A. Smola, and M. Zinkevich. Slow learners are fast. In NIPS, 2009.
[13] G. Mann, R. McDonald, M. Mohri, N. Silberman, and D. Walker. Efficient large-scale distributed training of conditional maximum entropy models. In NIPS, 2009.
[14] R. McDonald, K. Hall, and G. Mann. Distributed training strategies for the structured perceptron. In NAACL, 2010.
[15] M. Zinkevich, M. Weimer, A. Smola, and L. Li. Parallelized stochastic gradient descent. In NIPS, 2010.
[16] A. Agarwal, O. Chapelle, M. Dudik, and J. Langford. A reliable effective terascale linear learning system. In AISTATS, 2011.
[17] A. Agarwal and J. Duchi. Distributed delayed stochastic optimization. In NIPS, 2011.
[18] C. H. Teo, Q. V. Le, A. J. Smola, and S. V. N. Vishwanathan. A scalable modular convex solver for regularized risk minimization. In KDD, 2007.
[19] F. Niu, B. Retcht, C. Re, and S. J. Wright. Hogwild! A lock-free approach to parallelizing stochastic gradient descent. In NIPS, 2011.
[20] J. Bergstra, O. Breuleux, F. Bastien, P. Lamblin, R. Pascanu, G. Desjardins, J. Turian, D. Warde-Farley, and Y. Bengio. Theano: a CPU and GPU math compiler. In SciPy, 2010.
[21] D. Ciresan, U. Meier, and J. Schmidhuber. Multi-column deep neural networks for image classification. Technical report, IDSIA, 2012.
[22] L. Deng, D. Yu, and J. Platt. Scalable stacking and learning for building deep architectures. In ICASSP, 2012.
[23] A. Krizhevsky. Learning multiple layers of features from tiny images. Technical report, U. Toronto, 2009.
[24] J. Dean and S. Ghemawat. Map-Reduce: simplified data processing on large clusters. CACM, 2008.
[25] Y. Low, J. Gonzalez, A. Kyrola, D. Bickson, C. Guestrin, and J. Hellerstein. Distributed GraphLab: A framework for machine learning in the cloud. In VLDB, 2012.
[26] L. Bottou. Stochastic gradient learning in neural networks. In Proceedings of Neuro-N??mes 91, 1991.
[27] Y. LeCun, L. Bottou, G. Orr, and K. Muller. Efficient backprop. In Neural Networks: Tricks of the trade. Springer, 1998.
[28] V. Vanhoucke, A. Senior, and M. Z. Mao. Improving the speed of neural networks on cpus. In Deep Learning and Unsupervised Feature Learning Workshop, NIPS 2011, 2011.
[29] J. Deng, W. Dong, R. Socher, L.-J. Li, K. Li, and L. Fei-Fei. ImageNet: A Large-Scale Hierarchical
Image Database. In CVPR, 2009.
[30] Q.V. Le, M.A. Ranzato, R. Monga, M. Devin, K. Chen, G.S. Corrado, J. Dean, and A.Y. Ng. Building high-level features using large scale unsupervised learning. In ICML, 2012.
7.附錄
出于完整性考慮,,這里我們給出了Downpour SGD算法中模型副本(客戶端)和Sandblaster L-BFGS算法的偽代碼,。
Downpour SGD(客戶端):
Sandblaster是分布式批量方法的優(yōu)化框架。其本質(zhì)的概念是將分布式的操作分解為DistBelief參數(shù)服務(wù)器單節(jié)點內(nèi)的計算,。舉例說明,,假設(shè)我們的模型有10^9個參數(shù),參數(shù)服務(wù)器組有10個節(jié)點,,因此每個節(jié)點上有1/10的參數(shù),。可以將L-BFGS分解為一系列的向量數(shù)乘和內(nèi)積操作,,而且每一個向量都是10^9維的,。某個節(jié)點始終負(fù)責(zé)L-BFGS中向量的前1/10,而另外一個節(jié)點負(fù)責(zé)向量的下一個1/10,,如此下去,,最后一個節(jié)點負(fù)責(zé)最后1/10部分,那么可以證明,,向量的數(shù)乘()和內(nèi)積()操作使用可以以分布式的樣式實現(xiàn),,并且只花費很少的通信開銷,任何中間向量結(jié)果都以分布式的樣式存儲在節(jié)點中,,而任何中間標(biāo)量結(jié)果可以方便地發(fā)送給其他所有節(jié)點,。