99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁精彩閱讀Hadoop 2.0 上深度學(xué)習(xí)的解決方案_數(shù)據(jù)分析師
Hadoop 2.0 上深度學(xué)習(xí)的解決方案_數(shù)據(jù)分析師
2015-01-20
收藏

Hadoop 2.0 上深度學(xué)習(xí)的解決方案_數(shù)據(jù)分析師


波士頓的 數(shù)據(jù)科學(xué)團隊正在利用尖端工具和算法來優(yōu)化商業(yè)活動,且這些商業(yè)活動是基于對用戶數(shù)據(jù)中的深刻透析。數(shù)據(jù)科學(xué)大量使用機器算法,可以幫助我們在數(shù)據(jù)中識別和利用模式。從互聯(lián)網(wǎng)大規(guī)模數(shù)據(jù)中獲取透析是一項具有挑戰(zhàn)性的任務(wù),因此,能大規(guī)模運行算法是一個至關(guān)重要的需求。伴隨著數(shù)據(jù)的爆炸性增長和成千上萬的機器集群,我們需要使算法可以適應(yīng)在如此分布的環(huán)境下運行。在通用的分布式計算環(huán)境中運行機器學(xué)習(xí)算法具有一系列的挑戰(zhàn)。

\

這里,我們探討一下如何在一個Hadoop集群中實現(xiàn)和部署深度學(xué)習(xí)(一個尖端機器學(xué)習(xí)框架)。對于算法是如何適應(yīng)運行在一個分布式環(huán)境中,我們提供了具體的細節(jié)。我們也給出了算法在標準數(shù)據(jù)集上的運行結(jié)果。

深度信任網(wǎng)絡(luò)

深度信任網(wǎng)絡(luò)(Deep Belief Networks, DBN)是在貪婪和無監(jiān)督的條件下通過迭代和訓(xùn)練受限的玻耳茲曼機(Boltzmann Machines, RMB)而得到的圖形模型。通過對如下可被觀察的維度x和隱藏層hk之間相互連接的分布式進行建模,DBN被訓(xùn)練來提取訓(xùn)練數(shù)據(jù)的深層透析。

 

\

 

表達式1:DBN分布式

在下圖中,輸入層和隱藏層的關(guān)系是可以被觀察到的。從高層次來看,第一層被作為RBM來訓(xùn)練,為原始輸入x進行建模。輸入的數(shù)據(jù)是個稀疏二進制維度,表明數(shù)據(jù)將會被分類,比如,一個二進制的數(shù)字圖像。后續(xù)層把前面的層傳遞過來的數(shù)據(jù)(樣本或activations)當作訓(xùn)練示例使用。層數(shù)可以通過經(jīng)驗來決定,以此來獲得更好的模型性能,DBN支持任意多的層數(shù)。

 

\

 

圖1:DBN層次

下面的代碼片段表明了進入RBM的訓(xùn)練。在提供給RBM的輸入數(shù)據(jù)中,有多個預(yù)定義的時間點。輸入數(shù)據(jù)被分成小批量數(shù)據(jù),為各個層計算weights、activations和deltas。

 

\

 

在所有的層都被訓(xùn)練以后,深度網(wǎng)絡(luò)的參數(shù)調(diào)整使用受監(jiān)督的訓(xùn)練標準。受監(jiān)督的訓(xùn)練標準,比如,可以作為一個分類問題來設(shè)計,允許使用深度網(wǎng)絡(luò)來解決分類問題。更復(fù)雜的受監(jiān)督的標準可以用來提供如情景解讀之類的有趣的結(jié)果,比如解釋圖片里展示的東西是什么。

基礎(chǔ)構(gòu)造

