1. 程式人生 > >從神經元到CNN、RNN、GAN…神經網路看本文絕對夠了

從神經元到CNN、RNN、GAN…神經網路看本文絕對夠了

在深度學習十分火熱的今天,不時會湧現出各種新型的人工神經網路,想要實時瞭解這些新型神經網路的架構還真是不容易。光是知道各式各樣的神經網路模型縮寫(如:DCIGN、BiLSTM、DCGAN……還有哪些?),就已經讓人招架不住了。

因此,這裡整理出一份清單來梳理所有這些架構。其中大部分是人工神經網路,也有一些完全不同的怪物。儘管所有這些架構都各不相同、功能獨特,當我在畫它們的節點圖時……其中潛在的關係開始逐漸清晰起來。


把這些架構做成節點圖,會存在一個問題:它無法展示神經網路架構內部的工作原理。舉例來說,變分自編碼機(VAE:variational autoencoders )看起來跟自編碼機(AE:autoencoders)差不多,但它們的訓練過程卻大不相同。訓練後的模型在使用場景上差別更大:VAE是生成器,通過插入噪音資料來獲取新樣本;而AE僅僅是把他們所收到的任何資訊作為輸入,對映到“記憶中”最相似的訓練樣本上。

在介紹不同模型的神經元和神經細胞層之間的連線方式前,我們一步一步來,先來了解不同的神經元節點內部是如何工作的。

 

神經元


對不同型別的神經元標記不同的顏色,可以更好地在各種網路架構之間進行區分。但是,這些神經元的工作方式卻是大同小異。在下圖的基本神經元結構後面,你會看到詳細的講解:


基本的人工神經網路神經元(basic neural network cell)

相當簡單,這種簡單的型別可以在常規的前饋人工神經網路架構裡面找到。這種神經元與其它神經元之間的連線具有權重,也就是說,它可以和前一層神經網路層中的所有神經元有連線。

每一個連線都有各自的權重,通常情況下是一些隨機值(關於如何對人工神經網路的權重進行初始化是一個非常重要的話題,這將會直接影響到之後的訓練過程,以及最終整個模型的效能)。這個權重可以是負值,正值,非常小,或者非常大,也可以是零。和這個神經元連線的所有神經元的值都會乘以各自對應的權重。然後,把這些值都求和。

在這個基礎上,會額外加上一個bias,它可以用來避免輸出為零的情況,並且能夠加速某些操作,這讓解決某個問題所需要的神經元數量也有所減少。這個bias也是一個數字,有些時候是一個常量(經常是-1或者1),有些時候會有所變化。這個總和最終被輸入到一個啟用函式,這個啟用函式的輸出最終就成為這個神經元的輸出。


卷積神經元(Convolutional cells)

和前饋神經元非常相似,除了它們只跟前一神經細胞層的部分神經元有連線。因為它們不是和某些神經元隨機連線的,而是與特定範圍內的神經元相連線,通常用來儲存空間資訊。這讓它們對於那些擁有大量區域性資訊,比如影象資料、語音資料(但多數情況下是影象資料),會非常實用。


解卷積神經元

恰好相反:它們是通過跟下一神經細胞層的連線來解碼空間資訊。這兩種神經元都有很多副本,它們都是獨立訓練的;每個副本都有自己的權重,但連線方式卻完全相同。可以認為,這些副本是被放在了具備相同結構的不同的神經網路中。這兩種神經元本質上都是一般意義上的神經元,但是,它們的使用方式卻不同。

池化神經元和插值神經元(Pooling and interpolating cells)

經常和卷積神經元結合起來使用。它們不是真正意義上的神經元,只能進行一些簡單的操作。

池化神經元接受到來自其它神經元的輸出過後,決定哪些值可以通過,哪些值不能通過。在影象領域,可以理解成是把一個影象縮小了(在檢視圖片的時候,一般軟體都有一個放大、縮小的功能;這裡的影象縮小,就相當於軟體上的縮小影象;也就是說我們能看到影象的內容更加少了;在這個池化的過程當中,影象的大小也會相應地減少)。這樣,你就再也不能看到所有的畫素了,池化函式會知道什麼畫素該保留,什麼畫素該捨棄。

插值神經元恰好是相反的操作:它們獲取一些資訊,然後映射出更多的資訊。額外的資訊都是按照某種方式製造出來的,這就好像在一張小解析度的圖片上面進行放大。插值神經元不僅僅是池化神經元的反向操作,而且,它們也是很常見,因為它們執行非常快,同時,實現起來也很簡單。池化神經元和插值神經元之間的關係,就像卷積神經元和解卷積神經元之間的關係。

均值神經元和標準方差神經元(Mean and standard deviation cells)

