5 月 23 日周三晚,TensorFlow 中國研發(fā)負(fù)責(zé)人、Google 搜索架構(gòu)技術(shù)總監(jiān)李雙峰受邀參與北京大學(xué)“人工智能前沿與產(chǎn)業(yè)趨勢”系列座談會,分享了深度學(xué)習(xí)的發(fā)展與應(yīng)用、TensorFlow 從研究到實(shí)踐的相關(guān)內(nèi)容。
感謝作為北京大學(xué)“人工智能前沿與產(chǎn)業(yè)趨勢”系列座談會合作媒體的量子位旗下公眾號“吃瓜社”俞晶翔、張康對活動的記錄,演講嘉賓李雙峰也參與本文的聯(lián)合撰寫和修改。
嘉賓簡介
主講嘉賓:李雙峰,TensorFlow 中國研發(fā)負(fù)責(zé)人、Google 搜索架構(gòu)技術(shù)總監(jiān)。Google 中國最早期的工程師之一,目前在 Google 領(lǐng)導(dǎo)了涉及人工智能、搜索架構(gòu)和移動應(yīng)用領(lǐng)域的多個項目。他負(fù)責(zé) TensorFlow 中國研發(fā)團(tuán)隊,并總體推動 TensorFlow 在中國的發(fā)展。
文字實(shí)錄
用深度學(xué)習(xí)解決最具挑戰(zhàn)性的問題
深度學(xué)習(xí)帶來機(jī)器學(xué)習(xí)的革命。我們看到“深度學(xué)習(xí)”這個詞在搜索中的熱度近年來快速提升。
在 arXiv 上的機(jī)器學(xué)習(xí)論文數(shù)量急劇增長,增長速度居然趕上了摩爾定律。
我們先看一個圖片分類的例子:給一張圖片,識別這張圖是一只貓還是一條狗。它是多層的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),里面有很多的參數(shù),經(jīng)過很多的訓(xùn)練之后,能識別出這張圖是一只貓。
深度學(xué)習(xí)不僅僅能夠解決圖像識別的問題,它擁有非常強(qiáng)大的學(xué)習(xí)能力。把深度神經(jīng)網(wǎng)絡(luò)比喻成一個函數(shù),這個函數(shù)非常強(qiáng)大,可以處理多種輸入和輸出,而深度學(xué)習(xí)算法可以自動學(xué)習(xí)這個函數(shù)。
如果輸入一張照片,輸出一個圖像的標(biāo)簽,比如說是"獅子",這是一個圖片分類的問題。
如果輸入是英文,輸出是法文,這就是機(jī)器翻譯的問題。
更進(jìn)一步:輸入一張圖片,輸出文字的描述,這就是看圖說話的問題。
用相似的簡單方法,解決多個問題,這是產(chǎn)業(yè)界特別喜歡的東西,因為他們大大減少了工程方面的復(fù)雜度。
深度學(xué)習(xí)并不是全新的東西,但為什么在過去的幾年當(dāng)中帶來了極大的突破?
我們看到兩條線:一條是基于深度神經(jīng)網(wǎng)絡(luò)的解決方案,一條是基于其他機(jī)器學(xué)習(xí)方法。在八九十年代之前,神經(jīng)網(wǎng)絡(luò)就已經(jīng)出現(xiàn)了,不過那個時候受限于計算能力,模型的規(guī)模比較小,所以它的表現(xiàn)不如一些經(jīng)過優(yōu)化過的其他機(jī)器學(xué)習(xí)方法,這樣就很難解決真實(shí)的大規(guī)模問題。
隨著計算能力的增加,可以看到深度學(xué)習(xí)解決問題的精度,已經(jīng)超過了其他機(jī)器學(xué)習(xí)方法。
以圖片識別問題為例,在 2011 年的時候,它的錯誤率是 26%,而人只有 5%,所以這個時候離實(shí)用有非常大的距離。到 2016 年為止,它的錯誤率已經(jīng)減少到了 3% 左右,深度學(xué)習(xí)在該領(lǐng)域呈現(xiàn)出非常驚人的能力,這就是為什么深度學(xué)習(xí)在圖像識別領(lǐng)域吸引了產(chǎn)業(yè)界的大量關(guān)注。
我們看看深度學(xué)習(xí)如何幫助解決工程界的重大挑戰(zhàn)。
2008 年美國工程院發(fā)布了 21 世紀(jì)的一系列重大挑戰(zhàn),其中包括:便宜的太陽能、藥物工程優(yōu)化、虛擬現(xiàn)實(shí)、和個性化學(xué)習(xí)等等。
我們也許還可以加上兩個:跨語言的自由交流,更通用的人工智能系統(tǒng)?;氐?2008 年,機(jī)器翻譯的提升遇到了瓶頸,而大家也覺得AI要戰(zhàn)勝圍棋高手,要需要很多年。
回頭來看,隨著深度學(xué)習(xí)的發(fā)展,很多領(lǐng)域都有一些重大突破,包括健康醫(yī)療、語言交流方面等方面。下面我們仔細(xì)看看深度學(xué)習(xí)如何推動解決這些重大挑戰(zhàn)。
提高城市基礎(chǔ)設(shè)施
交通是一個面臨重大挑戰(zhàn)的問題。Google 的母公司 Alphabet 旗下有一家公司叫 Waymo,專注于自動駕駛。他們已經(jīng)做了大量的真實(shí)道路測試,以及模擬環(huán)境的測試。他們的車能夠識別路上各種移動的對象,以及交通燈。
我們發(fā)現(xiàn)自動駕駛離真實(shí)應(yīng)用越來越近,有了無人駕駛之后,城市基礎(chǔ)設(shè)施會有一個巨大的突破。
跨語言的交流和信息流動
過去十年中,Google 在機(jī)器翻譯領(lǐng)域的工作在業(yè)界領(lǐng)先,但是之前都是基于短語統(tǒng)計的方式 ,質(zhì)量提升遇到了瓶頸。
過去兩年,Google 推出了基于神經(jīng)網(wǎng)絡(luò)的機(jī)器翻譯技術(shù)(GNMT),大大提高了翻譯質(zhì)量。在多個語言的質(zhì)量評估上,平均質(zhì)量提高 50% 到 80% 以上,這超過了過去十年的工作。在若干語言的翻譯上,機(jī)器翻譯已經(jīng)接近人類水平。這是促進(jìn)人類溝通和交流的一個重要突破。
更重要的是,Google 不僅把該技術(shù)的論文發(fā)表,而且開放了基于 TensorFlow 的源代碼。開發(fā)者使用這些代碼非常簡單,一兩百行代碼就可以做一些類似于 GNMT 的基于神經(jīng)網(wǎng)絡(luò)的機(jī)器翻譯系統(tǒng)。
這讓一些小公司也有能力做出不錯的機(jī)器翻譯系統(tǒng)。比如歐洲某個公司,之前是傳統(tǒng)翻譯公司,但是擁有很多翻譯數(shù)據(jù),基于這些開源系統(tǒng),很快就能做出很不錯的結(jié)果。
基于神經(jīng)網(wǎng)絡(luò)的機(jī)器翻譯還有一些非常有意思的特性,比如說,當(dāng)我們把英文翻譯成日文,然后再翻譯回英文的時候,傳統(tǒng)的方式可能在翻譯回英文這個階段會出現(xiàn)措辭與原文不太一樣,但基于神經(jīng)網(wǎng)絡(luò)的翻譯能保證部分還原性。
另外一個意義是在工程上。從工程的角度來說,希望用盡量簡單的方案,去解決復(fù)雜問題;而不是為每一種語言對的翻譯都設(shè)計不同的系統(tǒng)和模型。從這個角度來說,基于神經(jīng)網(wǎng)絡(luò)機(jī)器翻譯能夠帶來明顯優(yōu)勢。
舉個例子,假設(shè)有很多訓(xùn)練的數(shù)據(jù),他們是一對一對的,從英文到韓文有對應(yīng),我們適當(dāng)?shù)刈隽艘恍┚幋a,也就是翻譯之前把語言標(biāo)注了。那么,同樣一個模型在解決不同語言之間的翻譯都會起作用,這樣語言之間可以通過統(tǒng)一的簡單方式來實(shí)現(xiàn)。
特別是對 Google 來說這很有價值,因為我們的目標(biāo)是一百多種語言對之間相互翻譯,這是一個非常復(fù)雜的問題,對工程人員來說非常麻煩。用同一個基于神經(jīng)網(wǎng)絡(luò)的模型去翻譯不同的語言,使得在工程上工作量得到了大大簡化。
另外:假設(shè)我們學(xué)習(xí)到英文到韓文翻譯的同時,也學(xué)習(xí)英文到日文之間的翻譯,那么基于神經(jīng)網(wǎng)絡(luò)的翻譯模型,就能夠自動學(xué)習(xí)到從日文到韓文之間的翻譯,這也證明神經(jīng)網(wǎng)絡(luò)翻譯具有更強(qiáng)的學(xué)習(xí)能力。
AI 與醫(yī)療
醫(yī)療是 Google AI 研究投入的一個重要方向,因為我們認(rèn)為醫(yī)療領(lǐng)域是 AI 應(yīng)用一個非常重要的場景,也對造福人類具有深遠(yuǎn)意義。
比如AI檢測眼科疾?。鹤筮吺钦5囊暰W(wǎng)膜照片,右邊是糖尿病可能導(dǎo)致的視網(wǎng)膜病變照片,它可能會導(dǎo)致糖尿病患者失明。如果我們能夠盡早發(fā)現(xiàn)這些病變,就可以使用較為廉價的藥物進(jìn)行治療。
我們在一個權(quán)威的美國醫(yī)學(xué)雜志上發(fā)表的研究表明:AI 識別這些有病變的視網(wǎng)膜照片的精度,水平超過了眼科醫(yī)生的平均水平。
圖像識別是一類問題,包括剛才提到的視網(wǎng)膜照片監(jiān)測問題,還有 X 光拍片的識別。
更難的問題是能不能基于已知的個人醫(yī)療信息,對整個信息做預(yù)測,比如預(yù)測未來需要住幾天院,需要吃什么藥。這樣診斷的是比較難的問題。Google 已經(jīng)與斯坦福醫(yī)學(xué)院等好幾個學(xué)校的醫(yī)學(xué)機(jī)構(gòu)合作,開展了相關(guān)工作,初步取得不錯的預(yù)測效果。
科學(xué)的發(fā)展
下一步看看科學(xué)的發(fā)展。
工具在人類歷史的發(fā)展中扮演重要角色,比如區(qū)分石器時代和青銅時代的重要依據(jù)是人類使用的工具。今天科學(xué)研究會做很多實(shí)驗,大家也制作了很多實(shí)驗儀器。
不過,有沒有一些工具,能夠幫助加速科學(xué)發(fā)現(xiàn)的進(jìn)程呢?
這是我們推出 TensorFlow 這樣的開源機(jī)器學(xué)習(xí)平臺的重要原因,希望它能夠極大地促進(jìn)深度學(xué)習(xí)發(fā)展,促進(jìn)用深度學(xué)習(xí)技術(shù)解決科學(xué)上的一些重大發(fā)現(xiàn)。
TensorFlow 的目標(biāo)是成為人人可用的機(jī)器學(xué)習(xí)平臺,能夠幫助機(jī)器學(xué)習(xí)的研究者、開發(fā)者,去表達(dá)自己的想法,去進(jìn)行探索性研究,去建立自己的系統(tǒng),去實(shí)現(xiàn)基于具體場景的AI應(yīng)用和產(chǎn)品。有了通用的平臺,才能更好的促進(jìn)行業(yè)交流,推動行業(yè)創(chuàng)新。Google 內(nèi)部大規(guī)模使用 TensorFlow 來做研究和產(chǎn)品,而業(yè)界可以基于 Google 的實(shí)踐和經(jīng)驗。
大概在 2015 年底我們開源了 TensorFlow,在過去兩年當(dāng)中它的發(fā)展速度非???,基本上現(xiàn)在一兩個月就有新的版本發(fā)布。比如,我們增加了更多的平臺能力、更多的工具,以及更簡單的 API。
到今天為止,全球有超過 1100 萬的 TensorFlow 下載量,這也說明了全球開發(fā)者的熱情。
深度學(xué)習(xí)有不同的模型,如何更好地訓(xùn)練模型參數(shù),需要不少機(jī)器學(xué)習(xí)的經(jīng)驗,這對于普通公司而言,仍然有不小的挑戰(zhàn)。AutoML 是一個很重要的話題,它的基本想法是能夠更加自動化地做機(jī)器學(xué)習(xí)。Google 有一個相關(guān)工作,叫做 Learning to Learn,目前取得不錯的進(jìn)展。
今天,我們現(xiàn)在做機(jī)器學(xué)習(xí)的解決方案,需要機(jī)器學(xué)習(xí)方面的專家,需要數(shù)據(jù),也需要很多的計算。
解決方案 = 機(jī)器學(xué)習(xí)專家 + 數(shù)據(jù) + 計算
機(jī)器學(xué)習(xí)專家需要很多時間來培養(yǎng),我們開始思考,能不能讓更多的計算能力來解決人才的缺口問題?那么:
解決方案 = 數(shù)據(jù) + 100倍的計算
我們使用強(qiáng)化學(xué)習(xí)的方式來搜索神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu):以一定概率產(chǎn)生一些模型,訓(xùn)練若干小時,然后對生成的幾個模型在測試集上做評估,并利用模型的損失作為強(qiáng)化學(xué)習(xí)的信號,促進(jìn)下一次迭代時選擇更好的模型。
這張圖是通過神經(jīng)網(wǎng)絡(luò)搜索找到的模型結(jié)構(gòu),模型結(jié)構(gòu)看起來很復(fù)雜,讓人很難以理解,它并沒有人類設(shè)計的模型那么有層次化,并不直觀。不過實(shí)際測試的效果卻非常好,差不多比目前人類所找到的模型都要好。
機(jī)器學(xué)習(xí)專家在過去的好多年中做了很多研究,手工設(shè)計了不同的精巧的模型,這些模型會平衡運(yùn)算的復(fù)雜度以及模型精度。
如果我們追求比較高的精度,那么運(yùn)算量更大,比如 ResNet;如果模型比較簡單,比如 Google 的 MobileNet,精度會低一點(diǎn),但運(yùn)算量小,很適合用在移動設(shè)備上;中間也有一系列計算和精度適中的模型。在這些年的發(fā)展過程中,頂尖的機(jī)器學(xué)習(xí)專家一直在基于前人成果不停地做結(jié)構(gòu)優(yōu)化。
而通過 AutoML 所得到的新模型,比人類的多年研究成果都要好。在同樣精度的情況下可以做到計算量更小一點(diǎn),而在同樣的計算量下精度更好。Google 通過 AutoML 學(xué)習(xí)到的模型也公布了,叫做 NASNet。
這是一個鼓舞人心的開局,讓我們看到 AutoML 的巨大前景。
AutoML 的工作也為計算帶來了更大的挑戰(zhàn)。不過計算還有很大的可提升空間,我們可以針對深度學(xué)習(xí)做一些定制化的優(yōu)化。
比如傳統(tǒng) CPU 上的運(yùn)算講究精度,而進(jìn)行深度學(xué)習(xí)時,我們可以丟棄一些精度要求,讓運(yùn)算更快一些。
另一方面,我們發(fā)現(xiàn)神經(jīng)網(wǎng)絡(luò)運(yùn)算主要是矩陣運(yùn)算,這樣就可以設(shè)計一些特別的硬件來加速矩陣運(yùn)算。
比如 Google 針對深度學(xué)習(xí),特別設(shè)計了新的硬件 TPU。第一代 TPU 只能做一些推理的工作,第二代就既能推理又能訓(xùn)練,而今年 5 月份 Google I/O 推出的第三代 TPU,計算速度比第二代又快了 8 倍,計算能力不斷地在提升。
我們也把 TPU 的能力通過 Google 云平臺開放出來,給產(chǎn)業(yè)界和學(xué)術(shù)界使用。特別是,我們開放了 TensorFlow Research Cloud,有許多 TPU,免費(fèi)開放給頂級的研究學(xué)者使用,共同來推動開放的機(jī)器學(xué)習(xí)研究。大家可以通過 g.co/tpusignup 申請。
總結(jié)上面所講的,深度神經(jīng)網(wǎng)絡(luò)和機(jī)器學(xué)習(xí)已經(jīng)帶來了非常大的突破。我們可以考慮如何用深度神經(jīng)網(wǎng)絡(luò),幫助解決世界上的一些重大挑戰(zhàn)。
基于 TensorFlow 的應(yīng)用
第二部分,我們來談?wù)劵?TensorFlow 的應(yīng)用。
AI 領(lǐng)域一個很重大的突破,就是 AlphaGo 戰(zhàn)勝人類頂尖圍棋選手,之前大家普遍認(rèn)為這還需要多年。DeepMind 的 AlphaGo 也是基于 TensorFlow 實(shí)現(xiàn)的,早期版本使用了大量的 TPU,需要大量的計算。
初始版本的 AlphaGo 需要人類的經(jīng)驗,比如以歷史上的圍棋棋譜作為輸入,但是最后的 AlphaGo Zero 并不需要人類經(jīng)驗就能自我學(xué)習(xí)。
AlphaGo 的工作也發(fā)表了論文,我們看到有國內(nèi)公司基于公開論文,基于 TensorFlow,很快就重現(xiàn)了高水平的圍棋系統(tǒng)。
這很好地說明了 TensorFlow 的意義,有了這樣的開放平臺,全球的研究者和開發(fā)者都能很方便交流,快速提高機(jī)器學(xué)習(xí)的水平,并且能夠基于前人的優(yōu)秀成果,快速開發(fā)出新的產(chǎn)品和系統(tǒng)。
自動駕駛是另一例子,利用 TensorFlow 可以自動識別移動中的人和物體,包括交通燈。
科學(xué)發(fā)展史當(dāng)中,天文學(xué)有很多非常有挑戰(zhàn)的問題。如何在浩瀚的星空當(dāng)中,發(fā)現(xiàn)有意思的信號,比如尋找一個像地球一樣的行星,圍繞像太陽一樣的恒星轉(zhuǎn),這是一件非常有挑戰(zhàn)的事情。
天文學(xué)家利用基于 TensorFlow 的深度學(xué)習(xí)技術(shù),在太空的大量信號中搜索到類似地球的行星,叫做 Kepler-90i,這個是迄今為止發(fā)現(xiàn)的第八個。
農(nóng)業(yè)方面,荷蘭的養(yǎng)殖場監(jiān)測奶牛的行為和身體數(shù)據(jù),使用 TensorFlow 來分析奶牛健康狀況,比如是否運(yùn)動,是否生病等等。
巴西亞馬遜叢林的護(hù)林人員,使用 TensorFlow 來識別叢林中的聲音,來判斷是否有盜伐者。
在非洲,開發(fā)者使用 TensorFlow 制作出判斷植物是否生病的手機(jī)應(yīng)用,只要對植物進(jìn)行拍照,就能進(jìn)行鑒定。
Google 開源了基于 TensorFlow 的 Magenta 項目,一個功能是能夠自動生成音樂,你輸入一個音符,程序能夠建議下一個音符。
在藝術(shù)和文化領(lǐng)域,你可以拍一個照片,程序能找出和你相似的藝術(shù)照片。
谷歌翻譯可以在沒有聯(lián)網(wǎng)的情況下實(shí)時進(jìn)行翻譯。有這樣一個上面印有“Milk”的包裝盒,你只要打開谷歌翻譯并用手機(jī)對準(zhǔn)它,谷歌翻譯就能自動識別文字,自動翻譯出“牛奶”,并把翻譯的結(jié)果貼在原來這個照片上。這樣的例子對于出國旅游者非常實(shí)用。
Google 的大量產(chǎn)品使用了 TensorFlow。比如在語音方面,包括語言的識別和合成,像 DeepMind 發(fā)布的語音合成算法 WaveNet,合成的效果非常好。對人機(jī)對話,Google I/O 發(fā)布了 AI 打電話預(yù)定的 Demo,叫做 Google Duplex。
在視覺方面,Google Photos 能自動把所有照片做分析,識別里面的人和物體,自動得到一些標(biāo)簽,你可以直接搜索這些照片,不再需要手動加標(biāo)簽。還有 Google 的 Pixel 系列手機(jī),拍照模式中,自動把前景突出一些,背景模糊化處理。
這就是機(jī)器學(xué)習(xí)帶來的產(chǎn)品的突破。
在機(jī)器人領(lǐng)域,可以使用 TensorFlow 讓四腳機(jī)器人學(xué)習(xí)如何站立和平衡。
最后,還能使用 TensorFlow 來幫助 Google 數(shù)據(jù)中心做能耗優(yōu)化。當(dāng)機(jī)器學(xué)習(xí)控制的開關(guān)開啟后,能耗明顯降低,而一旦關(guān)閉,能耗快速上升。
TensorFlow 基礎(chǔ)
第三部分,講一講 TensorFlow 的一些基礎(chǔ)知識。
TensorFlow 背景
機(jī)器學(xué)習(xí)越來越復(fù)雜,構(gòu)造的網(wǎng)絡(luò)也越來越復(fù)雜,作為研究者,如何管理這種復(fù)雜度是一個很大的挑戰(zhàn)。比如 Inception v3 模型,有 2500 萬個參數(shù)。
模型越復(fù)雜,對計算要求就越高,需要大量的計算,往往不是一臺計算機(jī)就能滿足,需要做很多分布式的計算,那分布式計算怎么去管理,這是一個難題。
更進(jìn)一步,傳統(tǒng)的機(jī)器學(xué)習(xí)運(yùn)算都發(fā)生在服務(wù)器端,而現(xiàn)在越來越多的計算在手機(jī)端或者是在設(shè)備端,怎么去管理這些多元的設(shè)備和異構(gòu)的系統(tǒng),是一個挑戰(zhàn)。
我們希望 TensorFlow 能夠幫助管理這些復(fù)雜度,讓研究者專注做研究,讓做產(chǎn)品的專注做產(chǎn)品。
TensorFlow 是一個開源的軟件平臺,它的目標(biāo)是促進(jìn)人人可用的機(jī)器學(xué)習(xí),推動機(jī)器學(xué)習(xí)的發(fā)展。
一方面,TensorFlow 希望快速地幫助大家去嘗試一些新的想法,進(jìn)行前沿探索。另一方面,也希望非常靈活,既能滿足研究的需求,也能滿足產(chǎn)業(yè)界做大規(guī)模產(chǎn)品的需求。面對多元的需求,怎么讓大家能夠用同一個框架來表達(dá)自己的想法,這是 TensorFlow 的重要設(shè)計目標(biāo)。
研究可能會是小規(guī)模的,但在做產(chǎn)品的時候,可能涉及到成百上千的服務(wù)器,怎么去管理這些分布式計算,TensorFlow 需要有很好的支持。
一開始設(shè)計人員就把這些因素都考慮進(jìn)去,最重要的原因是,TensorFlow 實(shí)際上是配合 Google 內(nèi)部的產(chǎn)品需求設(shè)計的,經(jīng)歷過 Google 大量產(chǎn)品和團(tuán)隊的大規(guī)??简?。在它開放之前還有一個內(nèi)部版本叫做 DisBelief,我們總結(jié)了DisBelief 的經(jīng)驗,做了新的版本,并且在大量的項目中經(jīng)過真實(shí)的驗證,也根據(jù)產(chǎn)品的真實(shí)需求在做一些新的特性。
Google Brain 有很多研究人員,他們不斷發(fā)表論文,同時他們的研究工作也會轉(zhuǎn)化成產(chǎn)品。大家都用 TensorFlow 這樣的語言去表達(dá),就極大地促進(jìn)了研究成果的轉(zhuǎn)換。
到目前為止,GitHub 上 TensorFlow 項目的提交已經(jīng)超過 3 萬次,超過 1400 多個貢獻(xiàn)者,6900 多個 pull request。
TensorFlow 架構(gòu)
TensorFlow 提供了一個完整的機(jī)器學(xué)習(xí)工具集。下面我們來整體看看 TensorFlow 的架構(gòu)。
TensorFlow 有一個分布式執(zhí)行引擎,可以讓 TensorFlow 程序運(yùn)行在不同硬件平臺上,比如 CPU、GPU、TPU,移動端的一些硬件如 Android 和 iOS,以及各種異構(gòu)的一些硬件。
執(zhí)行引擎之上,有不同的前端語言的支持,最常用的是 Python,也支持 Java,C++ 等等。
前端之上,提供了一系列豐富的機(jī)器學(xué)習(xí)工具包。除了大家所知道的神經(jīng)網(wǎng)絡(luò)支持,還有決策樹,SVM,概率方法,隨機(jī)森林等等,很多是大家在各種機(jī)器學(xué)習(xí)競賽中常用的工具。
TensorFlow 非常靈活,既有一些高層 API,簡單易用,也有一些底層 API,方便構(gòu)造一些復(fù)雜的神經(jīng)網(wǎng)絡(luò),比如,你可以基于一些基本的算子去定義網(wǎng)絡(luò)。
Keras 是一個定義神經(jīng)網(wǎng)絡(luò)的高層 API,在社區(qū)中很流行,TensorFlow 對 Keras 有非常好的支持。
進(jìn)一步,我們也封裝了 Estimator 系列 API,你可以定制訓(xùn)練和評估函數(shù),這些 Estimator 可以高效地分布式執(zhí)行,和 TensorBoard 以及 TensorFlow Serving 有很好的集成。
最上層,有一些預(yù)定好的 Estimator,開箱即用。
TensorFlow 提供了全面的工具鏈,比如 TensorBoard 可以讓你非常容易去展示 Embedding,多層次呈現(xiàn)復(fù)雜的模型結(jié)構(gòu),以及展示機(jī)器學(xué)習(xí)過程中的性能數(shù)據(jù)。
它支持很多移動平臺,比如 iOS,Android,以及樹莓派等嵌入式平臺。
支持的語言包括 Python,C++,Java,Go,R 等語言。最近,我們也發(fā)布了 JavaScript 和 Swift 的支持。
很多學(xué)校和機(jī)構(gòu)都發(fā)布了 TensorFlow 課程,比如北京大學(xué),中科大等學(xué)校就開設(shè)了 TensorFlow 相關(guān)課程,國外頂尖大學(xué)比如斯坦福、伯克利等,在線教育機(jī)構(gòu)比如 Udacity,Coursera、DeepLearning.ai 上都有 TensorFlow 課程。我們也在支持教育部產(chǎn)學(xué)合作項目,支持高校開設(shè)機(jī)器學(xué)習(xí)課程,國內(nèi)會有越來越多基于 TensorFlow 的原創(chuàng)課程。
TensorFlow APIs
下面講一下 TensorFlow 的 API。
TensorFlow 可以幫助用戶定義計算圖,圖代表了計算,圖的每個節(jié)點(diǎn)代表了某個計算或者狀態(tài),而計算可以運(yùn)行在任何設(shè)備上。數(shù)據(jù)隨著圖的邊流動。而圖可以用不同的程序語言比如 Python 來定義,并且這個計算圖可以被編譯和優(yōu)化。通過這樣的設(shè)計,可以把圖的定義和實(shí)際計算過程分離開來。
TensorFlow 可以讓你非常容易地表達(dá)線性回歸,可以使用 LinearRegressor,這是封裝好的 Estimator。深度神經(jīng)網(wǎng)絡(luò)同樣可以很方便的表達(dá),比如使用 DNNClassifier,你只需要說明每一個隱層的節(jié)點(diǎn)數(shù)。
TensorFlow 可以自動執(zhí)行梯度下降過程,實(shí)現(xiàn)反向傳播算法。并且這些計算可以分布在多個設(shè)備上,這樣圖的執(zhí)行是一個分布式的過程。
tf.layers 是另一類 API,可以對應(yīng)到神經(jīng)網(wǎng)絡(luò)的層的概念,比如一個 CNN 網(wǎng)絡(luò),你有多個 CONV 層和多個 MAX POOLING 層,每一層都有一個對應(yīng)的 tf.layers.* 函數(shù),方便你把多層組織起來。這些封裝好的層包含了一些最佳工程實(shí)踐。
tf.keras
進(jìn)一步,tf.keras 是社區(qū)中非常流行的 API。比如你想構(gòu)造一個能夠自動去理解視頻,并且回答問題的玩具程序。你可以問:這個女孩在做什么?程序回答:打包。問:這個女孩穿什么顏色的 T-shirt?程序回答:黑色。
你可能會構(gòu)造一個網(wǎng)絡(luò)來實(shí)現(xiàn):左邊是視頻處理邏輯,使用 InceptionV3 來識別照片,然后加上 TimeDistributed 層來處理視頻信息,之上是 LSTM 層;右邊是 Embedding 來處理輸入的問題,然后加上 LSTM,之后把兩個網(wǎng)絡(luò)合并起來,再加上兩層的 Dense。這就可以實(shí)現(xiàn)一個具有一定智能的程序,是不是很神奇?
使用 tf.keras,你用幾十行程序就可以完成核心的代碼邏輯,比如 InceptionV3 的使用你只需要一行代碼。
Eager Execution(動態(tài)圖支持)
進(jìn)一步,除了前面講的靜態(tài)圖的方式,我們還有動態(tài)圖的支持,叫做即刻執(zhí)行(Eager Execution)。它可以減少一些冗余的代碼,讓你的程序更加簡單,同時立即報錯。
當(dāng)然,靜態(tài)圖有它的優(yōu)勢,比如它允許我們提前做很多優(yōu)化,不管是基于圖的優(yōu)化還是編譯優(yōu)化;可以部署到非 Python 的服務(wù)器或者手機(jī)上;還可以大規(guī)模的分布式執(zhí)行。
而即刻執(zhí)行的優(yōu)點(diǎn)是讓你快速迭代,方便 debug。
好消息是,在 TensorFlow 當(dāng)中,即刻執(zhí)行和靜態(tài)圖執(zhí)行可以非常容易的進(jìn)行轉(zhuǎn)換,平衡了效率和易用性。
TensorFlow 的高級知識
第四部分,我們來談?wù)勱P(guān)于 TensorFlow 的高級知識。
TensorFlow Lite
TensorFlow Lite 是為移動或嵌入式設(shè)備特別設(shè)計的輕量級機(jī)器學(xué)習(xí)庫,它更小,也更快。我們提供了工具,很方便的把 TensorFlow 模型轉(zhuǎn)換成 TensorFlow Lite 格式的模型,然后在移動端,提供了 TensorFlow Lite 解釋器去執(zhí)行這些模型。
在 Android 上,我們利用了 Android 的 NN API,利用硬件加速。TensorFlow Lite 也對 iOS 有很好的支持。
TensorFlow.js
TensorFlow.js 是最新公布的基于 JavaScript 的 TensorFlow 支持庫,它可以利用瀏覽器特性比如 WebGL 來加速計算。這意味著更進(jìn)一步讓 TensorFlow 程序可以運(yùn)行在不同的環(huán)境當(dāng)中,讓 AI 無處不在。
比如我們可以用 TensorFlow.js 來實(shí)現(xiàn)吃豆人游戲,電腦攝像頭捕捉你的頭像,來控制吃豆人的移動。這一切都運(yùn)行在瀏覽器當(dāng)中。
分布式 TensorFlow
TensorFlow 的分布式執(zhí)行對于大規(guī)模的模型非常重要。TensorFlow 可以很方便地實(shí)現(xiàn)數(shù)據(jù)并行工。舉個例子:你可以寫一個 Cluster 的描述文件,分配哪些是計算資源“worker”,哪些是參數(shù)的服務(wù)器“ps”,這樣可以在我們定義圖的時候可以把這些計算分配在不同的設(shè)備上,進(jìn)行分布式的執(zhí)行。
更進(jìn)一步,谷歌支持了開源的 Kubernetes 項目,來管理大規(guī)模計算資源,它被業(yè)界廣泛采納,特別是一些云平臺。而為了更好地讓機(jī)器學(xué)習(xí)運(yùn)行在大規(guī)模集群上,谷歌也帶頭推動了 KubeFlow 的項目,大家可以關(guān)注。
而在 Benchmarks 方面,谷歌也公開了測試的程序。我們可以看到 TensorFlow 系統(tǒng)的可擴(kuò)展能力非常強(qiáng),基本上機(jī)器的數(shù)量和能力是線性正相關(guān)的。
在最近一個月,公司也發(fā)布了一個 MLPerf,便于大家公開地比較機(jī)器學(xué)習(xí)的性能,這樣可以推進(jìn)產(chǎn)業(yè)的發(fā)展。
TF Hub
為了更好的促進(jìn)模型共享,我們發(fā)布了 TensorFlow Hub (TF Hub)。例如,一個人設(shè)計機(jī)器學(xué)習(xí)模型,他可以從 GitHub 中找到不同的模型,進(jìn)行組合,從而形成更強(qiáng)大的能力。
我們可以看到,一個模塊包含了訓(xùn)練好的權(quán)重和圖,這就是一個簡單的模型,我們可以將這個模型組裝,重用,或者再訓(xùn)練。
目前我們已經(jīng)公開了很多模型,包括圖像,語言相關(guān)等等,這些都需要大量的 GPU 訓(xùn)練才能得到。開發(fā)者可以在這些基礎(chǔ)上,做一些遷移學(xué)習(xí)的工作,用很小的代價,就可以利用現(xiàn)有的模型幫助解決自己的問題。
tf.data
另外一個是關(guān)于提高機(jī)器學(xué)習(xí)的技巧,叫 tf.data。舉個例子,在 CPU 上,訓(xùn)練速度是很大的限制,但當(dāng)我們加上 GPU后,訓(xùn)練速度就得到了極大的提升,但是 CPU 輸入變成了一個瓶頸。數(shù)據(jù)需要做一些轉(zhuǎn)換使得可以加載,進(jìn)行訓(xùn)練。
大家知道,計算機(jī)體系結(jié)構(gòu)研究中一個主要的問題是如何加速并行化,而提高 CPU 和 GPU 的運(yùn)行效率,是提高機(jī)器學(xué)習(xí)系統(tǒng)很重要的問題。而 tf.data 提供了一系列工具,幫助開發(fā)者更好的并行地輸入和處理數(shù)據(jù)。
更進(jìn)一步,和 TensorFlow 訓(xùn)練相關(guān)的 Packages/Features 還有很多,例如 Estimators, Feature Engineering, XLA, TensorFlow Serving 等等,這些可以在很多行業(yè)上都可以得到方便的應(yīng)用。
TFX
當(dāng)構(gòu)建一個真實(shí)的端到端的機(jī)器學(xué)習(xí)系統(tǒng)時,除了上面討論的核心機(jī)器學(xué)習(xí)算法之外,還有大量相關(guān)系統(tǒng)需要構(gòu)建,比如數(shù)據(jù)的獲取,數(shù)據(jù)的分析,模型部署,機(jī)器學(xué)習(xí)資源管理等等問題。
谷歌內(nèi)部有一個大規(guī)模的系統(tǒng) TFX (TensorFlow Extended) ,它是基于 TensorFlow 的大規(guī)模部署的機(jī)器學(xué)習(xí)平臺,相關(guān)論文已經(jīng)發(fā)表在 2017 年的 KDD。目前我們已經(jīng)開源了一些重要的部件,更多的部件開源正在進(jìn)展當(dāng)中,做產(chǎn)業(yè)界的朋友可以關(guān)注下。
TensorFlow 在中國的發(fā)展
最后,談?wù)?TensorFlow 在中國的發(fā)展。
基本上,我們看到中國領(lǐng)先的技術(shù)公司大都在使用 TensorFlow,來解決多種多樣的問題,比如:廣告推薦、點(diǎn)擊預(yù)測,OCR,語音識別,自然語言理解等等。包括很多家知名公司,像京東,小米,網(wǎng)易,搜狗,360,新浪,聯(lián)想等等;也包括很多的創(chuàng)業(yè)公司,比如知乎,出門問問,云知聲,Kika,流利說等等。
京東使用 TensorFlow 來進(jìn)行包裝的 OCR,應(yīng)用到了圖像,語音和廣告等多個領(lǐng)域,并建立了高效的內(nèi)部機(jī)器學(xué)習(xí)平臺。
小米使用 TensorFlow,并借助 Kubernetes 來管理集群,建立分布式學(xué)習(xí)系統(tǒng),來幫助小米內(nèi)部和生態(tài)鏈業(yè)務(wù)。
網(wǎng)易使用了TensorFlow Lite 來做文檔掃描應(yīng)用,并用 TensorFlow 來做機(jī)器翻譯。
360 使用了 TensorFlow 來進(jìn)行短視頻的分析,也建立了相關(guān)內(nèi)部機(jī)器學(xué)習(xí)平臺。
還有一些研究機(jī)構(gòu),比如清華大學(xué)的朱軍老師,將貝葉斯網(wǎng)絡(luò)和深度學(xué)習(xí)結(jié)合起來,開源了基于 TensorFlow 的系統(tǒng),叫“珠算”。
另一個例子也是來自清華大學(xué),開源了一些基于 TensorFlow 的知識圖譜工具。
在中國,TensorFlow 社區(qū)活動非常豐富。比如,這是三月底在谷歌北京辦公室舉辦的 TensorFlow 開發(fā)者峰會北京分會場活動,凌晨 1 點(diǎn),Jeff Dean 和 TensorFlow 中國開發(fā)者視頻互動的場景:
另外還有我們在重慶的活動,支持教育部產(chǎn)學(xué)合作協(xié)同育人項目,有上百位大學(xué)老師參加,我們希望培訓(xùn)更多大學(xué)老師來教機(jī)器學(xué)習(xí)等。
更多官方中文文檔,可以訪問:
https://tensorflow.google.cn/
不久前,我們還開源了 Google 內(nèi)部使用的兩天機(jī)器學(xué)習(xí)速成課程(MLCC),過去幾年大量 Google 工程師學(xué)習(xí)了該課程。大家可以訪問:
https://developers.google.cn/machine-learning/crash-course/
另外,推薦 TensorFlow 微信公眾號,大家可以在微信上搜索“TensorFlow”找到。
你也可以加入 TensorFlow 中文社區(qū),和業(yè)界一起來學(xué)習(xí)和探討 TensorFlow 技術(shù),訪問:
https://www.tensorflowers.cn
TensorFlow 社區(qū)的基本理念是:開放,透明,參與。
我們希望盡量開放,所以發(fā)布了 TensorFlow 的開發(fā)路線圖,使技術(shù)更加透明化,增加社區(qū)人員的參與感,共同推動技術(shù)的發(fā)展。Google 內(nèi)部使用的 Tensorlow 也和外部也一樣,我們每周都在不斷同步。
在這個開放的社區(qū)里,不管是初學(xué)者,研究者還是產(chǎn)業(yè)界開發(fā)者,每個人都可以分享自己的問題,發(fā)布自己的代碼、數(shù)據(jù)和教程,幫助其他社區(qū)成員,組織線下技術(shù)小組聚會等等。更一步,可以申請成為谷歌開發(fā)者專家(GDE)榮譽(yù)稱號。
Q&A
TensorFlow 作為一個機(jī)器學(xué)習(xí)的平臺,那其在未來發(fā)展上,大概有哪些方向呢?
我們公開了 Tensorlow 開發(fā)路線圖,大家可以在下面網(wǎng)站找到:
https://tensorflow.google.cn/community/roadmap
另外,也可以加入相關(guān)興趣小組,給 Tensorlow 提出發(fā)展建議。
總結(jié)而言,我覺得有以下幾個方向:
快。我們持續(xù)不斷地進(jìn)行優(yōu)化,更好的分布式執(zhí)行,針對各種新的硬件進(jìn)行優(yōu)化,以及在移動端更快的執(zhí)行,等等。
簡單、可用性。追求效率,容易上手。一方面我們讓高層 API 更好用,讓 Keras API 和 Eager Execution 更好用。另一方面,我們提供更多的工具集,以及參考模型,便于開箱即用。
移動性。移動方面我們發(fā)布了 TensorFlow Lite,它所能支持的模型和性能在不斷提升當(dāng)中。我們也發(fā)布了 TensorFlow.js,進(jìn)一步促進(jìn)了無處不在的 AI。
完整性。我們發(fā)布了 TensorFlow Hub,希望促進(jìn)模型共享和重用。另一方面,Google 內(nèi)部大規(guī)模產(chǎn)品環(huán)境中所使用的TFX系統(tǒng)也在開源當(dāng)中。我們希望進(jìn)一步減少開發(fā)者構(gòu)建端到端的完整的機(jī)器學(xué)習(xí)系統(tǒng)所遇到的挑戰(zhàn)。
推動機(jī)器學(xué)習(xí)的發(fā)展,共享,加速研究。我們很期待通過 TensorFlow 社區(qū),大家一起協(xié)作,去解決世界上最難的問題,比如醫(yī)療等造福人類的重大問題。
Q: 基于 TensorFlow 這個平臺,極大的降低了深度學(xué)習(xí)的難度,那么是不是稍微懂技術(shù)的人,經(jīng)過一些學(xué)習(xí)和打磨,就可以借助這個平臺做深度學(xué)習(xí)或者AI相關(guān)開發(fā),還是說背后還需要很多工作才能成為這方面的人才?
首先這是 TensorFlow 的設(shè)計目標(biāo),讓盡可能多的人能用上深度學(xué)習(xí)技術(shù),嘗試新的研究想法,做產(chǎn)品,解決難題。
這樣一方面可以推動深度學(xué)習(xí)技術(shù)的發(fā)展,加快很多方面的 AI 應(yīng)用。而這些 AI 應(yīng)用,更需要擁有廣闊背景的眾多開發(fā)者來一起推動。
另一方面,從簡單地用到一些模型,到比較專業(yè)的深度優(yōu)化,還是有不少距離。如果你只是達(dá)到平均水平,付出可以比較少,但要達(dá)到更高水平的突破,還需要很多的經(jīng)驗。
大家需要有一點(diǎn)工匠的精神,對問題的理解程度,參數(shù)的調(diào)節(jié),數(shù)據(jù)的清洗和處理等等,這些都是需要積累的。
我們希望可以降低 TensorFlow 使用的難度,也提供一系列的工具集來輔助用戶,希望可以讓初級用戶更多的探索應(yīng)用場景,而高級用戶可以做更多的前沿科技研究。
Q: 深度學(xué)習(xí)融入Google的每一個部門,那么每一個部門都會因為AI產(chǎn)生效應(yīng)嗎?有沒有什么意想不到的效果?
我個人的感受是,加入了深度學(xué)習(xí),確實(shí)帶來了很大的突破。像機(jī)器翻譯,語音,自然對話,圖片翻譯,搜索排序,廣告預(yù)估等等,Google 的眾多產(chǎn)品都有深度學(xué)習(xí)的深刻影響。
Q: 機(jī)器學(xué)習(xí),深度學(xué)習(xí)這些年發(fā)展的很快,從技術(shù)到應(yīng)用,在未來幾年在哪些地方會有一些突破?
個人認(rèn)為:無人駕駛領(lǐng)域,醫(yī)療診斷方面,還有,比如語言對話方面,讓人充滿期待。我個人更期待AI能推動人類重大問題上的發(fā)展,比如農(nóng)業(yè),環(huán)境,教育,跨語言的自由交流等等方面,希望可以借助 TensorFlow 獲取突破的契機(jī)。
Q: Google 中怎么平衡研究和產(chǎn)品,到底是誰在推動誰往前走?大家是做自己喜歡的課題呢還是由需求來驅(qū)動做一些實(shí)用的研究?
研究是基于真實(shí)的問題,而產(chǎn)品化緊密協(xié)作,把研究成果落實(shí)到產(chǎn)品上去,并且獲得真實(shí)世界的大量反饋,這是一個快速迭代的過程。研究和產(chǎn)品是比較緊密的結(jié)合過程,可以由真實(shí)問題的驅(qū)動去尋找解決方案。某種意義上,Google 的工程師,混合了研究和產(chǎn)品的角色,既要研究問題,也要實(shí)現(xiàn)產(chǎn)品。
-
機(jī)器學(xué)習(xí)
+關(guān)注
關(guān)注
66文章
8320瀏覽量
132165 -
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5431瀏覽量
120790 -
tensorflow
+關(guān)注
關(guān)注
13文章
328瀏覽量
60444
原文標(biāo)題:干貨 | TensorFlow中國研發(fā)負(fù)責(zé)人李雙峰:TensorFlow從研究到實(shí)踐
文章出處:【微信號:tensorflowers,微信公眾號:Tensorflowers】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論