圖靈獎得主,帶你詳解深度學習


圖靈獎得主,帶你詳解深度學習


圖靈獎得主,帶你詳解深度學習

內容來源:本文為人民郵電出版社書籍《深度學習》讀書筆記,筆記俠經出版社授權發佈。作者簡介: Ian Goodfellow,谷歌公司的研究科學家;Yoshua Bengio,蒙特利爾大學計算機科學與運籌學系的教授;Geoffrey Hinton,多倫多大學榮譽退休教授,Google傑出研究科學家。
封面設計 & 責編 | 浮燈第 3381 篇深度好文:8553 字 | 18 分鐘閱讀

讀書筆記•人工智能

本文優質度:★★★★★+ 口感:拿鐵

閱讀前,筆記君邀你思考:

北京時間3月27日晚,ACM(計算機協會)宣佈把2018年度圖靈獎頒給了深度學習“三巨頭”——Yoshua Bengio、Geoffrey Hinton 和 Yann LeCun,以表彰他們在深度學習神經網絡上的工作。

圖靈獎被認為是計算機領域的“諾貝爾獎”,一起來看看圖靈獎得主如何理解所謂的“深度學習”。

以下,盡請欣賞~

1956年的夏天,一場在美國達特茅斯大學召開的學術會議,多年以後被認定為全球人工智能研究的起點。

2016年的春天,一場AlphaGo與世界頂級圍棋高手李世石的人機世紀對戰,把全球推上了人工智能浪潮的新高。

2016年被稱為“人工智能元年”,這一年爆發了全球性的人工智能潮流。

以谷歌、Facebook、微軟為首的全球三大AI巨頭都在逐漸將公司的發展重心轉移到人工智能方面來。

圖靈獎得主,帶你詳解深度學習


2019年1月25日,谷歌旗下的DeepMind開發的全新AI程序AlphaStar,在《星際爭霸2》人機大戰比賽中,以10:1的戰績,全面擊潰了人類職業高手。

在圍棋世界裡,動作空間只有361種,而《星際爭霸2》大約是10的26次方種。這場比賽可以說是人工智能在競技遊戲領域的一次里程碑式的勝利。

無論是AlphaGo還是AlphaStar,它們的主要工作原理都是“深度學習”。“深度學習”是機器學習的一個領域,其形式是模擬人類大腦的神經網絡進行計算和學習。

一、神經網絡與深度學習

為什麼要了解深度學習?

首先,“深度學習”現在太熱門了,圖形識別、語音識別、汽車導航全都能用上,非常值錢。

圖靈獎得主,帶你詳解深度學習

更重要的是,“深度學習”算法包含精妙的思想,能夠代表這個時代的精神。

這個思想並不難,但是一旦領會了,你就能窺探一點腦神經科學和現代工程學。

我將重點使用兩份參考資料:

一個是Arstechnica網站近期發佈的一篇文章《計算機圖形識別能力如何好到令人震驚》,作者是蒂莫西·李(Timothy Lee)。

一個是一本新書《深度學習:智能時代的核心驅動力量》,作者是特倫斯·謝諾夫斯基(Terrence Sejnowski),中信出版社剛剛出了中文版。

不知道你注意到沒有,你的手機相冊,知道你每一張照片裡都有什麼東西。

不管你用的是 iPhone還是安卓,相冊都有一個搜索功能,你輸入“beach”,它能列舉所有包含海灘的照片;輸入“car”,它能列舉畫面中有汽車的照片,而且它還能識別照片中的每一個人。

每拍攝一張照片,手機都自動識別其中的典型物體。這是一個細思極恐的技術。怎麼才能教會計算機識別物體呢?

1.沒有規則的學習

不到十年之前,人們總認為模式識別方面人腦比計算機厲害,甚至谷歌投入巨大精力研究都做不到從照片裡識別出一隻貓。

然而,從2012年開始,“深度學習”讓計算機識別圖形的能力突然變得無比強大,甚至已經超過了人類。

首先來看人是怎麼識別貓的。

觀察一下這張圖,你怎麼判斷這張照片裡有沒有貓呢?、、


圖靈獎得主,帶你詳解深度學習

你可能會說,這很簡單,所有人都知道貓長什麼樣——好,那請問貓長什麼樣?