(作為概率神經元它們總是成對地出現)是一類用來描述資料概率分佈的神經元。均值就是所有值的平均值,而標準方差描述的是這些資料偏離(兩個方向)均值有多遠。比如:一個用於影象處理的概率神經元可以包含一些資訊,比如:在某個特定的畫素裡面有多少紅色。舉個例來說,均值可能是0.5,同時標準方差是0.2。當要從這些概率神經元取樣的時候,你可以把這些值輸入到一個高斯隨機數生成器,這樣就會生成一些分佈在0.4和0.6之間的值;值離0.5越遠,對應生成的概率也就越小。它們一般和前一神經元層或者下一神經元層是全連線,而且,它們沒有偏差(bias)。


迴圈神經元(Recurrent cells )

不僅僅在神經細胞層之間有連線,而且在時間軸上也有相應的連線。每一個神經元內部都會儲存它先前的值。它們跟一般的神經元一樣更新,但是,具有額外的權重:與當前神經元之前值之間的權重,還有大多數情況下,與同一神經細胞層各個神經元之間的權重。當前值和儲存的先前值之間權重的工作機制,與非永久性儲存器(比如RAM)的工作機制很相似,繼承了兩個性質:

第一,維持一個特定的狀態;

第二:如果不對其持續進行更新(輸入),這個狀態就會消失。

由於先前的值是通過啟用函式得到的,而在每一次的更新時,都會把這個值和其它權重一起輸入到啟用函式,因此,資訊會不斷地流失。實際上,資訊的儲存率非常的低,以至於僅僅四次或者五次迭代更新過後,幾乎之前所有的資訊都會流失掉。


長短期記憶神經元(Long short term memory cells)

用於克服迴圈神經元中資訊快速流失的問題。

LSTM是一個邏輯迴路,其設計受到了計算機記憶體單元設計的啟發。與只儲存兩個狀態的迴圈神經元相比,LSTM可以儲存四個狀態:輸出值的當前和先前值,記憶神經元狀態的當前值和先前值。它們都有三個門:輸入門,輸出門,遺忘門,同時,它們也還有常規的輸入。

這些門它們都有各自的權重,也就是說,與這種型別的神經元細胞連線需要設定四個權重(而不是一個)。這些門的工作機制與流門(flow gates)很相似,而不是柵欄門(fence gates):它們可以讓所有的資訊都通過,或者只是通過部分,也可以什麼都不讓通過,或者通過某個區間的資訊。

這種執行機制的實現是通過把輸入資訊和一個在0到1之間的係數相乘,這個係數儲存在當前門中。這樣,輸入門決定輸入的資訊有多少可以被疊加到當前門值。輸出門決定有多少輸出資訊是可以傳遞到後面的神經網路中。遺忘門並不是和輸出神經元的先前值相連線,而是,和前一記憶神經元相連線。它決定了保留多少記憶神經元最新的狀態資訊。因為沒有和輸出相連線,以及沒有啟用函式在這個迴圈中,因此只會有更少的資訊流失。


門控迴圈神經元(Gated recurrent units (cells))

是LSTM的變體。它們同樣使用門來抑制資訊的流失,但是隻用兩個門:更新門和重置門。這使得構建它們付出的代價沒有那麼高,而且執行速度更加快了,因為它們在所有的地方使用了更少的連線。

從本質上來說LSTM和GRU有兩個不同的地方:

第一:GRU神經元沒有被輸出門保護的隱神經元;

第二:GRU把輸出門和遺忘門整合在了一起,形成了更新門。核心的思想就是如果你想要一些新的資訊,那麼你就可以遺忘掉一些陳舊的資訊(反過來也可以)。

 

神經細胞層(Layers)


形成一個神經網路,最簡單的連線神經元方式是——把所有的神經元與其它所有的神經元相連線。這就好像Hopfield神經網路和玻爾茲曼機(Boltzmann machines)的連線方式。當然,這也就意味著連線數量會隨著神經元個數的增加呈指數級地增加,但是,對應的函式表達力也會越來越強。這就是所謂的全連線(completely (or fully) connected)。

經歷了一段時間的發展,發現把神經網路分解成不同的神經細胞層會非常有效。神經細胞層的定義是一群彼此之間互不連線的神經元,它們僅跟其它神經細胞層有連線。這一概念在受限玻爾茲曼機(Restricted Boltzmann Machines)中有所體現。現在,使用神經網路就意味著使用神經細胞層,並且是任意數量的神經細胞層。其中一個比較令人困惑的概念是全連線(fully connected or completely connected),也就是某一層的每個神經元跟另一層的所有神經元都有連線,但真正的全連線神經網路相當罕見。

卷積連線層(Convolutionally connected layers)

相對於全連線層要有更多的限制:在卷積連線層中的每一個神經元只與相鄰的神經元層連線。影象和聲音蘊含了大量的資訊,如果一對一地輸入到神經網路(比如,一個神經元對應一個畫素)。卷積連線的形成,受益於保留空間資訊更為重要的觀察。實踐證明這是一個非常好的猜測,因為現在大多數基於人工神經網路的影象和語音應用都使用了這種連線方式。然而,這種連線方式所需的代價遠遠低於全連線層的形式。從本質上來講,卷積連線方式起到重要性過濾的作用,決定哪些緊緊聯絡在一起的資訊包是重要的;卷積連線對於資料降維非常有用。

