波士頓的 數據科學團隊正在利用尖端工具和算法來優化商業活動,且這些商業活動是基于對用戶數據中的深刻透析。數據科學大量使用機器算法,可以幫助我們在數據中識別和利用模式。從互聯網大規模數據中獲取透析是一項具有挑戰性的任務,因此,能大規模運行算法
波士頓的 數據科學團隊正在利用尖端工具和算法來優化商業活動,且這些商業活動是基于對用戶數據中的深刻透析。數據科學大量使用機器算法,可以幫助我們在數據中識別和利用模式。從互聯網大規模數據中獲取透析是一項具有挑戰性的任務,因此,能大規模運行算法是一個至關重要的需求。伴隨著數據的爆炸性增長和成千上萬的機器集群,我們需要使算法可以適應在如此分布的環境下運行。在通用的分布式計算環境中運行機器學習算法具有一系列的挑戰。
這里,我們探討一下如何在一個Hadoop集群中實現和部署深度學習(一個尖端機器學習框架)。對于算法是如何適應運行在一個分布式環境中,我們提供了具體的細節。我們也給出了算法在標準數據集上的運行結果。
深度信任網絡
深度信任網絡(Deep Belief Networks, DBN)是在貪婪和無監督的條件下通過迭代和訓練受限的玻耳茲曼機(Boltzmann Machines, RMB)而得到的圖形模型。通過對如下可被觀察的維度x和隱藏層hk之間相互連接的分布式進行建模,DBN被訓練來提取訓練數據的深層透析。
表達式1:DBN分布式
在下圖中,輸入層和隱藏層的關系是可以被觀察到的。從高層次來看,第一層被作為RBM來訓練,為原始輸入x進行建模。輸入的數據是個稀疏二進制維度,表明數據將會被分類,比如,一個二進制的數字圖像。后續層把前面的層傳遞過來的數據(樣本或activations)當作訓練示例使用。層數可以通過經驗來決定,以此來獲得更好的模型性能,DBN支持任意多的層數。
圖1:DBN層次
下面的代碼片段表明了進入RBM的訓練。在提供給RBM的輸入數據中,有多個預定義的時間點。輸入數據被分成小批量數據,為各個層計算weights、activations和deltas。
在所有的層都被訓練以后,深度網絡的參數調整使用受監督的訓練標準。受監督的訓練標準,比如,可以作為一個分類問題來設計,允許使用深度網絡來解決分類問題。更復雜的受監督的標準可以用來提供如情景解讀之類的有趣的結果,比如解釋圖片里展示的東西是什么。
基礎構造
深度學習受到了廣泛的關注,不僅僅是因為它可以得出比其他一些學習算法更優異的結果,也因為它可以在分布式設備上運行,允許處理大規模的數據集。深度網絡可以在兩個級別進行并行、層級別和數據級別[6]。對于層級別的并行,許多實現使用GPU數組來并行計算層級別activations和頻繁同步它們。然而,這種方法不適合那種數據駐留在通過網絡連接的多個機器的集群,因為有著較高的網絡開銷。對于數據層的并行,訓練是在數據集上進行并行的,更適合分布式設備。Paypal的大部分數據存儲在Hadoop集群上,因此能夠運行那些集群上的算法是我們的首要任務。專用集群的維護和支持也是一個我們需要考慮的重要因素。然而,由于深度學習本質上是迭代的,像MapReduce這樣的范式不適合運行這些算法。但是隨著Hadoop2.0和基于YARN的資源管理的問世,我們可以編寫迭代程序,同時可以精細地控制程序使用的資源。我們使用了IterativeReduce [7] , Hadoop YARN里面的一個用戶編寫迭代算法的程序,我們可以將它部署在一個運行Hadoop 2.4.1的Paypal集群中。
方法
我們實現了Hinton的核心算法,在[2]中引用的。由于我們的需求是分散運行在多個機器的集群中的算法,我們在這樣的環境下使用了他們的算法。對于在多個機器上分散這個算法,我們參照了Grazia所提出的指南[6]。下面是對我們的實現做的詳細總結:
下圖描述了在運行深度學習算法時的一個單個數據集時間點(步驟3-5)。我們注意到,這個范式可以被利用來實現一個主機可迭代的機器學習算法。
圖2:用于訓練的單個數據集時間點
下面的代碼片段表明了在訓練單個機器的DBN中所涉及的步驟。數據集首先被拆分成多個批次,然后多個RBM層會被順序地初始化和訓練。在RBM都被訓練以后,它們會通過一個準確調整的錯誤反向廣播相位。
我們使用了IterativeReduce[7]的實現很大程度是為了YARN管道。我們對實現做出了重大改革,可以將它利用到我們的深度學習算法實現。IterativeReduce的實現是為Cloudera Hadoop分布式而編寫,它被我們重置了平臺,以此來適應標準的Apache Hadoop分布式。我們還重寫了實現,以此來使用[8]中描述的標準編程模型。特別是,我們需要YARN客戶端API在ResourceManager和客戶端程序之間進行通信。我們也使用了AMRMClient和AMNMClient在ApplicationMaster、ResourceManager和NodeManager之間進行通信。
我們首先使用YARN API提交應用程序到YARN資源管理器:
在應用被提交以后,YARN資源管理器啟動應用程序Master。如果必要的話,應用程序Master負責分配和釋放Worker容器。程序Master使用AMRMClient來與資源管理器進行通信。
應用程序Master使用NMClient API在容器(主節點傳遞過來的)中運行命令。
一旦應用Master啟動了它需要的Worker容器,它設置一個端口來和應用Master進行通信。對于我們深度學習實現來說,我們新增了一些方法,它們需要為原始的IterativeReduce接口提供參數初始化、逐層訓練和精確調整信號。IterativeReduce使用Apache Avro IPC來實現Master和Worker之間的通信。
下面的代碼片段表明了一系列涉及Master-Worker節點的分布式訓練,Master向worker發送初始參數,然后Worker在部分數據上訓練它的RBM。在Worker完成訓練之后,它將結果發送至Master,Master將會綜合這些結果。迭代完成以后,Master通過啟動反向廣播精確調整相位來完成流程。
結果
我們評估了使用MNIST手寫數字識別[3]來實現的深度學習的性能。數據集包含手工標記的0-9的數字。訓練集由60000張圖片組成,測試集包含了10000張圖片。
為了測量性能,DBN首先被預訓練,然后在60000張照片中被精確調整,通過以上的步驟,DBN會在10000張測試圖片上進行評估。在訓練或者評估期間,沒有對圖片進行預處理。出錯率是由為分類的圖片總數與測試集中的圖片總數的比率而得到。
當在每個RBM使用500-500-2000的隱藏單元,同時使用十個節點的分布式設備的時候,我們能達到最佳的分類錯誤率1.66%。錯誤率可堪比原始算法的作者所報告的1.2%(使用500-500-2000的隱藏單元)[2],和類似設置下的一些結果[3]。我們注意到原始實現是在單個機器上的,而我們的實現是在分布式機器上的。參數平均的這一步導致性能略微降低,然而將算法分布在多臺機器上是利大于弊的。下面的表格總結出了在十個節點的集群上運行的每個層的隱藏單元數對應的錯誤率的變化。
表1:MNIST性能評估
深入思考
我們成功地部署了一個深度學習系統,我們相信它在解決一些機器學習問題過程中很有用處。此外,迭代降低抽象可以被利用來分布任何其它合適的機器學習算法,能夠利用通用的Hadoop集群將會被證明非常有利于在大數據集上運行大型機器學習算法。我們注意到,我們的當前框架需要一些改進,主要圍繞減少網絡延遲和更先進的資源管理。另外,我們需要優化DBN框架,這樣可以減少內部節點之間的通信。隨著對集群資源的精確調整控制,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
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com