你也許可以用科學語言描寫“三角形”是什麼樣的——這是一種圖形,它有三條直線的邊,有三個頂點。

可是你能用比較科學的語言描寫貓嗎?它有耳朵、有尾巴,但這麼形容遠遠不夠,最起碼你得能把貓和狗區分開來才行。

再看下面這張圖片,你怎麼判斷 ta 是男還是女呢?

圖靈獎得主,帶你詳解深度學習

圖片來自 design.tutsplus.com


你可能會說女性長得更秀氣一些——那什麼叫“秀氣”?是說眉毛比較細嗎?是輪廓比較小嗎?

這是一個非常奇怪的感覺。你明明知道貓長什麼樣,你明明一眼就能區分男性和女性,可是說不清是怎麼看出來的。

古老的計算機圖形識別方法,就是非要規定一些明確的識別規則,讓計算機根據規則判斷,結果發現非常不可行。

人腦並不是通過什麼規則做的判斷。那到底是怎麼判斷的呢?

2.神經網絡

神經網絡計算並不是一項新技術,幾十年前就有了,但是一開始並不被看好。

《深度學習》的作者謝諾夫斯基,上世紀80年代就在研究神經網絡計算,那時候他是一個少數派。

1989年,謝諾夫斯基到麻省理工學院計算機實驗室訪問。氣氛不算融洽,那裡的人都質疑他的方法。

午餐之前,謝諾夫斯基有五分鐘的時間,給所有人介紹一下他講座的主題。謝諾夫斯基臨場發揮,以食物上的一隻蒼蠅為題,說了幾句話。

謝諾夫斯基說,你看這隻蒼蠅的大腦只有10萬個神經元,能耗那麼低,但是它能看、能飛、能尋找食物,還能繁殖。MIT有臺價值一億美元的超級計算機,消耗極大的能量,有龐大的體積,可是它的功能為什麼還不如一隻蒼蠅?

在場的教授都未能回答好這個問題,倒是一個研究生給出了正確答案。

他說:這是因為蒼蠅的大腦是高度專業化的,進化使得蒼蠅的大腦只具備這些特定的功能,而我們的計算機是通用的,你可以對它進行各種編程,它理論上可以幹任何事情。

這個關鍵在於,大腦的識別能力,不是靠臨時弄一些規則臨時編程。大腦的每一個功能都是專門的神經網絡長出來的。

圖靈獎得主,帶你詳解深度學習

那計算機能不能效法大腦呢?

謝諾夫斯基說,大腦已經給計算機科學家提供了四個暗示。

第一個暗示:大腦是一個強大的模式識別器。

人腦非常善於在一個混亂的場景之中識別出你想要的那個東西。比如你能從滿大街的人中,一眼就認出你熟悉的人。

第二個暗示:大腦的識別功能可以通過訓練提高。

第三個暗示:大腦不管是練習還是使用識別能力,都不是按照各種邏輯和規則進行的。

我們識別一個人臉,並不是跟一些抽象的規則進行比對。我們不是通過測量這個人兩眼之間的距離來識別這個人。我們一眼看過去,就知道他是誰了。

第四個暗示:大腦是由神經元組成的。我們大腦裡有數百億個神經元,大腦計算不是基於明確規則的計算,而是基於神經元的計算。

這就是神經網絡計算要做的事情。

3.什麼是“深度學習”

下面這張圖代表一個最簡單的計算機神經網絡。


圖靈獎得主,帶你詳解深度學習

圖片來自 hackernoon.com


它從左到右分為三層。

第一層代表輸入的數據,第二和第三層的每一個圓點代表一個神經元。

第二層叫“隱藏層”。

第三層是“輸出層”。

數據輸入進來,經過隱藏層各個神經元的一番處理,再把信號傳遞給輸出層,輸出層神經元再處理一番,最後作出判斷。

從下面這張圖,你可以看到它的運行過程。


圖靈獎得主,帶你詳解深度學習

圖片來自 Analytics India Magazine

那什麼叫“深度學習”呢?最簡單的理解,就是中間有不止一層隱藏層神經元的神經網絡計算。

“深度”的字面意思就是層次比較“深”。

接著看下面這張圖,你可以看到,左邊是簡單神經網絡,右邊是深度學習神經網絡。

圖靈獎得主,帶你詳解深度學習