當然了,還有另外一種選擇,就是隨機連線神經元(randomly connected neurons)。這種形式的連線主要有兩種變體:

第一,允許部分神經元進行全連線。

第二,神經元層之間只有部分連線。

隨機連線方式有助於線性地降低人工神經網路的效能;當全連線層遇到效能問題的時候,在大規模人工神經網路中,使用隨機連線方式非常有益。擁有更多神經元且更加稀疏的神經元層在某些情況下執行效果更好,特別是很多的資訊需要被儲存起來,但是,需要交換的資訊並不多(這與卷積連線層的執行機制很相似,但是,它們是隨機的)。非常稀疏的連線網路(1%或2%)也有被使用,比如ELMs, ESNs 和LSMs。這特別適用於脈衝網路(spiking networks),因為一個神經元擁有更多的連線,它對應的權重具有的能量也就更少,這也就意味著將會有更少的擴充套件和重複模式。

時間滯後連線(Time delayed connections)

是指相連的神經元(通常是在同一個神經元層,甚至於一個神經元自己跟自己連線),它們不從前面的神經元層獲取資訊,而是從神經元層先前的狀態獲取資訊。這使得暫時(時間上或者序列上)聯絡在一起的資訊可以被儲存起來。這些形式的連線經常被手工重新進行設定,從而可以清除神經網路的狀態。和常規連線的主要區別是,這種連線會持續不斷地改變,即便這個神經網路當前沒有處於訓練狀態。

下圖展示了以上所介紹的神經網路及其連線方式。當我卡在哪種神經元與哪個神經細胞層該連到一起的時候,就會拿這張圖出來作為參考(尤其是在處理和分析LSTM與GRU神經元時):


顯而易見,整理一份完整的清單是不切實際的,因為新的架構正被源源不斷地發明出來。所以,接下來這份清單的目的,只想帶你一窺人工智慧領域的基礎設施。對於每一個畫成節點圖的架構,我都會寫一個非常非常簡短的描述。你會發現這些描述還是很有用的,畢竟,總還是有一些你並不是那麼熟悉的架構。

以下內容將詳細介紹25個神經網路模型,如果你想閱讀關於它們的原始論文,請在微信中回覆“神經網路”,即可獲得打包的PDF檔案。

值得一提的是,雖說大多數的簡寫都已被普遍接受,但總會出現一些衝突。RNNs有時表示遞迴神經網路(recursive neural networks),但大多時候,它們指的是迴圈神經網路(recurrent neural networks)。這還沒完,它們在許多地方還會泛指各種迴圈架構,這包括在LSTMs、GRU甚至是雙向變體。AEs也經常會面臨同樣的問題,VAEs、DAEs及其相似結構有時都被簡稱為AEs。很多縮寫後面的“N”也常常會有所變化,因為同一個架構你既可稱之為卷積神經網路(convolutional neural network),也可簡稱為卷積網路(convolutional network),這樣就出現了CNN和CN兩種形式。

前饋神經網路(FFNN)


前饋神經感知網路與感知機(FF or FFNN:Feed forward neural networks and P:perceptrons)非常簡單,資訊從前往後流動(分別對應輸入和輸出)。

一般在描述神經網路的時候,都是從它的層說起,即相互平行的輸入層、隱含層或者輸出層神經結構。單獨的神經細胞層內部,神經元之間互不相連;而一般相鄰的兩個神經細胞層則是全連線(一層的每個神經元和另一層的每一個神經元相連)。一個最簡單卻最具有實用性的神經網路由兩個輸入神經元和一個輸出神經元構成,也就是一個邏輯閘模型。給神經網路一對資料集(分別是“輸入資料集”和“我們期望的輸出資料集”),一般通過反向傳播演算法來訓練前饋神經網路(FFNNs)。

這就是所謂的監督式學習。與此相反的是無監督學習:我們只給輸入,然後讓神經網路去尋找資料當中的規律。反向傳播的誤差往往是神經網路當前輸出和給定輸出之間差值的某種變體(比如MSE或者僅僅是差值的線性變化)。如果神經網路具有足夠的隱層神經元,那麼理論上它總是能夠建立輸入資料和輸出資料之間的關係。在實踐中,FFNN的使用具有很大的侷限性,但是,它們通常和其它神經網路一起組合成新的架構。

Rosenblatt, Frank. “The perceptron: a probabilistic model for information storage and organization in the brain.” Psychological review 65.6 (1958): 386.

徑向基神經網路(RBF)


徑向神經網路(RBF:Radial basis function)是一種以徑向基核函式作為啟用函式的前饋神經網路。沒有更多描述了。這不是說沒有相關的應用,但大多數以其它函式作為啟用函式的FFNNs都沒有它們自己的名字。這或許跟它們的發明年代有關係。

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.

