0
本文作者: Caicloud | 2017-02-23 17:36 |
雷鋒網(wǎng)按:本文為谷歌大腦資深工程師陳智峰博士在才云科技舉辦的“Kubernetes Meetup 中國 2017”活動中的分享,首發(fā)于Caicloud(微信號:Caicloud2015),雷鋒網(wǎng)獲授權(quán)轉(zhuǎn)載。
陳智峰博士現(xiàn)為谷歌大腦資深工程師,擁有 12 年谷歌工作經(jīng)驗,自 2014 年以來,他參與設(shè)計并實現(xiàn)了被廣泛應(yīng)用于重要谷歌產(chǎn)品的新一代谷歌大腦機器學習開源系統(tǒng) TensorFlow,并成功將 TensorFlow 用于谷歌翻譯之中,巨幅提高了谷歌翻譯的準確率。谷歌大腦是專注于深度學習的人工智能的研究開發(fā)團隊。
陳智峰此次的演講通過介紹過去一年中谷歌大腦在基礎(chǔ)研究、系統(tǒng)開發(fā)和產(chǎn)品應(yīng)用各方面的進展,與參會者探討了人工智能發(fā)展的前景和可能的方向。
以下是 Google 陳智峰帶來的《谷歌大腦近期工作進展介紹》演講內(nèi)容:
大家好,很高興跟大家分享谷歌大腦在過去一年的進展以及我的一些工作心得。
2014 年,Jeff Dean 帶領(lǐng)開發(fā) TensorFlow(以下簡寫成“TF”),當時希望 TF 能夠支持更多容器,運用到更多領(lǐng)域,供更多開發(fā)研究人員使用。
2015 年下半年,谷歌開源 TF,整個團隊覺得這個項目做得不錯,于是在上面添加了更多性能,比如自動 differentiation,control flow 等,另外還增加了很多 operation。
最初,我們只是增加乘法、加法等一些簡單的數(shù)據(jù)運算。去年,我們又添加了一些相對復雜的算法,很多矩行分解的支持,完善文檔,增加教材式的文檔。
過去一年,我們也做了很多支持更多平臺的工作。到目前為止,TF 在 Github 上已經(jīng)有 500 多個貢獻者,絕大多數(shù)都是 Google 以外的人,現(xiàn)在有超過 1 萬多的 commits,據(jù)統(tǒng)計下載量超過一百萬,在學校也很受歡迎。如果你去 Github 上找,你會發(fā)現(xiàn)很多以 TF 為基礎(chǔ)的 repository。
還有就是發(fā)布的一些基礎(chǔ)架構(gòu)軟件,以及現(xiàn)成的模型,這些基本上都放在 models 下面(如下圖所示),任何人都可以下載文件,做一些圖像處理工作,以及自然語言處理,文本語法分析。
TF 主要目的是把深度學習的好處帶給大家,讓大家都享受深度學習帶來的好處。TF 不光是在單機上跑起來,我們也增加了對 mobile device 的支持,大概下半年的時候,iOS 上也可以跑 TF。大概 4 月份的時候,我們會發(fā)布分布式版本,所以不僅可以在單機上跑 TF,也可以在 AWS 上運行起來。我們還做了一些跟開源生態(tài)圈集成的事情,例如支持像 HDFS、Spark、Windows 以及其它的操作系統(tǒng)。
目前,TF 也可以通過不同的前端語言進行使用:Python,Java 等等。
TF 1.0 里面增加了穩(wěn)定性和實用性,還會增加一個叫 XLA 的部分,可以把代碼直接編譯成機器碼。
但是,有人也會疑惑,做這些東西會對現(xiàn)實有什么影響嗎?Alpha Go 再厲害,它也只是個游戲。同時,我們團隊的成員也會疑惑 TF 到底會給現(xiàn)實世界帶來什么影響?
那么接下來我們就來說一下 TF 帶來的現(xiàn)實影響,同時也給大家介紹一下 TF 的學習架構(gòu)。
說到 TF 的用途,最熱門就是圖像識別方向。
2011 年,機器進行圖像識別的錯誤率為 26%,人工識別的錯誤率為 5%。到 2016 年,圖片識別的錯誤率降低到了 3%。
再講一個 TF 運用在醫(yī)療方向的例子。
目前全球有 4 億患者患糖尿病造成的視網(wǎng)膜病變,診斷過程很長。在印度、非洲等一些醫(yī)療設(shè)施相對不那么先進的地方,病癥診斷專業(yè)度不夠。谷歌大腦有個團隊,增加視網(wǎng)膜圖片掃描工具,專門用于掃描照片。讓人高興的是,現(xiàn)在已經(jīng)可以通過圖像識別技術(shù)來對病人進行診斷,而且準確率比醫(yī)務(wù)人員能達到的還要高。
再回過頭來說,TF 對現(xiàn)實世界的具體影響。
比如,斯坦福的另外一個研究,基本上是用同樣的方法來診斷皮膚癌。首先在醫(yī)院拍一張照片,然后通過圖像識別,來診斷是否皮膚癌。
TF 對現(xiàn)實世界的影響還表現(xiàn)在自然語言識別領(lǐng)域。
微軟在 11 月的時候宣布,在類似語音識別領(lǐng)域,機器做得比人好。10 月份的時候,Google 宣布,他們能大幅提高機器翻譯效果。
這張圖就是神經(jīng)機器翻譯的圖?,F(xiàn)在輸入一個英文的句子,假設(shè)句子中有四個單詞,然后這個模型就可以對句子進行分析,句子中每個詞表示一個向量,每個向量都會經(jīng)過一個很復雜的數(shù)學模塊,最后就可以得出四個項目,這四個項目通過計算延到右邊這個大的模塊里面,然后模塊再翻譯成中文,最后一個字一個字地輸出成中文。右邊圖中每一個小盒子都代表了一個很復雜的數(shù)值計算,每個小盒子都有幾百萬的運算要求,產(chǎn)生一個詞都需要上億的運算。
早在 2014 年,就有很多學校在做類似研究。研究小組從頭到尾寫一個模型,這個模型難以描述,訓練起來非常困難,且計算量大。就單單一個模型來說,代碼其實很簡單,但可能需要一個月的時間來進行訓練,于是需要轉(zhuǎn)到 TF 模型。
TF 的一個好處就是支持分布式,它可以有很多參數(shù)、計算機服務(wù)器,能夠充分利用資源。相比用 C++,用 TensorFlow 代碼量會少很多。
單個語種的翻譯,預測是 2-3 周的時間,每種語言大約超過 1 億個模型的訓練。Google 內(nèi)部要支持 100 多種語言,每種語言之間都要實現(xiàn)互相翻譯。所以如果要實現(xiàn)所有模型,非常耗時間。一般來講,Google 進行翻譯,原理就是把不同語言先翻譯成英語,再將這些語言翻譯成其它語言。所以真實翻譯效果會差很多,而且成本也高。
所以有人就想了一個項目,叫做 Multilingual models。
Multilingual models 的思路非常簡單,用上述的數(shù)學模型即可。但是當你訓練這個模型的時候,要給它看不同語言的翻譯,英文到日文的,英文到韓文的,同時也要給它看日文到英文的,韓文到英文的。而這個時候,你的模型是不會增大的,它只是閱讀了不同語言的語料。
訓練這個模型的時候,一開始,我們只是抱著試一試的心態(tài)。但是在生產(chǎn)應(yīng)用中我們驚喜地發(fā)現(xiàn),這個模型不光能翻譯日文到英文,還可以直接翻譯韓文到日文,以及日文到韓文!之前我們完全沒有想到會有這樣的翻譯效果。
在其它應(yīng)用場景里面,也會有一些類似的現(xiàn)象。
回到剛才,Google 在做翻譯的時候,會把不同語言翻譯成英文,再把英文翻譯成你想要的語言,這樣的話,對于所有自然語言來講,英文就是表達的中介語言。
上圖講述的就是,表述同一個意思的不同語言的句子,map 到一個二維空間上,然后發(fā)現(xiàn)很多語言都有共性遠遠大于它們之間存在的差異性。
比如說同樣一句話,不管是日語還是韓語,它表達的意思都在上圖 b 這個圈里,這是一個比較有趣的現(xiàn)象。
通過“機器訓練”這個模型,聚集到一起,達到提高翻譯水平的效果。
然后 Google Brain 不光是做 TF,內(nèi)部還要很大一部分人在做很前沿的研究。
其實不管是圖像識別還是 sequence modeling,其實它的核心概念都可以追溯到十幾二十年前。
圖像識別的核心可以追溯到 1999 年乃至更之前,機器翻譯則可以追溯到 1997 年的 LSTM 甚至更早,一直到 GPU 出現(xiàn),令這些模型計算更快,模型的效果才顯現(xiàn)出來。
當然,現(xiàn)在的技術(shù)不能解決所有的問題,有些思路還在被探索開發(fā)。
剛才講的谷歌翻譯模型,它們對于人的大腦來說是十分小的。Google 的翻譯大概是 2 億 5 千萬個參數(shù)。但是人大概有 100 倍乃至 1000 倍的神經(jīng)元。所以 Google Brain 認為,如果你給它更大的模型,更多的數(shù)據(jù),那么效果肯定會更好。當然,一種 idea 如何集成為一個更大的模型其實還是受很多信息的限制的。
我們可以有很多很多專家,比如說 2000 個專家,每個專家的特長領(lǐng)域都不同,如果我有問題的話,我要先去找哪個專家呢?我會一步一步來解決我的問題。然后具體呢,大家可以看一下,是一個highlight point。
比如我剛才講的谷歌翻譯的模型,現(xiàn)在發(fā)布的版本大概是 2 億 5 千萬個參數(shù)。比如里面有 2000 個 Export,這個模型翻譯的效果比我們現(xiàn)在發(fā)布的模型要好很多。雖然現(xiàn)在你可以建一個 10 倍大(乃至 100 倍)的模型,當然也會有很多問題,這只是一個設(shè)想,就是說如果機器越多,模型越多,那么效果就會越逼近人的智能。
大家有興趣可以看下這些論文,不光是 Google Brain,很多實驗室也在往這個方向努力。
另外一個比較有趣的現(xiàn)象就是:learning to learn。如果你看過去幾年里深度學習的“套路”,比如你要解決一個人工智能問題,然后用深度學習的方法,必須要有三個要素:在這個領(lǐng)域有專長的專家;有大量的數(shù)據(jù);以及很強的計算能力。對于很多公司來講,數(shù)據(jù)和計算能力可以購買。但是由于這個領(lǐng)域比較新,所以深度學習領(lǐng)域?qū)<沂潜容^少的。
那么遇到的問題就是,能否找到專家的替代,或者說減少對這些專家的依賴?
Google 有兩個研究人員,他們寫了一篇論文,基本就是說,你構(gòu)造一個機器學習模型,就像是大家平常寫一個程序一樣,類似于某個機器在玩游戲的過程,終極目標就是:解決遇到的問題。
比如下一盤棋,那么目標就是贏這盤棋。但是策略是什么呢?這時候,你可以隨機生成很多很多這樣的程序,這些程序里面,有的運行得好,有的運行得不好,你可以給不同的程序打分,對高分程序進行強化學習,指導搜索過程,找到更好的模型。
這個說的就是,參數(shù)越多,表達能力就越強。
圖中最后四行是程序搜索出來的模型,這個模型在這個測試中,錯誤率可以降低到 3.84%,去年最低的結(jié)果是 3.74%。
所以將來大家遇到問題,比如說你在下棋,你想贏,你就搜索一個方案,這些方案要比你手動去設(shè)置模型要有效。整個機器學習領(lǐng)域非??欤瑤啄旰筮@個方向或許就會有大的突破。
大家會覺得圖像識別模型已經(jīng)有了,為什么還要去生成這樣的一個模型?你不光可以通過程序生成這樣一個圖像識別模型。
比如你公司里有很多數(shù)據(jù)庫,你可以 想象能不能產(chǎn)生一個meta program,這個 meta program 通過機器學習的方法產(chǎn)生 database 的 program。
深度學習非常依賴計算能力,深度學習模型涉及到很多數(shù)值運算。它有個比較大的特點:對述數(shù)值運算監(jiān)控能力很高。核爆炸模擬的時候,要精確到 32 位甚至更高;但是在機器學習模型里面,你會發(fā)現(xiàn)其實不需要精確到 32 位;16 位甚至 8 位就可以解決問題。
去年,谷歌內(nèi)部在做 TPU 芯片,它就是 8 位或者 16 位的,而且價錢要比 CPU 或者 GPU 要便宜很多,低耗能,結(jié)構(gòu)上也要簡單很多,速度也有提高?,F(xiàn)在硅谷也在做這方面的事情,所以我覺得這兩年這方面將會有很大的突破。
最后給大家總結(jié)一下:大家可以感受到,這兩年人工智能(特別是深度學習)的發(fā)展非???,在各個應(yīng)用領(lǐng)域都表現(xiàn)非凡,相信未來還有更多領(lǐng)域會用到它,期待它的表現(xiàn)。
雷峰網(wǎng)版權(quán)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。