用 Apache Spark 和 TensorFlow 進(jìn)行深度學(xué)習(xí)

本文由 Tim Hunter 發(fā)表于 ENGINEERING BLOG
本文鏈接:https://databricks.com/blog/2016/01/25/deep-learning-with-apache-spark-and-tensorflow.html


神經(jīng)網(wǎng)絡(luò)在過(guò)去幾年中取得了驚人的進(jìn)步,現(xiàn)在已成為圖像識(shí)別和自動(dòng)翻譯領(lǐng)域最先進(jìn)的技術(shù)钓账。TensorFlow是 Google 為數(shù)字計(jì)算和神經(jīng)網(wǎng)絡(luò)發(fā)布的新框架讲衫。在這篇博文中,我們將演示如何使用 TensorFlow 和 Spark 一起來(lái)訓(xùn)練和應(yīng)用深度學(xué)習(xí)模型。

你可能會(huì)想:當(dāng)大多數(shù)高性能深度學(xué)習(xí)實(shí)現(xiàn)只是單節(jié)點(diǎn)時(shí)金顿,Apache Spark 在這里使用什么日丹?為了回答這個(gè)問(wèn)題,我們將通過(guò)兩個(gè)用例來(lái)解釋如何使用 Spark 和 TensorFlow 的集群機(jī)器來(lái)改進(jìn)深度學(xué)習(xí)流程:

  1. 超參數(shù)調(diào)整:使用 Spark 找到神經(jīng)網(wǎng)絡(luò)訓(xùn)練的最佳超參數(shù)怎抛,使得訓(xùn)練時(shí)間減少 10 倍并且錯(cuò)誤率降低 34 %卑吭。
  2. 大規(guī)模部署模型:使用 Spark,在大量數(shù)據(jù)上應(yīng)用訓(xùn)練后神經(jīng)網(wǎng)絡(luò)模型马绝。

超參數(shù)調(diào)優(yōu)

深度學(xué)習(xí)機(jī)器學(xué)習(xí)(ML)技術(shù)的一個(gè)例子是人工神經(jīng)網(wǎng)絡(luò)豆赏。它們采取復(fù)雜的輸入,例如圖像或音頻記錄富稻,然后對(duì)這些信號(hào)應(yīng)用復(fù)雜的數(shù)學(xué)變換掷邦。該變換的輸出是數(shù)值向量,其更容易被其他 ML 算法運(yùn)算椭赋。人工神經(jīng)網(wǎng)絡(luò)通過(guò)模仿人腦視覺(jué)皮質(zhì)中的神經(jīng)元(以簡(jiǎn)化形式)執(zhí)行這種轉(zhuǎn)化抚岗。

正如人類學(xué)習(xí)解釋他們所看到的那樣,人工神經(jīng)網(wǎng)絡(luò)需要被訓(xùn)練來(lái)識(shí)別「有趣」的特定模式哪怔。例如宣蔚,這些可以是簡(jiǎn)單的圖案,例如认境,邊緣胚委,圓形,但是它們可能要復(fù)雜元暴。在這里篷扩,我們將使用由 NIST 組合的經(jīng)典數(shù)據(jù)集,并訓(xùn)練神經(jīng)網(wǎng)絡(luò)來(lái)識(shí)別這些數(shù)字:

1

TensorFlow 庫(kù)自動(dòng)化訓(xùn)練各種形狀和大小的神經(jīng)網(wǎng)絡(luò)算法的創(chuàng)建茉盏。然而鉴未,構(gòu)建神經(jīng)網(wǎng)絡(luò)的實(shí)際過(guò)程比僅在數(shù)據(jù)集上運(yùn)行一些函數(shù)更復(fù)雜枢冤。通常會(huì)有許多非常重要的影響模型訓(xùn)練效果的超參數(shù)(外行人術(shù)語(yǔ)中的配置參數(shù))設(shè)置。選擇正確的參數(shù)會(huì)導(dǎo)致高性能铜秆,而不良參數(shù)會(huì)導(dǎo)致訓(xùn)練時(shí)間長(zhǎng)淹真,性能不佳。在實(shí)踐中连茧,機(jī)器學(xué)習(xí)從業(yè)者用不同的超參數(shù)多次重復(fù)運(yùn)行相同的模型核蘸,以便找到最佳超參數(shù)集。這是一種稱為超參數(shù)優(yōu)化的經(jīng)典技術(shù)啸驯。