霍普菲爾網路(HN)


霍普菲爾網路(HN:Hopfield network)是一種每一個神經元都跟其它神經元相互連線的網路。

這就像一盤完全攪在一起的義大利麵,因為每個神經元都在充當所有角色:訓練前的每一個節點都是輸入神經元,訓練階段是隱神經元,輸出階段則是輸出神經元。

該神經網路的訓練,是先把神經元的值設定到期望模式,然後計算相應的權重。在這以後,權重將不會再改變了。一旦網路被訓練包含一種或者多種模式,這個神經網路總是會收斂於其中的某一種學習到的模式,因為它只會在某一個狀態才會穩定。值得注意的是,它並不一定遵從那個期望的狀態(很遺憾,它並不是那個具有魔法的黑盒子)。它之所以會穩定下來,部分要歸功於在訓練期間整個網路的“能量(Energy)”或“溫度(Temperature)”會逐漸地減少。每一個神經元的啟用函式閾值都會被設定成這個溫度的值,一旦神經元輸入的總和超過了這個閾值,那麼就會讓當前神經元選擇狀態(通常是-1或1,有時也是0或1)。

可以多個神經元同步,也可以一個神經元一個神經元地對網路進行更新。一旦所有的神經元都已經被更新,並且它們再也沒有改變,整個網路就算穩定(退火)了,那你就可以說這個網路已經收斂了。這種型別的網路被稱為“聯想記憶(associative memory)”,因為它們會收斂到和輸入最相似的狀態;比如,人類看到桌子的一半就可以想象出另外一半;與之相似,如果輸入一半噪音+一半桌子,這個網路就能收斂到整張桌子。

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.

馬爾可夫鏈(MC)


馬爾可夫鏈(MC:Markov Chain)或離散時間馬爾可夫鏈(DTMC:MC or discrete time Markov Chain)在某種意義上是BMs和HNs的前身。可以這樣來理解:從從我當前所處的節點開始,走到任意相鄰節點的概率是多少呢?它們沒有記憶(所謂的馬爾可夫特性):你所得到的每一個狀態都完全依賴於前一個狀態。儘管算不上神經網路,但它卻跟神經網路類似,並且奠定了BM和HN的理論基礎。跟BM、RBM、HN一樣,MC並不總被認為是神經網路。此外,它也並不總是全連線的。

Hayes, Brian. “First links in the Markov chain.” American Scientist 101.2 (2013): 252.

玻爾茲曼機(BM)


玻爾茲曼機(BM:Boltzmann machines)和霍普菲爾網路很接近,差別只是:一些神經元作為輸入神經元,剩餘的則是作為隱神經元。

在整個神經網路更新過後,輸入神經元成為輸出神經元。剛開始神經元的權重都是隨機的,通過反向傳播(back-propagation)演算法進行學習,或是最近常用的對比散度(contrastive divergence)演算法(馬爾可夫鏈用於計算兩個資訊增益之間的梯度)。

相比HN,大多數BM的神經元啟用模式都是二元的。BM由MC訓練獲得,因而是一個隨機網路。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.

受限玻爾茲曼機(RBM)


受限玻爾茲曼機(RBM:Restricted Boltzmann machines)與BM出奇地相似,因而也同HN相似。

它們的最大區別在於: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.

自編碼機(AE)


自編碼機(AE:Autoencoders)和FFNN有些相近,因為它更像是FFNN的另一種用法,而非本質上完全不同的另一種架構。

自編碼機的基本思想是自動對資訊進行編碼(像壓縮一樣,而非加密),它也因此而得名。整個網路的形狀酷似一個沙漏計時器,中間的隱含層較小,兩邊的輸入層、輸出層較大。自編碼機總是對稱的,以中間層(一層還是兩層取決於神經網路層數的奇偶)為軸。最小的層(一層或者多層)總是在中間,在這裡資訊壓縮程度最大(整個網路的關隘口)。在中間層之前為編碼部分,中間層之後為解碼部分,中間層則是編碼部分。

自編碼機可用反向傳播演算法進行訓練,給定輸入,將誤差設為輸入和輸出之差。自編碼機的權重也是對稱的,因此編碼部分權重與解碼部分權重完全一樣。

Bourlard, Hervé, and Yves Kamp. “Auto-association by multilayer perceptrons and singular value decomposition.” Biological cybernetics 59.4-5 (1988): 291-294.

稀疏自編碼機(SAE)


稀疏自編碼機(SAE:Sparse autoencoders)某種程度上同自編碼機相反。稀疏自編碼機不是用更小的空間表徵大量資訊,而是把原本的資訊編碼到更大的空間內。因此,中間層不是收斂,而是擴張,然後再還原到輸入大小。它可以用於提取資料集內的小特徵。

