作者 | 周玥楓
編輯 | Vincent
AI前線出品| ID:ai-front
AI 前線導(dǎo)語(yǔ):本文作者是來(lái)自 Google Brain 的工程師缴允,目前正在做 TensorFlow 和 TensorFlow 分布式的開(kāi)發(fā)以及使用機(jī)器學(xué)習(xí)來(lái)優(yōu)化 TensorFlow 的研究項(xiàng)目馅精。今天的文章湃密,他將為各位讀者深入分享深度學(xué)習(xí)的案例和 TensorFlow 的一些最新特性移怯,以及他本人在 Google Brain 的研究項(xiàng)目捎琐。
本文是Google Brain工程師周玥楓在QCon上海2017和DevFest 2017上的演講實(shí)錄虱咧,由GDG整理和發(fā)布耕拷。后臺(tái)回復(fù)“QConTF“下載QCon演講完整PPT。
Who am I
我的名字叫做周玥楓萧求,我是 Google? Brain 的工程師其兴,我現(xiàn)在做 TensorFlow 和 TensorFlow 分布式的開(kāi)發(fā)以及使用機(jī)器學(xué)習(xí)來(lái)優(yōu)化 TensorFlow 的研究項(xiàng)目。
今天首先跟大家分享深度深入學(xué)習(xí)的例子夸政,然后再跟大家簡(jiǎn)單介紹一下什么是 TensorFlow 元旬,以及 TensorFlow 一些最新特性,包括即將公開(kāi)甚至還沒(méi)有完成一些的特性守问,如果有時(shí)間的話匀归,我會(huì)花一些篇幅著重介紹新的特性。最后的時(shí)間我會(huì)簡(jiǎn)要介紹一下 Google? Brain 兩個(gè)研究項(xiàng)目酪碘。
Machine Learning
今天朋譬,我們看到機(jī)器學(xué)習(xí)已經(jīng)改變了我們的世界盐茎,機(jī)器科學(xué)家用深度學(xué)習(xí)的方法來(lái)檢測(cè)糖尿病和視網(wǎng)膜病變兴垦,其中檢測(cè)視網(wǎng)膜病變達(dá)能到 95% 的準(zhǔn)確率,甚至超過(guò)眼科專家 91% 的準(zhǔn)確率字柠。機(jī)器學(xué)習(xí)實(shí)現(xiàn)了機(jī)器和人類專家相媲美的準(zhǔn)確率探越。
同時(shí)機(jī)器學(xué)習(xí)也可以用在自動(dòng)駕駛方向,可以讓交通更加安全和高效窑业。
其次钦幔,機(jī)器學(xué)習(xí)能夠跨越語(yǔ)言的障礙,實(shí)現(xiàn)更加便捷的溝通和交流常柄,我們知道傳統(tǒng)的機(jī)器翻譯系統(tǒng)需要把不同語(yǔ)言詞組對(duì)應(yīng)起來(lái)鲤氢,通過(guò)一些復(fù)雜的甚至手寫(xiě)的規(guī)則搀擂,把一種語(yǔ)言轉(zhuǎn)換為一種語(yǔ)言,這種系統(tǒng)非常龐大且不利于維護(hù)卷玉,而且準(zhǔn)確度不夠高哨颂,所以最近興起了一種基于神經(jīng)網(wǎng)絡(luò)的方法,我們將其用 TensorFlow 實(shí)現(xiàn)出來(lái)相种,用這種方法來(lái)縮小機(jī)器和人類翻譯的差距威恼,能夠使翻譯更加準(zhǔn)確和自然。
同樣的寝并,機(jī)器學(xué)習(xí)還可以給人類帶來(lái)愉悅箫措,可以實(shí)現(xiàn)自動(dòng)修改照片、突出人物的前景衬潦、背景虛化等功能斤蔓,我們很快可以在手機(jī)上看到這個(gè)功能。
接下來(lái)看看機(jī)器學(xué)習(xí)在工業(yè)界的應(yīng)用别渔,第一個(gè)例子是 INSTACART 附迷,它是做雜貨當(dāng)天送貨服務(wù)的,顧客通過(guò)網(wǎng)絡(luò)應(yīng)用程序從當(dāng)?shù)卦S多零售商選出想要的商品并且購(gòu)買雜貨哎媚。這個(gè)軟件的客戶非常多喇伯〉揪荩客戶在購(gòu)買時(shí)面臨一個(gè)問(wèn)題捻悯,就是從數(shù)百萬(wàn)計(jì)零售商店或者商品中選出自己想要的物品低淡,所以 INSTACART 為了讓購(gòu)物者更快地找出想要的商品,用 TensorFlow 建立了一套深度學(xué)習(xí)模型用來(lái)最有效地排序商品列表餐塘,這種方法能大大省下購(gòu)物者尋找商品的時(shí)間。
第二個(gè)例子就是 UBER 候齿,UBER 用 TensorFlow 和基于 TensorFlow 的開(kāi)源項(xiàng)目來(lái)構(gòu)建一個(gè)叫做“米開(kāi)朗基羅”的系統(tǒng),這是一個(gè)內(nèi)部使用的機(jī)器學(xué)習(xí)平臺(tái),谷歌希望利用這個(gè)平臺(tái)讓內(nèi)部使用 AI 就像他們請(qǐng)求乘車一樣的方便。這個(gè)系統(tǒng)涵蓋了從數(shù)據(jù)管理、數(shù)據(jù)獲取和模型訓(xùn)練、評(píng)估、部署等方面,而且這個(gè)系統(tǒng)不但支持 TensorFlow 深度學(xué)習(xí),還支持其他機(jī)器學(xué)習(xí)的模型移盆。
第三個(gè)例子是 KEWPIE ,它用 TensorFlow 搭建了人工智能系統(tǒng)用來(lái)改善嬰兒食品的質(zhì)量,對(duì)食物產(chǎn)品進(jìn)行人工智能分析佛致,這樣可以識(shí)別出產(chǎn)品中可以接受的成分并且剔除產(chǎn)品中不能接受的成分罐脊,這樣保證了嬰兒食品的質(zhì)量层玲。
What Is TensorFlow
而實(shí)現(xiàn)上述這一切所有的基礎(chǔ)框架就是 TensorFlow.
我們?cè)?2015 年末開(kāi)源了 TensorFlow 润绵,希望把它做成能夠服務(wù)所有人的機(jī)器學(xué)習(xí)平臺(tái)。我們想要將它做成一個(gè)快速靈活的、生產(chǎn)環(huán)境就緒的框架卿捎。它可以很方便可以做研究,也可以很快部署到生產(chǎn)環(huán)境當(dāng)中厅篓。TensorFlow 本質(zhì)上是一個(gè)大規(guī)模的運(yùn)算框架贷笛,它的運(yùn)算被抽象成一張運(yùn)算矢量圖。就像在這邊看到一張運(yùn)算圖一樣尤筐,上面的節(jié)點(diǎn)代表運(yùn)算或者狀態(tài)汇荐。當(dāng)我們完成了一些運(yùn)算或者結(jié)束了一些狀態(tài)的時(shí)候,我們的數(shù)據(jù)就從一個(gè)節(jié)點(diǎn)流到另外一個(gè)節(jié)點(diǎn)盆繁。這個(gè)圖可以用任何語(yǔ)言來(lái)構(gòu)建掀淘,當(dāng)這張圖構(gòu)建完之后,我們把它傳到 TensorFlow 核心當(dāng)中進(jìn)行編譯油昂,進(jìn)行優(yōu)化然后來(lái)執(zhí)行革娄。
TensorFlow 也支持很多硬件平臺(tái),從最初的 CPU冕碟、GPU 拦惋,到即將發(fā)布 CLOUD CPU ,還有對(duì)安卓安寺、 iOS 的支持厕妖,甚至對(duì)嵌入式設(shè)備的支持。
我們將 TensorFlow 開(kāi)源到 Github 上面后挑庶,過(guò)去兩年興起了許多圍繞 TensorFlow 活躍的開(kāi)源社區(qū)言秸,現(xiàn)在我們有 67,000 多個(gè) star ,有 17,000 多個(gè) Github 項(xiàng)目名字當(dāng)中包括 TensorFlow. TensorFlow 不斷出現(xiàn)在各種大學(xué)課程和在線課程里面迎捺,很多大學(xué)也正在開(kāi)發(fā)基于 TensorFlow 的課程举畸,除此之外我們也發(fā)布了 TensorFlow 中文網(wǎng)站,大家把它可以當(dāng)做入門(mén) TensorFlow 的初級(jí)教程凳枝,叫做 https://tensorflow.google.cn.
New Feature of TensorFlow
現(xiàn)在我們看一下 TensorFlow 的最新特性抄沮。首先是 Eager Execution ,Eager Execution 是一種新的編程模式,我在之前一張幻燈片中展示了一個(gè)基于 TensorFlow 的靜態(tài)圖合是。
Eager? Execution 解決了靜態(tài)圖中一些問(wèn)題,解決了什么問(wèn)題呢锭环?首先它可以少寫(xiě)很多代碼聪全,就像上圖一樣。其次辅辩,通過(guò) Eager Execution 寫(xiě)代碼可以立刻發(fā)現(xiàn)它的錯(cuò)誤难礼,相對(duì)之前來(lái)說(shuō)可以大大提高編寫(xiě)代碼查錯(cuò)的效率。第三是可以用 Tensor 來(lái)編寫(xiě)控制流玫锋,就不需要用 TF 來(lái)做循環(huán)甚至做判斷蛾茉。最重要一點(diǎn)是如果用其他語(yǔ)言編寫(xiě)這張圖的話,再把這圖傳到 TensorFlow 核心中相當(dāng)于編寫(xiě)了另外一種代碼撩鹿∏妫看到這個(gè)幻燈片就是簡(jiǎn)單的例子,充分說(shuō)了 Eager? Execution 的簡(jiǎn)單之處节沦。
今年的 Google I/O 大會(huì)宣布了第二代 TPU键思,我們第二代 TPU 既可以做推理也可以作訓(xùn)練。一個(gè) TPU 可以實(shí)現(xiàn)很高的詞典運(yùn)算甫贯。我們甚至可以把很多代 TPU 聯(lián)合起來(lái)成為一個(gè)就像超級(jí)計(jì)算機(jī)一樣的計(jì)算核心吼鳞。在第二代 TPU 的幫助下,我們可以在 20 小時(shí)內(nèi)全部訓(xùn)練出 RESNET-50 的模型叫搁,以前如果只做一個(gè) TPU 的訓(xùn)練赔桌,可能要花一周的時(shí)間來(lái)訓(xùn)練這個(gè)模型。今天第二代 TPU 即將發(fā)布到 Google Cloud渴逻,并且推出供大家使用疾党。
下面講一下 TensorFlow 上層 API,除了神經(jīng)網(wǎng)絡(luò)訓(xùn)練速度惨奕,大家還關(guān)注如何更加方便實(shí)現(xiàn)用 TensorFlow 上層 API 來(lái)創(chuàng)建神經(jīng)網(wǎng)絡(luò)仿贬。Keras 是其中一個(gè) API ,它支持很多的后端墓贿。相信很多觀眾都用過(guò) Keras 茧泪,從本質(zhì)上來(lái)講 Keras 更加像一種 API 開(kāi)發(fā)規(guī)范。TensorFlow 有一個(gè) TF 就是 Keras 聋袋,但是它只是 API 規(guī)范實(shí)現(xiàn)的一種方式队伟,使用的是一個(gè)自定義 TensorFlow 后端,有了這個(gè)后端幽勒,我們可以讓 Keras 與 Estimators 或者 Secving 整合起來(lái)嗜侮,這樣會(huì)對(duì)分布式提供更好的支持。
還有一個(gè)在 TensorFlow 里面介紹的概念,叫做 Estimators 锈颗,這是一個(gè)比較輕量化顷霹,并且在谷歌內(nèi)部生產(chǎn)環(huán)境中廣泛使用的 API ,其中 Estimators 提供了很多模型供大家使用击吱,叫做 Canned Estimator 淋淀,他們的關(guān)系是這樣的:Estimators 和 tf.keras 上層封裝了一個(gè) Canned Estimator ,可以用其來(lái)封裝成各種模型覆醇。
如果你們習(xí)慣于 Keras 的接口的話朵纷,我們提供了一個(gè)上層 API 轉(zhuǎn)換的工具 ,叫做 model_to_estimator 永脓,一旦你有一個(gè)編譯好的 Keras 模型就可以調(diào)用這個(gè) model_to_estimator 來(lái)獲取一個(gè) Estimator袍辞,從而將 Keras 轉(zhuǎn)換成了 Estimator。
Estimator 還提供了分布式訓(xùn)練的接口常摧,如果你用 TensorFlow 來(lái)做分布式訓(xùn)練的話搅吁,你就可能熟悉我們的分布式模式。我們的 Estimator 很好地提供了對(duì)分布式訓(xùn)練的支持落午,只要寫(xiě)一份單機(jī)的代碼似芝,它就可以幫你構(gòu)建好在不同機(jī)器上的執(zhí)行的程序,訓(xùn)練的程序只要調(diào)用 Estimator.train 就能完成這一執(zhí)行過(guò)程板甘,只要調(diào)用它的 Estimator.evaluate 党瓮,整個(gè)集群就可以開(kāi)始訓(xùn)練了。
大家可以看一下這些 API 的文檔:TF,? KERAS, TFLAYERS 等等盐类,我們還發(fā)布了一個(gè)改進(jìn)過(guò)的程序員指南在官網(wǎng)上寞奸,希望大家去看一下。
下一個(gè)特性是 TensorFlow Lite 在跳,TensorFlow Lite 是跑在移動(dòng)設(shè)備上的 TensorFlow 的一個(gè)子集∏固眩現(xiàn)在移動(dòng)設(shè)備無(wú)處不在,并且越來(lái)越重要猫妙。在移動(dòng)設(shè)備上瓷翻,我們可以在野外判斷這個(gè)狗是什么品種或者判斷這個(gè)植物有沒(méi)有病害,利用人工智能都可以在移動(dòng)設(shè)備做一些應(yīng)用割坠,所以我們推出了 TensorFlow Lite.
為什么很多時(shí)候要在移動(dòng)設(shè)備上做齐帚?除了剛才說(shuō)的那些應(yīng)用場(chǎng)景,為什么要做移動(dòng)設(shè)備的推理彼哼?這是因?yàn)槲覀儠r(shí)常需要在一些特殊環(huán)境下做一系列的推理对妄,很多時(shí)候,尤其在野外敢朱,我們的網(wǎng)絡(luò)帶寬非常的低剪菱,網(wǎng)絡(luò)延遲非常大摩瞎。如果每次推理都向遠(yuǎn)程服務(wù)器發(fā)送請(qǐng)求,那對(duì)移動(dòng)設(shè)備的電池能力要求很高孝常。雖然現(xiàn)在市面上對(duì)移動(dòng)設(shè)備能夠完成推理有迫切的需求旗们,但是其中存在很多的挑戰(zhàn),最主要的挑戰(zhàn)是因?yàn)橐苿?dòng)設(shè)備的內(nèi)存构灸、計(jì)算資源以及帶寬等等受到了限制上渴。從編程角度來(lái)講,因?yàn)槠脚_(tái)抑制性很高冻押,開(kāi)發(fā)越來(lái)越復(fù)雜驰贷,比如說(shuō)在安卓上盛嘿,我們可以使用 CPU 或者指令等方式編寫(xiě)底層代碼洛巢,在 IOS 上又有自己一些平臺(tái)和工具,這種不同平臺(tái)的工具讓我們的硬件以及 API 的開(kāi)發(fā)次兆,甚至存在不同的 API 讓我們的開(kāi)發(fā)變得更復(fù)雜稿茉,所以我們?cè)O(shè)計(jì)了 TensorFlow Lite.
相比 TensorFlow Lite 的話, TensorFlow 主要關(guān)注一些大型的設(shè)備。TensorFlow Lite 讓小型的設(shè)備應(yīng)用更加效率芥炭,現(xiàn)在我們通過(guò)一個(gè)小的例子看 TensorFlow Lite 如何工作的漓库。
這個(gè)是 TensorFlow Lite 生命周期,首先我們以標(biāo)準(zhǔn)方式來(lái)運(yùn)行 TensorFlow园蝠,運(yùn)行結(jié)束之后渺蒿,我們得到 Graphdef 和 Checkpoint,我們通過(guò) TensorFlow Lite 提供一個(gè)轉(zhuǎn)換器彪薛,把它轉(zhuǎn)換成 TensorFlow Lite 的模型格式茂装。有了這個(gè) TensorFlow Lite 格式的模型之后,我們就可以把它轉(zhuǎn)移到移動(dòng)設(shè)備當(dāng)中善延。接入 TensorFlow Lite 顯示器就能夠在移動(dòng)設(shè)備加載這個(gè)模型少态。如果我們的顯示器直接調(diào)度 NeonKerels ,如果是在其他設(shè)備上易遣,還可以利用硬件加速器接口來(lái)定義自己對(duì)自己硬件的一些優(yōu)化彼妻。
下一個(gè)特性就是 Input Pipeline ,不管是初學(xué)者還是專家都會(huì)對(duì) Input Pipeline 感興趣豆茫,因?yàn)?Input Pipeline 使用起來(lái)非常痛苦侨歉。
它主要有兩種模式,一種是 Feeding揩魂,它優(yōu)點(diǎn)是可以用 python 靈活處理零距为肮,但是性能很差。而且單線程跑肤京,每一步訓(xùn)練都要等待數(shù)據(jù)處理的完成颊艳,這個(gè)對(duì) GPU 來(lái)說(shuō)效率非常低茅特。另外一種方式效率高一點(diǎn),就是把數(shù)據(jù)處理變成一系列的操作棋枕,這使用一個(gè) Queues 作為數(shù)據(jù)存放的臨時(shí)空間白修,我們把預(yù)處理好的數(shù)據(jù)和一些中間預(yù)處理數(shù)據(jù)放在 Queues 里面,通過(guò) python 來(lái)控制 Queues 的輸入和控制重斑。但是有一個(gè)問(wèn)題兵睛,這個(gè) python 有一個(gè)權(quán)值解釋器的鎖,所以它讓這個(gè) Queues 輸入性能受到很大的限制窥浪。
還有一個(gè)問(wèn)題就是祖很,我們寫(xiě)的數(shù)據(jù)處理模塊沒(méi)有辦法得到常用,也沒(méi)有辦法在訓(xùn)練的時(shí)候更改輸入數(shù)據(jù)漾脂。所以我們了開(kāi)發(fā)了一套 Input Pipeline假颇,因?yàn)榉N種原因,所以把它設(shè)計(jì)成惰性的列表骨稿。因?yàn)槲覀兊臄?shù)據(jù)很多長(zhǎng)得類似笨鸡,而且數(shù)據(jù)量可以比較大,所以可以把它定義成 LAZY坦冠,我們把它定義成惰性列表之后形耗,可以很自然用函數(shù)編程語(yǔ)言中的 map 和 filter 來(lái)定義預(yù)處理管道,我們?cè)诤芏嗾Z(yǔ)言當(dāng)中都可以看到 map 和 filter 的操作≌藁耄現(xiàn)在我們看一下它的接口激涤,我們還有第二個(gè)接口叫做 Iterator,可以方便把 edements 數(shù)據(jù)取出來(lái)判呕。就像很多一般的編程語(yǔ)言里面的 Iterator 一樣倦踢,我們可以對(duì)這個(gè) Iterator 配置不同的數(shù)據(jù),PPT 上這就是一個(gè)例子佛玄,大家可以看一下硼一。
Learn To Learn
在神經(jīng)網(wǎng)絡(luò)解決問(wèn)題的時(shí)候,神經(jīng)網(wǎng)絡(luò)也會(huì)給我們帶來(lái)一些新的問(wèn)題梦抢,就是我們?cè)O(shè)計(jì)神經(jīng)網(wǎng)絡(luò)架構(gòu)需要投入大量的專業(yè)知識(shí)和時(shí)間投資般贼,比如這個(gè)就是谷歌圖象分類的一個(gè) .NET 的架構(gòu),這個(gè)神經(jīng)網(wǎng)絡(luò)架構(gòu)設(shè)計(jì)從最初的卷積的架構(gòu)到現(xiàn)在復(fù)雜的架構(gòu)奥吩,經(jīng)過(guò)研究人員多年的實(shí)驗(yàn)不斷重復(fù)哼蛆、完善,才得以達(dá)到這么復(fù)雜的模型霞赫。
我們與其讓科研人員不斷在電腦面前腮介,為什么不用強(qiáng)大計(jì)算資源,讓機(jī)器自動(dòng)尋找好的神經(jīng)網(wǎng)絡(luò)架構(gòu)端衰?在谷歌我們用一種方法叠洗,就是用 RNN 循環(huán)神經(jīng)網(wǎng)絡(luò)來(lái)生成一個(gè)子網(wǎng)絡(luò)甘改,這個(gè)想法的來(lái)源是因?yàn)槲覀兛梢园岩粋€(gè)神經(jīng)網(wǎng)絡(luò)對(duì)應(yīng)成一個(gè)訓(xùn)練化的一個(gè)個(gè)序列,RNN 非常擅長(zhǎng)解決這類問(wèn)題灭抑,所以我們用 RNN 來(lái)生成一個(gè)子網(wǎng)絡(luò)十艾,我們把這個(gè)子網(wǎng)絡(luò)用真實(shí)數(shù)據(jù)進(jìn)行訓(xùn)練。通過(guò)訓(xùn)練準(zhǔn)確度的好壞來(lái)更新 RNN 的控制器腾节。在它下一次迭代當(dāng)中忘嫉,RNN 就會(huì)輸出更高精度的子網(wǎng)絡(luò)。這是 RNN 轉(zhuǎn)接架構(gòu)的例子案腺,這個(gè)例子看上去錯(cuò)綜復(fù)雜庆冕,其實(shí)也不難理解。
我們也嘗試用同樣的方法來(lái)生成優(yōu)化函數(shù)劈榨,然后把生成的優(yōu)化函數(shù)和常用的函數(shù)來(lái)進(jìn)行對(duì)比访递,從這張表可以看到生成的函數(shù)超過(guò)了現(xiàn)有函數(shù)的精度,但是這些生成的函數(shù)非常的不直觀鞋既,所以我們就開(kāi)始想力九,有沒(méi)有更加直觀的方法來(lái)處理 learn 2 learn 這個(gè)問(wèn)題耍铜,于是我們想到了進(jìn)化的算法邑闺,或者說(shuō)遺傳算法。既然一個(gè)簡(jiǎn)單單細(xì)胞生物都可以進(jìn)化到非常復(fù)雜的棕兼、有獨(dú)立思考多細(xì)胞生物陡舅,那么我們可以不可以把同樣理論用到模型的構(gòu)建上來(lái),于是我們就設(shè)計(jì)了這樣一種算法伴挚,在每個(gè)時(shí)間的開(kāi)始靶衍,我們建立了含有一千個(gè)訓(xùn)練好模型的種群,每一步進(jìn)化從一千個(gè)模型中隨機(jī)選兩個(gè)茎芋,比較他們的準(zhǔn)確率颅眶,準(zhǔn)確率低的模型就會(huì)被扔掉,準(zhǔn)確率高的模型會(huì)留下來(lái)田弥,而且模型會(huì)繁殖涛酗,他們繁殖的方式就是給模型創(chuàng)建一個(gè)副本,并且簡(jiǎn)單修改這個(gè)模型偷厦,看上去像基因變異一樣商叹,我們會(huì)訓(xùn)練這個(gè)變異的副本然后放在種群當(dāng)中。
這個(gè)是分布式訓(xùn)練的細(xì)節(jié)只泼。模型變異有很多種剖笙,我們剛才提到結(jié)構(gòu)的一些變化,甚至也有一些會(huì)保持不變请唱,但是我們會(huì)對(duì)它多訓(xùn)練一下弥咪,或者重新訓(xùn)練一下过蹂,因?yàn)槌跏蓟儺惙浅V匾W儺惢倪x擇是均勻分布概率的模型聚至。
我們看一下進(jìn)化時(shí)間的最新進(jìn)展榴啸,圖中橫軸代表的是時(shí)間,縱軸是準(zhǔn)確率晚岭,里面每個(gè)點(diǎn)代表種群當(dāng)中一個(gè)模型鸥印,灰色點(diǎn)是被淘汰的模型。右上方藍(lán)色的點(diǎn)是存活下來(lái)的模型坦报,訓(xùn)練三天之后就在這個(gè)位置库说。訓(xùn)練三天之后就可以得到一個(gè)比較高的準(zhǔn)確率。在訓(xùn)練十天之后片择,可以看到準(zhǔn)確度達(dá)到停止期潜的,也就是我們找到了個(gè)比較理想的模型。
Device Placement
我們看一下另外一個(gè)研究項(xiàng)目叫做 Device? placement 字管,他是用強(qiáng)化學(xué)習(xí)的方法來(lái)做 Device? Placement 啰挪,當(dāng)前機(jī)器學(xué)習(xí)使用了非常多的模型,也使用非常多的數(shù)據(jù)嘲叔,這個(gè)要求我們必須有很多的設(shè)備共同訓(xùn)練這個(gè)模型亡呵。
比如說(shuō)看到這個(gè)翻譯的模型就非常大。我們通常使用 128 個(gè) GPU 來(lái)訓(xùn)練硫戈,我們先簡(jiǎn)單介紹一下 Device? placement 锰什,Device? placement 就是把計(jì)算和設(shè)備對(duì)應(yīng)起來(lái),目前我們都是用一些人工的方法丁逝,甚至簡(jiǎn)單的算法汁胆。我們?cè)O(shè)置算法需要我們對(duì)設(shè)備有充分的了解,而且對(duì)模型有充分的了解霜幼,這個(gè)算法并不是簡(jiǎn)單從一個(gè)模型推廣到另外一個(gè)模型嫩码。但是目前非常時(shí)髦的做法,都是將基于這些規(guī)則的系統(tǒng)轉(zhuǎn)化為罪既,變成基于機(jī)器學(xué)習(xí)的系統(tǒng)铸题,所以我們也用了類似的方法。我們用強(qiáng)化學(xué)習(xí)的方法來(lái)解決這個(gè) Device? placement 的模型萝衩,我們受 learn 2 learn 方法的啟發(fā)來(lái)創(chuàng)建一個(gè)類似的模型回挽。
我們有一個(gè)網(wǎng)絡(luò),這個(gè)網(wǎng)絡(luò)以神經(jīng)網(wǎng)絡(luò)作為輸入猩谊,同時(shí)告訴一個(gè)網(wǎng)絡(luò)有多少計(jì)算資源千劈,這個(gè)網(wǎng)絡(luò)就會(huì)告訴我們 Neural? Model ,我們跑一下這個(gè)放置好的 Neural? Model 牌捷,根據(jù)運(yùn)行的時(shí)間來(lái)調(diào)整一下神經(jīng)網(wǎng)絡(luò)墙牌,我們用類似的機(jī)器翻譯的架構(gòu)涡驮。因?yàn)槟P捅容^大,比較慢喜滨,我們采用了數(shù)據(jù)并行方式來(lái)做訓(xùn)練捉捅。
之后我們看一下訓(xùn)練出來(lái)的結(jié)果,這是在一個(gè)神經(jīng)翻譯系統(tǒng) Device? placement 的結(jié)果虽风,上面白色的點(diǎn)代表是在 CPU 棒口,在 CPU 運(yùn)行的節(jié)點(diǎn),下面彩色點(diǎn)代表在不同 GPU 運(yùn)行的節(jié)點(diǎn)辜膝,盡管取得了 20% 左右的提高无牵,但是還是非常不利于理解。現(xiàn)階段這個(gè)在輸入端采用了 CPU 厂抖,到后面都是采用了 GPU 茎毁。
最后兩張圖表示我們?cè)谏窠?jīng)翻譯系統(tǒng)上,每個(gè) GPU 運(yùn)算非常平衡忱辅,而右邊人類專家設(shè)計(jì)的運(yùn)算非常不平衡七蜘,在 GPU2 花了非常長(zhǎng)的時(shí)間,在其他 GPU 花了很少的時(shí)間墙懂,但是這個(gè)也是可以理解橡卤,因?yàn)閷<以O(shè)計(jì)一般只考慮到一部分。在 Inception? V3 我們的結(jié)果不是非常平衡垒在。但是可能是因?yàn)?Inception? V3 當(dāng)中有一些過(guò)分的依賴蒜魄,我們的結(jié)果仍然在 Inception? V3 有總體的運(yùn)行時(shí)間上的提高扔亥。后來(lái)我們做一些分析發(fā)現(xiàn)因?yàn)樵跀?shù)據(jù)拷貝期間场躯,我們花了更少的時(shí)間。所以總體對(duì)它有一個(gè)運(yùn)行時(shí)間的提高旅挤。
The End
我們講了兩個(gè)例子踢关,我們探索如何用算法或者機(jī)器學(xué)習(xí)來(lái)優(yōu)化機(jī)器學(xué)習(xí)的模型,并且取得了一定的進(jìn)展粘茄,我們相信在不久的將來(lái)签舞,如果有更好的計(jì)算資源,以后的所有架構(gòu)將是由電腦的生成柒瓣,谷歌已經(jīng)給大家走出了探索的第一步儒搭,希望大家都可以參與其中,我講到這里芙贫,謝謝大家搂鲫!
上海谷歌開(kāi)發(fā)者社區(qū)授權(quán)發(fā)布,原址為:
TensorFlow 與深度學(xué)習(xí)|DevFest 2017 實(shí)錄
-全文完-
關(guān)注人工智能的落地實(shí)踐磺平,與企業(yè)一起探尋 AI 的邊界魂仍,AICon 全球人工智能技術(shù)大會(huì)火熱售票中拐辽,8 折倒計(jì)時(shí)一周搶票,詳情點(diǎn)擊:
https://aicon.geekbang.org/?utm_source=ai-front&utm_medium=zhihu
《深入淺出TensorFlow》迷你書(shū)現(xiàn)已發(fā)布擦酌,關(guān)注公眾號(hào)“AI前線”俱诸,ID:ai-front,回復(fù)關(guān)鍵字:TF赊舶,獲取下載鏈接睁搭!