當(dāng)Spark遇上TensorFlow分布式深度學(xué)習(xí)框架原理和實踐

近年來橄镜,機器學(xué)習(xí)和深度學(xué)習(xí)不斷被炒熱,tensorflow 作為谷歌發(fā)布的數(shù)值計算和神經(jīng)網(wǎng)絡(luò)的新框架也獲得了諸多關(guān)注,spark和tensorflow深度學(xué)習(xí)框架的結(jié)合,使得tensorflow在現(xiàn)有的spark集群上就可以進行深度學(xué)習(xí)矮烹,而不需要為深度學(xué)習(xí)設(shè)置單獨的集群,為了深入了解spark遇上tensorflow分布式深度學(xué)習(xí)框架的原理和實踐罩锐,飛馬網(wǎng)于4月10日晚奉狈,邀請到先后就職于百度抢肛、騰訊恕酸,負責(zé)過多個大數(shù)據(jù)研發(fā)工作的李曙鵬老師進行線上直播,主要向我們介紹spark和深度學(xué)習(xí)的基本原理萍恕、spark與深度學(xué)習(xí)領(lǐng)域相結(jié)合的最新的發(fā)展方向境氢,以及如何結(jié)合tensorflowonspark開源框架蟀拷,構(gòu)建一個分布式圖像分類模型訓(xùn)練。

以下是本次分享實錄:


上面這張圖片顯示的是本次直播所針對的受眾和可能的收益萍聊,大家可以了解一下问芬。

一.大數(shù)據(jù)的價值

什么是大數(shù)據(jù)的價值呢?李老師根據(jù)自身以往的項目經(jīng)驗和互聯(lián)網(wǎng)主流的大數(shù)據(jù)應(yīng)用場景寿桨,大致總結(jié)了以下三種價值此衅。


二.計算的核心問題

結(jié)合上面所說的大數(shù)據(jù)的價值和應(yīng)用場景,我們把它歸納為一條計算流:首先從數(shù)據(jù)存儲當(dāng)中經(jīng)過數(shù)據(jù)加工亭螟、抽取挡鞍,得到提煉后的數(shù)據(jù)、特征预烙,然后進行進一步的模型訓(xùn)練墨微,得到模型。


這條計算流的核心問題可以歸納為y=f(x)這個函數(shù)扁掸。對于第一階段的數(shù)據(jù)ETL和查詢來講翘县,主要解決的是數(shù)據(jù)源對接、實時數(shù)據(jù)整合谴分、數(shù)據(jù)歸一化锈麸、特征生成等應(yīng)用場景,它的計算框架代表是spark牺蹄,輸入是f()\x忘伞,輸出是y,非常適合做分布式數(shù)據(jù)計算。第二階段的模型訓(xùn)練氓奈,主要有模型建模匿刮、反向計算、梯度更新探颈、超參數(shù)調(diào)優(yōu)熟丸、效果評估等流程,它的計算框架代表是tensorflow伪节,輸入是x\y光羞,輸出是f(),更多關(guān)注的是模型建模和分布式參數(shù)更新怀大。

接下來纱兑,我們就針對以上兩個框架做一些基本原理的介紹和概述。

三.spark概述

1.spark的核心抽象:RDD

為什么要做RDD這樣的抽象呢化借?主要是因為它的一致性潜慎、高效并行、容錯機制蓖康,RDD屏蔽了分布式的復(fù)雜性铐炫,使開發(fā)程序時簡單如寫單機程序。

RDD也提供了一些操作蒜焊,如transform和action倒信,通過對RDD操作業(yè)務(wù)的封裝以及計算邏輯,我們就會形成一個大的DAG計算圖(參考下圖右)泳梆。


2.spark的大數(shù)據(jù)生態(tài):

這部分是講spark的數(shù)據(jù)生態(tài)鳖悠,包括它支持的組件庫、部署環(huán)境和數(shù)據(jù)來源优妙。


3.Spark SQL和Spark Streaming:

我們簡要介紹一下這兩個比較重要的組件乘综,首先是spark sql,它的典型應(yīng)用場景是OLAP多維分析套硼,它提供了一個DataFrame抽象接口卡辰,等價于RDD,如下圖所示熟菲。


Spark Streaming是spark的一個實時處理組件看政,它的典型應(yīng)用場景是實時特征處理,它提供了一個Dstreams抽象接口抄罕,直觀上理解Dstreams就是一個持續(xù)的RDD,如下圖于颖。