如果用訓練自編碼機的方式來訓練稀疏自編碼機,幾乎所有的情況,都是得到毫無用處的恆等網路(輸入=輸出,沒有任何形式的變換或分解)。為避免這種情況,需要在反饋輸入中加上稀疏驅動資料。稀疏驅動的形式可以是閾值過濾,這樣就只有特定的誤差才會反向傳播用於訓練,而其它的誤差則被忽略為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.

 

變分自編碼機(VAE)


變分自編碼機(VAE:Variational autoencoders)和AE有著相同的架構,卻被教會了不同的事情:輸入樣本的一個近似概率分佈,這讓它跟BM、RBM更相近。

不過,VAE卻依賴於貝葉斯理論來處理概率推斷和獨立(probabilistic inference and independence),以及重新引數化(re-parametrisation)來進行不同的表徵。推斷和獨立非常直觀,但卻依賴於複雜的數學理論。基本原理是:把影響納入考慮。如果在一個地方發生了一件事情,另外一件事情在其它地方發生了,它們不一定就是關聯在一起的。如果它們不相關,那麼誤差傳播應該考慮這個因素。這是一個有用的方法,因為神經網路是一個非常大的圖表,如果你能在某些節點排除一些來自於其它節點的影響,隨著網路深度地增加,這將會非常有用。

Kingma, Diederik P., and Max Welling. “Auto-encoding variational bayes.” arXiv preprint arXiv:1312.6114 (2013).

去噪自編碼機(DAE)


去噪自編碼機(DAE:Denoising autoencoders)是一種自編碼機,它的訓練過程,不僅要輸入資料,還有再加上噪音資料(就好像讓影象變得更加模糊一樣)。

但在計算誤差的時候跟自動編碼機一樣,降噪自動編碼機的輸出也是和原始的輸入資料進行對比。這種形式的訓練旨在鼓勵降噪自編碼機不要去學習細節,而是一些更加巨集觀的特徵,因為細微特徵受到噪音的影響,學習細微特徵得到的模型最終表現出來的效能總是很差。

Vincent, Pascal, et al. “Extracting and composing robust features with denoising autoencoders.” Proceedings of the 25th international conference on Machine learning. ACM, 2008.

深度信念網路(DBN)


深度信念網路(DBN:Deep belief networks)之所以取這個名字,是由於它本身幾乎是由多個受限玻爾茲曼機或者變分自編碼機堆砌而成。

實踐表明一層一層地對這種型別的神經網路進行訓練非常有效,這樣每一個自編碼機或者受限玻爾茲曼機只需要學習如何編碼前一神經元層的輸出。這種訓練技術也被稱為貪婪訓練,這裡貪婪的意思是通過不斷地獲取區域性最優解,最終得到一個相當不錯解(但可能不是全域性最優的)。可以通過對比散度演算法或者反向傳播演算法進行訓練,它會慢慢學著以一種概率模型來表徵資料,就好像常規的自編碼機或者受限玻爾茲曼機。一旦經過非監督式學習方式,訓練或者收斂到了一個穩定的狀態,那麼這個模型就可以用來產生新的資料。如果以對比散度演算法進行訓練,那麼它甚至可以用於區分現有的資料,因為那些神經元已經被引導來獲取資料的不同特定。

Bengio, Yoshua, et al. “Greedy layer-wise training of deep networks.” Advances in neural information processing systems 19 (2007): 153.

卷積神經網路(CNN)


卷積神經網路(CNN:Convolutional neural networks)或深度卷積神經網路(DCNN:deep convolutional neural networks)跟其它型別的神經網路大有不同。它們主要用於處理影象資料,但可用於其它形式資料的處理,如語音資料。對於卷積神經網路來說,一個典型的應用就是給它輸入一個影象,而後它會給出一個分類結果。也就是說,如果你給它一張貓的影象,它就輸出“貓”;如果你給一張狗的影象,它就輸出“狗”。

卷積神經網路是從一個數據掃描層開始,這種形式的處理並沒有嘗試在一開始就解析整個訓練資料。比如:對於一個大小為200X200畫素的影象,你不會想構建一個40000個節點的神經元層。而是,構建一個20X20畫素的輸入掃描層,然後,把原始影象第一部分的20X20畫素影象(通常是從影象的左上方開始)輸入到這個掃描層。當這部分影象(可能是用於進行卷積神經網路的訓練)處理完,你會接著處理下一部分的20X20畫素影象:逐漸(通常情況下是移動一個畫素,但是,移動的步長是可以設定的)移動掃描層,來處理原始資料。

注意,你不是一次性移動掃描層20個畫素(或其它任何掃描層大小的尺度),也不是把原始影象切分成20X20畫素的影象塊,而是用掃描層在原始影象上滑過。這個輸入資料(20X20畫素的影象塊)緊接著被輸入到卷積層,而非常規的神經細胞層——卷積層的節點不是全連線。每一個輸入節點只會和最近的那個神經元節點連線(至於多近要取決於具體的實現,但通常不會超過幾個)。