深度學(xué)習(xí)受到了廣泛的關(guān)注,不僅僅是因為它可以得出比其他一些學(xué)習(xí)算法更優(yōu)異的結(jié)果,也因為它可以在分布式設(shè)備上運行,允許處理大規(guī)模的數(shù)據(jù)集。深度網(wǎng)絡(luò)可以在兩個級別進行并行、層級別和數(shù)據(jù)級別[6]。對于層級別的并行,許多實現(xiàn)使用GPU數(shù)組來并行計算層級別activations和頻繁同步它們。然而,這種方法不適合那種數(shù)據(jù)駐留在通過網(wǎng)絡(luò)連接的多個機器的集群,因為有著較高的網(wǎng)絡(luò)開銷。對于數(shù)據(jù)層的并行,訓(xùn)練是在數(shù)據(jù)集上進行并行的,更適合分布式設(shè)備。Paypal的大部分數(shù)據(jù)存儲在Hadoop集群上,因此能夠運行那些集群上的算法是我們的首要任務(wù)。專用集群的維護和支持也是一個我們需要考慮的重要因素。然而,由于深度學(xué)習(xí)本質(zhì)上是迭代的,像MapReduce這樣的范式不適合運行這些算法。但是隨著Hadoop2.0和基于YARN的資源管理的問世,我們可以編寫迭代程序,同時可以精細地控制程序使用的資源。我們使用了IterativeReduce [7] , Hadoop YARN里面的一個用戶編寫迭代算法的程序,我們可以將它部署在一個運行Hadoop 2.4.1的Paypal集群中。

方法

我們實現(xiàn)了Hinton的核心算法,在[2]中引用的。由于我們的需求是分散運行在多個機器的集群中的算法,我們在這樣的環(huán)境下使用了他們的算法。對于在多個機器上分散這個算法,我們參照了Grazia所提出的指南[6]。下面是對我們的實現(xiàn)做的詳細總結(jié):

? Master節(jié)點初始化RBM的weights。
? Master節(jié)點向Worker節(jié)點推送weights和splits。
? Worker節(jié)點在一個數(shù)據(jù)集時間點訓(xùn)練一個RBM層,換句話說,在一個Worker節(jié)點完全通過所有的split后,向Master發(fā)送更新后的weights。
? 在一個給定的時間點里,Master節(jié)點對來自所有Worker節(jié)點的weights求平均值。
? 在預(yù)定義的時間集(我們的例子中是50)中,重復(fù)3-5步操作。
? 第6步完成以后,有一個層就被訓(xùn)練了。后續(xù)的RBM層也重復(fù)這些步驟。
? 當所有的層都被訓(xùn)練以后,深度網(wǎng)絡(luò)就會通過使用錯誤反向廣播機制準確地調(diào)整好。

下圖描述了在運行深度學(xué)習(xí)算法時的一個單個數(shù)據(jù)集時間點(步驟3-5)。我們注意到,這個范式可以被利用來實現(xiàn)一個主機可迭代的機器學(xué)習(xí)算法。

 

\

 

圖2:用于訓(xùn)練的單個數(shù)據(jù)集時間點

下面的代碼片段表明了在訓(xùn)練單個機器的DBN中所涉及的步驟。數(shù)據(jù)集首先被拆分成多個批次,然后多個RBM層會被順序地初始化和訓(xùn)練。在RBM都被訓(xùn)練以后,它們會通過一個準確調(diào)整的錯誤反向廣播相位。

 

\

 

我們使用了IterativeReduce[7]的實現(xiàn)很大程度是為了YARN管道。我們對實現(xiàn)做出了重大改革,可以將它利用到我們的深度學(xué)習(xí)算法實現(xiàn)。IterativeReduce的實現(xiàn)是為Cloudera Hadoop分布式而編寫,它被我們重置了平臺,以此來適應(yīng)標準的Apache Hadoop分布式。我們還重寫了實現(xiàn),以此來使用[8]中描述的標準編程模型。特別是,我們需要YARN客戶端API在ResourceManager和客戶端程序之間進行通信。我們也使用了AMRMClient和AMNMClient在ApplicationMaster、ResourceManager和NodeManager之間進行通信。

