谷歌大神Jeff Dean:大規模深度學習最新進展 zz

http://www.tuicool.com/articles/MBBbeeQgit

在AlphaGo與李世石比賽期間,谷歌天才工程師Jeff Dean在Google Campus漢城校區作了一次關於智能計算機系統的大規模深度學習(Large-Scale Deep Learning for Intelligent Computer Systems)的演講。本文是對他此次演講的總結。github

若是你沒法理解信息裏包含的內容,那麼就會很難將其組織起來。算法

自從AlphaGo與李世石的比賽——這是約翰·亨利對戰蒸汽錘的現代版本——吸引了全世界,再次滋生了對「人工智能毀滅世界」的恐懼感,彷佛此時一睹Jeff的演講是絕佳時刻。若是你認爲AlphaGo如今很好,就等待它的beta版本吧。數據庫

Jeff固然提到了谷歌的著名語錄:組織這個世界的信息,使信息唾手可得並變得有用。數組

過去,咱們可能會將「組織」和收集、清除、存儲、索引、報告和搜索數據聯繫起來。全部這些都是谷歌早期精通的業務。而這些任務完成後,谷歌已經開始進行下一項挑戰了。服務器

如今,組織意味着理解。網絡

這次演講的一些重點:框架

真正的神經網絡由幾億個參數組成。谷歌如今所擁有的技能在於如何建造並快速訓練這些大型模型來處理大量數據集,並用它們去解決實際問題,以後快速將這些模型部署到不一樣平臺上的大量產品中(手機、傳感器、雲等等)。機器學習

神經網絡在90年代沒有獲得快速發展是因爲缺少足夠的計算能力和大型的數據集。你能看到谷歌對算法的自然熱愛是如何與他們的大量基礎設施結合到一塊兒的,也能看到不斷擴大的數據集如何爲谷歌的人工智能創造了完美的推進。異步

谷歌和其餘公司的一個關鍵區別就在於,當他們在2011年啓動谷歌大腦計劃時,他們並無將他們的研究獨立成該公司一個單獨的研究部門,成爲象牙塔通常的存在。而是項目團隊和其餘團隊緊密合做,好比安卓、Gmail 和photo等部門,以確實改進它們的特性,解決困難的問題。這對每一家公司來講都是很是珍貴的一刻。經過和你的人一塊兒工做將研究進行實際應用。

這一想法十分強大:他們知道他們可以獲取完整的子系統,有些多是機器學習到的,用更加通用的端對端的機器學習塊進行替換。一般當你有不少複雜的子系統時,總會有不少複雜的代碼將這些系統拼接起來。若是可以用數據和很是簡單的算法將這一切進行替換的話就再好不過了。

機器學習很快將會變得更好。引用Jeff的話說:機器學習領域的發展很是快。一篇論文發佈出來,一週內全球衆多研究團體會下載這篇論文,閱讀、解析論文,驗證論文的內容,而後把本身對論文的延展發佈到arXiv.org上。這與計算機學的其餘領域不一樣,他們首先須要提交文件,然後六個月會議討論決定是否接收,再過三個月會議上纔會有結果。這就耗費了一年時間。電子論文能把這個時間壓縮到一週是很是驚人的。

技術可以很是神奇的結合起來。谷歌翻譯團隊寫了一個APP,可以使用計算機視覺在取景器上識別文本。在翻譯完文本後,能夠把翻譯後的內容自動添加到圖片上。另一個例子是寫圖片字幕。把圖片識別和一序列一序列的神經網絡結合起來。能夠想象,這些模塊化的內容在將來將何等緊密的結合起來。

有強大功能的模型要小到足以在智能手機上運行。科技想要想取代智力必須走到這一步。它不能依靠網絡鏈接外部的「雲大腦」。既然TensorFlow模型可以在手機上運行,那這一點是有可能實現的。

