波士頓的 數(shù)據(jù)科學(xué)團(tuán)隊(duì)正在利用尖端工具和算法來(lái)優(yōu)化商業(yè)活動(dòng),且這些商業(yè)活動(dòng)是基于對(duì)用戶(hù)數(shù)據(jù)中的深刻透析。數(shù)據(jù)科學(xué)大量使用機(jī)器算法,可以幫助我們?cè)跀?shù)據(jù)中識(shí)別和利用模式。從互聯(lián)網(wǎng)大規(guī)模數(shù)據(jù)中獲取透析是一項(xiàng)具有挑戰(zhàn)性的任務(wù),因此,能大規(guī)模運(yùn)行算法
波士頓的 數(shù)據(jù)科學(xué)團(tuán)隊(duì)正在利用尖端工具和算法來(lái)優(yōu)化商業(yè)活動(dòng),且這些商業(yè)活動(dòng)是基于對(duì)用戶(hù)數(shù)據(jù)中的深刻透析。數(shù)據(jù)科學(xué)大量使用機(jī)器算法,可以幫助我們?cè)跀?shù)據(jù)中識(shí)別和利用模式。從互聯(lián)網(wǎng)大規(guī)模數(shù)據(jù)中獲取透析是一項(xiàng)具有挑戰(zhàn)性的任務(wù),因此,能大規(guī)模運(yùn)行算法是一個(gè)至關(guān)重要的需求。伴隨著數(shù)據(jù)的爆炸性增長(zhǎng)和成千上萬(wàn)的機(jī)器集群,我們需要使算法可以適應(yīng)在如此分布的環(huán)境下運(yùn)行。在通用的分布式計(jì)算環(huán)境中運(yùn)行機(jī)器學(xué)習(xí)算法具有一系列的挑戰(zhàn)。
這里,我們探討一下如何在一個(gè)Hadoop集群中實(shí)現(xiàn)和部署深度學(xué)習(xí)(一個(gè)尖端機(jī)器學(xué)習(xí)框架)。對(duì)于算法是如何適應(yīng)運(yùn)行在一個(gè)分布式環(huán)境中,我們提供了具體的細(xì)節(jié)。我們也給出了算法在標(biāo)準(zhǔn)數(shù)據(jù)集上的運(yùn)行結(jié)果。
深度信任網(wǎng)絡(luò)
深度信任網(wǎng)絡(luò)(Deep Belief Networks, DBN)是在貪婪和無(wú)監(jiān)督的條件下通過(guò)迭代和訓(xùn)練受限的玻耳茲曼機(jī)(Boltzmann Machines, RMB)而得到的圖形模型。通過(guò)對(duì)如下可被觀察的維度x和隱藏層hk之間相互連接的分布式進(jìn)行建模,DBN被訓(xùn)練來(lái)提取訓(xùn)練數(shù)據(jù)的深層透析。
表達(dá)式1:DBN分布式
在下圖中,輸入層和隱藏層的關(guān)系是可以被觀察到的。從高層次來(lái)看,第一層被作為RBM來(lái)訓(xùn)練,為原始輸入x進(jìn)行建模。輸入的數(shù)據(jù)是個(gè)稀疏二進(jìn)制維度,表明數(shù)據(jù)將會(huì)被分類(lèi),比如,一個(gè)二進(jìn)制的數(shù)字圖像。后續(xù)層把前面的層傳遞過(guò)來(lái)的數(shù)據(jù)(樣本或activations)當(dāng)作訓(xùn)練示例使用。層數(shù)可以通過(guò)經(jīng)驗(yàn)來(lái)決定,以此來(lái)獲得更好的模型性能,DBN支持任意多的層數(shù)。
圖1:DBN層次
下面的代碼片段表明了進(jìn)入RBM的訓(xùn)練。在提供給RBM的輸入數(shù)據(jù)中,有多個(gè)預(yù)定義的時(shí)間點(diǎn)。輸入數(shù)據(jù)被分成小批量數(shù)據(jù),為各個(gè)層計(jì)算weights、activations和deltas。
在所有的層都被訓(xùn)練以后,深度網(wǎng)絡(luò)的參數(shù)調(diào)整使用受監(jiān)督的訓(xùn)練標(biāo)準(zhǔn)。受監(jiān)督的訓(xùn)練標(biāo)準(zhǔn),比如,可以作為一個(gè)分類(lèi)問(wèn)題來(lái)設(shè)計(jì),允許使用深度網(wǎng)絡(luò)來(lái)解決分類(lèi)問(wèn)題。更復(fù)雜的受監(jiān)督的標(biāo)準(zhǔn)可以用來(lái)提供如情景解讀之類(lèi)的有趣的結(jié)果,比如解釋圖片里展示的東西是什么。
基礎(chǔ)構(gòu)造
深度學(xué)習(xí)受到了廣泛的關(guān)注,不僅僅是因?yàn)樗梢缘贸霰绕渌恍W(xué)習(xí)算法更優(yōu)異的結(jié)果,也因?yàn)樗梢栽诜植际皆O(shè)備上運(yùn)行,允許處理大規(guī)模的數(shù)據(jù)集。深度網(wǎng)絡(luò)可以在兩個(gè)級(jí)別進(jìn)行并行、層級(jí)別和數(shù)據(jù)級(jí)別[6]。對(duì)于層級(jí)別的并行,許多實(shí)現(xiàn)使用GPU數(shù)組來(lái)并行計(jì)算層級(jí)別activations和頻繁同步它們。然而,這種方法不適合那種數(shù)據(jù)駐留在通過(guò)網(wǎng)絡(luò)連接的多個(gè)機(jī)器的集群,因?yàn)橛兄^高的網(wǎng)絡(luò)開(kāi)銷(xiāo)。對(duì)于數(shù)據(jù)層的并行,訓(xùn)練是在數(shù)據(jù)集上進(jìn)行并行的,更適合分布式設(shè)備。Paypal的大部分?jǐn)?shù)據(jù)存儲(chǔ)在Hadoop集群上,因此能夠運(yùn)行那些集群上的算法是我們的首要任務(wù)。專(zhuān)用集群的維護(hù)和支持也是一個(gè)我們需要考慮的重要因素。然而,由于深度學(xué)習(xí)本質(zhì)上是迭代的,像MapReduce這樣的范式不適合運(yùn)行這些算法。但是隨著Hadoop2.0和基于YARN的資源管理的問(wèn)世,我們可以編寫(xiě)迭代程序,同時(shí)可以精細(xì)地控制程序使用的資源。我們使用了IterativeReduce [7] , Hadoop YARN里面的一個(gè)用戶(hù)編寫(xiě)迭代算法的程序,我們可以將它部署在一個(gè)運(yùn)行Hadoop 2.4.1的Paypal集群中。
方法
我們實(shí)現(xiàn)了Hinton的核心算法,在[2]中引用的。由于我們的需求是分散運(yùn)行在多個(gè)機(jī)器的集群中的算法,我們?cè)谶@樣的環(huán)境下使用了他們的算法。對(duì)于在多個(gè)機(jī)器上分散這個(gè)算法,我們參照了Grazia所提出的指南[6]。下面是對(duì)我們的實(shí)現(xiàn)做的詳細(xì)總結(jié):
下圖描述了在運(yùn)行深度學(xué)習(xí)算法時(shí)的一個(gè)單個(gè)數(shù)據(jù)集時(shí)間點(diǎn)(步驟3-5)。我們注意到,這個(gè)范式可以被利用來(lái)實(shí)現(xiàn)一個(gè)主機(jī)可迭代的機(jī)器學(xué)習(xí)算法。
圖2:用于訓(xùn)練的單個(gè)數(shù)據(jù)集時(shí)間點(diǎn)
下面的代碼片段表明了在訓(xùn)練單個(gè)機(jī)器的DBN中所涉及的步驟。數(shù)據(jù)集首先被拆分成多個(gè)批次,然后多個(gè)RBM層會(huì)被順序地初始化和訓(xùn)練。在RBM都被訓(xùn)練以后,它們會(huì)通過(guò)一個(gè)準(zhǔn)確調(diào)整的錯(cuò)誤反向廣播相位。
我們使用了IterativeReduce[7]的實(shí)現(xiàn)很大程度是為了YARN管道。我們對(duì)實(shí)現(xiàn)做出了重大改革,可以將它利用到我們的深度學(xué)習(xí)算法實(shí)現(xiàn)。IterativeReduce的實(shí)現(xiàn)是為Cloudera Hadoop分布式而編寫(xiě),它被我們重置了平臺(tái),以此來(lái)適應(yīng)標(biāo)準(zhǔn)的Apache Hadoop分布式。我們還重寫(xiě)了實(shí)現(xiàn),以此來(lái)使用[8]中描述的標(biāo)準(zhǔn)編程模型。特別是,我們需要YARN客戶(hù)端API在ResourceManager和客戶(hù)端程序之間進(jìn)行通信。我們也使用了AMRMClient和AMNMClient在ApplicationMaster、ResourceManager和NodeManager之間進(jìn)行通信。
我們首先使用YARN API提交應(yīng)用程序到Y(jié)ARN資源管理器:
在應(yīng)用被提交以后,YARN資源管理器啟動(dòng)應(yīng)用程序Master。如果必要的話(huà),應(yīng)用程序Master負(fù)責(zé)分配和釋放Worker容器。程序Master使用AMRMClient來(lái)與資源管理器進(jìn)行通信。
應(yīng)用程序Master使用NMClient API在容器(主節(jié)點(diǎn)傳遞過(guò)來(lái)的)中運(yùn)行命令。
一旦應(yīng)用Master啟動(dòng)了它需要的Worker容器,它設(shè)置一個(gè)端口來(lái)和應(yīng)用Master進(jìn)行通信。對(duì)于我們深度學(xué)習(xí)實(shí)現(xiàn)來(lái)說(shuō),我們新增了一些方法,它們需要為原始的IterativeReduce接口提供參數(shù)初始化、逐層訓(xùn)練和精確調(diào)整信號(hào)。IterativeReduce使用Apache Avro IPC來(lái)實(shí)現(xiàn)Master和Worker之間的通信。
下面的代碼片段表明了一系列涉及Master-Worker節(jié)點(diǎn)的分布式訓(xùn)練,Master向worker發(fā)送初始參數(shù),然后Worker在部分?jǐn)?shù)據(jù)上訓(xùn)練它的RBM。在Worker完成訓(xùn)練之后,它將結(jié)果發(fā)送至Master,Master將會(huì)綜合這些結(jié)果。迭代完成以后,Master通過(guò)啟動(dòng)反向廣播精確調(diào)整相位來(lái)完成流程。
結(jié)果
我們?cè)u(píng)估了使用MNIST手寫(xiě)數(shù)字識(shí)別[3]來(lái)實(shí)現(xiàn)的深度學(xué)習(xí)的性能。數(shù)據(jù)集包含手工標(biāo)記的0-9的數(shù)字。訓(xùn)練集由60000張圖片組成,測(cè)試集包含了10000張圖片。
為了測(cè)量性能,DBN首先被預(yù)訓(xùn)練,然后在60000張照片中被精確調(diào)整,通過(guò)以上的步驟,DBN會(huì)在10000張測(cè)試圖片上進(jìn)行評(píng)估。在訓(xùn)練或者評(píng)估期間,沒(méi)有對(duì)圖片進(jìn)行預(yù)處理。出錯(cuò)率是由為分類(lèi)的圖片總數(shù)與測(cè)試集中的圖片總數(shù)的比率而得到。
當(dāng)在每個(gè)RBM使用500-500-2000的隱藏單元,同時(shí)使用十個(gè)節(jié)點(diǎn)的分布式設(shè)備的時(shí)候,我們能達(dá)到最佳的分類(lèi)錯(cuò)誤率1.66%。錯(cuò)誤率可堪比原始算法的作者所報(bào)告的1.2%(使用500-500-2000的隱藏單元)[2],和類(lèi)似設(shè)置下的一些結(jié)果[3]。我們注意到原始實(shí)現(xiàn)是在單個(gè)機(jī)器上的,而我們的實(shí)現(xiàn)是在分布式機(jī)器上的。參數(shù)平均的這一步導(dǎo)致性能略微降低,然而將算法分布在多臺(tái)機(jī)器上是利大于弊的。下面的表格總結(jié)出了在十個(gè)節(jié)點(diǎn)的集群上運(yùn)行的每個(gè)層的隱藏單元數(shù)對(duì)應(yīng)的錯(cuò)誤率的變化。
表1:MNIST性能評(píng)估
深入思考
我們成功地部署了一個(gè)深度學(xué)習(xí)系統(tǒng),我們相信它在解決一些機(jī)器學(xué)習(xí)問(wèn)題過(guò)程中很有用處。此外,迭代降低抽象可以被利用來(lái)分布任何其它合適的機(jī)器學(xué)習(xí)算法,能夠利用通用的Hadoop集群將會(huì)被證明非常有利于在大數(shù)據(jù)集上運(yùn)行大型機(jī)器學(xué)習(xí)算法。我們注意到,我們的當(dāng)前框架需要一些改進(jìn),主要圍繞減少網(wǎng)絡(luò)延遲和更先進(jìn)的資源管理。另外,我們需要優(yōu)化DBN框架,這樣可以減少內(nèi)部節(jié)點(diǎn)之間的通信。隨著對(duì)集群資源的精確調(diào)整控制,Hadoop YARN框架給我們提供了更多的靈活性。
參考資料
[1] G. E. Hinton, S. Osindero, and Y. Teh. A fast learning algorithm for deep belief nets. Neural Computations, 18(7):1527–1554, 2006.
[2] G. E. Hinton and R. R. Salakhutdinov. Reducing the Dimensionality of Data with Neural Networks. Science, 313(5786):504–507, 2006.
[3] Y. LeCun, C. Cortes, C. J.C. Burges. The MNIST database of handwritten digits.
[4] Deep Learning Tutorial. LISA lab, University of Montreal
[5] G. E. Hinton. A Practical Guide to Training Restricted Boltzmann Machines. Lecture Notes in Computer Science Volume 7700: 599-619, 2012.
[6] M. Grazia, I. Stoianov, M. Zorzi. Parallelization of Deep Networks. ESANN, 2012
[7] IterativeReduce, https://github.com/jpatanooga/KnittingBoar/wiki/IterativeReduce
[8] Apache Hadoop YARN – Enabling Next Generation Data Applications, http://www.slideshare.net/hortonworks/apache-hadoop-yarn-enabling-nex
Deep Learning on Hadoop 2.0
聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com