這些卷積層會隨著深度的增加而逐漸變小:大多數情況下,會按照輸入層數量的某個因子縮小(比如:20個神經元的卷積層,後面是10個神經元的卷積層,再後面就是5個神經元的卷積層)。2的n次方(32, 16, 8, 4, 2, 1)也是一個非常常用的因子,因為它們在定義上可以簡潔且完整地除盡。除了卷積層,池化層(pooling layers)也非常重要。

池化是一種過濾掉細節的方式:一種常用的池化方式是最大池化,比如用2X2的畫素,然後取四個畫素中值最大的那個傳遞。為了讓卷積神經網路處理語音資料,需要把語音資料切分,一段一段輸入。在實際應用中,通常會在卷積神經網路後面加一個前饋神經網路,以進一步處理資料,從而對資料進行更高水平的非線性抽象。

LeCun, Yann, et al. “Gradient-based learning applied to document recognition.” Proceedings of the IEEE 86.11 (1998): 2278-2324.

解卷積網路(DN)


解卷積網路(DN:Deconvolutional networks),又稱為逆圖形網路(IGNs:inverse graphics networks),是逆向的卷積神經網路。

想象一下,給一個神經網路輸入一個“貓”的詞,就可以生成一個像貓一樣的影象,通過比對它和真實的貓的圖片來進行訓練。跟常規CNN一樣,DN也可以結合FFNN使用,但沒必要為這個新的縮寫重新做圖解釋。它們可被稱為深度解卷積網路,但把FFNN放到DNN前面和後面是不同的,那是兩種架構(也就需要兩個名字),對於是否需要兩個不同的名字你們可能會有爭論。需要注意的是,絕大多數應用都不會把文字資料直接輸入到神經網路,而是用二元輸入向量。比如<0,1>代表貓,<1,0>代表狗,<1,1>代表貓和狗。

CNN的池化層往往也是被對應的逆向操作替換了,主要是插值和外推(基於一個基本的假設:如果一個池化層使用了最大池化,你可以在逆操作的時候生成一些相對於最大值更小的資料)。

Zeiler, Matthew D., et al. “Deconvolutional networks.” Computer Vision and Pattern Recognition (CVPR), 2010 IEEE Conference on. IEEE, 2010.

深度卷積逆向圖網路(DCIGN)


深度卷積逆向圖網路(DCIGN:Deep convolutional inverse graphics networks),這個名字具有誤導性,因為它們實際上是VAE,但分別用CNN、DNN來作編碼和解碼的部分。

這些網路嘗試在編碼過程中對“特徵“進行概率建模,這樣一來,你只要用貓和狗的獨照,就能讓它們生成一張貓和狗的合照。同理,你可以輸入一張貓的照片,如果貓旁邊有一隻惱人的鄰家狗,你可以讓它們把狗去掉。很多演示表明,這種型別的網路能學會基於影象的複雜變換,比如燈光強弱的變化、3D物體的旋轉。一般也是用反向傳播演算法來訓練此類網路。

Kulkarni, Tejas D., et al. “Deep convolutional inverse graphics network.” Advances in Neural Information Processing Systems. 2015.

生成式對抗網路(GAN)


生成式對抗網路(GAN:Generative adversarial networks)是一類不同的網路,它們有一對“雙胞胎”:兩個網路協同工作。

GAN可由任意兩種網路組成(但通常是FF和CNN),其中一個用於生成內容,另一個則用於鑑別生成的內容。

鑑別網路(discriminating network)同時接收訓練資料和生成網路(generative network)生成的資料。鑑別網路的準確率,被用作生成網路誤差的一部分。這就形成了一種競爭:鑑別網路越來越擅長於區分真實的資料和生成資料,而生成網路也越來越善於生成難以預測的資料。這種方式非常有效,部分是因為:即便相當複雜的類噪音模式最終都是可預測的,但跟輸入資料有著極為相似特徵的生成資料,則很難區分。

訓練GAN極具挑戰性,因為你不僅要訓練兩個神經網路(其中的任何一個都會出現它自己的問題),同時還要平衡兩者的執行機制。如果預測或生成相比對方表現得過好,這個GAN就不會收斂,因為它會內部發散。

Goodfellow, Ian, et al. “Generative adversarial nets.” Advances in Neural Information Processing Systems. 2014.

迴圈神經網路(RNN)


迴圈神經網路(RNN:Recurrent neural networks)是具有時間聯結的前饋神經網路:它們有了狀態,通道與通道之間有了時間上的聯絡。神經元的輸入資訊,不僅包括前一神經細胞層的輸出,還包括它自身在先前通道的狀態。

這就意味著:你的輸入順序將會影響神經網路的訓練結果:相比先輸入“曲奇餅”再輸入“牛奶”,先輸入“牛奶”再輸入“曲奇餅”後,或許會產生不同的結果。RNN存在一大問題:梯度消失(或梯度爆炸,這取決於所用的啟用函式),資訊會隨時間迅速消失,正如FFNN會隨著深度的增加而失去資訊一樣。