圖片來自 Towards Data Science 網站


計算機最底層的單元是晶體管,而神經網絡最底層的單元就是神經元。神經元是什麼東西呢?我們看一個最簡單的例子。

下面這張圖表現了一個根據交通信號燈判斷要不要前進的神經元。它由三部分組成:輸入、內部參數和輸出。


圖靈獎得主,帶你詳解深度學習



這個神經元的輸入就是紅燈、黃燈和綠燈這三個燈哪個亮了。我們用1表示亮,0表示不亮,那麼按照順序,“1,0,0” 這一組輸入數字,就代表紅燈亮,黃燈和綠燈不亮。

神經元的內部參數包括“權重(weight)”,它對每個輸入值都給一個權重。

比如圖中給紅燈的權重是 -1,黃燈的權重是 0,給綠燈的權重是 1。另外,它還有一個參數叫“偏移(bias)”,圖中偏移值是-0.5。

神經元做的計算,就是把輸入的三個數字分別乘以各自的權重,相加,然後再加上偏移值。比如現在是紅燈,那麼輸入的三個數值就是1、0、0,權重是 -1、0、1。

所以計算結果就是:1×(-1) + 0×0 + 0×1 - 0.5 = -1.5。

輸出是做判斷,判斷標準是如果計算結果大於 0 就輸出“前進”命令,小於 0 就輸出“停止”命令。現在計算結果小於0,所以神經元就輸出“停止”。

這就是神經元的基本原理。

真實應用中的神經元會在計算過程中加入非線性函數的處理,並且確保輸出值都在 0 和 1 之間。


圖靈獎得主,帶你詳解深度學習

本質上,神經元做的事情就是按照自己的權重參數把輸入值相加,再加入偏移值,形成一個輸出值。如果輸出值大於某個閾值,我們就說這個神經元被“激發”了。

神經元的內部參數,包括權重和偏移值,都是可調的。

用數據訓練神經網絡的過程,就是調整更新各個神經元的內部參數的過程。神經網絡的結構在訓練中不變,是其中神經元的參數決定了神經網絡的功能。

接下來我們要用一個實戰例子說明神經網絡是怎樣進行圖形識別的。

二、計算機如何識別手寫數字

用神經網絡識別手寫的阿拉伯數字,是一個非常成熟的項目,網上有現成的數據庫和很多教程。

有個叫邁克爾·尼爾森(Michael Nielsen)的人只用了74行Python程序代碼就做成了這件事。

給你幾個手寫阿拉伯數字,可能是信封上的郵政編碼也可能是支票上的錢數,你怎麼教會計算機識別這些數字呢?


圖靈獎得主,帶你詳解深度學習


1. 簡化

想要讓計算機處理,首先要把問題“數學化”。

寫在紙上的字千變萬化,我們首先把它簡化成一個數學問題。我們用幾個正方形把各個數字分開,就像下面這張圖一樣。


圖靈獎得主,帶你詳解深度學習


現在問題變成給你一個包含一個手寫數字的正方形區域,你能不能識別是什麼數字?

再進一步,我們忽略字的顏色,降低正方形的分辨率,就考慮一個28×28=784個像素的圖像。

我們規定每一個像素值都是0到1之間的一個小數,代表灰度的深淺,0表示純白色,1表示純黑。這樣一來,手寫的數字“1”就變成了下面這個樣子 ——


圖靈獎得主,帶你詳解深度學習

圖片來自packtpub.com, The MNISTdataset


這就完全是一個數學問題了。

現在無非就是給你784個0-1之間的數,你能不能對這組數做一番操作,判斷它們對應的是哪個阿拉伯數字。輸入784個數,輸出一個數。

這件事從常理來說並不是一點頭緒都沒有。

比如任何人寫數字“7”,左下角的區域應該是空白的,這就意味著784個像素點中對應正方形左下角區域那些點的數值應該是0。

再比如說,寫“0”的時候的中間是空的,那麼對應正方形中間的那些像素點的數值應該是0。

然而,這種人為找規律的思路非常不可行。

首先你很難想到所有的規則,更重要的是很多規則都是模糊的——比如,7的左下角空白,那這個空白區域應該有多大呢?不同人的寫法肯定不一樣。

肯定有規律,可我們說不清都是什麼規律,這種問題特別適合神經網絡學習。