若是你尚未思考深度神經網絡如何解決數據理解問題,那你就要開始思考了。這條起始線從如今開始,但它的實現是很是明瞭的,咱們看到了不少難題在深度學習網絡面前都迎刃而解。

Jeff 發表的講話都很是的棒,此次絕不例外。內容很是直接有趣,有深度,還很是容易理解。若是你想了解深度學習或瞭解Googel打算作什麼,這些內容就值得一看了。

理解意味着什麼?

當一我的看到街道景象時,他能垂手可得地挑選出圖片上的文本,瞭解到有的商店賣記念品,有家店價格特別低等信息。但直到如今,計算機依然不能從圖片中提取出這些信息。

若是計算機想要從圖片中瞭解現實世界,它須要可以從中挑選出有趣的信息點,閱讀文本並理解它。

在將來,小型移動設備將主宰着計算機交互。這些設備都須要不一樣類型的界面。須要真的可以理解並生成對話。

咱們在搜索引擎中輸入:[汽車零部件]。舊的谷歌版本會由於關鍵詞匹配給你第一條結果,但更好的結果實際上是第二個結果。真正的理解是這個問題深層次的意義是什麼,並不是字眼的表面意義。這纔是構建好的搜索與語言理解產品所須要的。

谷歌深度神經網絡小歷史

谷歌大腦計劃於2011年啓動,聚焦於真正推進神經網絡科學能達到的最早進的技術。

神經網絡已經存在不少年了,出現於19世紀60年代至70年代之間,在80年代晚期和90年代早期紅極一時,而後逐漸暗淡。主要由於兩個問題:1)缺少必備的計算能力去訓練大量的模型,這意味着神經網絡不能應用於包含大量有趣的數據集的大型問題。2)缺少大量的有趣的數據集。

谷歌開始只有幾個產品團隊工做。隨着這些團隊發佈一些很好的、能解決之前不能解決的問題的產品。名聲漸起,很快,更多的團隊加入其中幫助解決問題。

谷歌須要利用深度學習技術的產品/領域:安卓,Apps,藥物發現,谷歌郵箱,圖像理解,地圖,天然語言,圖片,機器人,語音翻譯,等等。

深度學習能應用於如此徹底不一樣的項目的緣由是他們涉及相同的基石,這些基石可用於不一樣的領域:語音、文本、搜索查詢、圖像、視頻、標籤、實體(一種特定的軟件模塊)、文字、音頻特性。你能夠輸入一種類型的信息,決定你想要輸出信息類型,收集訓練數據集指示出你想要計算的功能。而後,你能夠放手無論了。

這些模型十分奏效,由於你輸入的是很是原始的數據。你沒必要給出數據大量的有趣特色,模型的力量足以讓它自動地經過觀察許多許多例子決定數據集的有趣之處。

你能夠學習常見的表徵,這種學習極可能是跨領域的。例如,一輛『汽車』能夠指圖像中與真實相同的汽車。

他們已經學到他們能夠彙集一大堆的子系統,其中一些多是由機器學習的,而後用更通用的端對端的機器學習塊代替它。一般當你有不少複雜的子系統時,每每有大量複雜的代碼將這些子系統縫結在一塊兒。若是你能用數據和簡單的算法代替全部複雜代碼,那就太好了。

什麼是單個深度神經網絡?

神經網絡從數據中學習真正複雜的函數。從一端輸入內容轉換成另外一端的輸出內容。

這一函數不像計算x2,而是真正複雜的函數。當你輸入原始像素,好比一隻貓是,輸出結果就會是事物的類別。

深度學習中的「深度」是指神經網絡的層的數量。

對於深度,一個好的屬性是系統是由簡單的可訓練的數學函數的集合構成的。

深度神經網絡與大量機器學習方式是兼容的。

例如,你輸入貓的圖片,輸出的是一張人爲標註爲貓的圖像,這叫做監督式學習。你能夠給系統列舉大量的監督式樣例,而且將學習結合一個函數,這個函數與在監督式例子所描述的是類似的。

