天天看點

Google首席科學家南韓大學演講:大規模深度學習

Google首席科學家南韓大學演講:大規模深度學習
2016年3月7日,谷歌首席科學家,MapReduce、BigTable等系統的創造者,Jeff Dean受邀南韓大學,演講主題《大規模深度學習》,這裡部分來自highscalability的文字和筆者Youtube上的聽錄。剛好演講在AlphaGo和李世石比賽之前,觀衆也問了他的預測,他隻是說訓練了5個月的機器跟頂尖高手的差距不好說;還有人問道他喜歡的程式設計語言(C++愛恨交織,喜歡Go的簡潔,Sawzall才是真愛);在Google作為首席一天是怎麼過的(要吃好早飯,到處閑逛閑聊,找到那些每個領域專家一起攻克難題)。

本文首發微信公衆号“董老師在矽谷”,轉載請聯系本人。

Google首席科學家南韓大學演講:大規模深度學習

整合意味着了解

如果你不了解資訊中的奧秘,那麼你也很難去組織它。

Jeff Dean是Google系統架構組院士,在講座:“大規模深度學習建構智能計算機系統”中提到這句和Google的使命:整合全球資訊,使人人皆可通路并從中受益。早期他們通過收集,清理,存儲,索引,彙報,檢索資料完成“整合”的工作,當Google完成這個使命,就去迎接下一個挑戰。

了解到底是什麼含義?

Google首席科學家南韓大學演講:大規模深度學習

看到這張圖,你馬上知道是小寶寶抱着泰迪熊睡覺。而看到下張街景,馬上意識到紀念品店裡面有打折資訊。其實直到最近,計算機才可以提取圖檔中的資訊。

Google首席科學家南韓大學演講:大規模深度學習

如果想從圖像去解釋實體世界,計算機需要去選擇跟那些感興趣的點,閱讀文字并去真正了解。

像下面的文字“car parts for sale(賣汽車配件)”,傳統的Google通過關鍵字比對來給出結果,但更好的比對是第二個。這是一個需求深度了解的過程,而不能停留在字面,要去做一個優秀搜尋和語言了解産品。

Google首席科學家南韓大學演講:大規模深度學習

Google的深度神經網絡曆史

Google首席科學家南韓大學演講:大規模深度學習

Google跟其他公司的不同是,2011年就開始Google大腦計劃,當時想通過使用神經網絡來提升技術水準,但并沒有把研究做成像大學象牙塔那種,而是結合安卓,Gmail,圖檔去改進産品解決真正問題。這對其他公司也是很好的借鑒,把研究和員工工作結合起來。

神經網絡老早就開始研究,上世紀60年代發明,在80年代和90年代早期也流行過,後來又不火了。兩個原因:缺少計算能力去訓練資料模型,這樣也不能用來做更大規模的問題;2)缺少大量有效的資料集。而Google通過算法的力量,在加上他們強大的基礎架構,海量資料集創造了AI的絕佳溫床。

Google首席科學家南韓大學演講:大規模深度學習

深度學習一開始從少數的産品組開始,一段時間後反響很好,能解決之前不能做的,就更多的團隊開始采納。使用深度學習的産品有:安卓,Apps,藥品發現,Gmail,圖檔了解,地圖,自然語言,圖檔,機器人,語音翻譯等。

Google首席科學家南韓大學演講:大規模深度學習

深度學習能應用到很多領域原因是那些通用子產品:語音,文字,搜尋詞,圖檔,視訊,标簽,實體,短語,音頻特性。輸入一類資訊,決定你想要的輸出,收集訓練資料作為你想要計算的潛在函數,然後就放手不管了。

Google首席科學家南韓大學演講:大規模深度學習

模型很贊的原因是因為灌了很多原始形式的資料。你不需要教工程師很多特征點,模型的力量在于從觀察一些例子就能自動識别資料中的有用資訊。

深度神經網絡是什麼?

神經網絡就是一些從資料提煉的複雜函數。從一個空間輸入在轉化為另一個空間的輸出。這裡的函數不是像平方,而是真正複雜的函數。當你給出一些原始像素,比如貓,而輸出就是對象的類别。