四.Deep Learning概述

下面呆贿,我們一起來了解關(guān)于Deep Learning的相關(guān)內(nèi)容。

1.Deep Learning模型:

第一個模型是非常經(jīng)典的多層感知器模型(MLP)。首次這個模型有一個輸入層做入,在輸入層后面有兩個隱藏層冒晰,最后是輸出層。這個模型的特點是全連接竟块,在最后輸出之前有一個Softmax函數(shù)壶运,它的作用是把最終的權(quán)值轉(zhuǎn)換為最直觀的概率。理論上來講浪秘,MLP這種帶有隱藏層的神經(jīng)網(wǎng)絡(luò)可以擬合一切的函數(shù)蒋情,但它的計算量很大,所以傳統(tǒng)的MLP模型并不適合去更深層次地加深網(wǎng)絡(luò)結(jié)構(gòu)耸携。


真正把神經(jīng)網(wǎng)絡(luò)推向更深層次網(wǎng)絡(luò)結(jié)構(gòu)模型的是CNN卷積神經(jīng)網(wǎng)絡(luò)棵癣,它通常應(yīng)用在圖像分類等領(lǐng)域,這里有一個概念—感受野夺衍,所謂感受野就是空間局部性的考慮狈谊,它認為圖像上比較接近的圖像領(lǐng)域具有更強的相關(guān)性,圖像上更遠的像素之間相關(guān)性更弱沟沙,基于感受野的考慮河劝,它把全連接層替換為卷積操作。

卷積操作的特點是可以將局部特征抽象化矛紫,另外大幅減少計算量丧裁,以便加深神經(jīng)網(wǎng)絡(luò),豐富語義表達含衔。


2.Tensorflow模型建模與訓(xùn)練:

介紹完深度學(xué)習(xí)模型后煎娇,回到我們的tensorflow部分,首先我們了解一下tensorflow是怎樣來做模型建模的贪染。如下圖所示缓呛,X是Tensor,W和b是Variable杭隙,Matmul哟绊、Add、ReLU都是Operator痰憎,最后組成一個神經(jīng)網(wǎng)絡(luò)圖Graph票髓。


其次,我們來了解一下tensorflow訓(xùn)練的核心問題—擬合f()铣耘,主要通過反向梯度計算來擬合f()洽沟,反向梯度計算的目的是計算梯度和更新參數(shù),這里涉及到Loss函數(shù)和最小化Loss蜗细。那么怎么去計算梯度呢裆操?主要通過鏈式求導(dǎo)(看下圖右)怒详。一次鏈式求導(dǎo)只是一次的前向和后向的計算結(jié)果,在訓(xùn)練流程當(dāng)中踪区,我們通常批量計算昆烁,所以會涉及batch_size和epoch。


最后我們結(jié)合一個代碼事例缎岗,回顧一下前面所講的知識點:


我們以多層感知器模型MLP為例静尼,首先需要創(chuàng)建一個模型,模型定義就是兩個隱藏層加最后的輸出層传泊,定義好模型之后鼠渺,我們需要定義損失函數(shù),在這里它是對你的標(biāo)簽和預(yù)測輸出進行的交叉熵的損失定義或渤,然后選擇一個optimizer的優(yōu)化器來做優(yōu)化訓(xùn)練系冗,

在訓(xùn)練開始之前,你需要去調(diào)一個sess.run(init)對權(quán)值做一個隨機初始化的過程薪鹦,初始化之后掌敬,進入到我們的訓(xùn)練階段。

3.Tensorflow分布式訓(xùn)練機制:

剛才介紹的是tensorflow怎么去定義模型以及怎么去做反向計算池磁,那么奔害,在大規(guī)模數(shù)據(jù)場景下,它又是怎樣工作的地熄?


Tensorflow本身提供了一些并行機制华临,第一個是模型并行機制,就是基于圖去拆分(如上圖左下)端考,它會把一張大的圖拆分成很多部分雅潭,每個部分都會在很多設(shè)備上去運行、計算却特。通常是針對一個節(jié)點無法存下整個模型的情況下扶供,去對圖進行拆分。

