您的位置:首頁>科技>正文

乾貨|轉型人工智慧,你需要掌握的八大神經網路

翻譯 | AI科技大本營(rgznai100)

參與 | 林椿眄

編輯 | Donna

為什麼我們需要機器學習?

機器學習可以解決人類不能直接用程式設計來應對的複雜難題,

因此, 我們喂給機器學習演算法大量的資料, 以期得到想要的答案。

我們來看看這兩個例子:

編寫解決問題的程式是非常困難的, 比如在雜亂的場景中, 在新的照明條件下從新的角度來識別三維物體。 我們不知道要如何通過代碼來解決這個問題, 因為這個識別過程在大腦中完成情況對我們來說還是未解之謎。 即使我們知道該怎麼做, 要編寫的程式可能會非常複雜。

再比如, 編寫一個程式來預測信用卡交易欺詐發生的概率也是很難的, 這可能也不存在任何簡單而可靠的規則。 因為欺詐是一個動態的目標, 但程式需要不斷變化。 我們需要做的是結合大量的弱項規則來進行欺詐預測。

再者是機器學習方法。

我們並不需要為每個特定的任務手動編寫程式, 而是收集大量的例子, 為給定的輸入指定正確的輸出。 然後, 機器學習演算法拿這些例子, 並產生一個程式來完成這項工作。

學習演算法產生的程式可能與典型的手寫程式看起來非常不同。 它可能包含數百萬的數位。 如果方法得當, 該計畫將適用於新案例以及我們訓練的案例。 如果資料改變, 程式也可以通過對新資料進行訓練來改變。 你應該注意到, 現在大量的計算比支付某人編寫任務特定的程式來的更廉價。

鑒於此, 機器學習能夠很好地解決一些任務, 包括:

模式識別:真實場景中的物件, 面部識別或面部表情, 口語等;

異常情況識別:信用卡交易的異常順序,

核電廠感測器讀數的異常模式等;

預測:未來的股票價格或貨幣匯率, 一個人會喜歡的電影等。

什麼是神經網路?

神經網路是一般機器學習中的一類模型, 它是一套特定的演算法, 受到生物神經網路的啟發, 徹底改變了機器學習的領域。 目前所謂的深度神經網路的出現就已經證明它能夠工作得非常好。

神經網路本身就是一般泛函數的逼近, 這就是為什麼它們幾乎可以應用於任何機器學習問題, 因為所有的機器學習都是學習從輸入到輸出空間的複雜映射。

以下是說服你學習神經計算的三個理由:

能夠理解大腦是如何工作的:這是非常大且複雜的問題, 並且是個令人絞盡腦汁去思考的問題, 因此我們需要使用電腦來類比。

能夠瞭解受神經元和自我調整連接啟發的平行計算風格:這是一種與順序計算非常不同的風格。

通過使用受大腦啟發的新穎學習演算法來解決實際問題:即使這不是大腦實際工作的方式, 但這樣的學習演算法也是非常有用的。

在這篇文章中, 我想分享八種神經網路架構, 這是每一位從事機器學習的研究人員都應該熟悉的。

一般來說, 這些體系結構可以分為以下三類:

1 - 前饋神經網路

這是在實際應用中最常見的一種神經網路類型。 第一層是輸入, 最後一層是輸出。 如果有多個隱藏層, 我們稱之為“深度”神經網路。 它們計算出一系列改變案例之間相似性的轉換。 各層後緊接著的非線性函數用於各層神經元的啟動。

2 - 迴圈神經網路

在神經網路結構的連接圖中決定了迴圈的方向。 這意味著你有時可以按照箭頭回到你開始的地方。 迴圈神經網路的結構更接近生物的實際情況, 其結構有很複雜的動態過程, 這使得這種神經網路有時候難以訓練。 但是,目前已經有大量有趣的研究已經找到一些有效的方式來訓練迴圈神經網路結構。

迴圈神經網路是一種非常自然地類比連續資料的方式,類似每個時間片都具有一個隱藏層的深層神經網路。除了能在每個時間片上獲得輸入並使用相同的權重進行訓練外,迴圈神經網路還能長時間地記住隱藏狀態的資訊。但目前還很難訓練迴圈神經網路來使用這些隱藏的狀態資訊。

3 - 對稱連接網路

對稱連接網路是一種類似迴圈神經網路結構的神經網路,但是其單元之間的連接是對稱的(它們在兩個方向上具有相同的權重)。對稱連接網路的結構比迴圈神經網路更容易分析,因為其遵循能量函數。

沒有隱藏單元的對稱連接網路被稱為“Hopfield網路”。有隱藏單元的對稱連接網路被稱為“Boltzmann機”。

▌1. 感知器

感知器作為第一代神經網路,還只是單個神經元的計算模型。它們在二十世紀六十年代初被 Frank Rosenblatt 推廣。1969年,Minsky和Papert出版了一本名為“感知器”的書,分析了這種神經網路模型可以做什麼,並提到了它的局限性。許多人認為這些局限性限制了所有的神經網路模型。然而,目前感知器的學習過程仍然被廣泛應用於具有包含數百萬特徵的巨大特徵向量任務。

在統計與模式識別的標準樣例中,我們首先將原始輸入向量轉換為特徵的啟動向量。然後,基於常識的手寫程式,我們為其定義特徵。接下來,我們學習如何對每個特徵啟動向量進行加權計算以獲得單個標量值。

如果這個數值高於某個閾值,我們認為輸入向量是屬於目標類的一個正樣本。標準的感知器體系結構遵循前饋神經網路模型,這意味著輸入被饋送到神經元,被處理,並產生輸出。

在下圖中,可以看到網路自下而上讀取:輸入從底部輸入,輸出從頂部輸出:

然而,感知器確實有局限性。如果你遵循手動選擇特徵的原則,並且使用了足夠多的特徵,則幾乎可以做任何事情。對於二進位輸入向量,我們可以為每個指數級的二進位向量分別設置一個特徵單元,因此我們可以對二進位輸入向量進行任何可能的區分。但是一旦確定了手工編碼的特徵,感知器所能學習的東西將會受到很多的限制。

這個結論對於感知器是毀滅性的,因為整個模式識別的重點是識別模式。Minsky and Papert 研究組提出的“群體不變定理”說明,一部分感知器的學習,如果轉換形成一個群體,那麼感知器將無法學習。為了處理這種轉換,感知器需要使用多個特徵單元來識別資訊子模式的轉換。所以模式識別的棘手部分必須由手工編碼的特徵檢測器來解決,而不是學習過程。

沒有隱藏單元的網路是非常受限的,因為它們只能學習輸入到輸出的映射。由於網路結構仍然是線性的,更多的線性單位層不會説明也無法改善這個問題。固定輸出的非線性也是不夠的。因此,我們需要多層自我調整非線性隱藏單元。

但是我們要如何訓練這樣的網路呢?

我們需要一種能夠適應所有層權重的有效方式,而不僅僅是最後一層。這很難,因為學習隱藏單元的權重等同於學習特徵,但沒有人能直接告訴我們隱藏單元應該做什麼。

▌2. 卷積神經網路

機器學習研究已經廣泛地集中在目標檢測問題上。在很多情況下識別目標是很困難的,如下:

分割:真實的場景與其他物件混雜在一起。很難判斷哪些作品是同一個物件的一部分。物件的部分也可以隱藏在其他物件的後面。

光照:圖元的強度由照明和目標物共同決定。

變形:目標物可以以各種非仿射方式變形。例如,手寫的形狀可以是一個大的迴圈,也可以是一個尖頭。

可用性:物件類通常由它們的使用方式來定義。例如,椅子是為了能夠坐在上面而設計的,因此它們具有各種各樣的物理形狀。

角度:標準學習方法無法應對由視角變化而導致的圖像變化,即輸入維度(圖元)之間的資訊跳躍。

設想有一個醫療資料庫,病人的年齡是輸入維度是權重的編碼。如果要用機器學習方法,我們首先要消除這個維度跳躍。

複製特徵的方法是目前神經網路解決目標檢測問題的主要方法。它使用具有不同位置的相同特徵,來為檢測器提供許多不同副本。它也可以在規模和方向上進行複製,但這是棘手和昂貴的。複製時使用幾種不同的特徵類型,每種都有自己的複製映射圖,但是會大大減少了學習時可用參數的數量。

複製也允許以各種方式來表示每個圖像塊。

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

等效啟動:神經網路對複製的特徵,具有翻譯平移不變形。神經元的啟動函數對特徵複製的效果也是一樣的 。

不變的知識:如果一個特徵訓練期間在某些位置是有用的,那麼在測試期間該特徵的檢測器將在所有位置都可用。

1998年,Yann LeCun和他的同事開發了一種名為LeNet的手寫數位識別器。它在具有許多隱藏層的前饋網路中使用反向傳播,在每層中複製許多單元的映射,並對附近複製單元的輸出進行池化操作,即使重疊也能夠同時處理幾個字元。這是一種用聰明的方式訓練出得完整系統,而不僅僅是一個識別器。後來人們正式地稱之為“卷積神經網路”。

有趣的是,這種神經網路模型被用來讀取北美地區約10%的支票。

卷積神經網路可用於從手寫數位到3D物件的所有與物體識別有關的工作。但是,從網路下載的彩色照片中識別真實的物體通常要比識別手寫的數位複雜得多。對於三維場景的二維圖像,有1000多個類別(1000 vs 10個),百倍圖元值(256×256彩色圖 vs 28×28灰度圖),場景聚類需要應用圖像分割技術,並得到每張圖像中的多個目標。相同類型的卷積神經網路會起作用嗎?

ILSVRC-2012 ImageNet競賽,這是一個包含大約120萬張高解析度訓練圖像的資料集。測試圖像將不會顯示初始的注釋 (沒有分割或標籤),演算法將產生指定圖像中存在物件的標籤。一些最優秀的電腦視覺方法是由來自牛津,INRIA,XRCE等研究團隊提出的。通常,電腦視覺系統使用複雜的多層次網路系統,在訓練開始階段會通過優化幾個參數來進行手動調整。

2012年競賽的獲勝者Alex Krizhevsky(NIPS 2012) 繼承了Yann LeCun的模型結構,開創性地提出一種非常深的卷積神經網路類型。其架構包括7個隱藏層,不包括一些最大池化層。網路結構由卷積層組成,而最後兩層是全連接層。

在每個隱藏層中,啟動函數使用修正線性單位函數。模型的訓練比logistic units更快,特徵表徵更具有表現力。

除此之外,當附近的單位有更強的啟動性時,模型還使用競爭性的正則化策略來抑制隱藏層啟動。當圖像強度變化時,這種策略將有助於模型對於特徵的學習。還有一些訓練技巧能夠顯著提高神經網路的泛化能力:

在 256 x 256 圖像上隨機截取 224 x 224 大小的圖像以獲取更多資料並使用圖像的左右反射進行訓練。在測試階段,結合來自10個不同的圖像塊:四個 224 x 224 的圖像角塊加上中央的 224 x 224 圖像塊再加上這5個圖像的反射塊。

使用“Dropout”來調整全連接層(包含大部分模型參數)的權重。Dropout意味著對於每個訓練樣本來說,一層網路中的一半隱藏單元會被隨機移除,這使得該層隱藏單位不再依賴其他層的隱藏單元。

就硬體要求而言,AlexNet卷積神經網路在2個 Nvidia GTX 580 GPU (超過1000個快速小內核) 上得到了非常高效的實現。 GPU非常適合矩陣乘法,並且具有非常高的記憶體頻寬。 這使得AlexNet模型可以在一周內訓練網路,並能夠在測試階段快速地結合10個圖像塊的結果。

如果我們可以足夠快地更新網路狀態,那麼就可以在很多內核上傳播一個網路。隨著內核越來越便宜,資料集越來越大,相比傳統電腦視覺系統,大型神經網路模型的性能將提高得更快。

▌3. 迴圈神經網路

為了理解迴圈神經網路模型,我們需要對序列建模進行簡要概述。當將機器學習應用于序列時,我們經常希望將輸入序列轉換為不同域中的輸出序列。例如,將一系列的聲壓轉換成一系列的單詞。

當沒有單獨的目標序列時,我們可以通過嘗試預測輸入序列中的下一項來獲得學習的信號。目標的輸出序列是提前一步的輸入序列,這似乎比嘗試預測圖像中其他圖元的一個圖元或圖像其餘部分的一個圖元來的更自然。

預測序列中的下一個術語模糊了有監督學習和無監督學習之間的區別。它使用專為監督學習而設計的方法,但它不需要單獨的學習信號。

無記憶模型是這個任務的標準方法。具體而言,自回歸模型可以從先前固定數量的術語中使用“延遲抽頭”來預測序列下一項;而前饋神經網路是使用一層或多層非線性隱藏單元的廣義自回歸模型。

但是,如果我們給生成模型一些隱藏的狀態,而這個隱藏的狀態又有一個內部的動態,我們就會得到一個更有趣的模型:它可以長時間地將資訊存儲在隱藏狀態。

如果動態是帶雜訊的,那麼從隱藏狀態產生輸出的方式也是帶雜訊的,我們永遠無法知道它的確切的隱藏狀態。我們能夠做的是推斷隱藏狀態向量空間的概率分佈。這種推斷只適用於兩種隱藏狀態模型。

迴圈神經網路是非常強大的,因為它們結合了兩個屬性:

1) 分散式隱藏狀態:允許網路有效地存儲大量有關過去的資訊;

2) 非線性動態:允許模型能夠以複雜的方式更新隱藏狀態。

有了足夠的神經元和時間,迴圈神經網路能夠計算任何通過電腦可以計算出來的東西。

那麼迴圈神經網路可以展現出什麼樣的行為呢?

它們可以擺動,可以定點吸引,還可以表現出混亂,而且它們還可以通過學習來實現大量的小程式,每個小程式能夠捕獲一小塊知識並且並行運行,相互作用來產生非常複雜的效果。

然而,迴圈神經網路的計算能力使得這種網路結構很難訓練,因為會有梯度爆炸或消失的問題。當我們通過多層次的反向傳播時,如果權重很小,梯度將呈指數縮小。如果權重很大,梯度會呈指數增長。

典型的前饋神經網路可以應付這些梯度的指數效應,因為它們只有一些隱藏層。另一方面,在訓練長序列的迴圈神經網路時,梯度很容易爆炸或消失。即使是具有良好的初始權重的網路模型,也很難檢測到當前目標輸出對來自多個時間步驟輸入的依賴,因此迴圈神經網路難以處理遠端依賴性。

基本上,有以下四種有效的方法來學習迴圈神經網路:

長短期記憶塊:使迴圈神經網路脫離長時間記憶值依賴的小模組。

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

回聲狀態網路:初始化輸入 ->隱藏層和隱藏層 ->隱藏層和輸出 ->隱藏連接,可以通過輸入選擇性地驅動該振盪器,以便讓隱藏狀態具有巨大的弱耦合振盪器。

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

▌4. 長短期記憶網路

Hochreiter & Schmidhuber (1997) 通過構建長短期記憶網路,解決了迴圈神經網路長時間記憶)(如數百步時間步驟內)的獲取問題。他們使用具有乘法相互作用的邏輯和線性單元來設計記憶體單元。

每當“寫入”門打開時,資訊就會進入單元。資訊保持在單元中,只要其“保持”門打開。 資訊可以通過打開“讀取”門來從單元中讀取。

閱讀草書手寫是迴圈神經網路處理一個常見任務。 輸入是筆尖的 (x,y,p) 座標序列,其中p表示筆是向上還是向下。輸出是一個字元序列。 Graves & Schmidhuber (2009) 表明,帶有長短期記憶的迴圈神經網路是目前處理草書閱讀的最佳神經網路系統。 簡而言之,他們使用一系列小圖像作為輸入而不是筆座標。

▌5. Hopfield網路

具有非線性單元的週期性神經網路通常難以分析。它們可以以許多不同的方式呈現:由穩定到穩定的狀態,中間有振盪,或者遵循不可預測的混沌軌跡。一個Hopfield網路由二元門限單元組成,它們之間有連續的連接。

1982年,Hopfield認識到,如果連接是對稱的,就是一種全能量函數。整個網路的每個二進位“配置”都具有能量;而二進位閾值決策規則是導致網路是根據這個能量函數的最小值而定的。

利用這種類型進行計算的一種便捷方式是,使用記憶作為神經網路的能量最小值,使用能量最小值來表示可訪問內容的記憶體。一個專案可以通過只知道其部分內容資訊來訪問。這對硬體的損損傷是巨大的。

每當我們對配置進行一次記憶,我們就希望創造一個新的能量最小值。但是,如果在中間位置附近有兩個最小值呢?

這受限於Hopfield網路的容量。那麼我們如何增加Hopfield網路的容量呢?物理學家喜歡用他們已經知道的數學知識來解釋大腦是如何工作的。在物理學期刊上有許多對Hopfield網路及其存儲容量方面進行研究的論文。

最終,Elizabeth Gardner發現存在一個更好的存儲規則,就是使用權重的全部容量。它是通過多次迴圈訓練集,而非一次性存儲向量。並利用感知器的收斂過程來訓練每個單元,使其具有正確的狀態,並給定該向量中所有其他單元的狀態。統計學家稱這種技術為“偽可能性”。

Hopfield網路還有另一個計算角色,我們用它來構建感官的輸入解釋。“輸入”用可見的單元表示,“解釋”用隱藏單元的狀態表示,解釋的好壞情況用能量表示。

▌6. 玻爾茲曼機網路

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

作為機器學習演算法的一種,玻爾茲曼機的學習目標是通過玻爾茲曼機分配給訓練集中的二進位向量來最大化概率的乘積。這相當於最大化玻爾茲曼機分配給訓練向量的對數概率之和。也就是說,如果我們做了如下的事情,我們可以得到N個訓練樣本的最大化概率:

1) 讓網路在沒有外部輸入的情況下,處於不同時間的穩定分佈狀態;

2) 每次採用可見的向量。

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

正相階段,首先將隱藏概率初始化為0.5,將資料向量固定在可見單元上,然後將所有隱藏單元進行並行更新,使用平均場更新策略直到最終收斂。在網路收斂之後,記錄每個連接單元對的PiPj值,並在最小批量中對所有資料進行平均化。

負相階段:首先保留一組“幻想粒子”。每個粒子的值都是全域配置,然後依次更新每個幻想粒子中的所有單位,重複數次。對於每一個連接單位對,平均化所有“幻想粒子”的SiSj值。

對於普通的玻爾茲曼機而言,單元的隨機更新是需要連續進行的。有一種特殊的體系結構允許波爾茲曼機交替地並行更新 (層內沒有連接,沒有跳層連接的結構)。這是高效的一種結構。

這種小批量程式使玻爾茲曼機器的更新更加並行化,也就是所謂的深玻爾茲曼機,而一個普通的玻爾茲曼機會有很多缺失的連接。

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

另一種有效的小批量玻爾茲曼機的學習程式是這樣的:

對於正相階段,首先在可見單元上固定一個資料向量,然後計算所有可見和隱藏單元對的 的準確值。對於每個連接的單元對,平均化小批量中所有資料的 值。

對於負相階段,也要保留一組“幻想粒子”。然後通過交替式並行更新策略來更新每個幻想粒子,重複數次。對於每個連接的單位對,平均化所有幻想粒子的 值。

▌7. 深度置信網路

反向傳播被認為是人工神經網路中的一種標準方法,用於在處理完一批資料後,計算出每個神經元對誤差的貢獻值。

但是,反向傳播存在一些問題。首先,它需要帶標記的訓練資料,但幾乎所有的資料都是沒有標籤的。其次,學習時間的範圍不夠理想,這意味著隱藏層數量多的網路反向傳播過程將變得很慢。第三,它可能會陷入局部最優值而無法達到全域最優狀態。所以對於深度神經網路來說,這些是遠遠不夠的。

為了克服反向傳播的限制,研究人員已經考慮使用無監督的學習方法,它將有助於保證使用梯度方法來調整權重的效率和簡單性,還可以用它來對感知輸入的結構進行建模。特別是,權重的調整可以使得生成模型產生的感知輸入的概率最大化。

問題在於,我們應該學習什麼樣的生成模型?可以建立像玻爾茲曼機器一樣的能量模型嗎?還是由理想化的神經元組成的因果模型?或者兩者混合?

置信網路是一種由隨機變數組成的有向無環圖網路模型。使用置信網路,我們可以觀察到一些變數,我們想要解決2個問題:

1) 推理問題:推斷未觀測變數的狀態;

2) 學習問題:調整變數之間的交互作用,使網路更有可能產生訓練資料。

早期的圖模型使用專家來定義圖模型的結構和條件概率。那時,圖模型是稀疏連接的,所以研究人員最初的研究重點是做出正確的推論,而不是學習。

對於神經網路來說,學習是重心,手寫知識並不是最優的做法,因為知識可以通過學習訓練資料得到。神經網路的目的不在於那些便於推理的可解釋性或稀疏連線性。目前,深度置信網路可以來解決這些問題。

由隨機的二元神經元組成的生成神經網路有兩種類型:

1)基於能量的網路模型,利用對稱連接形式來連接二元隨機神經元,得到玻爾茲曼機;

2)基於因果關係的網路模型,其中我們連接一個有向無環圖中的二進位隨機神經元得到Sigmoid型的深度置信網路。

不過,這兩種類型都超出了本文闡述的範圍。

▌8. 深度自動編碼器

最後,我們來討論深度自編碼器。對於非線性降維,深度自編碼器看起來是一種非常好的方式,主要是因為,它們提供了兩種靈活的映射方式。訓練樣本的學習時間是線性的(或更好的形式)。最終的編碼模型也相當緊湊和快速。

然而,使用反向傳播來優化深度自編碼器是非常困難的。在初始權重較小的情況下,反向傳播過程中梯度將消失。優化辦法就是,要麼使用無監督的逐層預訓練,要麼像回聲狀態網路那樣小心地初始權重。

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

用玻爾茲曼機作為自編碼器:當我們用對比發散來訓練一個玻爾茲曼機時,它試圖進行資料重建。它就像個自編碼器一樣,但是它通過使用隱藏層中的二進位啟動來強化正則化過程。當運用最大可能性策略訓練後,玻爾茲曼機則不像自編碼器。我們可以用一堆淺自編碼器來替換用於預訓練的玻爾茲曼機堆疊;然而,如果淺自編碼器通過懲罰平方權重項而被正則化,那麼預訓練就不是有效的。

去噪自編碼器:通過將其許多分量設置為0 (如dropout,但是用於輸入),將雜訊添加到輸入向量。它們仍然需要重建這些組分,因此它們必須提取到輸入之間相關性的特徵。如果我們使用自編碼器堆疊的話,那麼預訓練將會與玻爾茲曼機預訓練一樣好或者更好。評估預訓練的過程也將更簡單,因為我們可以很容易地計算目標函數的值。但是它缺乏的是使用玻爾茲曼機所能獲得的好的變分邊界,但這只是理論上的興趣。

壓縮自動編碼器:另一種正則化自編碼器的方法是嘗試使隱藏單元的啟動對輸入盡可能不敏感,但是自編碼器不能忽視這些投入,因為他們必須重建這些輸入。我們通過懲罰每個隱藏層的啟動相對于輸入的平方梯度來達到這個目的。在訓練開始前,壓縮自編碼器工作得很好,而這種性質只傾向於那些對輸入變化敏感的小部分隱藏單元。

簡而言之,現在有很多不同的方法能夠對特徵進行逐層預訓練。對於沒有大量標記樣本的資料集而言,預訓練模型將有助於模型後續的判別式學習。對於非常大的標記資料集,使用無監督預訓練對監督學習中使用的權重進行初始化並不是必須的,即使對於深度網路也是如此。預訓練是初始化深網權重的第一個好方法,但是現在還有其他方法。但是,如果我們把網路變得更大,我們將需要再次進行預訓練!

▌最後的忠告

神經網路是有史以來最棒的程式設計範例之一。在傳統的程式設計方法中,我們告訴電腦做什麼,將大問題分解成精確定義的小問題,這樣電腦可以輕鬆地執行。相比之下,在神經網路中,我們不告訴電腦如何解決問題,而讓神經網路能夠從觀測資料中學習,找出手頭問題的解決辦法。

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

如果想要瞭解更多,可以下載觀看Geoffrey Hinton的課程!

作者 | James Le

原文連結:

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

☟☟☟點擊 | 閱讀原文 | 查看更多精彩內容

但是,目前已經有大量有趣的研究已經找到一些有效的方式來訓練迴圈神經網路結構。

迴圈神經網路是一種非常自然地類比連續資料的方式,類似每個時間片都具有一個隱藏層的深層神經網路。除了能在每個時間片上獲得輸入並使用相同的權重進行訓練外,迴圈神經網路還能長時間地記住隱藏狀態的資訊。但目前還很難訓練迴圈神經網路來使用這些隱藏的狀態資訊。

3 - 對稱連接網路

對稱連接網路是一種類似迴圈神經網路結構的神經網路,但是其單元之間的連接是對稱的(它們在兩個方向上具有相同的權重)。對稱連接網路的結構比迴圈神經網路更容易分析,因為其遵循能量函數。

沒有隱藏單元的對稱連接網路被稱為“Hopfield網路”。有隱藏單元的對稱連接網路被稱為“Boltzmann機”。

▌1. 感知器

感知器作為第一代神經網路,還只是單個神經元的計算模型。它們在二十世紀六十年代初被 Frank Rosenblatt 推廣。1969年,Minsky和Papert出版了一本名為“感知器”的書,分析了這種神經網路模型可以做什麼,並提到了它的局限性。許多人認為這些局限性限制了所有的神經網路模型。然而,目前感知器的學習過程仍然被廣泛應用於具有包含數百萬特徵的巨大特徵向量任務。

在統計與模式識別的標準樣例中,我們首先將原始輸入向量轉換為特徵的啟動向量。然後,基於常識的手寫程式,我們為其定義特徵。接下來,我們學習如何對每個特徵啟動向量進行加權計算以獲得單個標量值。

如果這個數值高於某個閾值,我們認為輸入向量是屬於目標類的一個正樣本。標準的感知器體系結構遵循前饋神經網路模型,這意味著輸入被饋送到神經元,被處理,並產生輸出。

在下圖中,可以看到網路自下而上讀取:輸入從底部輸入,輸出從頂部輸出:

然而,感知器確實有局限性。如果你遵循手動選擇特徵的原則,並且使用了足夠多的特徵,則幾乎可以做任何事情。對於二進位輸入向量,我們可以為每個指數級的二進位向量分別設置一個特徵單元,因此我們可以對二進位輸入向量進行任何可能的區分。但是一旦確定了手工編碼的特徵,感知器所能學習的東西將會受到很多的限制。

這個結論對於感知器是毀滅性的,因為整個模式識別的重點是識別模式。Minsky and Papert 研究組提出的“群體不變定理”說明,一部分感知器的學習,如果轉換形成一個群體,那麼感知器將無法學習。為了處理這種轉換,感知器需要使用多個特徵單元來識別資訊子模式的轉換。所以模式識別的棘手部分必須由手工編碼的特徵檢測器來解決,而不是學習過程。

沒有隱藏單元的網路是非常受限的,因為它們只能學習輸入到輸出的映射。由於網路結構仍然是線性的,更多的線性單位層不會説明也無法改善這個問題。固定輸出的非線性也是不夠的。因此,我們需要多層自我調整非線性隱藏單元。

但是我們要如何訓練這樣的網路呢?

我們需要一種能夠適應所有層權重的有效方式,而不僅僅是最後一層。這很難,因為學習隱藏單元的權重等同於學習特徵,但沒有人能直接告訴我們隱藏單元應該做什麼。

▌2. 卷積神經網路

機器學習研究已經廣泛地集中在目標檢測問題上。在很多情況下識別目標是很困難的,如下:

分割:真實的場景與其他物件混雜在一起。很難判斷哪些作品是同一個物件的一部分。物件的部分也可以隱藏在其他物件的後面。

光照:圖元的強度由照明和目標物共同決定。

變形:目標物可以以各種非仿射方式變形。例如,手寫的形狀可以是一個大的迴圈,也可以是一個尖頭。

可用性:物件類通常由它們的使用方式來定義。例如,椅子是為了能夠坐在上面而設計的,因此它們具有各種各樣的物理形狀。

角度:標準學習方法無法應對由視角變化而導致的圖像變化,即輸入維度(圖元)之間的資訊跳躍。

設想有一個醫療資料庫,病人的年齡是輸入維度是權重的編碼。如果要用機器學習方法,我們首先要消除這個維度跳躍。

複製特徵的方法是目前神經網路解決目標檢測問題的主要方法。它使用具有不同位置的相同特徵,來為檢測器提供許多不同副本。它也可以在規模和方向上進行複製,但這是棘手和昂貴的。複製時使用幾種不同的特徵類型,每種都有自己的複製映射圖,但是會大大減少了學習時可用參數的數量。

複製也允許以各種方式來表示每個圖像塊。

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

等效啟動:神經網路對複製的特徵,具有翻譯平移不變形。神經元的啟動函數對特徵複製的效果也是一樣的 。

不變的知識:如果一個特徵訓練期間在某些位置是有用的,那麼在測試期間該特徵的檢測器將在所有位置都可用。

1998年,Yann LeCun和他的同事開發了一種名為LeNet的手寫數位識別器。它在具有許多隱藏層的前饋網路中使用反向傳播,在每層中複製許多單元的映射,並對附近複製單元的輸出進行池化操作,即使重疊也能夠同時處理幾個字元。這是一種用聰明的方式訓練出得完整系統,而不僅僅是一個識別器。後來人們正式地稱之為“卷積神經網路”。

有趣的是,這種神經網路模型被用來讀取北美地區約10%的支票。

卷積神經網路可用於從手寫數位到3D物件的所有與物體識別有關的工作。但是,從網路下載的彩色照片中識別真實的物體通常要比識別手寫的數位複雜得多。對於三維場景的二維圖像,有1000多個類別(1000 vs 10個),百倍圖元值(256×256彩色圖 vs 28×28灰度圖),場景聚類需要應用圖像分割技術,並得到每張圖像中的多個目標。相同類型的卷積神經網路會起作用嗎?

ILSVRC-2012 ImageNet競賽,這是一個包含大約120萬張高解析度訓練圖像的資料集。測試圖像將不會顯示初始的注釋 (沒有分割或標籤),演算法將產生指定圖像中存在物件的標籤。一些最優秀的電腦視覺方法是由來自牛津,INRIA,XRCE等研究團隊提出的。通常,電腦視覺系統使用複雜的多層次網路系統,在訓練開始階段會通過優化幾個參數來進行手動調整。

2012年競賽的獲勝者Alex Krizhevsky(NIPS 2012) 繼承了Yann LeCun的模型結構,開創性地提出一種非常深的卷積神經網路類型。其架構包括7個隱藏層,不包括一些最大池化層。網路結構由卷積層組成,而最後兩層是全連接層。

在每個隱藏層中,啟動函數使用修正線性單位函數。模型的訓練比logistic units更快,特徵表徵更具有表現力。

除此之外,當附近的單位有更強的啟動性時,模型還使用競爭性的正則化策略來抑制隱藏層啟動。當圖像強度變化時,這種策略將有助於模型對於特徵的學習。還有一些訓練技巧能夠顯著提高神經網路的泛化能力:

在 256 x 256 圖像上隨機截取 224 x 224 大小的圖像以獲取更多資料並使用圖像的左右反射進行訓練。在測試階段,結合來自10個不同的圖像塊:四個 224 x 224 的圖像角塊加上中央的 224 x 224 圖像塊再加上這5個圖像的反射塊。

使用“Dropout”來調整全連接層(包含大部分模型參數)的權重。Dropout意味著對於每個訓練樣本來說,一層網路中的一半隱藏單元會被隨機移除,這使得該層隱藏單位不再依賴其他層的隱藏單元。

就硬體要求而言,AlexNet卷積神經網路在2個 Nvidia GTX 580 GPU (超過1000個快速小內核) 上得到了非常高效的實現。 GPU非常適合矩陣乘法,並且具有非常高的記憶體頻寬。 這使得AlexNet模型可以在一周內訓練網路,並能夠在測試階段快速地結合10個圖像塊的結果。

如果我們可以足夠快地更新網路狀態,那麼就可以在很多內核上傳播一個網路。隨著內核越來越便宜,資料集越來越大,相比傳統電腦視覺系統,大型神經網路模型的性能將提高得更快。

▌3. 迴圈神經網路

為了理解迴圈神經網路模型,我們需要對序列建模進行簡要概述。當將機器學習應用于序列時,我們經常希望將輸入序列轉換為不同域中的輸出序列。例如,將一系列的聲壓轉換成一系列的單詞。

當沒有單獨的目標序列時,我們可以通過嘗試預測輸入序列中的下一項來獲得學習的信號。目標的輸出序列是提前一步的輸入序列,這似乎比嘗試預測圖像中其他圖元的一個圖元或圖像其餘部分的一個圖元來的更自然。

預測序列中的下一個術語模糊了有監督學習和無監督學習之間的區別。它使用專為監督學習而設計的方法,但它不需要單獨的學習信號。

無記憶模型是這個任務的標準方法。具體而言,自回歸模型可以從先前固定數量的術語中使用“延遲抽頭”來預測序列下一項;而前饋神經網路是使用一層或多層非線性隱藏單元的廣義自回歸模型。

但是,如果我們給生成模型一些隱藏的狀態,而這個隱藏的狀態又有一個內部的動態,我們就會得到一個更有趣的模型:它可以長時間地將資訊存儲在隱藏狀態。

如果動態是帶雜訊的,那麼從隱藏狀態產生輸出的方式也是帶雜訊的,我們永遠無法知道它的確切的隱藏狀態。我們能夠做的是推斷隱藏狀態向量空間的概率分佈。這種推斷只適用於兩種隱藏狀態模型。

迴圈神經網路是非常強大的,因為它們結合了兩個屬性:

1) 分散式隱藏狀態:允許網路有效地存儲大量有關過去的資訊;

2) 非線性動態:允許模型能夠以複雜的方式更新隱藏狀態。

有了足夠的神經元和時間,迴圈神經網路能夠計算任何通過電腦可以計算出來的東西。

那麼迴圈神經網路可以展現出什麼樣的行為呢?

它們可以擺動,可以定點吸引,還可以表現出混亂,而且它們還可以通過學習來實現大量的小程式,每個小程式能夠捕獲一小塊知識並且並行運行,相互作用來產生非常複雜的效果。

然而,迴圈神經網路的計算能力使得這種網路結構很難訓練,因為會有梯度爆炸或消失的問題。當我們通過多層次的反向傳播時,如果權重很小,梯度將呈指數縮小。如果權重很大,梯度會呈指數增長。

典型的前饋神經網路可以應付這些梯度的指數效應,因為它們只有一些隱藏層。另一方面,在訓練長序列的迴圈神經網路時,梯度很容易爆炸或消失。即使是具有良好的初始權重的網路模型,也很難檢測到當前目標輸出對來自多個時間步驟輸入的依賴,因此迴圈神經網路難以處理遠端依賴性。

基本上,有以下四種有效的方法來學習迴圈神經網路:

長短期記憶塊:使迴圈神經網路脫離長時間記憶值依賴的小模組。

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

回聲狀態網路:初始化輸入 ->隱藏層和隱藏層 ->隱藏層和輸出 ->隱藏連接,可以通過輸入選擇性地驅動該振盪器,以便讓隱藏狀態具有巨大的弱耦合振盪器。

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

▌4. 長短期記憶網路

Hochreiter & Schmidhuber (1997) 通過構建長短期記憶網路,解決了迴圈神經網路長時間記憶)(如數百步時間步驟內)的獲取問題。他們使用具有乘法相互作用的邏輯和線性單元來設計記憶體單元。

每當“寫入”門打開時,資訊就會進入單元。資訊保持在單元中,只要其“保持”門打開。 資訊可以通過打開“讀取”門來從單元中讀取。

閱讀草書手寫是迴圈神經網路處理一個常見任務。 輸入是筆尖的 (x,y,p) 座標序列,其中p表示筆是向上還是向下。輸出是一個字元序列。 Graves & Schmidhuber (2009) 表明,帶有長短期記憶的迴圈神經網路是目前處理草書閱讀的最佳神經網路系統。 簡而言之,他們使用一系列小圖像作為輸入而不是筆座標。

▌5. Hopfield網路

具有非線性單元的週期性神經網路通常難以分析。它們可以以許多不同的方式呈現:由穩定到穩定的狀態,中間有振盪,或者遵循不可預測的混沌軌跡。一個Hopfield網路由二元門限單元組成,它們之間有連續的連接。

1982年,Hopfield認識到,如果連接是對稱的,就是一種全能量函數。整個網路的每個二進位“配置”都具有能量;而二進位閾值決策規則是導致網路是根據這個能量函數的最小值而定的。

利用這種類型進行計算的一種便捷方式是,使用記憶作為神經網路的能量最小值,使用能量最小值來表示可訪問內容的記憶體。一個專案可以通過只知道其部分內容資訊來訪問。這對硬體的損損傷是巨大的。

每當我們對配置進行一次記憶,我們就希望創造一個新的能量最小值。但是,如果在中間位置附近有兩個最小值呢?

這受限於Hopfield網路的容量。那麼我們如何增加Hopfield網路的容量呢?物理學家喜歡用他們已經知道的數學知識來解釋大腦是如何工作的。在物理學期刊上有許多對Hopfield網路及其存儲容量方面進行研究的論文。

最終,Elizabeth Gardner發現存在一個更好的存儲規則,就是使用權重的全部容量。它是通過多次迴圈訓練集,而非一次性存儲向量。並利用感知器的收斂過程來訓練每個單元,使其具有正確的狀態,並給定該向量中所有其他單元的狀態。統計學家稱這種技術為“偽可能性”。

Hopfield網路還有另一個計算角色,我們用它來構建感官的輸入解釋。“輸入”用可見的單元表示,“解釋”用隱藏單元的狀態表示,解釋的好壞情況用能量表示。

▌6. 玻爾茲曼機網路

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

作為機器學習演算法的一種,玻爾茲曼機的學習目標是通過玻爾茲曼機分配給訓練集中的二進位向量來最大化概率的乘積。這相當於最大化玻爾茲曼機分配給訓練向量的對數概率之和。也就是說,如果我們做了如下的事情,我們可以得到N個訓練樣本的最大化概率:

1) 讓網路在沒有外部輸入的情況下,處於不同時間的穩定分佈狀態;

2) 每次採用可見的向量。

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

正相階段,首先將隱藏概率初始化為0.5,將資料向量固定在可見單元上,然後將所有隱藏單元進行並行更新,使用平均場更新策略直到最終收斂。在網路收斂之後,記錄每個連接單元對的PiPj值,並在最小批量中對所有資料進行平均化。

負相階段:首先保留一組“幻想粒子”。每個粒子的值都是全域配置,然後依次更新每個幻想粒子中的所有單位,重複數次。對於每一個連接單位對,平均化所有“幻想粒子”的SiSj值。

對於普通的玻爾茲曼機而言,單元的隨機更新是需要連續進行的。有一種特殊的體系結構允許波爾茲曼機交替地並行更新 (層內沒有連接,沒有跳層連接的結構)。這是高效的一種結構。

這種小批量程式使玻爾茲曼機器的更新更加並行化,也就是所謂的深玻爾茲曼機,而一個普通的玻爾茲曼機會有很多缺失的連接。

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

另一種有效的小批量玻爾茲曼機的學習程式是這樣的:

對於正相階段,首先在可見單元上固定一個資料向量,然後計算所有可見和隱藏單元對的 的準確值。對於每個連接的單元對,平均化小批量中所有資料的 值。

對於負相階段,也要保留一組“幻想粒子”。然後通過交替式並行更新策略來更新每個幻想粒子,重複數次。對於每個連接的單位對,平均化所有幻想粒子的 值。

▌7. 深度置信網路

反向傳播被認為是人工神經網路中的一種標準方法,用於在處理完一批資料後,計算出每個神經元對誤差的貢獻值。

但是,反向傳播存在一些問題。首先,它需要帶標記的訓練資料,但幾乎所有的資料都是沒有標籤的。其次,學習時間的範圍不夠理想,這意味著隱藏層數量多的網路反向傳播過程將變得很慢。第三,它可能會陷入局部最優值而無法達到全域最優狀態。所以對於深度神經網路來說,這些是遠遠不夠的。

為了克服反向傳播的限制,研究人員已經考慮使用無監督的學習方法,它將有助於保證使用梯度方法來調整權重的效率和簡單性,還可以用它來對感知輸入的結構進行建模。特別是,權重的調整可以使得生成模型產生的感知輸入的概率最大化。

問題在於,我們應該學習什麼樣的生成模型?可以建立像玻爾茲曼機器一樣的能量模型嗎?還是由理想化的神經元組成的因果模型?或者兩者混合?

置信網路是一種由隨機變數組成的有向無環圖網路模型。使用置信網路,我們可以觀察到一些變數,我們想要解決2個問題:

1) 推理問題:推斷未觀測變數的狀態;

2) 學習問題:調整變數之間的交互作用,使網路更有可能產生訓練資料。

早期的圖模型使用專家來定義圖模型的結構和條件概率。那時,圖模型是稀疏連接的,所以研究人員最初的研究重點是做出正確的推論,而不是學習。

對於神經網路來說,學習是重心,手寫知識並不是最優的做法,因為知識可以通過學習訓練資料得到。神經網路的目的不在於那些便於推理的可解釋性或稀疏連線性。目前,深度置信網路可以來解決這些問題。

由隨機的二元神經元組成的生成神經網路有兩種類型:

1)基於能量的網路模型,利用對稱連接形式來連接二元隨機神經元,得到玻爾茲曼機;

2)基於因果關係的網路模型,其中我們連接一個有向無環圖中的二進位隨機神經元得到Sigmoid型的深度置信網路。

不過,這兩種類型都超出了本文闡述的範圍。

▌8. 深度自動編碼器

最後,我們來討論深度自編碼器。對於非線性降維,深度自編碼器看起來是一種非常好的方式,主要是因為,它們提供了兩種靈活的映射方式。訓練樣本的學習時間是線性的(或更好的形式)。最終的編碼模型也相當緊湊和快速。

然而,使用反向傳播來優化深度自編碼器是非常困難的。在初始權重較小的情況下,反向傳播過程中梯度將消失。優化辦法就是,要麼使用無監督的逐層預訓練,要麼像回聲狀態網路那樣小心地初始權重。

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

用玻爾茲曼機作為自編碼器:當我們用對比發散來訓練一個玻爾茲曼機時,它試圖進行資料重建。它就像個自編碼器一樣,但是它通過使用隱藏層中的二進位啟動來強化正則化過程。當運用最大可能性策略訓練後,玻爾茲曼機則不像自編碼器。我們可以用一堆淺自編碼器來替換用於預訓練的玻爾茲曼機堆疊;然而,如果淺自編碼器通過懲罰平方權重項而被正則化,那麼預訓練就不是有效的。

去噪自編碼器:通過將其許多分量設置為0 (如dropout,但是用於輸入),將雜訊添加到輸入向量。它們仍然需要重建這些組分,因此它們必須提取到輸入之間相關性的特徵。如果我們使用自編碼器堆疊的話,那麼預訓練將會與玻爾茲曼機預訓練一樣好或者更好。評估預訓練的過程也將更簡單,因為我們可以很容易地計算目標函數的值。但是它缺乏的是使用玻爾茲曼機所能獲得的好的變分邊界,但這只是理論上的興趣。

壓縮自動編碼器:另一種正則化自編碼器的方法是嘗試使隱藏單元的啟動對輸入盡可能不敏感,但是自編碼器不能忽視這些投入,因為他們必須重建這些輸入。我們通過懲罰每個隱藏層的啟動相對于輸入的平方梯度來達到這個目的。在訓練開始前,壓縮自編碼器工作得很好,而這種性質只傾向於那些對輸入變化敏感的小部分隱藏單元。

簡而言之,現在有很多不同的方法能夠對特徵進行逐層預訓練。對於沒有大量標記樣本的資料集而言,預訓練模型將有助於模型後續的判別式學習。對於非常大的標記資料集,使用無監督預訓練對監督學習中使用的權重進行初始化並不是必須的,即使對於深度網路也是如此。預訓練是初始化深網權重的第一個好方法,但是現在還有其他方法。但是,如果我們把網路變得更大,我們將需要再次進行預訓練!

▌最後的忠告

神經網路是有史以來最棒的程式設計範例之一。在傳統的程式設計方法中,我們告訴電腦做什麼,將大問題分解成精確定義的小問題,這樣電腦可以輕鬆地執行。相比之下,在神經網路中,我們不告訴電腦如何解決問題,而讓神經網路能夠從觀測資料中學習,找出手頭問題的解決辦法。

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

如果想要瞭解更多,可以下載觀看Geoffrey Hinton的課程!

作者 | James Le

原文連結:

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

☟☟☟點擊 | 閱讀原文 | 查看更多精彩內容

Next Article
喜欢就按个赞吧!!!
点击关闭提示