Google首席科學家南韓大學演講:大規模深度學習

深度學習中的“深度”指的是 神經網絡中的層數。這個系統的良好性質是一組簡單的可以訓練的數學函數集合。深度神經網絡适用于很多機器學習風格。

比如你給輸入一張貓的圖檔,輸出是人工标記的貓圖檔,這是 監督學習。你把很多這樣監督樣本給系統,讓它去學習近似的函數,如同從監督樣本中觀察出來的。

還有一種是非監督學習,給出一個圖檔,你也不知道裡面是啥,系統可以學習去尋找在很多圖檔中出現的模式。這樣即使不認識圖檔,它也能識别所有的圖檔中都有一隻貓。

增強學習也适用,這也是AlphaGo用到的技術。

什麼是深度學習?

深度網絡模型是類似于大腦行為的原理。但不是具體模拟神經元如何工作。而是一種簡單抽象的神經元版本。

Google首席科學家南韓大學演講:大規模深度學習

神經元有一組輸入。真正神經元會有不同的強度的輸入。在人工智能網中試圖去學習到這些邊上的權重,去加強不同輸入的聯系。真正神經元通過輸入和強度的組合去決定要不要生成脈沖。

人工神經元不會産生脈沖,但會生成一個數值。神經元的函數就是通過非線性函數計算輸入的權重乘以權重之和。

典型的非線性函數就是整形線性單元(max(0, x)),在90年代很多非線性函數是很平緩的sigmoid()函數或者tanh()函數。但對于神經元來說産生的數值是不是更接近0對優化系統更有利。比如如果神經元有3個輸入 X1, X1, X3,權重分别是 -0.21, 0.3, 0.7,計算就是

y = max(0, -.0.21*x1 + 0.3*x2 + 0.7*x3)。

為了決定圖檔到底是貓還是狗,這個圖檔要經過很多層。這些神經元根據輸入來産生下一步。

Google首席科學家南韓大學演講:大規模深度學習

最低層的神經元會檢視像素的小塊。更高層的神經元會看下層神經元的輸出再決定是否生産。

這個模型也會錯,比如說這裡是貓,但事實上是狗。那麼做錯誤決定的信号就會傳回到系統中做調整,讓剩餘的模型在下一次檢視圖檔時候,更可能輸出狗。這就是神經網絡的目标,通過模型小步調整邊的權重讓它更可能去得到正确答案。你可以通過所有樣本去聚合,這樣可以降低錯誤率。

學習算法其實比較簡單如下

  1. 選擇随機訓練樣本“(輸入,标簽)”,比如上面貓圖和想要的輸出标簽,‘貓’
  2. 運作神經網絡,在輸入上去檢視它産生的。
  3. 調整邊的權重讓最後輸出更接近于“标簽”上的。

如何調整邊的權重去保障輸出更接近于标簽呢?

Google首席科學家南韓大學演講:大規模深度學習

反向傳播:積分的鍊式法則在決定高層神經網絡中使用,如果選擇是貓而不是狗呢?得想辦法去調整高層的權重去讓它更可以決定是“狗”。

根據箭頭方向和權重去讓它更可能說是狗。不要步子邁得太大因為這種表面很複雜,微調一小步讓它下次更可能給出狗的結果。通過很多疊代以及檢視例子,結果更可能會是狗。通過這個鍊式法則去了解底層參數改變是如何影響到輸出的。說白了就是網絡變化回路回報到輸入,使得整個模型更适應去選擇“狗”。

Google首席科學家南韓大學演講:大規模深度學習

權重的微調

Google首席科學家南韓大學演講:大規模深度學習

真正神經網絡通過億級的參數在億級的次元做調整,去了解輸出網絡。Google目前有能力如何快速搭建和訓練這些海量資料上的模型,去解決實際問題,在快速去不同廣泛的平台去部署生産模型(手機,傳感器,雲端等)。

神經網絡的奇妙特性

Google首席科學家南韓大學演講:大規模深度學習