直覺上,這不算什麼大問題,因為這些都只是權重,而非神經元的狀態,但隨時間變化的權重正是來自過去資訊的儲存;如果權重是0或1000000,那之前的狀態就不再有資訊價值。

原則上,RNN可以在很多領域使用,因為大部分資料在形式上不存在時間線的變化,(不像語音或視訊),它們能以某種序列的形式呈現出來。一張圖片或一段文字可以一個畫素或者一個文字地進行輸入,因此,與時間相關的權重描述了該序列前一步發生了什麼,而不是多少秒之前發生了什麼。一般來說,迴圈神經網路是推測或補全資訊很好的選擇,比如自動補全。

Elman, Jeffrey L. “Finding structure in time.” Cognitive science 14.2 (1990): 179-211.

長短期記憶(LSTM)


長短期記憶(LSTM:Long / short term memory)網路試圖通過引入門結構與明確定義的記憶單元來解決梯度消失/爆炸的問題。

這更多的是受電路圖設計的啟發,而非生物學上某種和記憶相關機制。每個神經元都有一個記憶單元和三個門:輸入門、輸出門、遺忘門。這三個門的功能就是通過禁止或允許資訊流動來保護資訊。

輸入門決定了有多少前一神經細胞層的資訊可留在當前記憶單元,輸出層在另一端決定下一神經細胞層能從當前神經元獲取多少資訊。遺忘門乍看很奇怪,但有時候遺忘部分資訊是很有用的:比如說它在學習一本書,並開始學一個新的章節,那遺忘前面章節的部分角色就很有必要了。

實踐證明,LSTM可用來學習複雜的序列,比如像莎士比亞一樣寫作,或創作全新的音樂。值得注意的是,每一個門都對前一神經元的記憶單元賦有一個權重,因此會需要更多的計算資源。

Hochreiter, Sepp, and Jürgen Schmidhuber. “Long short-term memory.” Neural computation 9.8 (1997): 1735-1780.

門迴圈單元(GRU)


門迴圈單元(GRU : Gated recurrent units)是LSTM的一種輕量級變體。它們少了一個門,同時連線方式也稍有不同:它們採用了一個更新門(update gate),而非LSTM所用的輸入門、輸出門、遺忘門。

更新門決定了保留多少上一個狀態的資訊,還決定了收取多少來自前一神經細胞層的資訊。重置門(reset gate)跟LSTM遺忘門的功能很相似,但它存在的位置卻稍有不同。它們總是輸出完整的狀態,沒有輸出門。多數情況下,它們跟LSTM類似,但最大的不同是:GRU速度更快、執行更容易(但函式表達力稍弱)。

在實踐中,這裡的優勢和劣勢會相互抵消:當你你需要更大的網路來獲取函式表達力時,這樣反過來,效能優勢就被抵消了。在不需要額外的函式表達力時,GRU的綜合性能要好於LSTM。

Chung, Junyoung, et al. “Empirical evaluation of gated recurrent neural networks on sequence modeling.” arXiv preprint arXiv:1412.3555 (2014).

神經圖靈機(NTM)


神經圖靈機(NTM: Neural Turing machines)可以理解為對LSTM的抽象,它試圖把神經網路去黑箱化(以窺探其內部發生的細節)。

NTM不是把記憶單元設計在神經元內,而是分離出來。NTM試圖結合常規數字資訊儲存的高效性、永久性與神經網路的效率及函式表達能力。它的想法是設計一個可作內容定址的記憶庫,並讓神經網路對其進行讀寫操作。NTM名字中的“圖靈(Turing)”是表明,它是圖靈完備(Turing complete)的,即具備基於它所讀取的內容來讀取、寫入、修改狀態的能力,也就是能表達一個通用圖靈機所能表達的一切。

Graves, Alex, Greg Wayne, and Ivo Danihelka. “Neural turing machines.” arXiv preprint arXiv:1410.5401 (2014).

BiRNN、BiLSTM、BiGRU

雙向迴圈神經網路(BiRNN:Bidirectional recurrent neural networks)、雙向長短期記憶網路(BiLSTM:bidirectional long / short term memory networks )和雙向門控迴圈單元(BiGRU:bidirectional gated recurrent units)在圖表中並未呈現出來,因為它們看起來與其對應的單向神經網路結構一樣。

所不同的是,這些網路不僅與過去的狀態有連線,而且與未來的狀態也有連線。比如,通過一個一個地輸入字母,訓練單向的LSTM預測“魚(fish)”(在時間軸上的迴圈連線記住了過去的狀態值)。在BiLSTM的反饋通路輸入序列中的下一個字母,這使得它可以瞭解未來的資訊是什麼。這種形式的訓練使得該網路可以填充資訊之間的空白,而不是預測資訊。因此,它在處理影象時不是擴充套件影象的邊界,而是填補一張圖片中的缺失。

