前言
本文簡述了機(jī)器學(xué)習(xí)核心結(jié)構(gòu)的歷史發(fā)展,并總結(jié)了研究者需要熟知的 8 個(gè)神經(jīng)網(wǎng)絡(luò)架構(gòu)。
我們?yōu)槭裁葱枰笝C(jī)器學(xué)習(xí)」?
機(jī)器學(xué)習(xí)對(duì)于那些我們直接編程太過復(fù)雜的任務(wù)來說是必需的。有些任務(wù)很復(fù)雜,以至于人類不可能解決任務(wù)中所有的細(xì)節(jié)并精確地編程。所以,我們向機(jī)器學(xué)習(xí)算法提供大量的數(shù)據(jù),讓算法通過探索數(shù)據(jù)并找到一個(gè)可以實(shí)現(xiàn)程序員目的的模型來解決這個(gè)問題。
我們來看兩個(gè)例子:
寫一個(gè)程序去識(shí)別復(fù)雜場(chǎng)景中照明條件下新視角的三維物體是很困難的。我們不知道編寫什么程序,因?yàn)槲覀儾⒉涣私馑谖覀兇竽X中運(yùn)作的機(jī)制,即便知道如何實(shí)現(xiàn),寫出來的程序也可能會(huì)非常復(fù)雜。
寫一個(gè)程序去計(jì)算信用卡詐騙的概率是很困難的。因?yàn)榭赡軟]有任何既簡單又可靠的規(guī)則,我們需要結(jié)合大量的弱規(guī)則去判別。欺騙是可以轉(zhuǎn)移目標(biāo)的,程序需要不斷更改。
接著出現(xiàn)了機(jī)器學(xué)習(xí)方法:我們不需為每個(gè)特定的任務(wù)手動(dòng)編程,只要收集大量的樣本,為給定的輸入指定正確的輸出。機(jī)器學(xué)習(xí)算法利用這些樣本去生成完成指定工作的程序。學(xué)習(xí)算法產(chǎn)生的程序可能與典型的手寫程序非常不同,它可能包含數(shù)百萬個(gè)數(shù)字。如果我們做得正確,這個(gè)程序?qū)⑾裉幚碛?xùn)練集上的樣本一樣來處理新樣本。如果數(shù)據(jù)改變,程序也可以通過訓(xùn)練新數(shù)據(jù)改變。你應(yīng)該注意到,目前大量的計(jì)算比支付給程序員編寫一個(gè)特定任務(wù)的程序便宜。
鑒于此,機(jī)器學(xué)習(xí)最適用任務(wù)的例子包括:
模式識(shí)別:真實(shí)場(chǎng)景中的物體,面部識(shí)別或面部表情,口語。
異常識(shí)別:不尋常的信用卡交易序列,核電站傳感器讀數(shù)的異常模式。
預(yù)測(cè):未來股票價(jià)格或貨幣匯率,一個(gè)人喜歡什么電影。
什么是神經(jīng)網(wǎng)絡(luò)?
神經(jīng)網(wǎng)絡(luò)是機(jī)器學(xué)習(xí)文獻(xiàn)中的一類模型。例如,如果你參加了 Coursera 的機(jī)器學(xué)習(xí)課程,很可能會(huì)學(xué)到神經(jīng)網(wǎng)絡(luò)。神經(jīng)網(wǎng)絡(luò)是一套特定的算法,它徹底改變了機(jī)器學(xué)習(xí)領(lǐng)域。他們受到生物神經(jīng)網(wǎng)絡(luò)的啟發(fā),目前深度神經(jīng)網(wǎng)絡(luò)已經(jīng)被證實(shí)效果很好。神經(jīng)網(wǎng)絡(luò)本身是一般的函數(shù)逼近,這就是為什么它們幾乎可以應(yīng)用于任何從輸入到輸出空間復(fù)雜映射的機(jī)器學(xué)習(xí)問題。
以下是說服你學(xué)習(xí)神經(jīng)計(jì)算的三個(gè)理由:
了解大腦是如何工作的:它非常大且很復(fù)雜,一旦破壞就會(huì)腦死亡,所以我們需要使用計(jì)算機(jī)模擬。
了解受神經(jīng)元及其適應(yīng)性連接啟發(fā)的并行計(jì)算風(fēng)格:這種風(fēng)格與序列計(jì)算截然不同。
使用受大腦啟發(fā)的新穎學(xué)習(xí)算法來解決實(shí)際問題:即使不是大腦的實(shí)際工作方式,學(xué)習(xí)算法也非常有用。
在完成吳恩達(dá)的 Coursera 機(jī)器學(xué)習(xí)課程后,我開始對(duì)神經(jīng)網(wǎng)絡(luò)和深度學(xué)習(xí)產(chǎn)生興趣,因此尋找最好的網(wǎng)上資源來了解這個(gè)主題,并找到了 Geoffrey Hinton 的機(jī)器學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)課程。如果你正在做深度學(xué)習(xí)的工程或想要踏入深度學(xué)習(xí)/機(jī)器學(xué)習(xí)的領(lǐng)域,你應(yīng)該參加這個(gè)課程。Geoffrey Hinton 毫無疑問是深度學(xué)習(xí)領(lǐng)域的教父,在課程中給出了非凡的見解。在這篇博客文章中,我想分享我認(rèn)為任何機(jī)器學(xué)習(xí)研究人員都應(yīng)該熟悉的八個(gè)神經(jīng)網(wǎng)絡(luò)架構(gòu),以促進(jìn)他們的工作。
一般來說,這些架構(gòu)可分為三類:
1. 前饋神經(jīng)網(wǎng)絡(luò)
這是實(shí)際應(yīng)用中最常見的神經(jīng)網(wǎng)絡(luò)類型。第一層是輸入,最后一層是輸出。如果有多個(gè)隱藏層,我們稱之為「深度」神經(jīng)網(wǎng)絡(luò)。他們計(jì)算出一系列改變樣本相似性的變換。各層神經(jīng)元的活動(dòng)是前一層活動(dòng)的非線性函數(shù)。
2. 循環(huán)網(wǎng)絡(luò)
循環(huán)網(wǎng)絡(luò)在他們的連接圖中定向了循環(huán),這意味著你可以按照箭頭回到你開始的地方。他們可以有復(fù)雜的動(dòng)態(tài),使其很難訓(xùn)練。他們更具有生物真實(shí)性。
目前如何高效地訓(xùn)練循環(huán)網(wǎng)絡(luò)正在受到廣泛關(guān)注。循環(huán)神經(jīng)網(wǎng)絡(luò)是模擬連續(xù)數(shù)據(jù)的一種非常自然的方式。它們相當(dāng)于每個(gè)時(shí)間片段具有一個(gè)隱藏層的深度網(wǎng)絡(luò);除此之外,它們?cè)诿總€(gè)時(shí)間片段上使用相同的權(quán)重并且在每個(gè)時(shí)間片段上輸入。它們可以長時(shí)間記住隱藏狀態(tài)的信息,但很難訓(xùn)練其使用這個(gè)潛能。
3. 對(duì)稱連接網(wǎng)絡(luò)
對(duì)稱連接網(wǎng)絡(luò)有點(diǎn)像循環(huán)網(wǎng)絡(luò),但是單元之間的連接是對(duì)稱的(它們?cè)趦蓚€(gè)方向上權(quán)重相同)。比起循環(huán)網(wǎng)絡(luò),對(duì)稱連接網(wǎng)絡(luò)更容易分析。這個(gè)網(wǎng)絡(luò)中有更多的限制,因?yàn)樗鼈冏袷啬芰亢瘮?shù)定律。沒有隱藏單元的對(duì)稱連接網(wǎng)絡(luò)被稱為「Hopfield 網(wǎng)絡(luò)」。有隱藏單元的對(duì)稱連接的網(wǎng)絡(luò)被稱為玻爾茲曼機(jī)。
下面介紹研究者需要熟知的 8 個(gè)神經(jīng)網(wǎng)絡(luò)架構(gòu)。
1. 感知器
第一代神經(jīng)網(wǎng)絡(luò)出現(xiàn)時(shí),感知機(jī)(perceptron)僅僅是單個(gè)神經(jīng)元的計(jì)算模型,其在二十世紀(jì)六十年代初被美國計(jì)算機(jī)科學(xué)家 Frank Rosenblatt 推廣。其學(xué)習(xí)算法非常強(qiáng)大,并且宣稱可以學(xué)習(xí)很多事情。1969 年,Minsky 與 Papert 出版了一本名為《感知機(jī)》的書,這本書分析了這些算法可以做什么,并闡釋了其局限性。許多人就將這個(gè)局限性放大到所有的 NN 模型。然而,感知機(jī)學(xué)習(xí)過程仍廣泛用于具有包含數(shù)百萬特征的大特征向量的任務(wù)。
在統(tǒng)計(jì)模式識(shí)別的標(biāo)準(zhǔn)范例中,我們首先將原始輸入向量轉(zhuǎn)換為特征激活向量。然后,基于大家的共識(shí)手動(dòng)編程來定義特征。接下來,我們學(xué)習(xí)如何對(duì)每個(gè)特征激活進(jìn)行加權(quán)以獲得單一的標(biāo)量。如果這個(gè)標(biāo)量超過了某個(gè)閾值,我們認(rèn)為輸入向量是目標(biāo)集中的一個(gè)正樣本。
標(biāo)準(zhǔn)的感知機(jī)架構(gòu)遵循前饋模型,輸入被發(fā)送到神經(jīng)元中,經(jīng)處理后輸出。在下圖中,表示為網(wǎng)絡(luò)自下而上讀取:底部輸入,頂部輸出。
但是,感知機(jī)確實(shí)存在局限性:如果您使用手動(dòng)設(shè)置特征,并且使用了足夠多的特征,那么你幾乎可以做任何事情。對(duì)于二進(jìn)制輸入向量,我們可以為指數(shù)級(jí)多的二進(jìn)制向量分別設(shè)置一個(gè)特征單元,因此我們可以對(duì)二進(jìn)制輸入向量進(jìn)行任何可能的區(qū)分。但是,一旦確定了手動(dòng)編程的特征,感知器可以學(xué)習(xí)的東西就非常有限。
這個(gè)結(jié)果對(duì)于感知機(jī)是毀滅性的,因?yàn)槟J阶R(shí)別是去識(shí)別在變換情況下的模式。Minsky 和 Papert 的「組不變性定理」認(rèn)為感知機(jī)的學(xué)習(xí)部分無法去學(xué)習(xí)當(dāng)轉(zhuǎn)換來自于一個(gè)組的情況。為了識(shí)別上述那種情況,需要更多的特征單元去識(shí)別那些模式中包含的子信息。所以模式識(shí)別的技巧部分必須由手動(dòng)編碼的特征檢測(cè)器來解決,而不是學(xué)習(xí)過程。
沒有隱藏單元的網(wǎng)絡(luò)在其可以學(xué)習(xí)建模的輸入輸出映射中是非常有限的。簡單地增加一些線性單元無濟(jì)于事,因?yàn)榻Y(jié)果還是線性的。固定的輸出非線性也不夠,因此,我們需要多層自適應(yīng)非線性隱藏單元。問題是怎樣對(duì)這樣的網(wǎng)絡(luò)進(jìn)行訓(xùn)練。我們需要一種適應(yīng)所有權(quán)重的有效方式,而不僅僅是最后一層,所以這很難。學(xué)習(xí)進(jìn)入隱藏層的權(quán)重等同于學(xué)習(xí)特征,這是非常困難的,因?yàn)闆]有人直接告訴我們隱藏層應(yīng)該怎么做。
2. 卷積神經(jīng)網(wǎng)絡(luò)
機(jī)器學(xué)習(xí)研究已經(jīng)廣泛地集中在物體檢測(cè)問題上。有各種各樣的事情使識(shí)別物體變得困難:
圖像分割:真實(shí)場(chǎng)景中總是摻雜著其它物體。很難判斷哪些部分屬于同一個(gè)對(duì)象。對(duì)象的某些部分可以隱藏在其他對(duì)象的后面。
物體光照:像素的強(qiáng)度被光照強(qiáng)烈影響。
圖像變形:物體可以以各種非仿射方式變形。例如,手寫也可以有一個(gè)大的圓圈或只是一個(gè)尖頭。
情景支持:物體所屬類別通常由它們的使用方式來定義。例如,椅子是為了讓人們坐在上面而設(shè)計(jì)的,因此它們具有各種各樣的物理形狀。
視角:標(biāo)準(zhǔn)學(xué)習(xí)方法無法應(yīng)對(duì)的視點(diǎn)變化導(dǎo)致的圖像變化,得到的信息隨輸入維度(即像素)的變化而變化。
維度跳變:設(shè)想一個(gè)醫(yī)療數(shù)據(jù)庫,通常用來學(xué)習(xí)體重的神經(jīng)元,現(xiàn)在忽然用來學(xué)習(xí)病人的年齡!要應(yīng)用機(jī)器學(xué)習(xí),我們首先要消除這個(gè)維度跳躍。
復(fù)制特征方法是目前神經(jīng)網(wǎng)絡(luò)解決目標(biāo)檢測(cè)問題的主要方法。在不同的位置使用相同的特征提取器。它也可以在尺寸和方向上復(fù)制,這很需技巧并且很貴。復(fù)制大大減少了要學(xué)習(xí)的自由參數(shù)的數(shù)量。它使用幾種不同的特征類型,每種都有自己的復(fù)制檢測(cè)器圖像。它也允許以各種方式表示每個(gè)圖像塊。
那么復(fù)制特征檢測(cè)器是如何實(shí)現(xiàn)的呢?
激活值等變化量:復(fù)制特征的方法并不能使神經(jīng)元激活值不變,但是能夠使激活值改變量相同。
知識(shí)不變量:如果在訓(xùn)練中一個(gè)特征在某些位置有效,則在測(cè)試過程中,特征檢測(cè)器在各個(gè)位置有效。
1998 年,Yann LeCun 和他的合作者開發(fā)了 LeNet 的手寫數(shù)字識(shí)別器。它在前饋網(wǎng)中使用反向傳播,這個(gè)前饋網(wǎng)絡(luò)不僅僅是一個(gè)識(shí)別器,它有許多隱藏層,每個(gè)層有許多復(fù)制單元的映射,匯集附近復(fù)制單元的輸出,有一個(gè)即使重疊也能夠同時(shí)處理幾個(gè)字符的寬網(wǎng),以及訓(xùn)練一套完整的系統(tǒng)的巧妙方式。后來正式命名為卷積神經(jīng)網(wǎng)絡(luò)。一個(gè)有趣的事實(shí)是:這個(gè)網(wǎng)絡(luò)被用來讀取北美地區(qū)約 10%的支票。
卷積神經(jīng)網(wǎng)絡(luò)可用于從手寫數(shù)字到 3D 物體的與物體識(shí)別有關(guān)的所有工作。但是,從網(wǎng)下載的彩色照片中識(shí)別真實(shí)物體要比識(shí)別手寫數(shù)字復(fù)雜得多。它百倍于手寫數(shù)字的類別(1000:10),數(shù)百倍于手寫數(shù)字的像素(256×256 色:28×28 灰度),是三維場(chǎng)景的二維圖像,需要分割混亂場(chǎng)景,而且每個(gè)圖片有多個(gè)對(duì)象。這樣的情況下,相同類型的卷積神經(jīng)網(wǎng)絡(luò)會(huì)起作用嗎?
之后在 ImageNet 2012 年的 ILSVRC 競賽(這個(gè)比賽被譽(yù)為計(jì)算機(jī)視覺的年度奧林匹克競賽)中,題目是一個(gè)包含大約 120 萬張高分辨率訓(xùn)練圖像的數(shù)據(jù)集。測(cè)試圖像不顯示初始注釋(沒有分割或標(biāo)簽),算法要產(chǎn)生指定圖像中存在什么對(duì)象的標(biāo)簽。來自 Oxford、INRIA、XRCE 等機(jī)構(gòu)的先進(jìn)計(jì)算機(jī)視覺小組用已有的最好計(jì)算機(jī)視覺方法應(yīng)用于這個(gè)數(shù)據(jù)集。通常計(jì)算機(jī)視覺系統(tǒng)是復(fù)雜的多級(jí)系統(tǒng),往往需要在早期階段通過手動(dòng)調(diào)參來優(yōu)化。
比賽獲勝者 Alex Krizhevsky(NIPS 2012)開發(fā)了由 Yann LeCun 開創(chuàng)的深度卷積神經(jīng)網(wǎng)絡(luò)類型。其架構(gòu)包括 7 個(gè)隱藏層(不包括池化層)。前五層是卷積層,后面兩層是全連接層。激活函數(shù)在每個(gè)隱藏層中被修正為線性單元。這些訓(xùn)練比 Logistic 單元更快,更有表現(xiàn)力。除此之外,當(dāng)附近的單元有更強(qiáng)的活動(dòng)時(shí),它還使用競爭規(guī)范化來壓制隱藏的活動(dòng),這有助于強(qiáng)度的變化。
有一些技術(shù)手段可以顯著提高神經(jīng)網(wǎng)絡(luò)的泛化能力:
從 256×256 圖像中隨機(jī)挑選 224×224 塊圖像以獲取更多數(shù)據(jù),并使用圖像的左右反射。在測(cè)試時(shí),結(jié)合 10 個(gè)不同的圖像:四個(gè)角落加上中間,再加上它們水平翻轉(zhuǎn)的五個(gè)。
使用「dropout」來調(diào)整全局連接層(包含大部分參數(shù))的權(quán)重。Dropout 指的是隨機(jī)移除每個(gè)訓(xùn)練樣本一層中的一半隱藏單元,使其不再過多地依賴其它隱藏單元。
就硬件要求而言,Alex 在 2 個(gè)英偉達(dá)的 GTX 580 GPU(超過 1000 個(gè)快速小內(nèi)核)上使用了非常高效的卷積網(wǎng)絡(luò)實(shí)現(xiàn)。GPU 非常適合矩陣乘法,并且具有非常高的內(nèi)存帶寬。這讓它在一周內(nèi)訓(xùn)練了網(wǎng)絡(luò),并在測(cè)試時(shí)快速結(jié)合了 10 個(gè)圖像塊的結(jié)果。如果我們可以足夠快地交換狀態(tài),我們可以在很多內(nèi)核上傳播一個(gè)網(wǎng)絡(luò)。隨著內(nèi)核越來越便宜,數(shù)據(jù)集越來越大,大型神經(jīng)網(wǎng)絡(luò)將比老式計(jì)算機(jī)視覺系統(tǒng)發(fā)展得更快。
3. 循環(huán)神經(jīng)網(wǎng)絡(luò)
為了理解循環(huán)神經(jīng)網(wǎng)絡(luò),我們需要對(duì)序列建模進(jìn)行簡要概述。當(dāng)機(jī)器學(xué)習(xí)應(yīng)用于序列時(shí),我們經(jīng)常希望將輸入序列轉(zhuǎn)換為不同域中的輸出序列;例如,將一系列的聲壓轉(zhuǎn)換成單詞序列。當(dāng)沒有單獨(dú)的目標(biāo)序列時(shí),我們可以通過嘗試預(yù)測(cè)輸入序列中的下一項(xiàng)作為網(wǎng)絡(luò)的學(xué)習(xí)目標(biāo)。目標(biāo)輸出序列是輸入序列的下一步。比起試圖根據(jù)一個(gè)圖片的其他像素來預(yù)測(cè)一個(gè)像素或根據(jù)圖像的其余部分來預(yù)測(cè)一個(gè)部分,這樣似乎更自然。預(yù)測(cè)序列中的下一項(xiàng)模糊了有監(jiān)督學(xué)習(xí)和無監(jiān)督學(xué)習(xí)之間的區(qū)別。它使用專為監(jiān)督學(xué)習(xí)而設(shè)計(jì)的方法,但它不需要單獨(dú)的目標(biāo)數(shù)據(jù)。
無記憶模型是這個(gè)任務(wù)的標(biāo)準(zhǔn)方法。具體而言,自回歸模型可以通過使用「延遲抽頭」從固定數(shù)量的前幾項(xiàng)預(yù)測(cè)下一項(xiàng),而且前饋神經(jīng)網(wǎng)絡(luò)是使用一層或多層非線性隱藏單元的廣義自回歸模型。但是,如果我們給生成模型一些隱藏的狀態(tài),使這個(gè)隱藏的狀態(tài)內(nèi)部是動(dòng)態(tài)的,我們就會(huì)得到一個(gè)更有趣的模型:它可以長時(shí)間地將信息存儲(chǔ)在隱藏狀態(tài)。如果隱狀態(tài)的動(dòng)態(tài)從隱狀態(tài)中生成輸出是有噪聲的,我們將永遠(yuǎn)無法知道它確切的隱藏狀態(tài)。我們所能做的是推斷隱狀態(tài)矢量空間的概率分布。這種推斷只適用于 2 種隱藏狀態(tài)模型。
循環(huán)神經(jīng)網(wǎng)絡(luò)是非常強(qiáng)大的,因?yàn)樗鼈兘Y(jié)合了兩個(gè)屬性:1)分布式隱狀態(tài),允許其有效地存儲(chǔ)大量有關(guān)過去的信息; 2)非線性動(dòng)態(tài),使他們能夠以復(fù)雜的方式更新隱狀態(tài)。有了足夠的神經(jīng)元和時(shí)間,RNN 可以計(jì)算任何計(jì)算機(jī)可以計(jì)算出來的東西。那么 RNN 可以表現(xiàn)什么樣的行為呢?它們可以振動(dòng),可以穩(wěn)定在點(diǎn)吸引子,從而表現(xiàn)地很混亂。還可以通過使用隱狀態(tài)的不同子集執(zhí)行許多不同的小程序,每個(gè)小程序捕獲一塊知識(shí),而且所有的這些都能并行運(yùn)行并以更復(fù)雜的方式交互。
然而,RNN 的計(jì)算能力使它們很難訓(xùn)練。由于梯度爆發(fā)和梯度消失,訓(xùn)練一個(gè) RNN 是相當(dāng)困難的。當(dāng)我們進(jìn)行多層反向傳播時(shí),梯度的大小會(huì)發(fā)生什么變化?如果權(quán)重很小,則梯度將指數(shù)縮小。如果權(quán)重很大,梯度將成指數(shù)增長。典型的前饋神經(jīng)網(wǎng)絡(luò)可以應(yīng)付這些指數(shù)效應(yīng),因?yàn)樗鼈冎挥泻苌俚碾[藏層。然而,在訓(xùn)練長序列的 RNN 中,梯度很容易爆炸或消失。即使初始權(quán)重選的很好,也很難檢測(cè)到依賴于多個(gè)時(shí)間步長前的輸入的當(dāng)前目標(biāo)輸出,所以 RNN 難以處理序列中的長程依賴。
基本上有 4 種有效的方法來學(xué)習(xí) RNN:
長短期記憶:將 RNN 用于長期記憶值的小模塊。
Hessian Free 優(yōu)化:通過使用酷炫的優(yōu)化器來處理梯度消失問題,該優(yōu)化器可以檢測(cè)具有更小曲率的微小梯度。
回聲狀態(tài)網(wǎng)絡(luò):通過謹(jǐn)慎地初始化層之間的連接(輸入 ->隱層、隱層 ->隱層、輸出 -> 隱層),確保隱藏狀態(tài)有巨大的弱耦合震蕩存儲(chǔ),可以通過輸入選擇性地驅(qū)動(dòng)這些振蕩器。
利用動(dòng)量進(jìn)行良好的初始化:像回聲狀態(tài)網(wǎng)絡(luò)一樣進(jìn)行初始化,然后使用動(dòng)量學(xué)習(xí)所有連接。
4. 長短期記憶網(wǎng)絡(luò)
Hochreiter 和 Schmidhuber(1997)通過構(gòu)建長短期記憶網(wǎng)絡(luò),解決了獲取 RNN 長時(shí)間記憶(如數(shù)以百計(jì)的時(shí)間步長)的問題。他們使用具有乘法相互作用的邏輯和線性單元來設(shè)計(jì)存儲(chǔ)器單元。每當(dāng)「寫入」門打開時(shí),信息就會(huì)進(jìn)入單元。當(dāng)「保持」門打開,信息將在單元中保持。信息可以通過打開「讀取」門而從單元中讀取。
手寫草書識(shí)別是一個(gè)特別適合 RNN 的任務(wù)。輸入是筆尖的(x,y,p)坐標(biāo)序列,其中 p 表示筆是向上還是向下。輸出是一個(gè)字符序列。Graves 和 Schmidhuber(2009)表明,帶有 LSTM 的 RNN 是目前草書識(shí)別的最佳系統(tǒng)。簡而言之,其使用一系列小圖像代替筆坐標(biāo)作為輸入。
5. Hopfield 網(wǎng)絡(luò)
循環(huán)網(wǎng)絡(luò)的非線性單元通常很難分析。它們可以表現(xiàn)為不同的方式:穩(wěn)定到穩(wěn)定的狀態(tài),振蕩,或遵循不可預(yù)測(cè)的混沌軌跡。一個(gè) Hopfield 網(wǎng)絡(luò)由二元門限單元組成,它們之間有連續(xù)的連接。1982 年,John Hopfield 認(rèn)識(shí)到,如果連接是對(duì)稱的,就有一個(gè)全局能量函數(shù)。整個(gè)網(wǎng)絡(luò)的每個(gè)二進(jìn)制「結(jié)構(gòu)」都有能量,而二進(jìn)制閾值的決策規(guī)則使網(wǎng)絡(luò)可以得到能量函數(shù)的最小值。利用這類計(jì)算的一種簡潔方法是使用記憶作為神經(jīng)網(wǎng)絡(luò)的能量最小值。使用能量最小值來表示記憶從而內(nèi)存可尋址。可以只知道一個(gè)項(xiàng)目的部分內(nèi)容來訪問這個(gè)項(xiàng)目。這對(duì)硬件損壞是極大的。
每當(dāng)記憶一次配置,我們希望創(chuàng)造一個(gè)新的能量最小值。但是,如果在中間位置附近有兩個(gè)最小值怎么辦呢?這限制了 Hopfield 網(wǎng)絡(luò)的容量。那么如何增加 Hopfield 網(wǎng)絡(luò)的容量呢?物理學(xué)家認(rèn)為他們已知的數(shù)學(xué)知識(shí)可以解釋大腦的工作機(jī)制。物理學(xué)期刊上發(fā)表了許多關(guān)于 Hopfield 網(wǎng)絡(luò)及其存儲(chǔ)容量的論文。最終,Elizabeth Gardner 認(rèn)為,有一個(gè)更好的存儲(chǔ)規(guī)則——使出權(quán)重的「渾身解數(shù)」。這不是一次性存儲(chǔ)向量,而是多次循環(huán)訓(xùn)練集,并利用感知機(jī)收斂過程來訓(xùn)練每個(gè)單元,使其具有正確的狀態(tài),給定該向量中所有其他單元的狀態(tài)。統(tǒng)計(jì)學(xué)家稱這種技術(shù)為「偽可能性」。
Hopfield 網(wǎng)絡(luò)還有另一個(gè)計(jì)算功能。我們不再用網(wǎng)絡(luò)來存儲(chǔ)記憶,而是用它來構(gòu)建感官輸入的信息。用可見單元表示輸入,用隱藏節(jié)點(diǎn)的狀態(tài)來表達(dá)輸入節(jié)點(diǎn)的信息,用能量表示信息的不好(低的能量狀態(tài)來表達(dá)一個(gè)好的 interpretation)。
6. 玻爾茲曼機(jī)網(wǎng)絡(luò)
玻爾茲曼機(jī)是一種隨機(jī)遞歸神經(jīng)網(wǎng)絡(luò)。它可以被看作是 Hopfield 網(wǎng)絡(luò)隨機(jī)生成的對(duì)應(yīng)物。它是第一個(gè)能夠?qū)W習(xí)內(nèi)部表示的神經(jīng)網(wǎng)絡(luò)之一,能夠表示并解決難的組合問題。
玻爾茲曼機(jī)學(xué)習(xí)算法的學(xué)習(xí)目標(biāo)是最大化玻爾茲曼機(jī)分配給訓(xùn)練集中二進(jìn)制向量概率的乘積。這等同于最大化玻爾茲曼分配給訓(xùn)練向量的對(duì)數(shù)概率之和。也就是說,如果我們做了如下的事情,最大化我們得到 N 個(gè)訓(xùn)練案例的概率:1)讓網(wǎng)絡(luò)在沒有外部輸入的情況下在不同時(shí)間穩(wěn)定分布; 2)每次采樣一次可見向量。
2012 年,Salakhutdinov 和 Hinton 提出了玻爾茲曼機(jī)的高效小批量學(xué)習(xí)程序。
對(duì)于正相位,首先將隱藏概率初始化為 0.5,將可見單元上的數(shù)據(jù)向量進(jìn)行鉗位,然后并行更新所有隱藏單元,使用平均場(chǎng)方法并行更新隱藏單元直到收斂。在網(wǎng)絡(luò)收斂之后,記錄每個(gè)連接的單元對(duì) Pi Pj,并在最小批量中對(duì)所有數(shù)據(jù)取平均。
對(duì)于負(fù)相位:首先保留一組「幻想粒子」(就是一對(duì) (Si,Sj) 形成的系統(tǒng)?)。每個(gè)粒子都有全局配置中的一個(gè)值。然后串行更新幾次每個(gè)幻想粒子中的所有單元。對(duì)于每一個(gè)連接的單元,對(duì)所有的幻想粒子的 SiSj 取平均。
在普通玻爾茲曼機(jī)中,單元的隨機(jī)更新需要連續(xù)。有一個(gè)特殊的體系結(jié)構(gòu)允許更有效的交替并行更新(層內(nèi)沒有連接,沒有跳層連接)。這個(gè)小批量程序使玻爾茲曼機(jī)的更新更加并行。這就是所說的深度玻爾茲曼機(jī)(DBM),一個(gè)缺失很多連接的普通玻爾茲曼機(jī)。
2014 年,Salakhutdinov 和 Hinton 為他們的模型提出了一個(gè)升級(jí)版,稱之為受限玻爾茲曼機(jī)(RBM)。他們通過限制連通性使推理和學(xué)習(xí)變得更容易(隱藏單元只有一層,隱藏單元之間沒有連接)。在 RBM 中,當(dāng)可見單元被鉗位時(shí)只需要一步就能達(dá)到熱平衡。
另一個(gè)有效的小批量 RBM 學(xué)習(xí)程序是這樣的:
對(duì)于正相位,首先將可見單元的數(shù)據(jù)矢量鉗位。然后計(jì)算所有可見和隱藏單元對(duì)的
對(duì)于負(fù)相位,也保留一組「幻想粒子」(就是一對(duì) (Vi,Hj) 形成的系統(tǒng)?)。然后交替并行更新幾次每個(gè)幻想粒子中的所有單元。對(duì)于每一個(gè)連接的單位對(duì),所有幻想粒子 ViHj 求平均。
7. 深度信念網(wǎng)絡(luò)
反向傳播被認(rèn)為是人工神經(jīng)網(wǎng)絡(luò)中的標(biāo)準(zhǔn)方法,用于在處理一批數(shù)據(jù)之后計(jì)算每個(gè)神經(jīng)元的誤差貢獻(xiàn)。但是,使用反向傳播存在一些重要的問題。首先,它需要有標(biāo)簽的訓(xùn)練數(shù)據(jù);而幾乎所有的數(shù)據(jù)都沒有標(biāo)簽。其次,學(xué)習(xí)時(shí)間不夠理想,這意味著隱藏層數(shù)多的網(wǎng)絡(luò)很慢。第三,它可能會(huì)陷入局部最小的局面,所以對(duì)于深度網(wǎng)絡(luò)來說,它們還差得很遠(yuǎn)。
為了克服反向傳播的限制,研究人員已經(jīng)考慮使用無監(jiān)督的學(xué)習(xí)方法。這有助于保持使用梯度方法來調(diào)整權(quán)重的效率和簡單性,還可以用它來對(duì)傳感輸入的結(jié)構(gòu)進(jìn)行建模。特別是,他們調(diào)整權(quán)重使生成模型產(chǎn)生感官輸入的概率最大化。問題是我們應(yīng)該學(xué)習(xí)什么樣的生成模型?可以是像玻爾茲曼機(jī)這樣的能量模型嗎?還是由理想化的神經(jīng)元組成的因果模型?或是兩者的混合?
信念網(wǎng)是由隨機(jī)變量組成的有向無環(huán)圖。使用信念網(wǎng)我們可以觀察到一些變量。我們想要解決 2 個(gè)問題:1)推理問題:推斷未觀測(cè)變量的狀態(tài); 2)學(xué)習(xí)問題:調(diào)整變量之間的交互作用,使網(wǎng)絡(luò)更有可能產(chǎn)生訓(xùn)練數(shù)據(jù)。
早期的圖形模型的圖形結(jié)構(gòu)和條件概率是專家定義的。那時(shí),這些圖形連接稀疏,所以研究人員一開始把重點(diǎn)放在做正確的推論,而不是學(xué)習(xí)上。對(duì)于神經(jīng)網(wǎng)絡(luò)來說,學(xué)習(xí)是關(guān)鍵,手寫知識(shí)并不酷,因?yàn)橹R(shí)來自于學(xué)習(xí)訓(xùn)練數(shù)據(jù)。神經(jīng)網(wǎng)絡(luò)的目的不在于可解釋性或通過稀疏連接性使其便于推理。不過,還有神經(jīng)網(wǎng)絡(luò)版本的信念網(wǎng)絡(luò)。
由隨機(jī)二元神經(jīng)元組成的生成神經(jīng)網(wǎng)絡(luò)有兩種類型:1)基于能量利用對(duì)稱連接來連接二元隨機(jī)神經(jīng)元得到玻爾茲曼機(jī); 2)我們通過因果關(guān)系在一個(gè)有向無環(huán)圖中連接二元隨機(jī)神經(jīng)元獲得 SBN。這兩種類型的描述超出了本文的范圍。
8. 深度自動(dòng)編碼器
最后,我們來討論深度自動(dòng)編碼器。深度自動(dòng)編碼器是非線性降維的非常好的方法,原因如下:它們提供了兩種靈活的映射方式。訓(xùn)練事例的學(xué)習(xí)時(shí)間是線性的(或更好的),最終的編碼模型相當(dāng)緊湊和快速。然而,使用反向傳播來優(yōu)化深度自動(dòng)編碼器很難。在初始權(quán)重較小的情況下,反向傳播梯度消失。現(xiàn)在我們有了更好的方法來優(yōu)化它們,要么使用無監(jiān)督的逐層預(yù)訓(xùn)練,要么像回聲狀態(tài)網(wǎng)絡(luò)那樣謹(jǐn)慎地初始化權(quán)重。
對(duì)于預(yù)訓(xùn)練任務(wù),實(shí)際上有三種不同類型的淺自動(dòng)編碼器:
受限玻爾茲曼機(jī)作為自動(dòng)編碼器:當(dāng)我們用一步對(duì)比散度訓(xùn)練受限玻爾茲曼機(jī)時(shí),它試圖使重建看起來像數(shù)據(jù)。它就像一個(gè)自動(dòng)編碼器,但是通過使用隱藏層中的二進(jìn)制活動(dòng)來強(qiáng)化正則化。經(jīng)過最大可能性訓(xùn)練后,受限玻爾茲曼機(jī)不像自動(dòng)編碼器。我們可以用淺自動(dòng)編碼器堆棧來代替用于預(yù)訓(xùn)練的 RBM 堆棧;然而,如果淺自動(dòng)編碼器通過懲罰平方權(quán)重而被正規(guī)化,那么預(yù)訓(xùn)練就不是有效的(對(duì)于隨后的辨別)。
去噪自動(dòng)編碼器:通過將其許多分量設(shè)置為 0(例如輸入的數(shù)據(jù)丟失的情況),將噪聲添加到輸入向量。他們?nèi)匀恍枰亟ㄟ@些分量,因此他們必須提取捕獲輸入之間相關(guān)性的特征。如果我們使用表示自動(dòng)編碼器的堆棧,那么預(yù)訓(xùn)練是非常有效的。與 RBM 預(yù)訓(xùn)練一樣好或者更好。由于我們可以很容易地計(jì)算目標(biāo)函數(shù)的值,所以評(píng)估預(yù)訓(xùn)練也更簡單。它缺乏我們用 RBM 獲得的良好的變分邊界,但這只是理論上的問題。
壓縮自動(dòng)編碼器:使自動(dòng)編碼器正規(guī)化的另一種方法是盡可能使隱藏單元的活動(dòng)對(duì)輸入不敏感,但是他們不能忽視這些輸入,因?yàn)樗麄儽仨氈亟ㄟ@些輸入。我們通過懲罰每個(gè)隱藏活動(dòng)相對(duì)于輸入的平方梯度來達(dá)到這個(gè)目的。壓縮自動(dòng)編碼器預(yù)訓(xùn)練時(shí)工作得很好。代碼傾向于使一小部分隱藏單元對(duì)輸入變化敏感。
簡而言之,現(xiàn)在有很多不同的方法來進(jìn)行功能的逐層預(yù)訓(xùn)練。對(duì)于沒有大量標(biāo)簽化的事例的數(shù)據(jù)集來說,預(yù)訓(xùn)練有助于后續(xù)的判別式學(xué)習(xí)。對(duì)于非常大的有標(biāo)簽的數(shù)據(jù)集,使用無監(jiān)督預(yù)訓(xùn)練初始化監(jiān)督學(xué)習(xí)中使用的權(quán)重進(jìn)行并不必要,即使對(duì)于深度網(wǎng)絡(luò)也是如此。預(yù)訓(xùn)練是初始化深度網(wǎng)絡(luò)權(quán)重的第一個(gè)不錯(cuò)的方法,但現(xiàn)在還有其他方法。但是,如果我們讓網(wǎng)絡(luò)很大,我們將再次離不開預(yù)訓(xùn)練!
最后的福利
神經(jīng)網(wǎng)絡(luò)是有史以來最美麗的編程范例之一。在傳統(tǒng)的編程方法中,我們告訴計(jì)算機(jī)做什么,將大問題分解成計(jì)算機(jī)可輕松執(zhí)行的許多精確定義的小任務(wù)。相比之下,在神經(jīng)網(wǎng)絡(luò)中,我們不需要告訴計(jì)算機(jī)如何解決我們的問題,而是讓它通過觀測(cè)數(shù)據(jù)學(xué)習(xí),找出解決手頭問題的辦法。
如今,深度神經(jīng)網(wǎng)絡(luò)和深度學(xué)習(xí)在計(jì)算機(jī)視覺、語音識(shí)別和自然語言處理等許多重要問題上有著出色的表現(xiàn)。它們正在被谷歌、微軟和 Facebook 等公司大規(guī)模部署。
我希望這篇文章能幫助你學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)的核心概念,包括深度學(xué)習(xí)的現(xiàn)代技術(shù)。?
評(píng)論
查看更多