建立神經(jīng)網(wǎng)絡(luò)時(shí)客扎,有很多要慎重選擇的超參數(shù)。例如:

  • 每層神經(jīng)元數(shù)量:太少的神經(jīng)元會(huì)降低網(wǎng)絡(luò)的表達(dá)力罚斗,但太多會(huì)大大增加運(yùn)行時(shí)間并返回帶有噪聲的估計(jì)徙鱼。
  • 學(xué)習(xí)率:如果太高,神經(jīng)網(wǎng)絡(luò)只會(huì)關(guān)注最近幾個(gè)樣本针姿,忽視以前積累的所有經(jīng)驗(yàn)袱吆。如果太低,達(dá)到好狀態(tài)需要太長(zhǎng)時(shí)間距淫。

有趣的是绞绒,即使 TensorFlow 本身沒(méi)有分布,超參數(shù)調(diào)整過(guò)程也是「尷尬并行」榕暇,可以使用 Spark 進(jìn)行分布蓬衡。在這種情況下,我們可以使用 Spark 來(lái) broadcast 諸如數(shù)據(jù)和模型描述之類的常見(jiàn)元素拐揭,然后在整個(gè)機(jī)器群集之間以容錯(cuò)方式調(diào)度各個(gè)重復(fù)計(jì)算撤蟆。

使用Spark如何提高準(zhǔn)確性?超級(jí)參數(shù)的默認(rèn)設(shè)置精度為 99.2%堂污。通過(guò)超參數(shù)調(diào)優(yōu),在測(cè)試集上最好的結(jié)果是具有 99.47% 的精度龄砰,這減少 34% 的測(cè)試誤差盟猖。分配添加到集群的節(jié)點(diǎn)數(shù)呈線性關(guān)系的計(jì)算:使用 13 節(jié)點(diǎn)集群,我們能夠并行訓(xùn)練 13 個(gè)模型换棚,這相當(dāng)于在一臺(tái)機(jī)器上一次訓(xùn)練一個(gè)模型的** 7 倍速度**式镐。以下是關(guān)于機(jī)器集群數(shù)量的計(jì)算時(shí)間(以秒為單位)的圖表:

更重要的是,我們深入了解訓(xùn)練過(guò)程的各種訓(xùn)練超參數(shù)的敏感性固蚤。例如娘汞,對(duì)于不同數(shù)量的神經(jīng)元,我們繪制關(guān)于學(xué)習(xí)率的最終測(cè)試性能:


4

這顯示了神經(jīng)網(wǎng)絡(luò)的典型權(quán)衡曲線:

  • 學(xué)習(xí)率至關(guān)重要:如果太低夕玩,神經(jīng)網(wǎng)絡(luò)不會(huì)學(xué)到任何東西(高測(cè)試錯(cuò)誤率)你弦;如果太高惊豺,在某些配置中,訓(xùn)練過(guò)程可能隨機(jī)振蕩甚至發(fā)散禽作。
  • 神經(jīng)元的數(shù)量對(duì)于獲得良好的性能并不重要尸昧,并且具有許多神經(jīng)元的網(wǎng)絡(luò)對(duì)于學(xué)習(xí)率更加敏感。這是奧卡姆的剃刀原理:對(duì)于大多數(shù)目標(biāo)來(lái)說(shuō)旷偿,更簡(jiǎn)單的模型往往都是「夠好」的烹俗。如果你在缺少 1% 的測(cè)試錯(cuò)誤率后有足夠的時(shí)間和資源,你可以投入大量資源進(jìn)行訓(xùn)練萍程,并找到產(chǎn)生影響的適當(dāng)?shù)某瑓?shù)幢妄。

通過(guò)使用稀疏的參數(shù)樣本,我們可以對(duì)最有希望的參數(shù)集進(jìn)行歸零茫负。

我該怎么用蕉鸳?

由于 TensorFlow 可以使用每個(gè)機(jī)器的所有核心,因此我們一次只能在每個(gè)機(jī)器運(yùn)行一個(gè)任務(wù)朽褪,并將它們批處理以限制競(jìng)爭(zhēng)置吓。TensorFlow 庫(kù)可以作為常規(guī) Python 庫(kù)安裝在 Spark 集群上,遵循 TensorFlow 網(wǎng)站上的說(shuō)明缔赠。以下筆記本顯示如何安裝 TensorFlow衍锚,讓用戶重新運(yùn)行此博客的實(shí)驗(yàn):

