新的神經網絡結構不斷涌現,我們很難一一掌握。哪怕一開始只是記住所有的簡稱( DCIGN,BiLSTM,DCGAN ),也會讓同學們吃不消。
所以我決定寫篇文章歸納歸納,各種神經網絡結構。它們大部分都是神經網絡,也有一些是完全不同的結構。雖然所有結構說起來都是新穎而獨特的,但當我畫出結點的結構圖時……它們之間的內在聯系顯得更有意思。
總表
當我們在畫節點圖的時候發現了一個問題:這些圖并沒有展示出來這些神經結構是怎么使用的。
打個比方,變分自編碼器( VAE )看起來跟自編碼器( AE )真的差不多,但它們的訓練過程卻相差很遠。在使用訓練好的網絡時更為不同,因為 VAE 是生成器,是通過添加噪音來獲得新樣本的。而 AE 只是簡單地通過搜索記憶,找到與輸入最接近的訓練樣本。
我需要強調的是,這個圖并不能反映不同節點結構內部是如何運作的(這已經不是今天的話題了)。
需要注意的是,雖然我們使用的大部分簡稱是被普遍接受的,仍有一些并非如此。RNN 有的時候指的是遞歸神經網絡( recursive neural networks ),但大部分時候指的是循環神經網絡( recurrent neural networks )。有時能看到 RNN 會被用來代表任何循環結構,包括 LSTM, GRU 甚至是雙向網絡的變型。 AE 偶爾也有類似的問題, VAE 和DAE 有時也被稱為 AE 。許多簡稱在末尾的 N 的數量上有區別,因為你可以管卷積神經網絡( convolutional neural network )叫成卷積網絡( convolutional network )(就會形成兩種簡稱: CNN 和 CN )。
因為新的網絡一直在不斷地出現,構建一張完整的列表實際上是不可能的。就算是有這么一張表格,你在表格里找某一個也相當吃力,有時你會忽視掉一部分。所以雖然這張列表或許可以為你打開人工智能世界的大門, 但決不能認為這張表格列出了所有的結構,特別是當這篇文章寫完很久之后,你才讀到它。
對每個圖片里的結構,我都寫了一個非常非常簡短的說明。如果你對某類結構很熟悉但對具體某個結構不熟的話,你可能會覺得這些說明挺有用的。
1
前饋神經網絡( FF 或 FFNN )和感知機( P )十分直接,信息從前端一路傳遞到后端(從輸入到輸出)。神經網絡通常有層的概念,每層可能是輸入單元,隱藏單元或者輸出單元組成。單個層內沒有連接,通常是兩個相鄰的層之間全連接,(一層的所有神經元都和另一層的所有神經元互相連接)。
最簡單但有效的神經網絡有兩個輸入單元,一個輸出單元,可以用于構建邏輯門。通常給網絡的是成對的信息,輸入和我們希望的輸出,用反向傳播來訓練 FFNN 。這種叫做監督學習,和無監督學習相反,無監督學習是我們只給網絡輸入,讓網絡自己填補空缺。反向傳播的誤差通常是模型給定的輸出和應該的輸出之間的差距的某種變型(比如說 MSE 或者就是線性的做差)。如果網絡有足夠多的隱藏神經元,理論上它總可以給出輸入和輸出之間的關系建模。實際運用它們中有一定的局限性,但經常和其他網絡組合起來構成新的網絡。
Rosenblatt, Frank. “The perceptron: a probabilistic model for information storage and organization in the brain.” Psychological review 65.6 (1958): 386.
2
徑向基函數( RBF )網絡是 FFNN 網絡附上徑向基函數作為激活函數。就只是這樣而已。我不是說它沒什么用,而是大部分用其他激活函數的 FFNN 沒有專用的名字。 這個有名字主要只是因為它恰巧在對的時間被發現了。
Broomhead, David S., and David Lowe. Radial basis functions, multi-variable functional interpolation and adaptive networks. No. RSRE-MEMO-4148. ROYAL SIGNALS AND RADAR ESTABLISHMENT MALVERN (UNITED KINGDOM), 1988.
3
Hopfield 網絡( HN )是一個每個神經元都和其他的神經元互相連接的網絡; 它就是一盤徹底糾纏在一起的意大利面,每個節點也是如此。每個節點既是訓練前的輸入,又是訓練中的隱藏節點,還是最后的輸出。網絡中的訓練過程先計算出權重,然后每個神經元設置成我們想要的值。這個值將不再變動。一旦訓練了一種或多種模式,網絡最終會收斂到某個學習好的模式,因為網絡只在這些狀態上穩定。
請注意,網絡不一定符合想要的結果。(可惜它并不是一個有魔法的黑箱子)它能夠穩定部分源于網絡的總能量或是隨著訓練逐漸降低的溫度。每個神經元有一個對應于溫度的激活閾值,如果輸入的值加起來的和超過了這個閾值,神經元就會返回兩個狀態之一(通常是 -1 或 1 ,有時是 0 或 1 )。網絡的更新可以同步完成,更通常的做法是一個一個更新參數。如果一個一個更新的話,會產生一個公平隨機的序列來決定單元更新的順序(公平隨機指的是一共 n 個選項一個個地更新,一共循環 n 次)。
所以你可以說當每個單元都更新過而且每個都不變了,這個網絡穩定(退火)了(完成了收斂)。這個網絡通常被稱為聯想記憶因為它能夠收斂到和輸入最相近的狀態。如果人們能看到一半的桌子,我們能想出另一半桌子,同樣地這個網絡也會由殘缺的半個桌子和一些噪音收斂到一個完整的桌子。
Hopfield, John J. “Neural networks and physical systems with emergent collective computational abilities.” Proceedings of the national academy of sciences 79.8 (1982): 2554-2558.
4
馬爾可夫鏈( MC 或離散時間馬爾可夫鏈, DTMC )是 BM 和 HN 的前身。它可以這樣理解:從我在的節點,到達我周圍的節點的概率是多少?它們是無記憶的(這就是馬爾可夫性質),這意味著下一狀態轉移到哪里完全依賴于上一個狀態。這不能算是一個神經網絡,但是有一點類似神經網絡,而且是 BM 和 HN 的理論基礎。 MC 通常我們認為它不是一個神經網絡, BM,RBM,HN 也是。馬爾可夫鏈不一定是全連接的。
Hayes, Brian. “First links in the Markov chain.” American Scientist 101.2 (2013): 252.
5
玻爾茲曼機( BM )和 HN 非常相似,但有些神經元被標注為輸入神經元,其他的仍然是隱藏的。這些輸入神經元在完成了整個網絡更新后會成為輸出神經元。它從隨機權重開始通過反向傳播學習,最近也會使用對比散度(一個用來決定兩個信息增益之間梯度的馬爾科夫鏈)學習。對比 HN, 神經元通常有二元激活模式。由于使用 MC 訓練,BM 是一個隨機網絡。?
BM 的訓練和使用和 HN 很相似:把輸入神經元設到箝位值然后這個網絡就自由了(不用外力了)。這些單元在自由之后可以取任何值,我們在輸入神經元和隱藏神經元間而反復迭代。激活模式是由全局溫度控制的,更低的全局溫度會降低單元的能量并令激活模式穩定下來。網絡會在合適的溫度下達到平衡點。
Hinton, Geoffrey E., and Terrence J. Sejnowski. “Learning and releaming in Boltzmann machines.” Parallel distributed processing: Explorations in the microstructure of cognition 1 (1986): 282-317.
6
限制玻爾茲曼機( RBM )和 BM 非常類似(驚不驚喜)所以也和 HN 類似。RBM 和 BM最大的區別是 RBM 更利于使用因為它是受限制的。它們不是每個神經元都和其他相連,而是每個組的神經元和別的組的神經元連接,所以沒有輸入神經元直接連接到其他輸入神經元,也沒有隱藏神經元連接到其他隱藏神經元。 RBM 可以類似于 FFNN 的訓練方式來訓練,但要做一點點改變:不是把信息從頭傳到末再反向傳播誤差,而是先把信息從頭傳到末,再把信息反向傳回(到第一層)。然后接著開始用前向和反向傳播來訓練。
Smolensky, Paul. Information processing in dynamical systems: Foundations of harmony theory. No. CU-CS-321-86. COLORADO UNIV AT BOULDER DEPT OF COMPUTER SCIENCE, 1986.
7
自編碼( AE )有一點類似 FFNN, 因為 AE 更像是一個 FFNN 的別的用法而不是一個完全新的結構。自編碼的基本思想是對信息自動地編碼(像是壓縮但不是加密),由此得名。整個網絡的形狀像一個沙漏,隱藏層比輸入層和輸出層都小。 AE 通常是關于中間層(一層或兩層,因為層數可以是奇數或偶數)對稱的。最小的一層通常在最中間,這里是信息最為壓縮的地方(網絡的阻塞點)。中間層的上方都稱為編碼區,下方都稱為解碼區,中間(意不意外)稱為編碼。我們可以給定輸入,誤差設置為輸入和輸出的差異,并用反向傳播誤差來訓練網絡。 AE 可以設計成對稱的權重結構,這樣編碼權重和解碼權重就一樣了。
Bourlard, Hervé, and Yves Kamp. “Auto-association by multilayer perceptrons and singular value decomposition.” Biological cybernetics 59.4-5 (1988): 291-294.
8
稀疏自編碼( SAE )某種程度上是 AE 的反面。我們并不是教網絡把一堆信息用更少的空間或者節點表示,而是試圖把信息編碼到更大的空間中。所以我們并不把網絡在中間收縮,再放大到輸入的規模,反而是把中間層的規模擴大。這種網絡可以用來在數據集中提取許多小特征。
如果我們用訓練 AE 的方式訓練 SAE 的話,那大概率我們會得到一個完全沒用的恒等網絡 (進去什么樣出來還是什么樣,什么轉換函數或者分解都沒有)。為了防止這種情況發生,我們不反饋輸入,而是反饋輸入加稀疏驅動器。這個稀疏驅動器是一種閾值過濾器,只能讓某個特定的誤差回傳參與到訓練中,其他的誤差都是無關的并被置為 0 。這樣它就模擬了脈沖神經網絡,不是所有的神經元都一起激活(具有生物合理性)。
Marc’Aurelio Ranzato, Christopher Poultney, Sumit Chopra, and Yann LeCun. “Efficient learning of sparse representations with an energy-based model.” Proceedings of NIPS. 2007.
9
變分自編碼器( VAE )和 AE 有一樣的結構, 但被教授了一些別的東西:一個近似輸入樣本的概率分布。有一點不忘初心的意思,它和 BM 和 RBM 聯系更緊密。但它總歸還是基于貝葉斯模型作為概率推斷和獨立性,以及重新參數化的技巧來完成不一樣的表征。概率推斷和獨立性的部分解釋起來挺直觀,但它們其實是基于復雜的數學。
這些基礎可以這樣理解:把影響考慮進來。如果一件事在某個地方發生了,另一件事在另一個地方發生,它們不一定相關的。如果它們不相關,那么誤差傳播應該考慮到這一點。這是一個很有用的方法因為神經網絡(某種程度上來說)是一個很大的圖模型,所以這個方法可以幫助我們排除某些節點對其他節點的影響,幫助我們深入更深的層。
Kingma, Diederik P., and Max Welling. “Auto-encoding variational bayes.” arXiv preprint arXiv:1312.6114 (2013).
10
去噪自編碼器( DAE )是一個 AE ,但我們不只給它輸入信息,而給它帶有噪聲的(比如把圖片調成更有顆粒感)信息輸入。我們有一樣計算誤差,但網絡的輸出和原有的不帶噪聲的輸入進行比較。這樣有利于網絡不拘泥于學習細節,而是學習一些更廣泛的特征,因為小的特征往往是錯的,會隨著噪音經常變動。
Vincent, Pascal, et al. “Extracting and composing robust features with denoising autoencoders.” Proceedings of the 25th international conference on Machine learning. ACM, 2008.
11
深度信念網絡( DBN )是一個堆疊的結構,往往是 RBM 或是 VAE 堆疊起來的。這個網絡被證實能夠逐層地有效地訓練,每個 AE 或 RBM 只要學會對前一層的網絡進行編碼。這個技巧也稱為貪心訓練,貪心意味著對于局部最優解決方案找到了一個不錯的解但不一定是最優解。 DBN 可以通過對比散度或是反向傳播來訓練,學習用概率模型的方式表征數據,就像普通的 RBM 或是 VAE 。一旦非監督學習訓練或者收斂到一個比較穩定的狀態,這個模型可以用來生成新的數據。如果是使用對比散度來訓練的,那這個網絡甚至還可以用來對已有的數據進行分類,因為神經元被訓練于尋找不同的數據特征。
Bengio, Yoshua, et al. “Greedy layer-wise training of deep networks.” Advances in neural information processing systems 19 (2007): 153.
12
卷積神經網絡( CNN 或深度卷及神經網絡 DCNN )和其他大部分網絡很不一樣。它們最初是用來處理圖像的,但現在也被用來處理其他形式的輸入比如說音頻。
CNN 的一種典型的用途是給網絡輸入圖片,讓網絡來分類這些數據,比如說當我們給它一張貓的圖片,網絡輸出 “貓”;當我們給出一張狗的圖片,網絡輸出“狗”。 CNN 通常由一個輸入“掃描儀”開始,而不是一次性分析全部的輸入。打個比方,我們輸入一張 200 x 200 像素的圖片,我們并不想要一層 40000 個節點的一層,相反,我們創建一個 20 x 20 的輸入掃描儀層,就是說從一開始的 20 x 20 個像素點進行輸入(通常是圖片的左上角)。
當我們把這個輸入完成后(有可能是用于訓練),我們輸入下一個 20 x 20 個像素:我們把這個掃描儀往右平移一個像素。注意到我們并不把一下子平移 20 個像素(或者掃描儀的寬度),我們并不把圖片拆解成 20 x 20 的塊,而是一點點地爬過去。輸入數據被送入卷積層,而不是普通的層,卷積層里面的節點不是和其他所有節點相連接的。
每個節點只關注與自身和周邊的節點(多近的周邊取決于具體實現,但通常不會很多)。卷積層往往會隨著層次更深而收縮,大部分是按照可以整除輸入層大小的倍數收縮(比如說 20 后面的層可能是 10 接下來是 5)。2 的冪次更為常用,因為它們可以被整除干凈:32,16,8,4,2,1。除開卷積層,網絡里常常還有池化層。池化是一種過濾掉細節的方法:一種常見的池化技巧是最大池化,比如我們取 2 x 2 的像素,傳遞出的是紅色值最大的像素點。
把 CNN 用在音頻上,我們通常輸入音頻波形,一片段一片段地緩慢移動音頻片段。CNN 的實際實現往往在網絡末端加上一個 FFNN 用于進一步處理信息,這樣可以加入一些高度非線性的抽象。這種網絡被稱為 DCNN ,但這兩個名字和簡稱往往可以混用。
LeCun, Yann, et al. “Gradient-based learning applied to document recognition.” Proceedings of the IEEE 86.11 (1998): 2278-2324.
歡迎關注雷鋒網雷鋒字幕組專欄,獲得更多AI知識~感謝雷鋒網(公眾號:雷鋒網)雷鋒字幕組志愿者對本期內容作出貢獻。
雷鋒網原創文章,未經授權禁止轉載。詳情見轉載須知。