更多場景下我們的數(shù)據(jù)量會比較大裂明,這時候就采用數(shù)據(jù)并行機制椿浓,在這種機制下tensorflow有兩個角色,一個是參數(shù)服務(wù)器闽晦,負責(zé)參數(shù)的存儲和交換更新扳碍,一個是工作節(jié)點,負責(zé)具體的模型計算仙蛉。每個工作節(jié)點會負責(zé)它領(lǐng)域內(nèi)的數(shù)據(jù)分片所對應(yīng)模型參數(shù)的更新計算笋敞,同時它們又會向參數(shù)服務(wù)器去傳遞它所計算的梯度,由參數(shù)服務(wù)器來匯總所有的梯度捅儒,再進一步反饋到所有節(jié)點液样,根據(jù)參數(shù)服務(wù)器合并參數(shù)的方式又分為同步更新和異步更新振亮,這兩種更新方式各有優(yōu)缺點巧还,異步更新可能會更快速地完成整個梯度計算鞭莽,而對于同步更新來講,它可以更快地進行一個收斂麸祷,選擇哪種方式取決于實際的應(yīng)用場景澎怒。

五.Deep Learning On Spark

經(jīng)過剛才的介紹,我們知道spark是一個分布式的通用計算框架阶牍,而以tensorflow為代表的deep learning是一個分布式模型訓(xùn)練框架喷面,它更多專注在梯度計算,那為什么要將兩者整合呢走孽?整合的意義在哪里惧辈?意義就是能實現(xiàn)更好的分布式訓(xùn)練和數(shù)據(jù)傳輸。


針對分布式訓(xùn)練的場景磕瓷,雅虎開源了TensorflowOnSpark的開源框架盒齿,它主要實現(xiàn)tensorflow能夠與spark相結(jié)合做分布式訓(xùn)練。同時也有其它的一些機制困食,例如边翁,CaffeOnSpark、MMLSpark(CNTK)硕盹、PaddleOnSpark符匾。

TensorflowOnSpark解決的核心問題是將spark作為分布式tensorflow的底層調(diào)動機制,通過spark executor去把tensorflow的進程調(diào)動起來瘩例,這樣在進行tensorflow訓(xùn)練時就不需要手動地去組建網(wǎng)絡(luò)啊胶。它也提供了一個API,通過調(diào)TFCluster.run這樣一個API垛贤,可以快速獲得tensorflow的一個分布式訓(xùn)練環(huán)境焰坪。


除此之外TensorflowOnSpark還提供了基于RDD的數(shù)據(jù)并行機制,如下圖所示南吮。這套機制非常方便地集成了spark已有的RDD處理機制琳彩,可以更好地跟spark sql或spark streaming去做相應(yīng)的集成。


然后進入到另外一個方向部凑,叫做spark-deep-learning露乏,是由spark的創(chuàng)始公司—Data Bricks發(fā)起的,它主要的目標(biāo)是提供一些high-level的API涂邀,把底層的模型進行組件化瘟仿,同時它期望可以兼容底層深度式學(xué)習(xí)框架。


這里有個“Transfer Learning as a Pipeline”的例子供大家了解比勉,如下圖所示:


TensorflowOnSpark Pipeline開發(fā)了兩個API劳较,一個是TFEstimator驹止,另一個是TFModel,提供了這兩個之后观蜗,你可以直接把它們集成到spark-deep-learning pipeline里面臊恋,進行進一步的訓(xùn)練。?

六.TensorflowOnSpark案例實踐

最后一部分墓捻,我們來進行案例實踐介紹抖仅,我們要解決的是一個圖像分類問題,這里采用了一個kaggle dataset砖第,叫做花朵識別撤卢,有5個類別,4000多張圖片梧兼,包括郁金香放吩、太陽花、蒲公英羽杰、玫瑰和雛菊這五種花渡紫。把這些數(shù)據(jù)預(yù)先存儲于MongoDB中。我們的案例實踐是一個分布式解決方案忽洛,包括分布式數(shù)據(jù)獲取腻惠、分布式訓(xùn)練、分布式評估欲虚。


以下幾張圖片是代碼示例集灌,簡單了解一下:






下面是效果演示,左邊是圖片复哆,右邊是模型預(yù)測結(jié)果欣喧,預(yù)測結(jié)果都是一個概率值,根據(jù)概率值的大小來判定這是哪一類花朵:






以上六部分就是本次分享的主要內(nèi)容梯找,接下來是問答時間唆阿,我們來看看都有哪些問題。