你也能夠進行非監督式訓練,你只獲得圖像而不知道圖像裏面的什麼。而後系統能夠依靠在衆多圖片中出現的模式學會挑選。因此,即便不知道圖像叫做什麼,它也能夠在全部這些有貓的圖形辨別出共同的事物來。

這也和更多像強化學習這樣的外來技術是兼容的。強化學習是很是重要的技術,它正在被AlphaGo使用。

什麼是深度學習?

神經網絡模型能夠說是基於咱們所認識的大腦運做的方式,它並非對神經元真正工做的詳細模擬,而是一個簡單抽象的神經元版本。

一個神經元可以接收許多輸入信息,真實的神經元會將不一樣的優點(strengths)與不一樣的輸入相聯繫。人工智能網絡試着學習爲全部那些邊緣,亦即與這些不一樣輸入關聯的優點進行加權。

真實的神經元吸取一些輸入與優點的組合,並決定是否發出一個脈衝。人工神經元不只僅會發出脈衝,還會發出一個實數值。這些神經元計算的函數是輸入的加權求和乘以非線性函數的權重。

現今一般所用的非線性函數是ReLU(max(0,x))。在上世紀九十年代,大部分非線性函數都是更加平滑 (https://www.quora.com/What-is-special-about-rectifier-neural-units-used-in-NN-learning)的 sigmoid或tanh函數。當神經元不放電的時候會取真正的零值,而不是很是接近零的數值的優秀特性,從而幫助優化系統。

例如,若是神經元有着三個輸入X1,X2,X3,分別有着0.21,0.3,0.7的權重,那麼計算函數將爲:y = max(0, -.0.21*x1 + 0.3*x2 + 0.7*x3)。

在識別圖片裏是一隻貓仍是一隻狗的過程當中,圖像會通過多層級處理,基於它們的輸入神經元能夠決定是否發射脈衝。

最底層的神經元只處理一小部分像素,更高層的神經元則會處理下層神經元的輸出並決定是否發射脈衝。

模型會如此向上直至最後一層處理完畢,舉個例子,這是一隻貓。在這種狀況下它錯了,這是一隻狗(儘管我也認爲那是一隻貓,那是一隻在籃子裏的狗嗎?)。

輸出錯誤的信號會反饋回系統中,接着其他模型會作出調整以讓它在下一次處理圖片時更有可能給出正確的答案。

調整整個模型全部的邊緣權重以增大得到正確結果的可能性,這就是神經網絡的目標。人們在全部的樣本都如此處理,這樣在大部分的樣本中都會獲得正確的輸出。

學習算法很是簡單。循環計算步驟以下:

隨機選擇一個訓練樣本「(輸入,標籤)」。例如,一張貓的圖片,以及預期輸出「貓」。

用「輸入」運行神經網絡,並觀察它的結果。

調整邊緣權重,讓輸出更接近與標籤」。

該如何調整邊緣權重以讓輸出接近標籤呢?

反向傳播法:這裏是一篇針對此的推薦文章:Calculus on Computational Graphs: Backpropagation (http://colah.github.io/posts/2015-08-Backprop/)。

當神經網頂層選擇的是貓而不是狗的時候,經過微積分鏈式法則來調整權重參數使得網絡能夠作更準確的預測。

你須要和權重的箭頭保持同一方向,讓它更有可能認爲這是一隻狗。不要跳一大步,由於這但是一個複雜坎坷的表面。小步前進會讓結果在下一次更有可能變成狗。經過大量迭代以及對樣本的觀察,結果就越有可能變成狗。

經過鏈式法則你能夠理解底層的參數變化會如何影響輸出。這意味着神經網絡網絡的變化如同漣漪般波及至輸入,調整整個模型,並增大它說出狗的可能性。

真的神經網絡由數以億計參數組成,所以你正在一個億維空間內作調整,並試着理解那是怎樣影響網絡輸出結果的。

神經網絡的不少優秀特性

神經網絡能夠運用到多個不一樣領域,用來解決不一樣的問題:

文本:英語和其餘語言包含數萬億的單詞。現有不少對應的文字資料,包含句與句對應的一種源語言文字與其翻譯版的另外一種語言文字。

視覺數據:數十億的圖像和視頻。

聲音:天天會產生幾萬小時的音頻數據;

用戶行爲:不一樣的應用程序都在產生數據,不管你在搜索引擎敲下的字符仍是在郵箱裏標記的垃圾郵件,這些用戶行爲裏能夠不斷被學習,並用來給你「定製」智能系統。

知識圖譜:數十億打標籤的RDF triple數據。

你給的數據越多,其反饋的結果越好,你也會讓這個模型更大。

 

若是你投入更多的數據卻不去擴大你的模型,會進入一個模型能力的飽和狀態,此時,模型學習到的只是關於你的數據集最顯而易見的事實。

經過增長模型的規模,模型不只能夠記住一些明顯的特徵,還會記住一些只是偶然在數據集中出現的細微特徵。

打造更大的模型須要更多數據和更強大的計算能力。谷歌一直在作的就是如何規模化計算量並投入到這些問題的解決中,從而訓練更大的模型。

深度學習給谷歌帶來哪些影響?

語音識別

語音識別團隊第一個和谷歌大腦團隊合做部署神經網絡。在谷歌大腦團隊幫助下,部署上線了一個新的、基於神經網絡的語音模型,再也不使用以前的隱馬爾科夫模型。

聲學模型的問題是從150毫秒的語音裏預測其中10毫秒的聲音是什麼。相似與「ba」仍是「ka」。接着你有了這些預測的完整序列,而後將它們和語言模型對接起來,以理解用戶在說什麼。

這個模型將識別錯誤率下降了30%,意義很是重大。此後語音團隊繼續在構建更加複雜的模型,並結合更好的神經網絡下降錯誤率。如今你在手機上說話,語音識別已經比三到五年前好太多了。

Image 挑戰賽

大約六年前, ImageNet的數據庫公開,大約有100萬圖像數據,這個巨大的圖像數據庫對於推動計算機視覺的發展意義重大。

圖像被分爲1000個不一樣種類,每一個種類大約1000張照片;

大約有1000張不一樣的豹子照片、1000張不一樣的汽車、滑板車照片等等;

其中有個複雜的因素:並不是全部的標籤都是正確的;

比賽的目標是歸納出照片的新的類型。對於一張新照片,你能判斷出來上面是獵豹仍是櫻桃嗎?

在神經網絡運用到比賽以前,這項比賽的錯誤率爲26℅。2014年,谷歌贏得比賽時的錯誤率爲6.66%。2015年的時候,獲勝團隊的錯誤率下降到3.46%。

這是一個巨大並且有深度的模型。每一個盒子都佈滿了完整層級的神經元,它們正在進行卷積運算,關於這方面的詳細狀況,能夠查看這篇論文《Going Deeper with Convolutions》

一個名叫 Andrej Karpathy 的人也參與了比賽,他的錯誤率是5.1%,他後來還寫了篇文章《What I learned from competing against a ConvNet on ImageNet.》

神經網絡模型擅長什麼?

神經網絡模型很是擅長識別精細程度的差異。好比,計算機擅長辨別人類不善於分辨的犬種。人類可能看到一朵花就只知道那是一朵花,計算機能夠分辨那是一朵「芙蓉」或是一朵「大麗花」。

神經網絡模型擅長概括。好比不一樣種類的飯菜,儘管看起來不同,但都會被標記爲「飯菜」。

當計算機出錯時,錯誤的緣由是合理的。好比一隻蛞蝓看起來很像一條蛇。

谷歌照片搜索

檢查照片的像素並理解圖像中的內容,這是個很強大的能力。

Google Photos 團隊在沒有標記它們的狀況下部署了這一能力。你能夠在沒有標記圖片的狀況下搜索到雕像、尤達、圖畫、水等圖片。

街景影像

在街景影像中,你但願能夠閱讀到全部的文本。這是更爲精細更爲具體的視覺任務。

首先須要可以找到圖像中的文本。模型基本上都是被訓練用來預測像素熱圖的:哪些像素包含文本,哪些不包含。訓練數據是繪製於文本像素周圍的多邊形。

由於訓練數據包含不一樣的字符集,它能夠找到多種不一樣語言的文本。它能夠識別大字體和小字體,離鏡頭近的和離得很遠的文字,以及不一樣顏色的文本。

這是一個訓練相對簡單的模型。這是一個試圖預測每一個像素是否包含文本的傳統的網絡。

谷歌搜索排名的RankBrain

RankBrain於2015年推出,是谷歌第三重要的搜索排名因素。瞭解更多:谷歌將其利潤豐厚的網絡搜索交給人工智能機器。

搜索排名是不一樣的,由於你想要可以理解該模型,你想理解爲何它會作出特定的決策。

這是搜索排名團隊猶豫在搜索排名中使用神經網絡的一個緣由。當系統出錯時,他們但願瞭解什麼會這樣。

調試工具已被製造出來,並且模型也能被充分地理解,以克服這種異議。

通常來講你不想手動調整參數。你嘗試理解爲何模型會作出那樣的預測並搞清楚是否與訓練數據相關,是與問題不匹配嗎?你可能在一個分佈式數據上進行訓練,而後將其應用於另外一個。經過搜索查詢的分佈,模型天天都能得到一點改變。由於事件在改變,模型也一直在改變。你必須瞭解你的分佈是不是穩定的,好比在語音識別中,人們的聲音並不會發生太大改變。查詢和文檔內容常常在改變,因此你必須確保你的模型是新鮮的。更通常地,咱們須要打造更好的用於理解這些神經網絡內部情況的工具,搞清楚是什麼得出了預測。

序列至序列(Sequence-to-Sequence)映射模型

世界上許多問題均可納入到一個序列映射到另外一個序列的框架中。谷歌的Sutskever、Vinyals 和 Le 在這個主題上寫了一篇開關性的論文:使用神經網絡的序列到序列學習 (http://papers.nips.cc/paper/5346-sequence-to-sequence-learning-with-neural-networks.pdf)。

特別地,他們研究了語言翻譯,將英語翻譯成法語中的問題。翻譯事實上只是將英語句子序列映射到法語句子序列。

神經網絡很是擅長學習很是複雜的功能,因此這個模型學習了映射英語句子到法語句子的功能。

一種語言的一個句子經過EOS(end of sentence)信號一次輸入一個詞。當模型看到EOS 開始產出其它語言對應的句子時,模型就獲得了訓練。訓練數據是具備一樣含義的不一樣語言中的配對句子。它只是試圖該函數建模。

模型會在每一步發出你的詞彙中全部詞條輸入的機率分佈。在推理而不是訓練時間,你須要作一點搜索。若是你必須最大化每一個詞的機率,你並不必定會獲得最可能的句子。直到找到最大可能的句子,聯合機率的搜索才完成。

該系統是如今公共翻譯服務中最早進的。其它翻譯系統是一堆手寫的代碼或這個翻譯問題的子塊的機器學習模型,而非徹底的端到端學習系統。

人們對這一模型的興趣在暴增,由於不少問題均可被映射到序列到序列的方法。

智能回覆(Smart Reply)

Smart Reply是序列到序列在產品中的一個應用案例。在手機上,你但願快速回復郵件,而打字又讓人痛苦。

和 Gmail 團隊合做,他們開發了一個能預測一條信息可能的回覆的系統。

第一步是訓練一個小模型以預測一條信息是不是能夠快速回復的信息。若是是,就會激活一個更大的計算上更昂貴的模型;該模型將該信息做爲一個序列,並嘗試預測回覆的單詞序列。

好比,對於一封詢問感恩節邀請的電子郵件,可預測到的回覆有三個:把咱們算上;咱們會去;抱歉咱們去不了。

Inbox 應用中驚人數量的回覆都是經過 Smart Reply 生成的。

圖片說明

生成一張圖片說明時,你會試着讓機器儘量寫出相似人類基於圖片會作出的說明。

採用已經開發出來的圖片模型,以及已經研發出來的Sequence-to-Sequence模型,把它們插在一塊兒。圖片模型被用做輸入。

它被訓練用來生成說明。訓練數據集擁有五種不一樣的人給出的五種不一樣說明的圖片。10萬到20萬的圖片須要寫70萬句的說明。

一張嬰兒懷抱泰迪熊的圖片,電腦這麼寫的:一個抱着填充玩具動物孩子的特寫;一個嬰兒在泰迪熊旁邊睡着了。

尚未達到人類理解水平,但機器出錯時,結果可能會有趣。

綜合視覺+翻譯

技術可以綜合起來。翻譯團隊編寫了使用了在取景器中識別文本的計算機視覺APP。翻譯文本,而後給圖片疊加翻譯文本(讓人印象很是深入,約37;29)。

模型足夠小,整個計算都在設備上運行。

迭代(turnaround)時間和對研究的影響

在一天內完成單個CPU花費6周才能完成的訓練

谷歌真的關心可以快速迭代研究。它的想法是快速的訓練模型。理解什麼運行良好,什麼運行欠佳,找出下一組要運行的實驗。

一個模型應該在在幾分鐘幾小時內就能可訓練,而不是幾天甚至幾個禮拜。讓每一個作這類研究的人更加富有生產力。

如何快速訓練模型?

模型的並行性

一個神經網絡有許多內在的並行性。

全部不一樣的個體神經元幾乎都是彼此獨立的,當你計算它們時,特別是,加入你有Local Receptive Fields,這是一個神經元從其下方少許神經元那裏接受輸入的地方。

可以跨越不一樣GPU卡上的不一樣機器對工做進行劃分,只有跨越邊界的數據才須要交流。

數據的並行性

當你對模型的參數集進行優化時,不該該在中央服務的一臺機器上進行,這樣你就有不一樣的模型副本,經過它們之間的合做來進行參數優化。

在訓練中理解不一樣的隨機數據片斷。每個副本都會得到模型中當前的參數集,經過對至關規模數據的理解來判斷出梯度,找出須要對參數所做的調整,而且將調整值發回至中央參數集服務器。參數服務器會對參數進行調整。不斷重複這個過程。

這會在多個副本之間完成。有時他們會使用500臺機器來生成500個模型副本,以便迅速實現參數的優化和處理數據。

這個過程能夠異步進行,每一個數據分任務在各自獨自的循環運算中,獲取參數,計算梯度並將它們傳回,不會受到其餘彼此的控制和同步。結果是,按照50-100的副本規模進行練習,對許多模型來講是可行的。

Q&A

若是不是諸如谷歌這樣的大公司,沒法獲取海量數據集,你會怎麼作?從一個運行良好的模型開始,用公共數據集進行訓練。公共數據集廣泛能夠獲取。而後用更加適合你問題的數據進行訓練。當你從一個相似而且公開可獲取的數據組開始時,針對你的特殊問題,可能只須要1,000或者10,000標籤實例。ImageNet就是這種處理可行的好例子。

身爲一個工程師,你所犯過的最大錯誤是什麼?沒有在BigTable裏放入分佈式事務處理能力。若是你想要更新多條數據,你不得不運做你本身的事務處理流程。沒有放入事務處理能力是由於會增長系統設計的複雜度。回想起來,很對團隊想要有那種能力,他們各自獨立(在上層)去添加這個能力,也得到了不一樣程度成功。咱們應該在覈心繫統實現事務處理能力。它在內部應用場景也會頗有用。Spanner系統增長了事務處理搞定了這個問題。

相關文章
相關標籤/搜索