Schuster, Mike, and Kuldip K. Paliwal. “Bidirectional recurrent neural networks.” IEEE Transactions on Signal Processing 45.11 (1997): 2673-2681.

深度殘差網路(DRN)


深度殘差網路(DRN: Deep residual networks)是非常深的FFNN網路,它有一種特殊的連線,可以把資訊從某一神經細胞層傳至後面幾層(通常是2到5層)。

該網路的目的不是要找輸入資料與輸出資料之間的對映,而是致力於構建輸入資料與輸出資料+輸入資料之間的對映函式。本質上,它在結果中增加一個恆等函式,並跟前面的輸入一起作為後一層的新輸入。結果表明,當層數超過150後,這一網路將非常擅於學習模式,這比常規的2到5層要多得多。然而,有證據表明這些網路本質上只是沒有時間結構的RNN,它們總是與沒有門結構的LSTM相提並論。

He, Kaiming, et al. “Deep residual learning for image recognition.” arXiv preprint arXiv:1512.03385 (2015).

回聲狀態網路(ESN)


回聲狀態網路(ESN:Echo state networks)是另一種不同型別的(迴圈)網路。

它的不同之處在於:神經元之間的連線是隨機的(沒有整齊劃一的神經細胞層),其訓練過程也有所不同。不同於輸入資料後反向傳播誤差,ESN先輸入資料、前饋、而後更新神經元狀態,最後來觀察結果。它的輸入層和輸出層在這裡扮演的角色不太常規,輸入層用來主導網路,輸出層作為啟用模式的觀測器隨時間展開。在訓練過程中,只有觀測和隱藏單元之間連線會被改變。

Jaeger, Herbert, and Harald Haas. “Harnessing nonlinearity: Predicting chaotic systems and saving energy in wireless communication.” science 304.5667 (2004): 78-80.

極限學習機(ELM)


極限學習機(ELM:Extreme learning machines)本質上是擁有隨機連線的FFNN。

它們與LSM、ESN極為相似,除了迴圈特徵和脈衝性質,它們還不使用反向傳播。相反,它們先給權重設定隨機值,然後根據最小二乘法擬合來一次性訓練權重(在所有函式中誤差最小)。這使ELM的函式擬合能力較弱,但其執行速度比反向傳播快多了。

Cambria, Erik, et al. “Extreme learning machines [trends & controversies].” IEEE Intelligent Systems 28.6 (2013): 30-59.

液態機(LSM)


液態機(LSM:Liquid state machines)換湯不換藥,跟ESN同樣相近。

區別在於,LSM是一種脈衝神經網路(spiking neural networks),用閾值啟用函式(threshold functions)取代了sigmoid啟用函式,每個神經元同時也是具有累加性質的記憶單元。因此,當神經元狀態更新時,其值不是相鄰神經元的累加值,而是它自身狀態值的累加。一旦累加到閾值,它就釋放能量至其它神經元。這就形成了一種類似於脈衝的模式:神經元不會進行任何操作,直至到達閾值的那一刻。

Maass, Wolfgang, Thomas Natschläger, and Henry Markram. “Real-time computing without stable states: A new framework for neural computation based on perturbations.” Neural computation 14.11 (2002): 2531-2560.

支援向量機(SVM)


支援向量機(SVM:Support vector machines)能為分類問題找出最優方案。

傳統意義上,它們只能處理線性可分的資料;比如找出哪張圖片是加菲貓、哪張是史努比,此外就無法做其它輸出了。

訓練過程中,SVM可以理解為:先在平面圖表上標繪所有資料(加菲貓、史努比),然後找出到那條能夠最好區分這兩類資料點的線。這條線能把資料分為兩部分,線的這邊全是史努比,線的那邊全是加菲貓。而後移動並優化該直線,令兩邊資料點到直線的距離最大化。分類新的資料,則將該資料點畫在這個圖表上,然後察看這個資料點在分隔線的哪一邊(史努比一側,還是加菲貓一側)。

通過使用核方法,SVM便可用來分類n維空間的資料。這就引出了在3維空間中標繪資料點,從而讓SVM可以區分史努比、加菲貓與西蒙,甚至在更高的維度對更多卡通人物進行分類。SVM並不總被視為神經網路。

Cortes, Corinna, and Vladimir Vapnik. “Support-vector networks.” Machine learning 20.3 (1995): 273-297.

Kohonen 網路


最後,我們來介紹一下Kohonen網路(KN,也稱之為自組織(特徵)對映(SOM/SOFM:self organising (feature) map))。

KN利用競爭學習來對資料進行分類,不需要監督。先給神經網路一個輸入,而後它會評估哪個神經元最匹配該輸入。然後這個神經元會繼續調整以更好地匹配輸入資料,同時帶動相鄰的神經元。相鄰神經元移動的距離,取決於它們與最佳匹配單元之間的距離。KN有時也不被認為是神經網路。

作者:AI科技大本營
連結:http://www.jianshu.com/p/87fd419c94cc
來源:簡書
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。