機器學習必知的8大神經網路架構

七月線上實驗室發表於2018-04-26

原文:The 8 Neural Network Architectures Machine Learning Researchers Need to Learn

作者:James Le


在這篇文章中,分享一下機器學習研究人員應該熟悉的課程中的8個神經網路架構。


一、感知器

第一代神經網路出現時,感知機(perceptron)僅僅是單個神經元的計算模型,其在二十世紀六十年代初被美國電腦科學家 Frank Rosenblatt 推廣。其學習演算法非常強大,並且宣稱可以學習很多事情。1969 年,Minsky 與 Papert 出版了一本名為《感知機》的書,這本書分析了這些演算法可以做什麼,並闡釋了其侷限性。許多人就將這個侷限性放大到所有的 NN 模型。然而,感知機學習過程仍廣泛用於具有包含數百萬特徵的大特徵向量的任務。

640?wx_fmt=png&wxfrom=5&wx_lazy=1

在統計模式識別的標準範例中,我們首先將原始輸入向量轉換為特徵啟用向量。然後,基於大家的共識手動程式設計來定義特徵。接下來,我們學習如何對每個特徵啟用進行加權以獲得單一的標量。如果這個標量超過了某個閾值,我們認為輸入向量是目標集中的一個正樣本。


標準的感知機架構遵循前饋模型,輸入被髮送到神經元中,經處理後輸出。在下圖中,表示為網路自下而上讀取:底部輸入,頂部輸出。

640?wx_fmt=png

但是,感知機確實存在侷限性:如果您使用手動設定特徵,並且使用了足夠多的特徵,那麼你幾乎可以做任何事情。對於二進位制輸入向量,我們可以為指數級多的二進位制向量分別設定一個特徵單元,因此我們可以對二進位制輸入向量進行任何可能的區分。但是,一旦確定了手動程式設計的特徵,感知器可以學習的東西就非常有限。


這個結果對於感知機是毀滅性的,因為模式識別是去識別在變換情況下的模式。Minsky 和 Papert 的「組不變性定理」認為感知機的學習部分無法去學習當轉換來自於一個組的情況。為了識別上述那種情況,需要更多的特徵單元去識別那些模式中包含的子資訊。所以模式識別的技巧部分必須由手動編碼的特徵檢測器來解決,而不是學習過程。


沒有隱藏單元的網路在其可以學習建模的輸入輸出對映中是非常有限的。簡單地增加一些線性單元無濟於事,因為結果還是線性的。固定的輸出非線性也不夠,因此,我們需要多層自適應非線性隱藏單元。問題是怎樣對這樣的網路進行訓練。我們需要一種適應所有權重的有效方式,而不僅僅是最後一層,所以這很難。學習進入隱藏層的權重等同於學習特徵,這是非常困難的,因為沒有人直接告訴我們隱藏層應該怎麼做。


二、卷積神經網路

機器學習研究已經廣泛地集中在物體檢測問題上。有各種各樣的事情使識別物體變得困難:

  • 影象分割:真實場景中總是摻雜著其它物體。很難判斷哪些部分屬於同一個物件。物件的某些部分可以隱藏在其他物件的後面。

  • 物體光照:畫素的強度被光照強烈影響。

  • 影象變形:物體可以以各種非仿射方式變形。例如,手寫也可以有一個大的圓圈或只是一個尖頭。

  • 情景支援:物體所屬類別通常由它們的使用方式來定義。例如,椅子是為了讓人們坐在上面而設計的,因此它們具有各種各樣的物理形狀。

  • 視角:標準學習方法無法應對的視點變化導致的影象變化,得到的資訊隨輸入維度(即畫素)的變化而變化。

  • 維度跳變:設想一個醫療資料庫,通常用來學習體重的神經元,現在忽然用來學習病人的年齡!要應用機器學習,我們首先要消除這個維度跳躍。

640?wx_fmt=png

複製特徵方法是目前神經網路解決目標檢測問題的主要方法。在不同的位置使用相同的特徵提取器。它也可以在尺寸和方向上覆制,這很需技巧並且很貴。複製大大減少了要學習的自由引數的數量。它使用幾種不同的特徵型別,每種都有自己的複製檢測器影象。它也允許以各種方式表示每個影象塊。


那麼複製特徵檢測器是如何實現的呢?

  • 啟用值等變化量:複製特徵的方法並不能使神經元啟用值不變,但是能夠使啟用值改變數相同。

  • 知識不變數:如果在訓練中一個特徵在某些位置有效,則在測試過程中,特徵檢測器在各個位置有效。


1998 年,Yann LeCun 和他的合作者開發了 LeNet 的手寫數字識別器。它在前饋網中使用反向傳播,這個前饋網路不僅僅是一個識別器,它有許多隱藏層,每個層有許多複製單元的對映,彙集附近複製單元的輸出,有一個即使重疊也能夠同時處理幾個字元的寬網,以及訓練一套完整的系統的巧妙方式。後來正式命名為卷積神經網路。一個有趣的事實是:這個網路被用來讀取北美地區約 10%的支票。

640?wx_fmt=png

卷積神經網路可用於從手寫數字到 3D 物體的與物體識別有關的所有工作。但是,從網下載的彩色照片中識別真實物體要比識別手寫數字複雜得多。它百倍於手寫數字的類別(1000:10),數百倍於手寫數字的畫素(256×256 色:28×28 灰度),是三維場景的二維影象,需要分割混亂場景,而且每個圖片有多個物件。這樣的情況下,相同型別的卷積神經網路會起作用嗎?


之後在 ImageNet 2012 年的 ILSVRC 競賽(這個比賽被譽為計算機視覺的年度奧林匹克競賽)中,題目是一個包含大約 120 萬張高解析度訓練影象的資料集。測試影象不顯示初始註釋(沒有分割或標籤),演算法要產生指定影象中存在什麼物件的標籤。來自 Oxford、INRIA、XRCE 等機構的先進計算機視覺小組用已有的最好計算機視覺方法應用於這個資料集。通常計算機視覺系統是複雜的多級系統,往往需要在早期階段通過手動調參來優化。

640?wx_fmt=png

比賽獲勝者 Alex Krizhevsky(NIPS 2012)開發了由 Yann LeCun 開創的深度卷積神經網路型別。其架構包括 7 個隱藏層(不包括池化層)。前五層是卷積層,後面兩層是全連線層。啟用函式在每個隱藏層中被修正為線性單元。這些訓練比 Logistic 單元更快,更有表現力。除此之外,當附近的單元有更強的活動時,它還使用競爭規範化來壓制隱藏的活動,這有助於強度的變化。


有一些技術手段可以顯著提高神經網路的泛化能力:

  1. 從 256×256 影象中隨機挑選 224×224 塊影象以獲取更多資料,並使用影象的左右反射。在測試時,結合 10 個不同的影象:四個角落加上中間,再加上它們水平翻轉的五個。

  2. 使用「dropout」來調整全域性連線層(包含大部分引數)的權重。Dropout 指的是隨機移除每個訓練樣本一層中的一半隱藏單元,使其不再過多地依賴其它隱藏單元。

640?wx_fmt=png

就硬體要求而言,Alex 在 2 個英偉達的 GTX 580 GPU(超過 1000 個快速小核心)上使用了非常高效的卷積網路實現。GPU 非常適合矩陣乘法,並且具有非常高的記憶體頻寬。這讓它在一週內訓練了網路,並在測試時快速結合了 10 個影象塊的結果。如果我們可以足夠快地交換狀態,我們可以在很多核心上傳播一個網路。隨著核心越來越便宜,資料集越來越大,大型神經網路將比老式計算機視覺系統發展得更快。


三、迴圈神經網路

640?wx_fmt=png

為了理解迴圈神經網路,我們需要對序列建模進行簡要概述。當機器學習應用於序列時,我們經常希望將輸入序列轉換為不同域中的輸出序列;例如,將一系列的聲壓轉換成單詞序列。當沒有單獨的目標序列時,我們可以通過嘗試預測輸入序列中的下一項作為網路的學習目標。目標輸出序列是輸入序列的下一步。比起試圖根據一個圖片的其他畫素來預測一個畫素或根據影象的其餘部分來預測一個部分,這樣似乎更自然。預測序列中的下一項模糊了有監督學習和無監督學習之間的區別。它使用專為監督學習而設計的方法,但它不需要單獨的目標資料。


無記憶模型是這個任務的標準方法。具體而言,自迴歸模型可以通過使用「延遲抽頭」從固定數量的前幾項預測下一項,而且前饋神經網路是使用一層或多層非線性隱藏單元的廣義自迴歸模型。但是,如果我們給生成模型一些隱藏的狀態,使這個隱藏的狀態內部是動態的,我們就會得到一個更有趣的模型:它可以長時間地將資訊儲存在隱藏狀態。如果隱狀態的動態從隱狀態中生成輸出是有噪聲的,我們將永遠無法知道它確切的隱藏狀態。我們所能做的是推斷隱狀態向量空間的概率分佈。這種推斷只適用於 2 種隱藏狀態模型。


迴圈神經網路是非常強大的,因為它們結合了兩個屬性:1)分散式隱狀態,允許其有效地儲存大量有關過去的資訊; 2)非線性動態,使他們能夠以複雜的方式更新隱狀態。有了足夠的神經元和時間,RNN 可以計算任何計算機可以計算出來的東西。那麼 RNN 可以表現什麼樣的行為呢?它們可以振動,可以穩定在點吸引子,從而表現地很混亂。還可以通過使用隱狀態的不同子集執行許多不同的小程式,每個小程式捕獲一塊知識,而且所有的這些都能並行執行並以更復雜的方式互動。

640?wx_fmt=png

然而,RNN 的計算能力使它們很難訓練。由於梯度爆發和梯度消失,訓練一個 RNN 是相當困難的。當我們進行多層反向傳播時,梯度的大小會發生什麼變化?如果權重很小,則梯度將指數縮小。如果權重很大,梯度將成指數增長。典型的前饋神經網路可以應付這些指數效應,因為它們只有很少的隱藏層。然而,在訓練長序列的 RNN 中,梯度很容易爆炸或消失。即使初始權重選的很好,也很難檢測到依賴於多個時間步長前的輸入的當前目標輸出,所以 RNN 難以處理序列中的長程依賴。


基本上有 4 種有效的方法來學習 RNN:

  • 長短期記憶:將 RNN 用於長期記憶值的小模組。

  • Hessian Free 優化:通過使用酷炫的優化器來處理梯度消失問題,該優化器可以檢測具有更小曲率的微小梯度。

  • 回聲狀態網路:通過謹慎地初始化層之間的連線(輸入 ->隱層、隱層 ->隱層、輸出 -> 隱層),確保隱藏狀態有巨大的弱耦合震盪儲存,可以通過輸入選擇性地驅動這些振盪器。

  • 利用動量進行良好的初始化:像回聲狀態網路一樣進行初始化,然後使用動量學習所有連線。


四、長短期記憶網路

640?wx_fmt=png

Hochreiter 和 Schmidhuber(1997)通過構建長短期記憶網路,解決了獲取 RNN 長時間記憶(如數以百計的時間步長)的問題。他們使用具有乘法相互作用的邏輯和線性單元來設計儲存器單元。每當「寫入」門開啟時,資訊就會進入單元。當「保持」門開啟,資訊將在單元中保持。資訊可以通過開啟「讀取」門而從單元中讀取。


手寫草書識別是一個特別適合 RNN 的任務。輸入是筆尖的(x,y,p)座標序列,其中 p 表示筆是向上還是向下。輸出是一個字元序列。Graves 和 Schmidhuber(2009)表明,帶有 LSTM 的 RNN 是目前草書識別的最佳系統。簡而言之,其使用一系列小影象代替筆座標作為輸入。

640?wx_fmt=png


五、Hopfield 網路

迴圈網路的非線性單元通常很難分析。它們可以表現為不同的方式:穩定到穩定的狀態,振盪,或遵循不可預測的混沌軌跡。一個 Hopfield 網路由二元門限單元組成,它們之間有連續的連線。1982 年,John Hopfield 認識到,如果連線是對稱的,就有一個全域性能量函式。整個網路的每個二進位制「結構」都有能量,而二進位制閾值的決策規則使網路可以得到能量函式的最小值。利用這類計算的一種簡潔方法是使用記憶作為神經網路的能量最小值。使用能量最小值來表示記憶從而記憶體可定址。可以只知道一個專案的部分內容來訪問這個專案。這對硬體損壞是極大的。

640?wx_fmt=png

每當記憶一次配置,我們希望創造一個新的能量最小值。但是,如果在中間位置附近有兩個最小值怎麼辦呢?這限制了 Hopfield 網路的容量。那麼如何增加 Hopfield 網路的容量呢?物理學家認為他們已知的數學知識可以解釋大腦的工作機制。物理學期刊上發表了許多關於 Hopfield 網路及其儲存容量的論文。最終,Elizabeth Gardner 認為,有一個更好的儲存規則——使出權重的「渾身解數」。這不是一次性儲存向量,而是多次迴圈訓練集,並利用感知機收斂過程來訓練每個單元,使其具有正確的狀態,給定該向量中所有其他單元的狀態。統計學家稱這種技術為「偽可能性」。

640?wx_fmt=png

Hopfield 網路還有另一個計算功能。我們不再用網路來儲存記憶,而是用它來構建感官輸入的資訊。用可見單元表示輸入,用隱藏節點的狀態來表達輸入節點的資訊,用能量表示資訊的不好(低的能量狀態來表達一個好的 interpretation)。


六、玻爾茲曼機網路

玻爾茲曼機是一種隨機遞迴神經網路。它可以被看作是 Hopfield 網路隨機生成的對應物。它是第一個能夠學習內部表示的神經網路之一,能夠表示並解決難的組合問題。

640?wx_fmt=png

玻爾茲曼機學習演算法的學習目標是最大化玻爾茲曼機分配給訓練集中二進位制向量概率的乘積。這等同於最大化玻爾茲曼分配給訓練向量的對數概率之和。也就是說,如果我們做了如下的事情,最大化我們得到 N 個訓練案例的概率:1)讓網路在沒有外部輸入的情況下在不同時間穩定分佈; 2)每次取樣一次可見向量。


2012 年,Salakhutdinov 和 Hinton 提出了玻爾茲曼機的高效小批量學習程式。

  • 對於正相位,首先將隱藏概率初始化為 0.5,將可見單元上的資料向量進行鉗位,然後並行更新所有隱藏單元,使用平均場方法並行更新隱藏單元直到收斂。在網路收斂之後,記錄每個連線的單元對 Pi Pj,並在最小批量中對所有資料取平均。

  • 對於負相位:首先保留一組「幻想粒子」(就是一對 (Si,Sj) 形成的系統?)。每個粒子都有全域性配置中的一個值。然後序列更新幾次每個幻想粒子中的所有單元。對於每一個連線的單元,對所有的幻想粒子的 SiSj 取平均。


在普通玻爾茲曼機中,單元的隨機更新需要連續。有一個特殊的體系結構允許更有效的交替並行更新(層內沒有連線,沒有跳層連線)。這個小批量程式使玻爾茲曼機的更新更加並行。這就是所說的深度玻爾茲曼機(DBM),一個缺失很多連線的普通玻爾茲曼機。

640?wx_fmt=png

2014 年,Salakhutdinov 和 Hinton 為他們的模型提出了一個升級版,稱之為受限玻爾茲曼機(RBM)。他們通過限制連通性使推理和學習變得更容易(隱藏單元只有一層,隱藏單元之間沒有連線)。在 RBM 中,當可見單元被鉗位時只需要一步就能達到熱平衡。


另一個有效的小批量 RBM 學習程式是這樣的:

  • 對於正相位,首先將可見單元的資料向量鉗位。然後計算所有可見和隱藏單元對的<ViHj>的確切值。對於每個連線的單元對,對小批量中的所有資料<ViHj>求平均。

  • 對於負相位,也保留一組「幻想粒子」(就是一對 (Vi,Hj) 形成的系統?)。然後交替並行更新幾次每個幻想粒子中的所有單元。對於每一個連線的單位對,所有幻想粒子 ViHj 求平均。


七、深度信念網路

640?wx_fmt=png

反向傳播被認為是人工神經網路中的標準方法,用於在處理一批資料之後計算每個神經元的誤差貢獻。但是,使用反向傳播存在一些重要的問題。首先,它需要有標籤的訓練資料;而幾乎所有的資料都沒有標籤。其次,學習時間不夠理想,這意味著隱藏層數多的網路很慢。第三,它可能會陷入區域性最小的局面,所以對於深度網路來說,它們還差得很遠。


為了克服反向傳播的限制,研究人員已經考慮使用無監督的學習方法。這有助於保持使用梯度方法來調整權重的效率和簡單性,還可以用它來對感測輸入的結構進行建模。特別是,他們調整權重使生成模型產生感官輸入的概率最大化。問題是我們應該學習什麼樣的生成模型?可以是像玻爾茲曼機這樣的能量模型嗎?還是由理想化的神經元組成的因果模型?或是兩者的混合?

640?wx_fmt=png

信念網是由隨機變數組成的有向無環圖。使用信念網我們可以觀察到一些變數。我們想要解決 2 個問題:1)推理問題:推斷未觀測變數的狀態; 2)學習問題:調整變數之間的互動作用,使網路更有可能產生訓練資料。


早期的圖形模型的圖形結構和條件概率是專家定義的。那時,這些圖形連線稀疏,所以研究人員一開始把重點放在做正確的推論,而不是學習上。對於神經網路來說,學習是關鍵,手寫知識並不酷,因為知識來自於學習訓練資料。神經網路的目的不在於可解釋性或通過稀疏連線性使其便於推理。不過,還有神經網路版本的信念網路。


由隨機二元神經元組成的生成神經網路有兩種型別:1)基於能量利用對稱連線來連線二元隨機神經元得到玻爾茲曼機; 2)我們通過因果關係在一個有向無環圖中連線二元隨機神經元獲得 SBN。這兩種型別的描述超出了本文的範圍。


八、深度自動編碼器

640?wx_fmt=png

最後,我們來討論深度自動編碼器。深度自動編碼器是非線性降維的非常好的方法,原因如下:它們提供了兩種靈活的對映方式。訓練事例的學習時間是線性的(或更好的),最終的編碼模型相當緊湊和快速。然而,使用反向傳播來優化深度自動編碼器很難。在初始權重較小的情況下,反向傳播梯度消失。現在我們有了更好的方法來優化它們,要麼使用無監督的逐層預訓練,要麼像回聲狀態網路那樣謹慎地初始化權重。


對於預訓練任務,實際上有三種不同型別的淺自動編碼器:

  1. 受限玻爾茲曼機作為自動編碼器:當我們用一步對比散度訓練受限玻爾茲曼機時,它試圖使重建看起來像資料。它就像一個自動編碼器,但是通過使用隱藏層中的二進位制活動來強化正則化。經過最大可能性訓練後,受限玻爾茲曼機不像自動編碼器。我們可以用淺自動編碼器堆疊來代替用於預訓練的 RBM 堆疊;然而,如果淺自動編碼器通過懲罰平方權重而被正規化,那麼預訓練就不是有效的(對於隨後的辨別)。

  2. 去噪自動編碼器:通過將其許多分量設定為 0(例如輸入的資料丟失的情況),將噪聲新增到輸入向量。他們仍然需要重建這些分量,因此他們必須提取捕獲輸入之間相關性的特徵。如果我們使用表示自動編碼器的堆疊,那麼預訓練是非常有效的。與 RBM 預訓練一樣好或者更好。由於我們可以很容易地計算目標函式的值,所以評估預訓練也更簡單。它缺乏我們用 RBM 獲得的良好的變分邊界,但這只是理論上的問題。

  3. 壓縮自動編碼器:使自動編碼器正規化的另一種方法是儘可能使隱藏單元的活動對輸入不敏感,但是他們不能忽視這些輸入,因為他們必須重建這些輸入。我們通過懲罰每個隱藏活動相對於輸入的平方梯度來達到這個目的。壓縮自動編碼器預訓練時工作得很好。程式碼傾向於使一小部分隱藏單元對輸入變化敏感。

640?wx_fmt=png

簡而言之,現在有很多不同的方法來進行功能的逐層預訓練。對於沒有大量標籤化的事例的資料集來說,預訓練有助於後續的判別式學習。對於非常大的有標籤的資料集,使用無監督預訓練初始化監督學習中使用的權重進行並不必要,即使對於深度網路也是如此。預訓練是初始化深度網路權重的第一個不錯的方法,但現在還有其他方法。但是,如果我們讓網路很大,我們將再次離不開預訓練!


總結

神經網路是有史以來最漂亮的程式設計範例之一。 在傳統的程式設計方法中,我們告訴計算機要做什麼,將大問題分解成計算機可以輕鬆執行的許多小的,精確定義的任務。 相比之下,在神經網路中,我們不告訴計算機如何解決我們的問題。 相反,它從觀測資料中學習,找出解決手頭問題的辦法。


今天,深度神經網路和深度學習在計算機視覺,語音識別和自然語言處理等許多重要問題上取得了出色的表現。 它們正在被谷歌,微軟和Facebook等公司大規模部署。


我希望這篇文章能幫助你學習神經網路的核心概念,包括最先進的深度學習技術。 您可以從我的GitHub中獲取Hinton's Coursera課程所做的所有ppt,研究論文和程式設計任務。 祝你好運學習!


GitHub程式碼:https://github.com/khanhnamle1994/neural-nets

原文連結:https://medium.com/@james_aka_yale/the-8-neural-network-architectures-machine-learning-researchers-need-to-learn-2f5c4e61aeeb


推薦閱讀

貝葉斯線性迴歸簡介(附完整程式碼)

【資源】史上最全資料集彙總

一文讀懂LSTM和迴圈神經網路

27個機器學習的小抄,助你效率翻倍

【教程】如何從零開始構建深度學習專案?

深度學習領域引用量前10篇論文(附下載地址)

用Python實現線性迴歸,8種方法哪個最高效?

640?wx_fmt=png

相關文章