全文共3133字,預(yù)計學(xué)習(xí)時長6分鐘
本質(zhì)上,深度學(xué)習(xí)是一個新興的時髦名稱,衍生于一個已經(jīng)存在了相當(dāng)長一段時間的主題——神經(jīng)網(wǎng)絡(luò)。
從20世紀40年代開始,深度學(xué)習(xí)發(fā)展迅速,直到現(xiàn)在。該領(lǐng)域取得了巨大的成功,深度學(xué)習(xí)廣泛運用于智能手機、汽車和許多其他設(shè)備。
那么,什么是神經(jīng)網(wǎng)絡(luò),它可以做什么?
現(xiàn)在,一起來關(guān)注計算機科學(xué)的經(jīng)典方法:程序員設(shè)計一種算法,它對于給定的輸入數(shù)據(jù),生成輸出數(shù)據(jù)。
程序員們準確地設(shè)計函數(shù)f(x)的所有邏輯:
y = f(x)
其中x和y分別是輸入數(shù)據(jù)和輸出數(shù)據(jù)。
但是,有時設(shè)計 f(x) 可能并不那么容易。例如,假設(shè)x是面部圖像,y是通信員的名字。對于大腦來說,這項任務(wù)非常容易,而計算機算法卻難以完成!
這就是深度學(xué)習(xí)和神經(jīng)網(wǎng)絡(luò)大顯神通的地方。基本原則是:放棄 f() 算法,試著模仿大腦。
那么,大腦是如何表現(xiàn)的?大腦使用幾個無限對 (x,y) 樣本(訓(xùn)練集)不斷訓(xùn)練,在這個過程中,f(x) 函數(shù)會自動形成。它不是由任何人設(shè)計的,而是從無休止的試錯法提煉機制中形成的。
想想一個孩子每天看著周圍熟悉的人:數(shù)十億個快照,取自不同的位置、視角、光線條件,每次識別都要進行關(guān)聯(lián),每次都要修正和銳化自然神經(jīng)網(wǎng)絡(luò)。
人工神經(jīng)網(wǎng)絡(luò)是由大腦中的神經(jīng)元和突觸組成的自然神經(jīng)網(wǎng)絡(luò)模型。
典型的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)
為了保持簡單,并且利用當(dāng)今機器的數(shù)學(xué)和計算能力,可以將神經(jīng)網(wǎng)絡(luò)設(shè)計為一組層,每層包含節(jié)點(大腦神經(jīng)元的人工對應(yīng)物),其中層中的每個節(jié)點連接到下一層中的節(jié)點。
每個節(jié)點都有一個狀態(tài),通過浮點數(shù)表示,其取值范圍通常介于0到1。該狀態(tài)接近其最小值時,該節(jié)點被認為是非活動的(關(guān)閉),而它接近最大值時,該節(jié)點被認為是活動的(打開)。可以把它想象成一個燈泡;不嚴格依賴于二進制狀態(tài),但位于取值范圍內(nèi)的某個中間值。
每個連接都有一個權(quán)重,因此前一層中的活動節(jié)點或多或少地會影響到下一層中節(jié)點的活動(興奮性連結(jié)),而非活動節(jié)點不會產(chǎn)生任何影響。
連接的權(quán)重也可以是負的,這意味著前一層中的節(jié)點(或多或少地)對下一層中的節(jié)點的不活動性(抑制性連結(jié))產(chǎn)生影響。
簡單來說,現(xiàn)在假設(shè)一個網(wǎng)絡(luò)的子集,其中前一層中的三個節(jié)點與下一層中的節(jié)點相連結(jié)。簡而言之,假設(shè)前一層中的前兩個節(jié)點處于其最大激活值(1),而第三個節(jié)點處于其最小值(0)。
在上圖中,前一層中的前兩個節(jié)點是活動的(開),因此,它們對下一層中節(jié)點的狀態(tài)有所貢獻,而第三個節(jié)點是非活動的(關(guān)),因此它不會以任何方式產(chǎn)生影響(獨立于其連結(jié)權(quán)重)。
第一個節(jié)點具有強(厚)正(綠色)連接權(quán)重,這意味著它對激活的貢獻很大。第二個具有弱(薄)負(紅色)連接權(quán)重;因此,它有助于抑制連接節(jié)點。
最后,得到了來自前一層的傳入連接節(jié)點的所有貢獻值的加權(quán)和。
其中i是節(jié)點 i 的激活狀態(tài),w ij是連接節(jié)點 i 和節(jié)點 j 的連接權(quán)重。
那么,給定加權(quán)和,如何判斷下一層中的節(jié)點是否會被激活?規(guī)則真的像“總和為正即被激活,結(jié)果為負則不會”?有可能,但一般來說,這取決于你為這個節(jié)點選擇哪個激活函數(shù)及閾值)。
想一想。這個最終數(shù)字可以是實數(shù)范圍內(nèi)的任何數(shù)字,我們需要使用它來設(shè)置更有限范圍內(nèi)的節(jié)點狀態(tài)(假設(shè)從0到1)。然后將第一個范圍映射到第二個范圍,以便將任意(負數(shù)或正數(shù))數(shù)字壓縮到0到1的范圍內(nèi)。
sigmoid 函數(shù)是執(zhí)行此任務(wù)的一個常見激活函數(shù)。
在該圖中,閾值(y 值達到范圍中間的 x 值,即0.5)為零,但一般來講,它可以是任何值(負數(shù)或正數(shù),其變化影響sigmoid向左或向右移動)。
低閾值允許使用較低的加權(quán)和激活節(jié)點,而高閾值將僅使用該和的高值確定激活。
該閾值可以通過考慮前一層中的附加虛節(jié)點來實現(xiàn),其激活值恒定為 1。在這種情況下,該虛節(jié)點的連接權(quán)重可以用作閾值,并且上文提到的和公式可以被認為包括閾值本身。
最終,網(wǎng)絡(luò)的狀態(tài)由其所有權(quán)重的一組值來表示(從廣義上講,包括閾值)。
給定狀態(tài)或一組權(quán)重值可能會產(chǎn)生不良結(jié)果或大錯誤,而另一個狀態(tài)可能會產(chǎn)生良好結(jié)果,換句話說,就是小錯誤。
因此,在N維狀態(tài)空間中移動會造成小錯誤或大錯誤。損失函數(shù)能將權(quán)重域映射到錯誤值的函數(shù)。在n+1空間里,人們的大腦很難想象這樣的函數(shù)。但是,對于N = 2是個特殊情況。
訓(xùn)練神經(jīng)網(wǎng)絡(luò)包括找到最小的損失函數(shù)。為什么是最佳最小值而不是全局最小值?其實是因為這個函數(shù)通常是不可微分的,所以只能借助一些 梯度下降技術(shù)在權(quán)重域中游蕩,并避免以下情況:
· 做出太大的改變,可能你還沒意識到就錯過最佳最小值
· 做出太小的改變,你可能會卡在一個不太好的局部最小值
不容易,對吧?這就是深度學(xué)習(xí)的主要問題,也解釋了為什么訓(xùn)練階段可能要花數(shù)小時、數(shù)天甚至數(shù)周。這就是為什么硬件對于此任務(wù)至關(guān)重要,同時也解釋了為什么經(jīng)常需要暫停,考慮不同的方法和配置參數(shù)來重新開始。
現(xiàn)在回到網(wǎng)絡(luò)的一般結(jié)構(gòu),這是一堆層。第一層是輸入數(shù)據(jù) (x),而最后一層是輸出數(shù)據(jù) (y)。
中間的層可以是零個、一個或多個。它們被稱為隱藏層,深度學(xué)習(xí)中的“深度”一詞恰好指的是網(wǎng)絡(luò)可以有許多隱藏層,因此可能在訓(xùn)練期間找到更多關(guān)聯(lián)輸入和輸出的特征。
提示:在20世紀90年代,你會聽說過多層網(wǎng)絡(luò)而不是深度網(wǎng)絡(luò),但這是一回事。現(xiàn)在,越來越清楚的是,篩選層離輸入層越遠(深),就能越好地捕捉抽象特征。
學(xué)習(xí)過程
在學(xué)習(xí)過程開始時,權(quán)重是隨機設(shè)置的,因此第一層中的給定輸入集將傳送并生成隨機(計算)輸出數(shù)據(jù)。將實際輸出數(shù)據(jù)與期望輸出數(shù)據(jù)進行比較;其差異就是網(wǎng)絡(luò)誤差(損失函數(shù))的度量。
然后,此錯誤用于調(diào)整生成它的連接權(quán)重,此過程從輸出層開始,逐步向后移動到第一層。
調(diào)整的量可以很小,也可以很大,并且通常在稱為學(xué)習(xí)率的因素中定義。
這種算法稱為反向傳播,并在Rumelhart,Hinton和Williams研究之后,于1986年開始流行。
記住這個名字:杰弗里·辛頓 (Geoffrey Hinton),他被譽為“深度學(xué)習(xí)的教父”,是一位孜孜不倦的科學(xué)家,為他人指引前進方向。例如,他現(xiàn)在正在研究一種名為膠囊神經(jīng)網(wǎng)絡(luò) (Capsule Neural Networks) 的新范式,聽起來像是該領(lǐng)域的另一場偉大革命!
反向傳播旨在通過對訓(xùn)練每次集中迭代的權(quán)重進行適當(dāng)?shù)男U瑏碇饾u減少網(wǎng)絡(luò)的整體誤差。另外,減少誤差這個步驟很困難,因為不能保證權(quán)重調(diào)整總是朝著正確的方向進行最小化。
簡而言之,你戴著眼罩走來走去時,在一個n維曲面上找到一個最小值:你可以找到一個局部最小值,但永遠不知道是否可以找到更小的。
如果學(xué)習(xí)率太低,則該過程可能過于緩慢,并且網(wǎng)絡(luò)也可能停滯在局部極小值。另一方面,較高的學(xué)習(xí)率可能導(dǎo)致跳過全局最小值并使算法發(fā)散。
事實上,訓(xùn)練階段的問題在于,錯誤只多不少!
為什么這個領(lǐng)域現(xiàn)在取得如此巨大的成功?
主要是因為以下兩個原因:
1. 訓(xùn)練所需的大量數(shù)據(jù)(來自智能手機、設(shè)備、物聯(lián)網(wǎng)傳感器和互聯(lián)網(wǎng))的可用性
2. 現(xiàn)代計算機的計算能力可以大大縮短訓(xùn)練階段(訓(xùn)練階段只有幾周甚至幾天的情況很常見)
想了解更多?這里有幾本好書推薦:
· 亞當(dāng)·吉布森(Adam Gibson)和 喬希·帕特森(Josh Patterson)所著的《深度學(xué)習(xí)》,O’Reilly媒體出版社。
· 莫希特·賽瓦克(Mohit Sewark)、默罕默德·禮薩·卡里姆(Md Rezaul Karim)和普拉蒂普·普賈里(Pradeep Pujari)所著的《實用卷積神經(jīng)網(wǎng)絡(luò)》, Packt出版社。