1.整個訓(xùn)練過程需要人工參與嗎锈锤?準確率的提高是需要人工來參與嗎驯鳖?

李老師:整個訓(xùn)練過程不需要人工參與,準確率的提高涉及超參優(yōu)化久免,deep leaning pipeline中提供了grid search機制浅辙,可以做些自動超參選擇。

2.現(xiàn)在這訓(xùn)練的過程是不是只針對靜態(tài)的圖片阎姥?動態(tài)的場景可以嗎记舆?

李老師:你的動態(tài)場景如果是視頻,本身也可抽幀為圖片呼巴,視頻分類是另外一種應(yīng)用問題泽腮,但底層也需要借助已有的圖像分類模型御蒲,圖像分類本身的應(yīng)用場景非常廣,比如和無人機相結(jié)合诊赊。

3.這套框架適用于文本的自動分類嗎厚满?

李老師:框架同樣適合文本分類等其他領(lǐng)域,差別在于數(shù)據(jù)schema和模型豪筝,訓(xùn)練過程涉及到一些圖像歸一化的過程痰滋,但沒有模版匹配摘能,你可以理解為所有的特征抽取都是由deep learning自動抽取出來的续崖。



以上就是本次線上直播的全部內(nèi)容,相信通過本次學(xué)習(xí)团搞,一定對深度學(xué)習(xí)和機器算法有了更細致深入的掌握严望。想了解更多更詳細內(nèi)容的小伙伴們,可以關(guān)注服務(wù)號:FMI飛馬網(wǎng)逻恐,點擊菜單欄飛馬直播像吻,即可進行學(xué)習(xí)。


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末复隆,一起剝皮案震驚了整個濱河市拨匆,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌挽拂,老刑警劉巖惭每,帶你破解...
    沈念sama閱讀 211,496評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異亏栈,居然都是意外死亡台腥,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,187評論 3 385
  • 文/潘曉璐 我一進店門绒北,熙熙樓的掌柜王于貴愁眉苦臉地迎上來黎侈,“玉大人,你說我怎么就攤上這事闷游【海” “怎么了?”我有些...
    開封第一講書人閱讀 157,091評論 0 348
  • 文/不壞的土叔 我叫張陵脐往,是天一觀的道長休吠。 經(jīng)常有香客問我,道長钙勃,這世上最難降的妖魔是什么蛛碌? 我笑而不...
    開封第一講書人閱讀 56,458評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮辖源,結(jié)果婚禮上蔚携,老公的妹妹穿的比我還像新娘希太。我一直安慰自己,他們只是感情好酝蜒,可當(dāng)我...
    茶點故事閱讀 65,542評論 6 385
  • 文/花漫 我一把揭開白布誊辉。 她就那樣靜靜地躺著,像睡著了一般亡脑。 火紅的嫁衣襯著肌膚如雪堕澄。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,802評論 1 290
  • 那天霉咨,我揣著相機與錄音蛙紫,去河邊找鬼。 笑死途戒,一個胖子當(dāng)著我的面吹牛坑傅,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播喷斋,決...
    沈念sama閱讀 38,945評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼唁毒,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了星爪?” 一聲冷哼從身側(cè)響起浆西,我...
    開封第一講書人閱讀 37,709評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎顽腾,沒想到半個月后近零,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,158評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡崔泵,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,502評論 2 327
  • 正文 我和宋清朗相戀三年秒赤,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片憎瘸。...
    茶點故事閱讀 38,637評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡入篮,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出幌甘,到底是詐尸還是另有隱情潮售,我是刑警寧澤,帶...
    沈念sama閱讀 34,300評論 4 329
  • 正文 年R本政府宣布锅风,位于F島的核電站酥诽,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏皱埠。R本人自食惡果不足惜肮帐,卻給世界環(huán)境...
    茶點故事閱讀 39,911評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧训枢,春花似錦托修、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,744評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至十酣,卻和暖如春涩拙,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背耸采。 一陣腳步聲響...
    開封第一講書人閱讀 31,982評論 1 266
  • 我被黑心中介騙來泰國打工兴泥, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人洋幻。 一個月前我還...
    沈念sama閱讀 46,344評論 2 360
  • 正文 我出身青樓郁轻,卻偏偏與公主長得像,于是被迫代替她去往敵國和親文留。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,500評論 2 348

推薦閱讀更多精彩內(nèi)容