四缓屠、神經(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ò)的工作地點畜普、原因和方式期丰。從大腦中獲取靈感。卷積神經(jīng)網(wǎng)絡(luò)(CNN)和循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)漠嵌。真實世界中的應(yīng)用咐汞。
使用深度學(xué)習(xí)盖呼,我們?nèi)匀皇橇?xí)得一個函數(shù)f
儒鹿,將輸入X
映射為輸出Y
,并使測試數(shù)據(jù)上的損失最小几晤,就像我們之前那樣约炎。回憶一下蟹瘾,在 2.1 節(jié)監(jiān)督學(xué)習(xí)中圾浅,我們的初始“問題陳述”:
Y = f(X) + ?
訓(xùn)練:機器從帶標(biāo)簽的訓(xùn)練數(shù)據(jù)習(xí)得
f
測試:機器從不帶標(biāo)簽的測試數(shù)據(jù)預(yù)測
Y
真實世界很亂,所以有時f
很復(fù)雜憾朴。在自然語言問題中狸捕,較大的詞匯數(shù)量意味著大量特征。視覺問題設(shè)計大量的像素相關(guān)的視覺信息众雷。玩游戲需要基于復(fù)雜場景做決策灸拍,也帶有許多可能的未知。當(dāng)我們處理的數(shù)據(jù)不是很復(fù)雜時砾省,我們目前涉及的學(xué)習(xí)機制做的很好鸡岗。但是,它們?nèi)绾瓮茝V到像這樣的場景编兄,還不清楚轩性。
深度學(xué)習(xí)非常善于習(xí)得f
,特別是在數(shù)據(jù)很復(fù)雜的場景中狠鸳。實際上揣苏,人工神經(jīng)網(wǎng)絡(luò)也被成為通用函數(shù)近似器悯嗓,因為它們能夠?qū)W習(xí)任何函數(shù),無論多么扭曲卸察,都只需要一個隱藏層绅作。
讓我們看看圖像分類的問題。我們選取一張圖片作為輸入蛾派,并輸出一個分類(例如狗俄认、貓、車)洪乍。
通過圖解眯杏,深度神經(jīng)網(wǎng)絡(luò)的圖像分類解決方式,類似于這樣:
圖片來自 Jeff Clune 在 YouTube 上的一小時深度學(xué)習(xí)概覽
但是說真的壳澳,這是個巨大的數(shù)學(xué)方程岂贩,有數(shù)百萬個項和大量參數(shù)。假設(shè)輸入X
是灰度圖像巷波,由w*h
的像素亮度矩陣表示萎津。輸出Y
是每個分類的概率的向量。也就是說抹镊,我們輸出“每個分類是正確標(biāo)簽”的概率锉屈。如果這個神經(jīng)網(wǎng)絡(luò)能用的話,最高的概率就是正確的分類垮耳。然后颈渊,中間的層僅僅計算大量的矩陣相同,通過在每個隱藏層之后终佛,使用非線性變換(激活函數(shù))俊嗽,對激活值x
的權(quán)重求和,來讓神經(jīng)網(wǎng)絡(luò)習(xí)得非線性函數(shù)铃彰。
難以置信的是绍豁,你可以使用梯度下降,以 2.1 節(jié)中我們對線性回歸所做的相同方式牙捉,使損失最小竹揍。所以使用大量樣本和大量梯度下降,模型可以習(xí)得如何正確分類動物圖片鹃共。這個鬼佣,簡單來說,就是“深度學(xué)習(xí)”霜浴。
深度學(xué)習(xí)做得好的地方晶衷,以及一些歷史
人工神經(jīng)網(wǎng)絡(luò)實際上有很長時間了。它們的應(yīng)用可追溯到控制論(cybernetics,1940s1960s)晌纫,連接機制(connectionism税迷,1980s1990s),之后變成了流行的深度學(xué)習(xí)锹漱。大約在 2006 年箭养,神經(jīng)網(wǎng)絡(luò)開始變得“更深”(Goodfellow 等,2016)哥牍。但是最近我們才開始觸及它們的全部潛能毕泌。
就像 Andrej Karpathy(特斯拉的 AI 總監(jiān),它被認(rèn)為是深度學(xué)習(xí)的 Shaman)描述的那樣嗅辣,有四個“將 AI 帶回來”的不同因素:
- 計算(最明顯的一個:摩爾定律撼泛,GPU,ASIC)
- 數(shù)據(jù)(以不錯的形式澡谭,并不在互聯(lián)網(wǎng)上某處愿题,也就是 ImageNet)
- 算法(研究和理念,也就是 backprop, CNN, LSTM)蛙奖,以及
- 基礎(chǔ)設(shè)施(你下面的軟件潘酗,Linux, TCP/IP, Git, ROS, PR2, AWS, AMT, TensorFlow, 以及其它)(Karpathy, 2016)。
在過去的十年當(dāng)中雁仲,深度學(xué)習(xí)的全部潛能仔夺,最紅被(1)和(2)的進步解鎖,它反過來產(chǎn)生了(3)和(4)的突破伯顶。并且這個循環(huán)仍在繼續(xù)囚灼,成倍的人們不斷參與到深度學(xué)習(xí)研究的前線中骆膝,沿著這條路(想想你現(xiàn)在做的事情)祭衩。
由 NVIDIA 演示,它是一家
核彈GPU 領(lǐng)導(dǎo)廠商阅签。GPU 最開始為游戲構(gòu)建掐暮,但是最終很好地順應(yīng)了深度學(xué)習(xí)所需的并行計算。
在這一章的剩余部分中政钟,我們提供一些來自生物和統(tǒng)計的被寂靜路克,來解釋神經(jīng)網(wǎng)絡(luò)里面發(fā)生額了什么,之后討論深度學(xué)習(xí)的一些神奇應(yīng)用养交。最后精算,我們鏈接到一些資源,所以你可以自行應(yīng)用深度學(xué)習(xí)碎连,甚至穿著睡衣坐在沙發(fā)上灰羽,拿著筆記本,在特定種類的問題上快速實現(xiàn)超越人類級別的表現(xiàn)。
從大腦中(或者只是統(tǒng)計廉嚼?)獲取靈感:神經(jīng)網(wǎng)絡(luò)中發(fā)生了什么
神經(jīng)元玫镐、特征學(xué)習(xí)和抽象層次
當(dāng)你閱讀這些詞匯的時候,你并沒有檢查每個詞的每個字怠噪,或者組成字的每個像素恐似,來獲得單詞的含義。你從細節(jié)中將東西抽象傍念、組裝成高階的概念:詞矫夷、短語、句子憋槐、段落恤左。
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).
(你檢測高階特征的能力,讓你理解句子中發(fā)生的東西床佳,而不會太麻煩(或者可能你發(fā)送了大量的亂序文本)导俘。
視覺上發(fā)生的事情相同,這并不僅僅在人類驳概,也在動物的視覺系統(tǒng)中赤嚼。
大腦由神經(jīng)元組成,它們在足夠“激活”之后顺又,通過向其他神經(jīng)元發(fā)送電信號來“觸發(fā)”更卒。這些神經(jīng)元都是可塑的,根據(jù)有多少來自神經(jīng)元的信號添加到當(dāng)前神經(jīng)元的激活水平上(大概來說稚照,將神經(jīng)元彼此連接的權(quán)重最后會被訓(xùn)練蹂空,使神經(jīng)連接更加有用,就像線性回歸中的參數(shù)可以被訓(xùn)練果录,來改進輸入到輸出的映射)上枕。
生物和人工神經(jīng)網(wǎng)絡(luò)的端到端的演示,來自斯坦福 CS231n弱恒。這個比喻不是很嚴(yán)謹(jǐn)辨萍,生物神經(jīng)元可以做人工神經(jīng)元不能做的事,反之亦然返弹。但是理解生物中的靈感十分有用锈玉。更多細節(jié)請見生物和人工神經(jīng)元的維基百科的描述。
我們的生物網(wǎng)絡(luò)以層次方式排列义起,以便特定神經(jīng)元最終檢測我們周圍的世界的拉背,不是極其特定的特征,而是更加抽象的特征默终,也就是椅棺,更低階的特征的規(guī)律或者分組抡诞。例如,人類視覺系統(tǒng)中的紡錘狀臉部區(qū)域可特別用于人臉識別土陪。
持續(xù)學(xué)習(xí)抽象特征的演示昼汗,來自 NVIDIA。
人工神經(jīng)網(wǎng)絡(luò)如何選取原始像素輸入鬼雀,開發(fā)中介“神經(jīng)元”來檢測高階特征(也就是鼻子的存在)顷窒,以及組合它們的輸出來創(chuàng)建最終輸出。來自《神經(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 研究貓的視覺皮層中的神經(jīng)元的時候。在給貓大量刺激之后励烦,它們不能觀察到神經(jīng)活動:暗點谓着、亮點、揮手坛掠、甚至是雜志上的女性照片赊锚。但是在它們的失望中,它們從投影儀中移除了對角線處的照片屉栓,它們注意到了一些神經(jīng)活動舷蒲。結(jié)果是,位于某個特定角度的友多,對角線上的邊能夠?qū)е绿囟ǖ纳窠?jīng)元被激活牲平。
這樣就逐漸有意義了,因為自然環(huán)境通常是嘈雜和隨機的(想想草原和荒野)域滥。所以當(dāng)野外的貓感知到一條“邊”的時候纵柿,也就是一條不同于背景的線,這可能表明启绰,一個物體或者生物進入了視野范圍昂儒。當(dāng)邊緣的神經(jīng)元的特定組合被激活時,這些活動會集體產(chǎn)生更加抽象的活動酬土,以此類推荆忍,直到最終的抽象是個有用的概念,比如“鳥”或者“狼”撤缴。
深度神經(jīng)網(wǎng)絡(luò)背后的概念就是,使用人工神經(jīng)網(wǎng)絡(luò)的層次來模擬類似的結(jié)構(gòu)叽唱。
為什么線性模型不能用
為了提煉斯坦福的優(yōu)秀的深度學(xué)習(xí)課程屈呕,CS231n:卷積神經(jīng)網(wǎng)絡(luò)和視覺識別,想象我們打算訓(xùn)練一個神經(jīng)網(wǎng)絡(luò)棺亭,使用下列標(biāo)簽的正確的那個來分類圖像:["plane", "car", "bird", "cat", "deer", "dog", "frog", "horse", "ship", "truck"]
虎眨。
一種方式可能是,使用訓(xùn)練樣本為每個分類構(gòu)造一個“模板”,或者平均圖像嗽桩,之后使用最近鄰算法岳守,在測試期間來度量每個未分類圖像的像素值,到每個模板的距離碌冶∈。總的來說是這樣。這個方法不涉及任何抽象層次扑庞。這是個線性模型譬重,將每個圖像類型的所有不同的方向組合為一個平均的影子。
例如罐氨,它可以選取所有的車臀规,無論它們面向左邊、右邊栅隐、中間塔嬉,也無論它們的顏色,只是將它們平均租悄。模板最終看起來非常模糊邑遏。
來自斯坦福 CS231n 第二篇講義的樣本。
要注意恰矩,上面的馬的模板出現(xiàn)了兩個頭记盒。這對我們并沒什么幫助:我們想要能夠分別檢測頭朝右邊或者頭朝左邊的馬,并且如果這些特征的任何一個被檢測到了外傅,我們就說我們看到了一匹馬纪吮。深度神經(jīng)網(wǎng)絡(luò)提供給我們這種靈活性,我們會在下一節(jié)中看到萎胰。
深度神經(jīng)網(wǎng)絡(luò)使用抽象層來解決圖像分類問題碾盟。
為了重復(fù)我們在這一節(jié)之前解釋的東西:輸入層接受圖像的原始像素亮度。最終的層級會是類概率的輸出向量(也就是圖像是貓技竟、車子冰肴、馬,以及其他的概率)榔组。
但是我們不習(xí)得一個簡單的熙尉,和輸入輸出相關(guān)的線性模型。我們構(gòu)造網(wǎng)絡(luò)中間的隱藏層搓扯,它們會漸進學(xué)習(xí)抽象特征检痰,這讓我們不會丟失復(fù)雜數(shù)據(jù)中的所有細微差異。
就像我們描述的動物大腦檢測抽象特征锨推,隱藏層中的人工神經(jīng)元會學(xué)著檢測抽象概念铅歼,無論哪個概念公壤,只要它對于捕捉最多信息,以及使網(wǎng)絡(luò)輸出的準(zhǔn)確度中的損失最小非常實用(這是個發(fā)生在網(wǎng)絡(luò)中的椎椰,無監(jiān)督學(xué)習(xí)的實例)厦幅。
這損失了模型的可解釋性,因為當(dāng)你添加更多隱藏層時慨飘,神經(jīng)元開始表示越來越多的抽象和無法理解的特征确憨。在這個層面上,你可能聽說套媚,深度學(xué)習(xí)也被稱作“黑箱優(yōu)化”缚态,其中你基本上只是隨機嘗試一些東西,然后觀察出現(xiàn)了什么堤瘤,而無需真正理解里面發(fā)生了什么玫芦。
線性回歸是可解釋的,因為你決定了模型中包含哪個特征本辐。深度神經(jīng)網(wǎng)絡(luò)難以解釋桥帆,因為習(xí)得的特征在任何地方都不能用自然語言解釋。它完全在機器的想象中慎皱。
一些值得注意的擴展和深層概念
深度學(xué)習(xí)軟件包老虫。你很少需要從零開始實現(xiàn)神經(jīng)網(wǎng)絡(luò)的所有部分,因為現(xiàn)有的庫和工具使深度學(xué)習(xí)更加易于實現(xiàn)茫多。有許多這類東西:TensorFlow, Caffe, Torch, Keras, 以及其它祈匙。
卷積神經(jīng)網(wǎng)絡(luò)(CNN)。CNN 特地為接受圖像輸入而設(shè)計天揖,并且對于計算機視覺任務(wù)非常高效夺欲。它們也有助于深度增強/強化學(xué)習(xí)。CNN 的靈感特別來源于動物的視覺皮層的工作方式今膊,并且它們是深度學(xué)習(xí)課程的熱點些阅。我們已經(jīng)在文章中引用它了,就是斯坦福 CS231n斑唬。
循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)市埋。RNN 擁有內(nèi)建記憶的概念,并且非常適合語言問題恕刘。它們在強化學(xué)習(xí)中也很重要缤谎,因為它們讓智能體能夠跟蹤東西在哪里,以及之前發(fā)生了什么雪营,甚至在那些東西不能一次性看到的時候弓千。Christopher Olah 編寫了一個非常棒的,在語言問題的語境中的献起, RNN 和 LSTM 的參考文獻洋访。
深度增強/強化學(xué)習(xí)。這是深度學(xué)習(xí)研究中的最刺激的領(lǐng)域之一谴餐,處在近期研究的核心位置姻政,例如 OpenAI 擊敗了 Dota2 職業(yè)玩家,以及 DeepMind 的 AlphaGo 在圍棋競技中勝過人類岂嗓。我們在第五章會深度汁展,但是本質(zhì)上的目標(biāo)是將這篇文章中的所有技術(shù),應(yīng)用于一個問題厌殉,教會智能體使回報最大食绿。這可以用于與任何可以游戲化的環(huán)境,從真實的游戲公罕,例如反恐精英或者吃豆人器紧,到無人駕駛的汽車,或者股票交易楼眷,最終到真實生活和真實世界铲汪。
深度學(xué)習(xí)應(yīng)用
深度學(xué)習(xí)正在重構(gòu)世界的幾乎每個領(lǐng)域。這里是深度學(xué)習(xí)可以做的無法置信的事情的示例:
-
Fackbook 訓(xùn)練了一個神經(jīng)網(wǎng)絡(luò)罐柳,由短時記憶加持掌腰,來智能地回答《指環(huán)王》情節(jié)中的問題。
來自 FAIR(Facebook AI 實驗室)的研究张吉,將加持了分離的短時記憶的深度神經(jīng)網(wǎng)絡(luò)齿梁,應(yīng)用于回答 LOTR 情節(jié)的問題。這是史詩級的定義肮蛹。
-
無人駕駛的汽車依賴深度學(xué)習(xí)勺择,用于解決視覺任務(wù),例如理解路面標(biāo)志蔗崎,檢測道路和識別障礙酵幕。
-
深度學(xué)習(xí)可以用于有趣的東西,例如藝術(shù)生成缓苛。一個叫做 Neural Style(神經(jīng)風(fēng)格)的工具可以模擬藝術(shù)家的風(fēng)格芳撒,并且用它來重新組合另一幅圖片,令人難以置信未桥。
梵高的《星夜》的風(fēng)格應(yīng)用于斯坦福校園的圖像上笔刹,通過 Justin Johnson 的 neural style 實現(xiàn):https://github.com/jcjohnson/neural-style
其它值得注意的示例包括:
預(yù)測藥物發(fā)現(xiàn)中的分子的生物活性。
用于照片和視頻標(biāo)注的人臉識別冬耿。
增強谷歌搜索的結(jié)果舌菜。
自然語言理解和生成,也就是谷歌翻譯
火星探索者機器人“好奇號”亦镶,基于視覺檢測日月,自動選取值得檢查的土壤目標(biāo)袱瓮。
...以及很多,非常多爱咬,太多了尺借。
現(xiàn)在開始去做吧!
對于神經(jīng)網(wǎng)絡(luò)如何實際建立精拟,我們這里沒有涉及太多細節(jié)燎斩。因為你通過自己實現(xiàn),更易于理解細節(jié)蜂绎。這里是一些非常棒的實踐資源栅表,用于起步。
使用谷歌的 Neural Network Playground 玩轉(zhuǎn)神經(jīng)網(wǎng)絡(luò)的架構(gòu)师枣,來看看不同的配置如何影響網(wǎng)絡(luò)的性能怪瓶。
使用這篇谷歌的教程快速準(zhǔn)備好并起步:TensorFlow 和深度學(xué)習(xí)。以超過 99% 的準(zhǔn)確度分類手寫數(shù)字坛吁,你不需要是 PhD劳殖,只需要在三個小時內(nèi),熟悉 TensorFlow 以及學(xué)習(xí)深度學(xué)習(xí)概念拨脉。
之后哆姻,瀏覽斯坦福 CS231n 的至少前幾篇講義,以及第一個作業(yè)玫膀,從零開始構(gòu)建雙層的神經(jīng)網(wǎng)絡(luò)矛缨,來實際強化這篇文章中涉及的概念。
更多資源
深度學(xué)習(xí)是個非常廣闊的領(lǐng)域帖旨。因此箕昭,我們也編譯了一些最佳資源,我們在這個話題中遇到過它們解阅,以便你打算深入了解落竹。
-
CS231n:卷積神經(jīng)網(wǎng)絡(luò)和視覺識別,斯坦福的深度學(xué)習(xí)課程货抄。我看過的最佳課程述召,帶有不錯的講義和演示性問題集。
-
神經(jīng)網(wǎng)絡(luò)和深度學(xué)習(xí)蟹地,易讀积暖,但很嚴(yán)謹(jǐn)。
-
深度學(xué)習(xí)圣經(jīng)怪与,基礎(chǔ)夺刑,更加數(shù)學(xué)化。
Fast.ai,不是很理論化遍愿,更加應(yīng)用和黑箱存淫。
查看 Greg Brockman 對“作為工程師,什么是修煉深度學(xué)習(xí)技能的最佳方式错览?”問題的回答纫雁,在 Quora 上煌往。
下一章:到了玩游戲的時候了倾哺!
最后是第五章:強化/增強學(xué)習(xí)。