四、神經(jīng)網(wǎng)絡(luò)和深度學(xué)習(xí)
原文:Machine Learning for Humans, Part 4: Neural Networks & Deep Learning
作者:Vishal Maini
譯者:飛龍
協(xié)議:CC BY-NC-SA 4.0
深度神經(jīng)網(wǎng)絡(luò)的工作地點(diǎn)、原因和方式。從大腦中獲取靈感。卷積神經(jīng)網(wǎng)絡(luò)(CNN)和循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)。真實(shí)世界中的應(yīng)用。
使用深度學(xué)習(xí),我們?nèi)匀皇橇?xí)得一個(gè)函數(shù)f
,將輸入X
映射為輸出Y
,并使測(cè)試數(shù)據(jù)上的損失最小,就像我們之前那樣。回憶一下,在 2.1 節(jié)監(jiān)督學(xué)習(xí)中,我們的初始“問(wèn)題陳述”:
Y = f(X) + ?
訓(xùn)練:機(jī)器從帶標(biāo)簽的訓(xùn)練數(shù)據(jù)習(xí)得
f
測(cè)試:機(jī)器從不帶標(biāo)簽的測(cè)試數(shù)據(jù)預(yù)測(cè)
Y
真實(shí)世界很亂,所以有時(shí)f
很復(fù)雜。在自然語(yǔ)言問(wèn)題中,較大的詞匯數(shù)量意味著大量特征。視覺(jué)問(wèn)題設(shè)計(jì)大量的像素相關(guān)的視覺(jué)信息。玩游戲需要基于復(fù)雜場(chǎng)景做決策,也帶有許多可能的未知。當(dāng)我們處理的數(shù)據(jù)不是很復(fù)雜時(shí),我們目前涉及的學(xué)習(xí)機(jī)制做的很好。但是,它們?nèi)绾瓮茝V到像這樣的場(chǎng)景,還不清楚。
深度學(xué)習(xí)非常善于習(xí)得f
,特別是在數(shù)據(jù)很復(fù)雜的場(chǎng)景中。實(shí)際上,人工神經(jīng)網(wǎng)絡(luò)也被成為通用函數(shù)近似器,因?yàn)樗鼈兡軌驅(qū)W習(xí)任何函數(shù),無(wú)論多么扭曲,都只需要一個(gè)隱藏層。
讓我們看看圖像分類(lèi)的問(wèn)題。我們選取一張圖片作為輸入,并輸出一個(gè)分類(lèi)(例如狗、貓、車(chē))。
通過(guò)圖解,深度神經(jīng)網(wǎng)絡(luò)的圖像分類(lèi)解決方式,類(lèi)似于這樣:
圖片來(lái)自 Jeff Clune 在 YouTube 上的一小時(shí)深度學(xué)習(xí)概覽
但是說(shuō)真的,這是個(gè)巨大的數(shù)學(xué)方程,有數(shù)百萬(wàn)個(gè)項(xiàng)和大量參數(shù)。假設(shè)輸入X
是灰度圖像,由w*h
的像素亮度矩陣表示。輸出Y
是每個(gè)分類(lèi)的概率的向量。也就是說(shuō),我們輸出“每個(gè)分類(lèi)是正確標(biāo)簽”的概率。如果這個(gè)神經(jīng)網(wǎng)絡(luò)能用的話,最高的概率就是正確的分類(lèi)。然后,中間的層僅僅計(jì)算大量的矩陣相同,通過(guò)在每個(gè)隱藏層之后,使用非線性變換(激活函數(shù)),對(duì)激活值x
的權(quán)重求和,來(lái)讓神經(jīng)網(wǎng)絡(luò)習(xí)得非線性函數(shù)。
難以置信的是,你可以使用梯度下降,以 2.1 節(jié)中我們對(duì)線性回歸所做的相同方式,使損失最小。所以使用大量樣本和大量梯度下降,模型可以習(xí)得如何正確分類(lèi)動(dòng)物圖片。這個(gè),簡(jiǎn)單來(lái)說(shuō),就是“深度學(xué)習(xí)”。
深度學(xué)習(xí)做得好的地方,以及一些歷史
人工神經(jīng)網(wǎng)絡(luò)實(shí)際上有很長(zhǎng)時(shí)間了。它們的應(yīng)用可追溯到控制論(cybernetics,1940s1960s),連接機(jī)制(connectionism,1980s1990s),之后變成了流行的深度學(xué)習(xí)。大約在 2006 年,神經(jīng)網(wǎng)絡(luò)開(kāi)始變得“更深”(Goodfellow 等,2016)。但是最近我們才開(kāi)始觸及它們的全部潛能。
就像 Andrej Karpathy(特斯拉的 AI 總監(jiān),它被認(rèn)為是深度學(xué)習(xí)的 Shaman)描述的那樣,有四個(gè)“將 AI 帶回來(lái)”的不同因素:
- 計(jì)算(最明顯的一個(gè):摩爾定律,GPU,ASIC)
- 數(shù)據(jù)(以不錯(cuò)的形式,并不在互聯(lián)網(wǎng)上某處,也就是 ImageNet)
- 算法(研究和理念,也就是 backprop, CNN, LSTM),以及
- 基礎(chǔ)設(shè)施(你下面的軟件,Linux, TCP/IP, Git, ROS, PR2, AWS, AMT, TensorFlow, 以及其它)(Karpathy, 2016)。
在過(guò)去的十年當(dāng)中,深度學(xué)習(xí)的全部潛能,最紅被(1)和(2)的進(jìn)步解鎖,它反過(guò)來(lái)產(chǎn)生了(3)和(4)的突破。并且這個(gè)循環(huán)仍在繼續(xù),成倍的人們不斷參與到深度學(xué)習(xí)研究的前線中,沿著這條路(想想你現(xiàn)在做的事情)。
由 NVIDIA 演示,它是一家
核彈GPU 領(lǐng)導(dǎo)廠商。GPU 最開(kāi)始為游戲構(gòu)建,但是最終很好地順應(yīng)了深度學(xué)習(xí)所需的并行計(jì)算。
在這一章的剩余部分中,我們提供一些來(lái)自生物和統(tǒng)計(jì)的被寂靜,來(lái)解釋神經(jīng)網(wǎng)絡(luò)里面發(fā)生額了什么,之后討論深度學(xué)習(xí)的一些神奇應(yīng)用。最后,我們鏈接到一些資源,所以你可以自行應(yīng)用深度學(xué)習(xí),甚至穿著睡衣坐在沙發(fā)上,拿著筆記本,在特定種類(lèi)的問(wèn)題上快速實(shí)現(xiàn)超越人類(lèi)級(jí)別的表現(xiàn)。
從大腦中(或者只是統(tǒng)計(jì)?)獲取靈感:神經(jīng)網(wǎng)絡(luò)中發(fā)生了什么
神經(jīng)元、特征學(xué)習(xí)和抽象層次
當(dāng)你閱讀這些詞匯的時(shí)候,你并沒(méi)有檢查每個(gè)詞的每個(gè)字,或者組成字的每個(gè)像素,來(lái)獲得單詞的含義。你從細(xì)節(jié)中將東西抽象、組裝成高階的概念:詞、短語(yǔ)、句子、段落。
Yuor abiilty to exaimne hgiher-lveel fteaures is waht aollws yuo to unedrtsand waht is hpapening in tihs snetecne wthiout too mcuh troulbe (or myabe yuo sned too mnay dnruk txets).
(你檢測(cè)高階特征的能力,讓你理解句子中發(fā)生的東西,而不會(huì)太麻煩(或者可能你發(fā)送了大量的亂序文本)。
視覺(jué)上發(fā)生的事情相同,這并不僅僅在人類(lèi),也在動(dòng)物的視覺(jué)系統(tǒng)中。
大腦由神經(jīng)元組成,它們?cè)谧銐颉凹せ睢敝螅ㄟ^(guò)向其他神經(jīng)元發(fā)送電信號(hào)來(lái)“觸發(fā)”。這些神經(jīng)元都是可塑的,根據(jù)有多少來(lái)自神經(jīng)元的信號(hào)添加到當(dāng)前神經(jīng)元的激活水平上(大概來(lái)說(shuō),將神經(jīng)元彼此連接的權(quán)重最后會(huì)被訓(xùn)練,使神經(jīng)連接更加有用,就像線性回歸中的參數(shù)可以被訓(xùn)練,來(lái)改進(jìn)輸入到輸出的映射)。
生物和人工神經(jīng)網(wǎng)絡(luò)的端到端的演示,來(lái)自斯坦福 CS231n。這個(gè)比喻不是很?chē)?yán)謹(jǐn),生物神經(jīng)元可以做人工神經(jīng)元不能做的事,反之亦然。但是理解生物中的靈感十分有用。更多細(xì)節(jié)請(qǐng)見(jiàn)生物和人工神經(jīng)元的維基百科的描述。
我們的生物網(wǎng)絡(luò)以層次方式排列,以便特定神經(jīng)元最終檢測(cè)我們周?chē)氖澜绲模皇菢O其特定的特征,而是更加抽象的特征,也就是,更低階的特征的規(guī)律或者分組。例如,人類(lèi)視覺(jué)系統(tǒng)中的紡錘狀臉部區(qū)域可特別用于人臉識(shí)別。
持續(xù)學(xué)習(xí)抽象特征的演示,來(lái)自 NVIDIA。
人工神經(jīng)網(wǎng)絡(luò)如何選取原始像素輸入,開(kāi)發(fā)中介“神經(jīng)元”來(lái)檢測(cè)高階特征(也就是鼻子的存在),以及組合它們的輸出來(lái)創(chuàng)建最終輸出。來(lái)自《神經(jīng)網(wǎng)絡(luò)和深度學(xué)習(xí)》(Nielsen, 2017)。
生物神經(jīng)網(wǎng)絡(luò)表現(xiàn)出的層次結(jié)構(gòu)最早于 1950s 發(fā)現(xiàn),當(dāng)研究員 David Hubel 和 Torsten Wiesel 研究貓的視覺(jué)皮層中的神經(jīng)元的時(shí)候。在給貓大量刺激之后,它們不能觀察到神經(jīng)活動(dòng):暗點(diǎn)、亮點(diǎn)、揮手、甚至是雜志上的女性照片。但是在它們的失望中,它們從投影儀中移除了對(duì)角線處的照片,它們注意到了一些神經(jīng)活動(dòng)。結(jié)果是,位于某個(gè)特定角度的,對(duì)角線上的邊能夠?qū)е绿囟ǖ纳窠?jīng)元被激活。
這樣就逐漸有意義了,因?yàn)樽匀画h(huán)境通常是嘈雜和隨機(jī)的(想想草原和荒野)。所以當(dāng)野外的貓感知到一條“邊”的時(shí)候,也就是一條不同于背景的線,這可能表明,一個(gè)物體或者生物進(jìn)入了視野范圍。當(dāng)邊緣的神經(jīng)元的特定組合被激活時(shí),這些活動(dòng)會(huì)集體產(chǎn)生更加抽象的活動(dòng),以此類(lèi)推,直到最終的抽象是個(gè)有用的概念,比如“鳥(niǎo)”或者“狼”。
深度神經(jīng)網(wǎng)絡(luò)背后的概念就是,使用人工神經(jīng)網(wǎng)絡(luò)的層次來(lái)模擬類(lèi)似的結(jié)構(gòu)。
為什么線性模型不能用
為了提煉斯坦福的優(yōu)秀的深度學(xué)習(xí)課程,CS231n:卷積神經(jīng)網(wǎng)絡(luò)和視覺(jué)識(shí)別,想象我們打算訓(xùn)練一個(gè)神經(jīng)網(wǎng)絡(luò),使用下列標(biāo)簽的正確的那個(gè)來(lái)分類(lèi)圖像:["plane", "car", "bird", "cat", "deer", "dog", "frog", "horse", "ship", "truck"]
。
一種方式可能是,使用訓(xùn)練樣本為每個(gè)分類(lèi)構(gòu)造一個(gè)“模板”,或者平均圖像,之后使用最近鄰算法,在測(cè)試期間來(lái)度量每個(gè)未分類(lèi)圖像的像素值,到每個(gè)模板的距離。總的來(lái)說(shuō)是這樣。這個(gè)方法不涉及任何抽象層次。這是個(gè)線性模型,將每個(gè)圖像類(lèi)型的所有不同的方向組合為一個(gè)平均的影子。
例如,它可以選取所有的車(chē),無(wú)論它們面向左邊、右邊、中間,也無(wú)論它們的顏色,只是將它們平均。模板最終看起來(lái)非常模糊。
來(lái)自斯坦福 CS231n 第二篇講義的樣本。
要注意,上面的馬的模板出現(xiàn)了兩個(gè)頭。這對(duì)我們并沒(méi)什么幫助:我們想要能夠分別檢測(cè)頭朝右邊或者頭朝左邊的馬,并且如果這些特征的任何一個(gè)被檢測(cè)到了,我們就說(shuō)我們看到了一匹馬。深度神經(jīng)網(wǎng)絡(luò)提供給我們這種靈活性,我們會(huì)在下一節(jié)中看到。
深度神經(jīng)網(wǎng)絡(luò)使用抽象層來(lái)解決圖像分類(lèi)問(wèn)題。
為了重復(fù)我們?cè)谶@一節(jié)之前解釋的東西:輸入層接受圖像的原始像素亮度。最終的層級(jí)會(huì)是類(lèi)概率的輸出向量(也就是圖像是貓、車(chē)子、馬,以及其他的概率)。
但是我們不習(xí)得一個(gè)簡(jiǎn)單的,和輸入輸出相關(guān)的線性模型。我們構(gòu)造網(wǎng)絡(luò)中間的隱藏層,它們會(huì)漸進(jìn)學(xué)習(xí)抽象特征,這讓我們不會(huì)丟失復(fù)雜數(shù)據(jù)中的所有細(xì)微差異。
來(lái)源:Analytics Vidhya
就像我們描述的動(dòng)物大腦檢測(cè)抽象特征,隱藏層中的人工神經(jīng)元會(huì)學(xué)著檢測(cè)抽象概念,無(wú)論哪個(gè)概念,只要它對(duì)于捕捉最多信息,以及使網(wǎng)絡(luò)輸出的準(zhǔn)確度中的損失最小非常實(shí)用(這是個(gè)發(fā)生在網(wǎng)絡(luò)中的,無(wú)監(jiān)督學(xué)習(xí)的實(shí)例)。
這損失了模型的可解釋性,因?yàn)楫?dāng)你添加更多隱藏層時(shí),神經(jīng)元開(kāi)始表示越來(lái)越多的抽象和無(wú)法理解的特征。在這個(gè)層面上,你可能聽(tīng)說(shuō),深度學(xué)習(xí)也被稱(chēng)作“黑箱優(yōu)化”,其中你基本上只是隨機(jī)嘗試一些東西,然后觀察出現(xiàn)了什么,而無(wú)需真正理解里面發(fā)生了什么。
線性回歸是可解釋的,因?yàn)槟銢Q定了模型中包含哪個(gè)特征。深度神經(jīng)網(wǎng)絡(luò)難以解釋?zhuān)驗(yàn)榱?xí)得的特征在任何地方都不能用自然語(yǔ)言解釋。它完全在機(jī)器的想象中。
一些值得注意的擴(kuò)展和深層概念
深度學(xué)習(xí)軟件包。你很少需要從零開(kāi)始實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)的所有部分,因?yàn)楝F(xiàn)有的庫(kù)和工具使深度學(xué)習(xí)更加易于實(shí)現(xiàn)。有許多這類(lèi)東西:TensorFlow, Caffe, Torch, Keras, 以及其它。
卷積神經(jīng)網(wǎng)絡(luò)(CNN)。CNN 特地為接受圖像輸入而設(shè)計(jì),并且對(duì)于計(jì)算機(jī)視覺(jué)任務(wù)非常高效。它們也有助于深度增強(qiáng)/強(qiáng)化學(xué)習(xí)。CNN 的靈感特別來(lái)源于動(dòng)物的視覺(jué)皮層的工作方式,并且它們是深度學(xué)習(xí)課程的熱點(diǎn)。我們已經(jīng)在文章中引用它了,就是斯坦福 CS231n。
循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)。RNN 擁有內(nèi)建記憶的概念,并且非常適合語(yǔ)言問(wèn)題。它們?cè)趶?qiáng)化學(xué)習(xí)中也很重要,因?yàn)樗鼈冏屩悄荏w能夠跟蹤東西在哪里,以及之前發(fā)生了什么,甚至在那些東西不能一次性看到的時(shí)候。Christopher Olah 編寫(xiě)了一個(gè)非常棒的,在語(yǔ)言問(wèn)題的語(yǔ)境中的, RNN 和 LSTM 的參考文獻(xiàn)。
深度增強(qiáng)/強(qiáng)化學(xué)習(xí)。這是深度學(xué)習(xí)研究中的最刺激的領(lǐng)域之一,處在近期研究的核心位置,例如 OpenAI 擊敗了 Dota2 職業(yè)玩家,以及 DeepMind 的 AlphaGo 在圍棋競(jìng)技中勝過(guò)人類(lèi)。我們?cè)诘谖逭聲?huì)深度,但是本質(zhì)上的目標(biāo)是將這篇文章中的所有技術(shù),應(yīng)用于一個(gè)問(wèn)題,教會(huì)智能體使回報(bào)最大。這可以用于與任何可以游戲化的環(huán)境,從真實(shí)的游戲,例如反恐精英或者吃豆人,到無(wú)人駕駛的汽車(chē),或者股票交易,最終到真實(shí)生活和真實(shí)世界。
深度學(xué)習(xí)應(yīng)用
深度學(xué)習(xí)正在重構(gòu)世界的幾乎每個(gè)領(lǐng)域。這里是深度學(xué)習(xí)可以做的無(wú)法置信的事情的示例:
-
Fackbook 訓(xùn)練了一個(gè)神經(jīng)網(wǎng)絡(luò),由短時(shí)記憶加持,來(lái)智能地回答《指環(huán)王》情節(jié)中的問(wèn)題。
來(lái)自 FAIR(Facebook AI 實(shí)驗(yàn)室)的研究,將加持了分離的短時(shí)記憶的深度神經(jīng)網(wǎng)絡(luò),應(yīng)用于回答 LOTR 情節(jié)的問(wèn)題。這是史詩(shī)級(jí)的定義。
-
無(wú)人駕駛的汽車(chē)依賴(lài)深度學(xué)習(xí),用于解決視覺(jué)任務(wù),例如理解路面標(biāo)志,檢測(cè)道路和識(shí)別障礙。
來(lái)源:Business Insider
-
深度學(xué)習(xí)可以用于有趣的東西,例如藝術(shù)生成。一個(gè)叫做 Neural Style(神經(jīng)風(fēng)格)的工具可以模擬藝術(shù)家的風(fēng)格,并且用它來(lái)重新組合另一幅圖片,令人難以置信。
梵高的《星夜》的風(fēng)格應(yīng)用于斯坦福校園的圖像上,通過(guò) Justin Johnson 的 neural style 實(shí)現(xiàn):https://github.com/jcjohnson/neural-style
其它值得注意的示例包括:
預(yù)測(cè)藥物發(fā)現(xiàn)中的分子的生物活性。
用于照片和視頻標(biāo)注的人臉識(shí)別。
增強(qiáng)谷歌搜索的結(jié)果。
自然語(yǔ)言理解和生成,也就是谷歌翻譯
火星探索者機(jī)器人“好奇號(hào)”,基于視覺(jué)檢測(cè),自動(dòng)選取值得檢查的土壤目標(biāo)。
...以及很多,非常多,太多了。
現(xiàn)在開(kāi)始去做吧!
對(duì)于神經(jīng)網(wǎng)絡(luò)如何實(shí)際建立,我們這里沒(méi)有涉及太多細(xì)節(jié)。因?yàn)槟阃ㄟ^(guò)自己實(shí)現(xiàn),更易于理解細(xì)節(jié)。這里是一些非常棒的實(shí)踐資源,用于起步。
使用谷歌的 Neural Network Playground 玩轉(zhuǎn)神經(jīng)網(wǎng)絡(luò)的架構(gòu),來(lái)看看不同的配置如何影響網(wǎng)絡(luò)的性能。
使用這篇谷歌的教程快速準(zhǔn)備好并起步:TensorFlow 和深度學(xué)習(xí)。以超過(guò) 99% 的準(zhǔn)確度分類(lèi)手寫(xiě)數(shù)字,你不需要是 PhD,只需要在三個(gè)小時(shí)內(nèi),熟悉 TensorFlow 以及學(xué)習(xí)深度學(xué)習(xí)概念。
之后,瀏覽斯坦福 CS231n 的至少前幾篇講義,以及第一個(gè)作業(yè),從零開(kāi)始構(gòu)建雙層的神經(jīng)網(wǎng)絡(luò),來(lái)實(shí)際強(qiáng)化這篇文章中涉及的概念。
更多資源
深度學(xué)習(xí)是個(gè)非常廣闊的領(lǐng)域。因此,我們也編譯了一些最佳資源,我們?cè)谶@個(gè)話題中遇到過(guò)它們,以便你打算深入了解。
-
CS231n:卷積神經(jīng)網(wǎng)絡(luò)和視覺(jué)識(shí)別,斯坦福的深度學(xué)習(xí)課程。我看過(guò)的最佳課程,帶有不錯(cuò)的講義和演示性問(wèn)題集。
-
神經(jīng)網(wǎng)絡(luò)和深度學(xué)習(xí),易讀,但很?chē)?yán)謹(jǐn)。
-
深度學(xué)習(xí)圣經(jīng),基礎(chǔ),更加數(shù)學(xué)化。
Fast.ai,不是很理論化,更加應(yīng)用和黑箱。
查看 Greg Brockman 對(duì)“作為工程師,什么是修煉深度學(xué)習(xí)技能的最佳方式?”問(wèn)題的回答,在 Quora 上。
下一章:到了玩游戲的時(shí)候了!
最后是第五章:強(qiáng)化/增強(qiáng)學(xué)習(xí)。