規(guī)模部署模型

TensorFlow 模型可以直接嵌入到管道中,以對(duì)數(shù)據(jù)集執(zhí)行復(fù)雜的識(shí)別任務(wù)嗤堰。例如戴质,我們展示了如何從已經(jīng)訓(xùn)練的股票神經(jīng)網(wǎng)絡(luò)模型中標(biāo)注一組圖像。

該模型首先使用 Spark 的內(nèi)置 broadcasting 機(jī)制分配給集群的機(jī)器:

5

然后將該模型加載到每個(gè)節(jié)點(diǎn)上并應(yīng)用于圖像踢匣。這是每個(gè)節(jié)點(diǎn)上運(yùn)行代碼的草圖:

6

通過(guò)將圖像批量化在一起告匠,可以使此代碼更有效率。

這是一個(gè)圖像的例子:

7

這里是根據(jù)神經(jīng)網(wǎng)絡(luò)對(duì)這個(gè)圖像的解釋离唬,這是非常準(zhǔn)確的:

8

期待

針對(duì)手寫數(shù)字識(shí)別和圖像標(biāo)識(shí)后专,我們已經(jīng)展示了如何結(jié)合 Spark 和 TensorFlow 訓(xùn)練和部署神經(jīng)網(wǎng)絡(luò)。即使我們使用的神經(jīng)網(wǎng)絡(luò)框架本身只適用于單節(jié)點(diǎn)输莺,我們可以使用 Spark 來(lái)分配超參數(shù)調(diào)整過(guò)程和模型部署戚哎。這不僅減少了訓(xùn)練時(shí)間,而且提高了準(zhǔn)確度嫂用,使我們更好地了解了各種超參數(shù)的敏感性型凳。

雖然此支持僅適用于 Python,但我們期待在 TensorFlow 和 Spark 框架的其余部分之間進(jìn)行更深入的集成嘱函。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末甘畅,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌疏唾,老刑警劉巖蓄氧,帶你破解...
    沈念sama閱讀 211,561評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異荸实,居然都是意外死亡匀们,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門准给,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)泄朴,“玉大人,你說(shuō)我怎么就攤上這事露氮∽婊遥” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 157,162評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵畔规,是天一觀的道長(zhǎng)局扶。 經(jīng)常有香客問(wèn)我,道長(zhǎng)叁扫,這世上最難降的妖魔是什么三妈? 我笑而不...
    開(kāi)封第一講書人閱讀 56,470評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮莫绣,結(jié)果婚禮上畴蒲,老公的妹妹穿的比我還像新娘。我一直安慰自己对室,他們只是感情好模燥,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,550評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著掩宜,像睡著了一般蔫骂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上牺汤,一...
    開(kāi)封第一講書人閱讀 49,806評(píng)論 1 290
  • 那天辽旋,我揣著相機(jī)與錄音,去河邊找鬼檐迟。 笑死戴已,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的锅减。 我是一名探鬼主播,決...
    沈念sama閱讀 38,951評(píng)論 3 407
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼伐坏,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼怔匣!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 37,712評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤每瞒,失蹤者是張志新(化名)和其女友劉穎金闽,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體剿骨,經(jīng)...
    沈念sama閱讀 44,166評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡代芜,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,510評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了浓利。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片挤庇。...
    茶點(diǎn)故事閱讀 38,643評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖贷掖,靈堂內(nèi)的尸體忽然破棺而出嫡秕,到底是詐尸還是另有隱情,我是刑警寧澤苹威,帶...
    沈念sama閱讀 34,306評(píng)論 4 330
  • 正文 年R本政府宣布昆咽,位于F島的核電站,受9級(jí)特大地震影響牙甫,放射性物質(zhì)發(fā)生泄漏掷酗。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,930評(píng)論 3 313
  • 文/蒙蒙 一窟哺、第九天 我趴在偏房一處隱蔽的房頂上張望泻轰。 院中可真熱鬧,春花似錦脏答、人聲如沸糕殉。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,745評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)阿蝶。三九已至,卻和暖如春黄绩,著一層夾襖步出監(jiān)牢的瞬間羡洁,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,983評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留钓简,地道東北人内地。 一個(gè)月前我還...
    沈念sama閱讀 46,351評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像真仲,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子初澎,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,509評(píng)論 2 348

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