2. 設定

我們要用的方法叫做“誤差反向傳播網絡”,它最早起源於1986年發表在《自然》雜誌上的一篇論文,這篇論文的被引用次數已經超過了4萬次,是深度學習的里程碑。

根據尼爾森的教程,我們建一個三層的神經網絡,就是下面這張圖。


圖靈獎得主,帶你詳解深度學習

第一層是輸入數據,圖中只畫了8個點,但其實上有784個數據點。

第二層是隱藏層,由15個神經元組成。

第三層是輸出層,有10個神經元,對應0-9這10個數字。

每個神經元都由輸入、權重和偏移值參數、輸出三個部分組成。

隱藏層15個神經元中的每一個都要接收全部784個像素的數據輸入,總共有784×15=11760個權重和15個偏移值。

第三層10個神經元的每一個都要跟第二層的所有15個神經元連接,總共有150個權重和10個偏移值。這樣下來,整個神經網絡一共有11935個可調參數。

理想狀態下,784個輸入值在經過隱藏層和輸出層這兩層神經元的處理後,輸出層的哪個神經元的輸出結果最接近於1,神經網絡就判斷這是哪一個手寫數字。

3. 訓練

網上有個公開的現成數據庫叫“MNIST”,其中包括6萬個手寫的數字圖像,都標記了它們代表的是哪些數字。


圖靈獎得主,帶你詳解深度學習

我們要做的是用這些圖像訓練神經網絡,去調整好那11935個參數。我們可以用其中3萬個圖像訓練,用剩下3萬個圖像檢驗訓練效果。

這個訓練調整參數的方法,就是“誤差反向傳播”。比如我們輸入一個數字“7”的圖像。


圖靈獎得主,帶你詳解深度學習


神經網絡實際收到的是784個像素值。經過兩層神經元的傳播計算,理想情況下,輸出層的7號神經元的輸出值應該最接近於1,其他的都很接近於0。

一開始結果並不是這麼準確,我們要用一套特定的規則去調整各個神經元的參數。

參數調整有個方向,叫做“誤差梯度”。

比如對輸出層的7號神經元來說,調整方向就是要讓它的輸出值變大;對其他9個神經元,調整方向則是讓輸出值變小。

這個調整策略是看哪個輸入信息對結果的影響大,對它的權重的調整就要大一點。

幾萬個訓練圖像可能會被反覆使用多次,神經網絡參數不斷修改,最終將會達到穩定。

慢慢地,新圖像喂進來,這11935個參數的變化越來越小,最終幾乎不動了。那就是說,這個識別手寫數字的神經網絡,已經練成了。

事實證明這個簡單網絡的識別準確率能達到95%!

圖靈獎得主,帶你詳解深度學習

在理論上,這個方法可以用來學習識別一切圖像。

你只要把一張張的圖片餵給神經網絡,告訴它圖上有什麼,它終將自己發現各個東西的像素規律……但是在實踐上,這個方法非常不可行。

三、卷積網絡如何實現圖像識別

計算機不怕“笨辦法”,但是哪怕你能讓它稍微變聰明一點,你的收穫都是巨大的。

1.“笨辦法”和人的辦法

下面這張圖中有一隻貓、一隻狗、綠色的草地和藍天白雲。它的分辨率是350×263,總共92050個像素點。

考慮到這是一張彩色照片,每個像素點必須用三個數來代表顏色,這張圖要用27萬個數來描寫。

圖靈獎得主,帶你詳解深度學習


要想用誤差反向傳播神經網絡識別這樣的圖,它第二層每一個神經元都要有27萬個權重參數。

要想識別包括貓、狗、草地、藍天白雲這種水平的常見物體,它的輸出層必須有上千個神經元才行。

這樣訓練一次的計算量將是巨大的 —— 但這還不是最大的難點。

最大的難點是神經網絡中的參數越多,它需要的訓練素材就越多。

並不是任何照片都能用作訓練素材,你必須事先靠人工標記照片上都有什麼東西作為標準答案,才能給神經網絡提供有效反饋。

這麼多訓練素材上哪找呢?

我聽羅胖跨年演講學到一個詞叫“回到母體”,意思大約是從新技術後退一步,返回基本常識,也許能發現新的創新點。

現在我們回到人腦,想想為什麼簡單神經網絡是個笨辦法。

人腦並不是每次都把一張圖中所有的像素都放在一起考慮。我們有一個“看什麼”,和一個“往哪看”的思路。


圖靈獎得主,帶你詳解深度學習

讓你找貓,你會先大概想象一下貓是什麼樣子,然後從一張大圖上一塊一塊地找,你沒必要同時考慮圖片的左上角和右下角。這是“往哪看”。

還有,當你想象貓的時候,雖然不能完全說清,但你畢竟還是按照一定的規律去找。比如貓身上有毛,它有兩個眼睛和一條尾巴等等。

你看的不是單個的像素點,你看的是一片一片的像素群的模式變化。這是“看什麼”。

我理解“卷積網絡”,就是這兩個思路的產物。

2.競賽

斯坦福大學的華裔計算機科學家李飛飛,組織了一個叫做ImageNet的機器學習圖形識別比賽,從2010年開始每年舉行一次。

這個比賽每年都給參賽者提供一百萬張圖片作為訓練素材!其中每一張圖都由人工標記了圖中的每個物體。

圖靈獎得主,帶你詳解深度學習


圖靈獎得主,帶你詳解深度學習

圖片素材中共有大約一千個物體分類。這就意味著,對每一種物體,人工智能都有大約一千次訓練機會。

比賽規則是參賽者用這一百萬張圖片訓練自己的程序,然後讓程序識別一些新的圖片。

每張新圖片有一個事先設定的標準答案,而參賽者的程序可以猜五個答案,只要其中有一個判斷跟標準答案相符合,就算識別結果準確。

圖靈獎得主,帶你詳解深度學習


上圖是歷屆比賽冠軍的成績。2010和2011年,最好成績的判斷錯誤率都在26%以上,但是2012年,錯誤率下降到了16%,從此之後更是直線下降。2017年的錯誤率是2.3%,這個水平已經超過人類。

那2012年到底發生了什麼呢?發生了“卷積網絡”。

3.卷積網絡

2012年的冠軍是多倫多大學的一個研究組,他們使用的方法就是卷積網絡。

正是因為這個方法太成功了,“深度學習”才流行起來,現在搞圖形識別幾乎全都是用這個方法。

獲獎團隊描述卷積網絡的論文的第一作者叫艾利克斯·克里澤夫斯基(Alex Krizhevsky),當時他只是一個研究生,這篇論文現在被人稱為“AlexNet” 。

簡單來說,AlexNet的方法是在最基本的像素到最終識別的物體之間加入了幾個邏輯層,也就是“卷積層”。

“卷積”是一種數學操作,可以理解成“過濾”,或者叫“濾波”,意思是從細緻的信號中識別尺度更大一點的結構。

每一個卷積層識別一種特定規模的圖形模式,然後後面一層只要在前面一層的基礎上進行識別,這就解決了“看什麼”和“往哪看”的問題。

比如說我們要搞人臉識別,卷積網絡方法把問題分解為三個卷積層。


圖靈獎得主,帶你詳解深度學習

圖片來自cdn.edureka.co


圖靈獎得主,帶你詳解深度學習


第一層,是先從像素點中識別一些小尺度的線條結構。

第二層,是根據第一層識別出來的小尺度結構識別像眼睛、耳朵、嘴之類的局部器官。

第三層,才是根據這些局部器官識別人臉。

其中每一層的神經網絡從前面一層獲得輸入,經過深度學習之後再輸出到後面一層。

AlexNet的論文提到,他的識別系統足足分了五個卷積層,每一層都由很多個“特徵探測器”組成。

第一層有96個特徵探測器,各自負責探測整個圖形中哪些地方有下面這96種特徵中的一種。

圖靈獎得主,帶你詳解深度學習


比如說,第一層的第一個特徵探測器,專門負責判斷圖中哪裡有像下面這樣,從左下到右上的線條結構。


圖靈獎得主,帶你詳解深度學習


這個特徵探測器本身也是一個神經網絡,有自己的神經元——而這裡的妙處在於,它的每一個神經元只負責原始圖像中一個11×11小區塊。

考慮到三種顏色,輸入值只有 11×11×3= 363個。而且因為這個探測器只負責探測一種結構,每個神經元的參數都是一樣的!這就大大降低了運算量。

第一層的其他探測器則負責判斷像垂直條紋、斑點、顏色從亮到暗等各種小結構,一共是96種。

也就是說,卷積網絡的第一層先把整個圖像分解成11×11的區塊,看看每個區塊裡都是什麼結構。

為了避免結構被區塊拆散,相鄰的區塊之間還要有相當大的重疊。經過第一層的過濾,我們看到的就不再是一個個的像素點,而是一張小結構的邏輯圖。

然後第二卷積層再從這些小結構上識別出更大、更復雜也更多的結構來。以此類推,一直到第五層。

下面這張圖表現了從第一層到第三層識別的模塊(灰色)和對應的實例(彩色)。

圖靈獎得主,帶你詳解深度學習

我們看到,第二個卷積層已經能識別圓形之類的結構,第三層已經能識別車輪和小的人臉。

五個卷積層之外,AlexNet還設置了三個全局層,用於識別更大的物體。整個分層的結構是下面這樣。

圖靈獎得主,帶你詳解深度學習

圖片來自 Machine Learning Blog

這樣分層方式有很多好處:第一,卷積層中的神經元只要處理一個小區域的數據,而且參數可以重複使用,大大減少了運算量。第二,因為可以一個區域一個區域地搜索,就可以發現小尺度的物體。

意識到圖形識別有多難,你就能體會到AlexNet的識別水平有多神奇。下面這張圖中有個紅色的蟎蟲,它出現在圖像的邊緣,但是被正確識別出來了。

圖靈獎得主,帶你詳解深度學習


AlexNet還猜測它可能是蜘蛛、蟑螂、蝨子或者海星,但是認為它是蟎蟲的可能性最高。這個判斷水平已經超過了我,我都不知道那是個蟎蟲。

再比如下面這張圖,標準答案是“蘑菇”,但AlexNet給的第一判斷是更精確的“傘菌”,“蘑菇”是它的第二選項!

圖靈獎得主,帶你詳解深度學習


而現在基於類似的卷積網絡方法的深度學習程序,水平已經遠遠超過了AlexNet。

4.深度學習(不)能幹什麼

AlexNet那篇論文的幾個作者成立了一家創業公司,這家公司在2013年被Google收購了。半年之後,Google相冊就有了基於圖片識別的搜索能力。

緊接著,Google就可以從自家拍攝的街景圖像中識別每家每戶的門牌號碼了。

Google還奪得了2014年的ImageNet競賽冠軍。

所以千萬別低估工程師迭代新技術的能力。他們舉一反三,一旦發現這個技術好,馬上就能給用到極致。

2012年之前深度學習還是機器學習中的“非主流”,現在是絕對主流。

深度學習能做一些令人讚歎的事情。

比如說對於一個不太容易判斷的物體,如果網絡知道圖中有草地,那麼它就會自動判斷這應該是一個經常放在戶外的東西,而不太可能是一件傢俱。

這完全是基於經驗的判斷,你不需要告訴它傢俱一般不放戶外。看的圖多了,它彷彿獲得了一些智慧!一個生活經驗少的人可做不到這一點。

但是蒂莫西·李也提醒了我們深度學習不能做什麼。

比如說把一個物體放大一點、或者旋轉一個角度、或者調整一下光線,卷積網絡就不知道那是同一個東西,它必須重新判斷。


圖靈獎得主,帶你詳解深度學習

深度學習完全是基於經驗的判斷,它沒有任何邏輯推理能力。

在我看來,這種學習方法,就如同在數學考試前夜背誦習題集。你能猜對答案是因為你背誦過類似的題,但是你並不真的理解數學。

這樣的算法會有創造力嗎?深度學習能發現圖像中從來沒有被人命名過的“怪異”物體嗎?

我們見識了光憑經驗的操作能強大到什麼程度,但是我們也能看出來,它距離真正的智能還非常遙遠。


*文章為作者獨立觀點,不代表筆記俠立場。

微信搜索關注【筆記俠】公眾號,回覆“福利包”領取筆記俠獨家整理的柳傳志、雷軍、孫正義、董明珠演講的40份思維導圖

本文作者:筆記俠

微信公眾號:【筆記俠】(Notesman)

90萬-1~6歲CEO都在看的新商業知識乾貨平臺


分享到:


相關文章: