神經網路知識基礎:七種網路單元,四種層連接方式

2016 年 9 月,Fjodor Van Veen 寫了一篇名為《The Neural Network Zoo》的文章(詳見圖文並茂的神經網路架構大盤點:從基本原理到衍生關係 ),全面盤點了神經網路的大量框架,並繪製了直觀示意圖進行說明。近日,他又發表了一篇題為《The Neural Network Zoo Prequel:Cells and Layers》文章,對於上篇文章中涉及但沒有深入展開的神經網路的單元與層的部分再次做了一個圖文並茂的介紹。

Cell(單元)

《The Neural Network Zoo》一文展示了不同類型的單元和不同的層連接風格,但並沒有深入探討每個單元類型是如何工作的。大量的單元類型擁有彼此不同的顏色,從而更清晰地區分網路,但是自此之後我發現這些單元的工作方式大同小異,下面我對每個單元逐一描述。

基本的神經網路單元,屬於常規性前饋架構之中的類型,且相當簡單。單元通過權重與其他神經元相連接,即,它可以連接到前一層的所有神經元。每個連接有其自身的權重,在開始時它常常是一個隨機數。一個權重可以是負數、正數、小值、大值或者為 0。它連接的每一個單元值被其各自的連接權重相乘,得到的結果值全部相加。在其頂部,也會相加一個偏置項。偏置項可以防止單元陷入零點輸出(outputting zero),加速其操作,並減少解決問題所需的神經元數量。偏置項也是一個數,有時是常數(通常是 -1 或 1),有時是變數。這一總和接著傳遞至激活函數,得到的結果值即是單元值。

卷積單元和前饋單元很像,除了前者通常連接到前一層的僅僅少數幾個神經元之外。它們常用於保護空間信息,因為其連接到的不是少數幾個隨機單元,而是一定距離內的所有單元。這使得它們很適合處理帶有大量局部信息的數據,比如圖像和音頻(但大部分是圖像)。解卷積單元與卷積單元相反:前者傾向於通過局部連接到下一層來解碼空間信息。兩個單元通常有獨自訓練的克隆(clone),每個克隆各有其權重,並以相同的方式相互連接。這些克隆可被看做具有相同結構的分離網路。兩者本質上和常規單元相同,但是使用不同。

池化和內插單元(interpolating cell)頻繁地與卷積單元相連接。這些單元實際上並不是單元,而是原始操作。池化單元接收輸入的連接並決定哪些連接獲得通過。在圖像中,這可被看做是縮小圖片。你再也看不到所有的像素,並且它不得不學習哪些像素應該保留哪些捨棄。內插單元執行相反的操作,它們接收一些信息並將其映射到更多的信息。額外信息是組成的,就像放大一個低解析度圖片一樣。內插單元不是池化單元唯一的反轉操作,但是二者相對來講比較普遍,因為其實現快速而簡單。它們各自連接,這很像卷積與解卷積。

平均值與標準差單元(幾乎完全是作為概率性單元被成對發現)用於表徵概率分布。平均值就是平均值,標準差是指在兩個方向上能偏離這個平均值有多遠。例如,一個用於圖像的概率 cell 可以包含一個特定像素上有多少紅色的信息。比如說平均值為 0.5,標準差為 0.2。當從這些概率單元中取樣時,需要在高斯隨機數生成器中輸入這些值,值在 0.4 到 0.6 之間的為可能性相當大的結果;那些遠離 0.5 的值可能性則很低(但依然有可能)。平均值與標準差 cell 經常全連接到前一層或下一層,並且沒有偏差。

循環單元不僅連接到層,並且隨著時間推移還會有連接。每個單元內部存儲有先前的值。它們就像基本單元一樣被更新,但是帶有額外的權重:連接到單元的先前值,並且絕大部分時間也連接到同一層的所有單元。當前值和存儲的先前值之間的這些權重更像是一個易失性存儲器(a volatile memory),就像 RAM,接收擁有一個特定「狀態」的屬性,同時如果沒被饋送則消失。由於先前值被傳遞到激活函數,並且通過激活函數每一個更新傳遞這個激活的值連帶其他的權重,所以信息將不斷丟失。事實上,保留率是如此之低,以至於在 4 至 5 次迭代之後,幾乎所有的信息都丟失了。

長短期記憶單元用於解決發生在循環單元中信息快速丟失的問題。LSTM 單元是邏輯迴路,複製了為電腦設計內存單元的方式。相較於存儲兩個狀態的 RNN 單元,LSTM 單元可存儲四個:輸出的當前值和最終值,以及「內存單元」狀態的當前值和最終值。LSTM 單元包含三個「門」:輸入門、輸出門、遺忘門,並且也僅包含常規輸入。這些門中每一個各有其權重,這意味著連接到這種類型的 cell 需要設置四個權重(而不是僅僅一個)。門函數很像流門(flow gate),而不像柵門(fence gates):它們可以讓任何東西通過,只是一點點,沒有,或者之間的任何。這通過與值在 0 到 1(儲存在這一門值中)之間的輸入信息相乘而發揮作用。輸入門接著決定有多少輸入可被加入到單元值中。輸出門決定有多少輸出值可通過剩餘的網路被看到。遺忘門並不與輸出單元的先前值相連接,但卻與先前的內存單元值相連接。它決定了保留多少最終的內存單元狀態。由於它不連接到輸出,所以信息丟失更少,因為循環中沒有放置激活函數。

Gated 循環單元是 LSTM 的一種變體。它們也是用門防止信息丟失,但也就兩種門:更新門(update) 和重置門(reset)。這略微缺乏表現力,但更快。因為它們在處處都有更少的連接。其實,LSTM 和 GRU 之間有兩個不同:GRU 沒有輸出門保護的隱單元態,而是把輸入和遺忘門結合成了一個更新門。其中的思路是,如果你想要大量的新信息,可以遺忘一些舊信息(或者相反)。

Layers(層)

將神經元連接成圖的最基礎方式是將一切相互連接,這可以在 Hopfield 網路和玻爾茲曼機中看到。當然,這意味著連接的數量會有指數級的增長,但表現力是不折不扣的。這被稱為全連接

而後,有人發現將網路分成不同的層是有用的,其中一層的一系列或一組神經元之間不連接,但與其他組的神經元相連接。例如受限玻爾茲曼機中的網路層。如今,使用層的觀念已經推廣到了任何數量的層,在幾乎所有的架構中都能看到。這也被稱為全連接(可能有點混淆),因為實際上完全連接的網路很不常見。

卷積連接層要比全連接層更受限制:每個神經元只與其他組相近的神經元連接。圖像和音頻包含大量的信息,不能一對一地被用於直接饋送到網路(例如,一個神經元對應一個像素)。卷積連接的思路來自於對保留重要的空間信息的觀察。結果證明,這是一個好的想法,被用於許多基於神經網路的圖像和語音應用中。但這種設置沒有全連接層更具表達力。其實它是一種「重要性」過濾的方式,決定這些緊湊的信息數據包中哪些是重要的。卷積連接對降維也很棒。依靠其實現,及時空間上非常遠的神經元也能連接,但量程高於 4 或 5 的神經元就很少被用到了。注意,這裡的「空間」通常指代二維空間,用這種二維空間表達神經元互相連接的三維面。連接範圍在所有的維度都能被應用。

另一個選擇當然就是隨機連接神經元了(randomly connected neurons)。它也有兩個主要變體:允許一部分所有可能的連接,或者連接層之間神經元的一部分。隨機連接有利於線性地減少網路的表現,可被用於陷入表現問題的大型網路的全連接層。在某些情況下,有更多神經元的更稀疏的連接層表現更好,特別是當有大量的信息需要存儲,但不需要交換時(有點類似於卷積連接層的效力,但卻是隨機的)。就像 ELM、ESN 和 LSM 中看到的,非常稀疏的連接系統(1% 或 2%)也會被用到。特別是在脈衝網路(spiking network)中,因為一個神經元有越多的連接,每個權重攜帶的能量越少,意味著越少的傳播和模式重複。

延時連接是指神經元間並非從前面的層獲得信息,而是從過去獲得信息(大部分是之前的迭代)。這使得時間信息(時間、時序)可被存儲。這類連接有時要手動重置,從而清除網路的「state」。與常規連接的主要不同是這些連接持續在變化,甚至在網路沒被訓練時。

下圖展示了以上描述內容的一些小樣本網路及其連接。在不知道什麼連接什麼時,我就會使用它(特別是在做 LSTM 或 GRU cell 時):

作者:FJODOR VAN VEEN 機器之心編譯


推薦閱讀:

智能化「AI+」 對CUI的挑戰
李彥宏:人工智慧剛剛走到石器時代,但未來它會像電流一樣普遍
Google 昨晚發了一堆新硬體,卻講了一個老故事

TAG:神经网络 | 机器学习 | 人工智能 |