就是說神經網絡可以用在很多不同問題上。

  • 文本:萬億級别的英文和其他語言資料。從一個語言翻譯到另一個,從短語到整句。
  • 虛拟化資料:十億級别的圖譜,視訊。
  • 語音:每天都産生萬小時的資料。
  • 使用者行為: 很多應用産生資料。比如搜尋引擎的查詢,使用者在email中标記垃圾。這些都可以學習并搭建智能系統。
  • 知識圖譜:十億級别的标簽化關系元組。
Google首席科學家南韓大學演講:大規模深度學習

如果吸收更多資料,讓模型變大,結果也更好。

如果你輸入更多資料,但沒有把模型變大,模型的能力就會受限在一些資料集中的明顯特征。通過增加模型的規模,讓它不僅記住明顯的,還有一些也許出現很少的細微特征。

通過更大的模型,更多資料,計算需求也更大。Google很多精力花在如何提升計算量,訓練更大的模型。

在Google深度學習有哪些強大應用?

1)語音識别

Google首席科學家南韓大學演講:大規模深度學習

第一個部署深度神經網絡的小組。他們實作的新模型基于神經網絡而不是隐馬爾可夫模型。這個問題是把從150毫秒的語音去預測中間10毫秒吞掉的聲音。比如到底是ba還是ka的聲音。你得到一個預測的序列,再通過語言模型去了解使用者所說。

一開始的版本就把識别錯誤率降低了30%,确實非常厲害。後來就研究一些複雜模型去加強網絡,進一步降低錯誤率。現在當你對着電話說話,語音識别比五年前強多了。

2)ImageNet挑戰

Google首席科學家南韓大學演講:大規模深度學習

ImageNet是6年前公布的。裡面有100萬張圖檔,算是計算機視覺領域最大的。圖檔中包含1000種不同分類,每一類有1000張圖檔。比如裡面有上千張不同的豹子,機車等,一個麻煩的是不是所有的标簽都是對的。

Google首席科學家南韓大學演講:大規模深度學習

在神經網絡使用之前,最好的錯誤記錄是26%,2014年 Google錯誤率暴降到6.66%取得冠軍,然後到了2015年錯誤率下降到3.46%。這是什麼概念,大家注意到Andrej人類的錯誤率也有5.1%(他還是花了24小時訓練後的結果)。

總之這是個又大又深的模型,每個盒子就像神經元的一層去進行卷積操作。

Google首席科學家南韓大學演講:大規模深度學習

3)圖檔類别識别

Google首席科學家南韓大學演講:大規模深度學習

計算機在花卉識别上很強大,這是非常好的模型,能夠識别細微差别。

Google首席科學家南韓大學演講:大規模深度學習

一般的效果,比如在菜品識别。

Google首席科學家南韓大學演講:大規模深度學習

計算機也有犯錯的時候,關于錯誤敏感性看一看上面的,比如左邊鼻涕蟲當成蛇,右邊也不知道是什麼鬼。

4)Google圖檔搜尋

Google首席科學家南韓大學演講:大規模深度學習

了解圖檔中像素的能力,Google圖檔團隊開發了不用标簽就可以搜尋圖檔的功能。比如你可以去找雕像,素描,水,而不需提前标注。

5)街景圖像

Google首席科學家南韓大學演講:大規模深度學習

在街景中如何識别裡面的文字。首先要找到文字部分,模型能夠去有效預測像素中熱點圖,那些含有文字的像素點。訓練的資料就是包含文字劃分的多邊形。

因為訓練資料中包括不同的字元集,這樣在多語言下也沒問題。也要考慮大小字型,遠近,不同顔色。訓練的模型相對容易,就是卷積神經網絡嘗試去預測每個像素是否包括文字。

6)Google搜尋 RankBrain

Google首席科學家南韓大學演講:大規模深度學習

RankBrain 2015年啟動,在搜尋排名(前100位排第三),裡面難點是搜尋排序需要了解模型,要了解為什麼要做某個決定。當系統發生錯誤為什麼做那個。

調試工具準備好,需要足夠的了解能力嵌入模型,去避免主觀。總體上是不想手工調參數。你需要嘗試了解模型中的預測,去了解訓練資料是否相關,是否跟問題無關?你需要訓練資料并應用到别的上面。通過搜尋查詢的分布你能得到每天的變化,事件發生後改變也随時發生。你要看分布是否穩定,比如語音識别,一般人不會改變音色。當查詢和文檔内容頻繁變化,你要保證模型是新的。我們要搭建通用工具去了解神經網絡裡面發生了什麼,解釋什麼導緻這個預測。

序列模型

Google首席科學家南韓大學演講:大規模深度學習

很多問題都可以映射到從一個序列到另一個序列的規律。比如語言翻譯,從英語翻譯到法語,就是把英語的序列單詞轉化到法語序列單詞。

神經網絡在學習複雜函數時特别有用,這個模型學習從英文到法文的句子。句子以單詞為機關,以結束符作為信号。訓練模型在遇到結束符時開始産生另一個語言的對應句子。而模型函數就是把語言中語句對作為訓練資料。

每一步都在詞典表中的單詞産生機率分布。在推理時候通過一些搜尋來實作,如果你最大化每個單詞的機率,這樣找的不是最可能的句子。直到找到最大可能的句子找到才結束搜尋。

這個系統在公開翻譯系統中表現出色。大多數其他翻譯系統需要手工編碼或機器學習的模型隻是在一小部分使用,而不是像這種整體的端到端的學習系統。

Google首席科學家南韓大學演講:大規模深度學習

這些領域都是可以歸到序列類的方法

7)智能回複

Google首席科學家南韓大學演講:大規模深度學習

智能回複是另一個序列類的例子。在手機上你如何更快回複郵件,打字很累。

Gmail組開發了一個系統能夠去預測郵件回複。第一步就是訓練小量模型去預測如果消息是某一類的,怎麼做簡短回複。如果是一個更大,計算能力更強的模型将消息作為一個序列,嘗試預測序列的響應語。比如對于節日邀約,最可能的三個答複是“算上我們”,“我們會去的”,“對不起,我們有事沒法耍”。

8)看圖說話

Google首席科學家南韓大學演講:大規模深度學習

把之前開發的圖檔模型與序列類模型結合一起。圖檔模型作為輸入。這裡就不是閱讀英文句子了,而是看圖檔的像素。

接下來就是訓練生成字幕。訓練集有5個由不同的人寫的不同的字幕。總共100萬圖檔,70萬條語句。效果如下

Google首席科學家南韓大學演講:大規模深度學習

兩個模型翻譯的都不錯:1)一個小孩緊緊的抱住毛絨玩具。2)一個寶寶在泰迪熊旁邊睡着了。

Google首席科學家南韓大學演講:大規模深度學習

上面是一些好玩的出錯語句,為啥會錯,其實你自己看了也明白。

9)機器視覺和翻譯結合

Google首席科學家南韓大學演講:大規模深度學習

翻譯團隊寫了一個app,使用計算機視覺來識别鏡頭中文字,再翻譯成文本,最後再圖檔本身覆寫翻譯好的文字。模型足夠小可以運作在所有裝置上。

直接在手機上跑一些模型中的重要方法。智能化将轉移到裝置端,這樣不會依賴遠端雲端的大腦。

研究上的努力和成果轉化

Google 非常在乎研究轉化效率。就是要快速訓練模型,了解那些做的好的和不好的,再想下一步實驗。模型應該再分鐘或者小時,而不是幾天或者幾周。這樣讓每個人都做研究更高效。

機器學習發展會更好,更快。Jeff說機器學習社群發展得特别快。人們釋出了一篇論文,一周内就有很多研究小組跟進,下載下傳閱讀,了解實作,再釋出他們自己的擴充。這跟以前的計算機期刊投稿完全不同,等6個月才知道是否被接收,然後再過3個月最後發表。而現在把時間從一年壓縮到一周,真不得了。

如何快速訓練大量模型

模型的并行化

Google首席科學家南韓大學演講:大規模深度學習

神經網絡有很多固有的并行化,所有不同的神經元與其他的也是保持獨立,特别本地接納的,神經元僅僅接受一小部分比它更低的神經元作為輸入。

在不同的GPU上和不同機器上可以做并行。隻有邊界上的資料需要通信。

Google首席科學家南韓大學演講:大規模深度學習

資料并行化

Google首席科學家南韓大學演講:大規模深度學習

優化的模型參數集不應該在一台機器上或者一台中心伺服器上,應該有多個模型拷貝,這樣協作區優化參數。

在訓練過程中讀取資料的随機部分。每一個拷貝在模型中擷取目前的參數集,讀取在目前梯度下的一點資料,找到想要的參數調整,在發送調整到中心的參數伺服器中。這個參數伺服器會對參數做調整。整個過程重複,這個也會在很多拷貝中進行。有些使用500份在500台不同機器上的拷貝,為了快速優化參數并處理大量資料。

一種方式是異步的,每一個都有自己的循環,取得參數,計算梯度,發送它們,不需要任何控制和跟其他的同步,不好的是當梯度傳回到參數可能在計算結束後就被移走了。對有些例子可能有50到100份的拷貝。還有一種是同步,一個控制器控制所有的拷貝。

TensorFlow

Google首席科學家南韓大學演講:大規模深度學習

在過去的幾年間,我們已經建立了兩代用于訓練和部署神經網絡的計算機系統,并且将這些系統應用于解決很多在傳統上來說對計算機而言很難的問題。我們對許多這些領域的最新技術做了很大的改進。

第一代系統DistBeliet在可擴縮性上表現很好,但在用于研究時靈活性達不到預期。對問題空間的更深了解讓我們可以做出一些大幅度的簡化。

Google首席科學家南韓大學演講:大規模深度學習

這也是第二代系統的研發動機,用 TensorFlow 表達高層次的機器學習計算。它是C++語言編寫的核心,備援少。而不同的前端,現有Python和C++前端,添加其他語言的前端也不是難題。

Google首席科學家南韓大學演講:大規模深度學習

計算可以用一張資料流圖來了解。

我們輸入資料、權重、誤差以及标簽,在不同節點進行不同的運算。

TensorFlow名字的意義

  • Tensor(張量)意味着N維數組。1維時就是向量,2維時就是矩陣;通過圖像可以代表更高維的資料流,比如,圖像可以用三維張量(行,列,顔色)來表示。
  • Flow(流)意味着基于資料流圖的計算。有許多運算(圖中的節點)應用在資料流上。
  • 張量從圖象的一端流動到另一端,這就是“TensorFlow”。“邊”代表張量(資料),節點代表運算處理。

這是使用張量計算的示意圖。

Google首席科學家南韓大學演講:大規模深度學習

這是使用狀态計算的示意圖。

Google首席科學家南韓大學演講:大規模深度學習

這是使用分布式計算的示意圖。

Google首席科學家南韓大學演講:大規模深度學習

它能夠在各個平台上自動運作模型:電話上,單個機器上(CPU或GPU),由成百上千的GPU卡組成的的分布式系統。

Google首席科學家南韓大學演講:大規模深度學習

總結

如果你還沒想通過深度學習網絡去解決你的資料問題,你還是要趕緊考慮。TensorFlow 讓每個人更容易擷取深度學習能力。

  • 高度擴充的設計,更快的實驗速度加速研究程序
  • 容易分享模型,開發代碼應用到可重用的效果
  • 通過同一個系統把研究工作直接用于生産環境

最後說一些quora上大家給Jeff Dean大神編的段子,供君一樂

Jeff Dean當初面試Google時,被問到“如果P=NP能夠推導出哪些結論”,Jeff回答說:“P = 0或者N = 1”。而在面試官還沒笑完的時候,Jeff檢查了一下Google的公鑰,然後在黑闆上寫下了私鑰。

編譯器從不警告Jeff Dean,隻有Jeff警告編譯器。

Jeff Dean的編碼速度在2000年底提高了約40倍,因為他換了USB2.0的鍵盤。

Jeff Dean被迫發明了異步API因為有一天他把一個函數優化到在調用前就傳回結果了。

Jeff Dean曾經寫過一個O(n2)算法,那是為了解決旅行商問題。

Jeff Dean的鍵盤隻有兩個鍵,1和0。

Jeff Dean失眠的時候,就Mapreduce羊。

參考文章

  • Jeff Dean on Large-Scale Deep Learning at Google