我們首先使用YARN API提交應(yīng)用程序到Y(jié)ARN資源管理器:

 

\

 

在應(yīng)用被提交以后,YARN資源管理器啟動應(yīng)用程序Master。如果必要的話,應(yīng)用程序Master負責分配和釋放Worker容器。程序Master使用AMRMClient來與資源管理器進行通信。

 

\

 

應(yīng)用程序Master使用NMClient API在容器(主節(jié)點傳遞過來的)中運行命令。

 

\

 

一旦應(yīng)用Master啟動了它需要的Worker容器,它設(shè)置一個端口來和應(yīng)用Master進行通信。對于我們深度學(xué)習(xí)實現(xiàn)來說,我們新增了一些方法,它們需要為原始的IterativeReduce接口提供參數(shù)初始化、逐層訓(xùn)練和精確調(diào)整信號。IterativeReduce使用Apache Avro IPC來實現(xiàn)Master和Worker之間的通信。

下面的代碼片段表明了一系列涉及Master-Worker節(jié)點的分布式訓(xùn)練,Master向worker發(fā)送初始參數(shù),然后Worker在部分數(shù)據(jù)上訓(xùn)練它的RBM。在Worker完成訓(xùn)練之后,它將結(jié)果發(fā)送至Master,Master將會綜合這些結(jié)果。迭代完成以后,Master通過啟動反向廣播精確調(diào)整相位來完成流程。

 

\

 

結(jié)果

我們評估了使用MNIST手寫數(shù)字識別[3]來實現(xiàn)的深度學(xué)習(xí)的性能。數(shù)據(jù)集包含手工標記的0-9的數(shù)字。訓(xùn)練集由60000張圖片組成,測試集包含了10000張圖片。

為了測量性能,DBN首先被預(yù)訓(xùn)練,然后在60000張照片中被精確調(diào)整,通過以上的步驟,DBN會在10000張測試圖片上進行評估。在訓(xùn)練或者評估期間,沒有對圖片進行預(yù)處理。出錯率是由為分類的圖片總數(shù)與測試集中的圖片總數(shù)的比率而得到。

當在每個RBM使用500-500-2000的隱藏單元,同時使用十個節(jié)點的分布式設(shè)備的時候,我們能達到最佳的分類錯誤率1.66%。錯誤率可堪比原始算法的作者所報告的1.2%(使用500-500-2000的隱藏單元)[2],和類似設(shè)置下的一些結(jié)果[3]。我們注意到原始實現(xiàn)是在單個機器上的,而我們的實現(xiàn)是在分布式機器上的。參數(shù)平均的這一步導(dǎo)致性能略微降低,然而將算法分布在多臺機器上是利大于弊的。下面的表格總結(jié)出了在十個節(jié)點的集群上運行的每個層的隱藏單元數(shù)對應(yīng)的錯誤率的變化。

 

\

 

表1:MNIST性能評估

深入思考

我們成功地部署了一個深度學(xué)習(xí)系統(tǒng),我們相信它在解決一些機器學(xué)習(xí)問題過程中很有用處。此外,迭代降低抽象可以被利用來分布任何其它合適的機器學(xué)習(xí)算法,能夠利用通用的Hadoop集群將會被證明非常有利于在大數(shù)據(jù)集上運行大型機器學(xué)習(xí)算法。我們注意到,我們的當前框架需要一些改進,主要圍繞減少網(wǎng)絡(luò)延遲和更先進的資源管理。另外,我們需要優(yōu)化DBN框架,這樣可以減少內(nèi)部節(jié)點之間的通信。隨著對集群資源的精確調(diào)整控制,Hadoop YARN框架給我們提供了更多的靈活性。

數(shù)據(jù)分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個參數(shù)驗證碼對象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺檢測極驗服務(wù)器是否宕機 new_captcha: data.new_captcha, // 用于宕機時表示是新驗證碼的宕機 product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說明請參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計時完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }