豆瓣最高评分8.1!万维钢:读懂这本书,你会比身边人更深的理解这个时代
▲
數據汪特別推薦
點擊上圖進入玩酷屋
小木用真金白銀來給大家送禮物啦,特別感謝這些年一直以來大家對我們的支持,才讓我們越做越好。(點我參與送禮活動)
這幾年全球各大科技巨頭紛紛進入人工智能領域,催生了一大批技術的發展和落地:AI醫療、智能翻譯、圖像識別、智能社交機器人、無人駕駛……這些技術的背后都離不開“深度學習”。科技改變我們生活的同時,也給我們帶來了某些隱憂:人工智能會不會取代我們甚至統治我們?
我們一起來探索這本由特倫斯·謝諾夫斯基著作的《深度學習:智能時代的核心驅動力量》
神經網絡與深度學習
為什么要了解深度學習?首先,“深度學習”現在太熱門了,圖形識別、語音識別、汽車導航全都能用上,非常值錢。
更重要的是,“深度學習”算法包含精妙的思想,能夠代表這個時代的精神。這個思想并不難,但是一旦領會了,你就能窺探一點腦神經科學和現代工程學。
我將重點使用兩份參考資料:一個是Arstechnica網站近期發布的一篇文章《計算機圖形識別能力如何好到令人震驚》,作者是蒂莫西·李(Timothy Lee)。 一個是一本新書《深度學習:智能時代的核心驅動力量》,作者是特倫斯·謝諾夫斯基(Terrence Sejnowski),中信出版社剛剛出了中文版。
《深度學習:智能時代的核心驅動力量》
特倫斯·謝諾夫斯基 著
不知道大家注意到沒有,你的手機相冊,知道你每一張照片里都有什么東西。不管你用的是 iPhone還是安卓,相冊都有一個搜索功能,你輸入“beach”,它能列舉所有包含海灘的照片;輸入“car”,它能列舉畫面中有汽車的照片,而且它還能識別照片中的每一個人。
每拍攝一張照片,手機都自動識別其中的典型物體。這是一個細思極恐的技術。怎么才能教會計算機識別物體呢?
心急的朋友可以點擊下方小程序購買~
▼
沒有規則的學習
不到十年之前,人們總認為模式識別方面人腦比計算機厲害,甚至谷歌投入巨大精力研究都做不到從照片里識別出一只貓。然而,從2012年開始,“深度學習”讓計算機識別圖形的能力突然變得無比強大,甚至已經超過了人類。
首先來看人是怎么識別貓的。觀察一下這張圖,你怎么判斷這張照片里有沒有貓呢?
你可能會說,這很簡單,所有人都知道貓長什么樣——好,那請問貓長什么樣?
你也許可以用科學語言描寫“三角形”是什么樣的——這是一種圖形,它有三條直線的邊,有三個頂點。可是你能用比較科學的語言描寫貓嗎?它有耳朵、有尾巴,但這么形容遠遠不夠,最起碼你得能把貓和狗區分開來才行。
再看下面這張圖片,你怎么判斷 ta 是男還是女呢?
圖片來自 design.tutsplus.com
你可能會說女性長得更秀氣一些——那什么叫“秀氣”?是說眉毛比較細嗎?是輪廓比較小嗎?
這是一個非常奇怪的感覺。你明明知道貓長什么樣,你明明一眼就能區分男性和女性,可是說不清是怎么看出來的。
古老的計算機圖形識別方法,就是非要規定一些明確的識別規則,讓計算機根據規則判斷,結果發現非常不可行。
人腦并不是通過什么規則做的判斷。那到底是怎么判斷的呢?
神經網絡
神經網絡計算并不是一項新技術,幾十年前就有了,但是一開始并不被看好。《深度學習》的作者謝諾夫斯基,上世紀80年代就在研究神經網絡計算,那時候他是一個少數派。
1989年,謝諾夫斯基到麻省理工學院計算機實驗室訪問。氣氛不算融洽,那里的人都質疑他的方法。午餐之前,謝諾夫斯基有五分鐘的時間,給所有人介紹一下他講座的主題。謝諾夫斯基臨場發揮,以食物上的一只蒼蠅為題,說了幾句話。
謝諾夫斯基說,你看這只蒼蠅的大腦只有10萬個神經元,能耗那么低,但是它能看、能飛、能尋找食物,還能繁殖。MIT有臺價值一億美元的超級計算機,消耗極大的能量,有龐大的體積,可是它的功能為什么還不如一只蒼蠅?
在場的教授都未能回答好這個問題,倒是一個研究生給出了正確答案。他說這是因為蒼蠅的大腦是高度專業化的,進化使得蒼蠅的大腦只具備這些特定的功能,而我們的計算機是通用的,你可以對它進行各種編程,它理論上可以干任何事情。
這個關鍵在于,大腦的識別能力,不是靠臨時弄一些規則臨時編程。大腦的每一個功能都是專門的神經網絡長出來的,那計算機能不能效法大腦呢?
謝諾夫斯基說,大腦已經給計算機科學家提供了四個暗示。
第一個暗示:大腦是一個強大的模式識別器。人腦非常善于在一個混亂的場景之中識別出你想要的那個東西。比如你能從滿大街的人中,一眼就認出你熟悉的人。
第二個暗示:大腦的識別功能可以通過訓練提高。
第三個暗示:大腦不管是練習還是使用識別能力,都不是按照各種邏輯和規則進行的。我們識別一個人臉,并不是跟一些抽象的規則進行比對。我們不是通過測量這個人兩眼之間的距離來識別這個人。我們一眼看過去,就知道他是誰了。
第四個暗示:大腦是由神經元組成的。我們大腦里有數百億個神經元,大腦計算不是基于明確規則的計算,而是基于神經元的計算。
這就是神經網絡計算要做的事情。
什么是“深度學習”
下面這張圖代表一個最簡單的計算機神經網絡。?
圖片來自 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程序代碼就做成了這件事。
給你幾個手寫阿拉伯數字,可能是信封上的郵政編碼也可能是支票上的錢數,你怎么教會計算機識別這些數字呢?
簡化
想要讓計算機處理,首先要把問題“數學化”。寫在紙上的字千變萬化,我們首先把它簡化成一個數學問題。我們用幾個正方形把各個數字分開,就像下面這張圖一樣。
現在問題變成給你一個包含一個手寫數字的正方形區域,你能不能識別是什么數字?
再進一步,我們忽略字的顏色,降低正方形的分辨率,就考慮一個28×28=784個像素的圖像。我們規定每一個像素值都是0到1之間的一個小數,代表灰度的深淺,0表示純白色,1表示純黑。這樣一來,手寫的數字“1”就變成了下面這個樣子 ——?
圖片來自packtpub.com, The MNIST dataset。實際分辨率是28×28。
這就完全是一個數學問題了。現在無非就是給你784個0-1之間的數,你能不能對這組數做一番操作,判斷它們對應的是哪個阿拉伯數字。輸入784個數,輸出一個數。
這件事從常理來說并不是一點頭緒都沒有。比如任何人寫數字“7”,左下角的區域應該是空白的,這就意味著784個像素點中對應正方形左下角區域那些點的數值應該是0。再比如說,寫“0”的時候的中間是空的,那么對應正方形中間的那些像素點的數值應該是0。
然而,這種人為找規律的思路非常不可行。首先你很難想到所有的規則,更重要的是很多規則都是模糊的——比如,7的左下角空白,那這個空白區域應該有多大呢?不同人的寫法肯定不一樣。
設定
我們要用的方法叫做“誤差反向傳播網絡”,它最早起源于1986年發表在《自然》雜志上的一篇論文,這篇論文的被引用次數已經超過了4萬次,是深度學習的里程碑。
根據尼爾森的教程,我們建一個三層的神經網絡,就是下面這張圖 ——
第一層是輸入數據,圖中只畫了8個點,但其實上有784個數據點。
第二層是隱藏層,由15個神經元組成。
第三層是輸出層,有10個神經元,對應0-9這10個數字。
每個神經元都由輸入、權重和偏移值參數、輸出三個部分組成。
隱藏層15個神經元中的每一個都要接收全部784個像素的數據輸入,總共有784×15=11760個權重和15個偏移值。
第三層10個神經元的每一個都要跟第二層的所有15個神經元連接,總共有150個權重和10個偏移值。這樣下來,整個神經網絡一共有11935個可調參數。
理想狀態下,784個輸入值在經過隱藏層和輸出層這兩層神經元的處理后,輸出層的哪個神經元的輸出結果最接近于1,神經網絡就判斷這是哪一個手寫數字。
訓練
網上有個公開的現成數據庫叫“MNIST”,其中包括6萬個手寫的數字圖像,都標記了它們代表的是哪些數字。
我們要做的是用這些圖像訓練神經網絡,去調整好那11935個參數。我們可以用其中3萬個圖像訓練,用剩下3萬個圖像檢驗訓練效果。
這個訓練調整參數的方法,就是“誤差反向傳播”。比如我們輸入一個數字“7”的圖像。
神經網絡實際收到的是784個像素值。
經過兩層神經元的傳播計算,理想情況下,輸出層的7號神經元的輸出值應該最接近于1,其他的都很接近于0。一開始結果并不是這么準確,我們要用一套特定的規則去調整各個神經元的參數。
參數調整有個方向,叫做“誤差梯度”。比如對輸出層的7號神經元來說,調整方向就是要讓它的輸出值變大;對其他9個神經元,調整方向則是讓輸出值變小。這個調整策略是看哪個輸入信息對結果的影響大,對它的權重的調整就要大一點。
幾萬個訓練圖像可能會被反復使用多次,神經網絡參數不斷修改,最終將會達到穩定。慢慢地,新圖像喂進來,這11935個參數的變化越來越小,最終幾乎不動了。
那就是說,這個識別手寫數字的神經網絡,已經練成了。事實證明這個簡單網絡的識別準確率能達到95%!?
在理論上,這個方法可以用來學習識別一切圖像。你只要把一張張的圖片喂給神經網絡,告訴它圖上有什么,它終將自己發現各個東西的像素規律……但是在實踐上,這個方法非常不可行。
卷積網絡如何實現圖像識別
計算機不怕“笨辦法”,但是哪怕你能讓它稍微變聰明一點,你的收獲都是巨大的。
“笨辦法”和人的辦法
下面這張圖中有一只貓、一只狗、綠色的草地和藍天白云。它的分辨率是350×263,總共92050個像素點。考慮到這是一張彩色照片,每個像素點必須用三個數來代表顏色,這張圖要用27萬個數來描寫。
要想用誤差反向傳播神經網絡識別這樣的圖,它第二層每一個神經元都要有27萬個權重參數。要想識別包括貓、狗、草地、藍天白云這種水平的常見物體,它的輸出層必須有上千個神經元才行。這樣訓練一次的計算量將是巨大的?—— 但這還不是最大的難點。
最大的難點是神經網絡中的參數越多,它需要的訓練素材就越多。并不是任何照片都能用作訓練素材,你必須事先靠人工標記照片上都有什么東西作為標準答案,才能給神經網絡提供有效反饋。這么多訓練素材上哪找呢?
我聽羅胖跨年演講學到一個詞叫“回到母體”,意思大約是從新技術后退一步,返回基本常識,也許能發現新的創新點。現在我們回到人腦,想想為什么簡單神經網絡是個笨辦法。
人腦并不是每次都把一張圖中所有的像素都放在一起考慮。我們有一個“看什么”,和一個“往哪看”的思路。
讓你找貓,你會先大概想象一下貓是什么樣子,然后從一張大圖上一塊一塊地找,你沒必要同時考慮圖片的左上角和右下角。這是“往哪看”。
還有,當你想象貓的時候,雖然不能完全說清,但你畢竟還是按照一定的規律去找。比如貓身上有毛,它有兩個眼睛和一條尾巴等等。你看的不是單個的像素點,你看的是一片一片的像素群的模式變化。這是“看什么”。
我理解“卷積網絡”,就是這兩個思路的產物。
競賽
斯坦福大學的華裔計算機科學家李飛飛,組織了一個叫做ImageNet的機器學習圖形識別比賽,從2010年開始每年舉行一次。這個比賽每年都給參賽者提供一百萬張圖片作為訓練素材!其中每一張圖都由人工標記了圖中的每個物體。
??
圖片素材中共有大約一千個物體分類。這就意味著,對每一種物體,人工智能都有大約一千次訓練機會。
比賽規則是參賽者用這一百萬張圖片訓練自己的程序,然后讓程序識別一些新的圖片。每張新圖片有一個事先設定的標準答案,而參賽者的程序可以猜五個答案,只要其中有一個判斷跟標準答案相符合,就算識別結果準確。
上圖是歷屆比賽冠軍的成績。2010和2011年,最好成績的判斷錯誤率都在26%以上,但是2012年,錯誤率下降到了16%,從此之后更是直線下降。2017年的錯誤率是2.3%,這個水平已經超過人類。
那2012年到底發生了什么呢?
發生了“卷積網絡”。
卷積網絡
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。
深度學習(不)能干什么
AlexNet那篇論文的幾個作者成立了一家創業公司,這家公司在2013年被Google收購了。半年之后,Google相冊就有了基于圖片識別的搜索能力。
緊接著,Google就可以從自家拍攝的街景圖像中識別每家每戶的門牌號碼了。Google還奪得了2014年的ImageNet競賽冠軍。
所以千萬別低估工程師迭代新技術的能力。他們舉一反三,一旦發現這個技術好,馬上就能給用到極致。2012年之前深度學習還是機器學習中的“非主流”,現在是絕對主流。
深度學習能做一些令人贊嘆的事情。比如說對于一個不太容易判斷的物體,如果網絡知道圖中有草地,那么它就會自動判斷這應該是一個經常放在戶外的東西,而不太可能是一件家具。
這完全是基于經驗的判斷,你不需要告訴它家具一般不放戶外。看的圖多了,它仿佛獲得了一些智慧!一個生活經驗少的人可做不到這一點。
但是蒂莫西·李也提醒了我們深度學習不能做什么。
比如說把一個物體放大一點、或者旋轉一個角度、或者調整一下光線,卷積網絡就不知道那是同一個東西,它必須重新判斷。深度學習完全是基于經驗的判斷,它沒有任何邏輯推理能力。
在我看來,這種學習方法,就如同在數學考試前夜背誦習題集。你能猜對答案是因為你背誦過類似的題,但是你并不真的理解數學。
這樣的算法會有創造力嗎?深度學習能發現圖像中從來沒有被人命名過的“怪異”物體嗎?我們見識了光憑經驗的操作能強大到什么程度,但是我們也能看出來,它距離真正的智能還非常遙遠。
?《深度學習:智能時代的核心驅動力量》
原價88元
玩酷粉絲特惠價:66元!
▲
點擊【添加到我的小程序】
更方便找到玩酷屋哦!
▲
關注即可領取新人專屬福利,即領即用
※本文改編自得到專欄《萬維鋼·精英日課3》,已獲授權,轉載請聯系原作者。萬維鋼,網名“同人于野”,前物理學家,現科學作家。
玩酷屋——超級數學建模自營店
?點擊“閱讀原文"立即購買
總結
以上是生活随笔為你收集整理的豆瓣最高评分8.1!万维钢:读懂这本书,你会比身边人更深的理解这个时代的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 这些Python骚操作,你值得拥有
- 下一篇: 比乐高便宜十倍!4合1电动遥控积木玩法百