技術概述深度學習:詳解前饋、卷積和迴圈神經網路

李亞洲發表於2017-09-07

本論文技術性地介紹了三種最常見的神經網路:前饋神經網路、卷積神經網路和迴圈神經網路。且該文詳細介紹了每一種網路的基本構建塊,其包括了基本架構、傳播方式、連線方式、啟用函式、反向傳播的應用和各種優化演算法的原理。本文不僅介紹了這三種神經網路的基本原理與概念,同時還用數學表示式正式地定義了這些概念。這是一份十分全面的神經網路綜述論文,機器之心簡要摘取了部分章節,更詳細和完整的論述請檢視原論文。

技術概述深度學習:詳解前饋、卷積和迴圈神經網路

論文地址:https://arxiv.org/pdf/1709.01412.pdf

該筆記旨在用一種技術性但是偏教學的方式介紹三種常見的神經網路架構形式,隨著章節的深入,內容的複雜度逐漸增加。

第 4 章首先介紹引入的第一種網路型別:常規前饋神經網路,它本身是經典感知機 [8] 演算法的進化版本。大家應該看到後者是非線性迴歸,前饋網路一層層堆疊感知器層。

我們還在第 4 章介紹了最簡單的神經網路層的基本構建塊:加權平均(weight averaging)和啟用函式(activation function),整個訓練的目的是最小化適應任務(分類或迴歸)的損失函式。反向傳播演算法的更多技術細節詳見第 4 章附錄,附錄中還包含對先進前饋神經網路 ResNet 的介紹。你可以找到前饋網路的矩陣描述。

第 5 章中,我們介紹了第二種神經網路型別:卷積網路,尤其是適用於處理和標註影象的卷積網路。這意味著我們要介紹與之相關的數學工具:卷積、池化、步幅等等。我們之後會介紹多個卷積架構,附錄中再次詳細介紹本章主要內容較難的步驟。

最後,第 6 章介紹了適合時間序列資料的網路架構——迴圈神經網路。前面兩章內容的新發現和修訂將在本章的主要內容中進行介紹,附錄介紹有助於理解該網路架構最複雜公式的知識。

Chapter 4 Feedforward Neural Networks

第 4 章 前饋神經網路

本章,我們看一下第一種神經網路:常規前饋神經網路(FNN)。該網路不考慮輸入資料可能具備的任何特定結構。儘管如此,它仍是非常強大的機器學習工具,尤其是與先進的正則化技術一起使用時。這些技術(稍後將會介紹)幫助解決人們處理「深度」網路時遇到的訓練問題:神經網路有大量隱藏層,隱藏層非常難以訓練(梯度消失和過擬合問題)。

4.2 前饋神經網路架構

技術概述深度學習:詳解前饋、卷積和迴圈神經網路

圖 4.1:有 N + 1 層(N − 1 個隱藏層)的神經網路。淺層網路架構僅使用一個隱藏層。深度學習需要使用多個隱藏層,通常包含同樣數量的隱藏神經元。數量大約是輸入和輸出變數數量的平均值。

FNN 由一個輸入層、一個(淺層網路)或多個(深層網路,因此叫作深度學習)隱藏層,和一個輸出層構成。每個層(除輸出層以外)與下一層連線。這種連線是 FNN 架構的關鍵,具有兩個主要特徵:加權平均值和啟用函式。接下來我們將深入講解這些特徵。

4.4 加權平均

FNN 很重要的一個概念就是加權平均過程,即將前一層給神經元的激勵值和對應的權重矩陣相乘而得出後一個神經元的輸入值,這一過程展示在下圖 4.2 中,我們可以說前一層神經元的加權和就是後一層神經元的輸入。

技術概述深度學習:詳解前饋、卷積和迴圈神經網路

正式地,加權平均的過程可以使用如下方程式表達:

技術概述深度學習:詳解前饋、卷積和迴圈神經網路

其中 v∈[0,N−1]、f∈[0,(F_v+1)−1]、t∈[0,(T_mb)− 1]。e 代表包括或排除一個偏置項,因為實踐中我們經常使用批量歸一化,所以 e 可以設為 0。

4.5 啟用函式

每一層的隱藏神經元可以定義為:

技術概述深度學習:詳解前饋、卷積和迴圈神經網路

其中其中 v∈[0,N−1]、f∈[0,(F_v+1)−1]、t∈[0,(T_mb)− 1]。在這裡 g 為啟用函式,FNN 另外一個十分重要的元素,因為啟用函式的非線性屬性,所以它允許預測任意的輸出資料。在實踐中,g 通常採取以下描述的非線性函式作為啟用函式。

4.5.1 Sigmoid 函式

Sigmoid 函式的值域為 [0,1],它的表示式為如下:

技術概述深度學習:詳解前饋、卷積和迴圈神經網路

Sigmoid 函式的導數可以表達為:

技術概述深度學習:詳解前饋、卷積和迴圈神經網路

該啟用函式如今並不常用,因為它的梯度太容易飽和,不過 RNN-LSTM 網路如今還會需要用到它。

技術概述深度學習:詳解前饋、卷積和迴圈神經網路

圖 4.3:Sigmoid 函式和它的導數

4.5.2 tanh 函式

tanh 函式的值域為 [− 1, 1 ],它的表示式如下:

技術概述深度學習:詳解前饋、卷積和迴圈神經網路

tanh 函式的導數為:

技術概述深度學習:詳解前饋、卷積和迴圈神經網路

tanh 啟用函式因為 ReLU 函式的普及使用而不那麼流行了。

技術概述深度學習:詳解前饋、卷積和迴圈神經網路

圖 4.4:tanh 函式和它的導數

然而 tanh 函式仍然用於許多標準的 RNN-LSTM 模型(6)。

4.5.3 ReLU 函式

線性修正單元(ReLU)的值域為 [0,+∞],它的表示式為:

技術概述深度學習:詳解前饋、卷積和迴圈神經網路

ReLU 的導數為:

技術概述深度學習:詳解前饋、卷積和迴圈神經網路

技術概述深度學習:詳解前饋、卷積和迴圈神經網路

圖 4.5:線性修正單元(ReLU)函式和它的導數

ReLU 是如今應用最廣泛的啟用函式。該函式還有兩個變體:滲漏線性修正單元(ReLU)和指數線性單元(ELU)。引進這些變體的原因是 ReLU 啟用函式可能「kill」特定的隱藏神經元:一旦 ReLU 關閉(即處於零值),它將不會被再次啟用。

4.5.4 The leaky-ReLU function(略)

技術概述深度學習:詳解前饋、卷積和迴圈神經網路

圖 4.6:leaky-ReLU 函式和它的導數

4.5.5 The ELU function(略)

技術概述深度學習:詳解前饋、卷積和迴圈神經網路

圖 4.7 :ELU 函式和它的導數

4.6 FNN 層級

4.6.1 輸入層

輸入層是 FNN 的第一層神經元,它需要將輸入資料傳入 FNN 中。在全連線神經網路中,輸入層的神經元數量但與特徵向量的長度相等,比如說 MNIST 資料集的影象為 28×28,那麼特徵向量的長度就為 764。

4.6.2 全連線層

全連線操作即運算層級之間的加權平均值和啟用函式,即前一層的神經元輸出值加權和為後一層的輸入值,並將該輸入值投入啟用函式中以產生該層級的輸出值。

4.6.3 輸出層

FNN 的輸出層可以表示為:

技術概述深度學習:詳解前饋、卷積和迴圈神經網路

其中 o 為輸出函式。

4.7 損失函式

損失函式評估了 FNN 在估計資料並執行預測時的誤差,通常是我們判斷模型在一定權重下執行任務好壞的依據。損失函式一般是計算真實值和預測值之間的距離而判斷誤差。對於迴歸問題來說,簡單地使用均方誤差(MSE)就可以評估預測值與真實值之間的距離:

技術概述深度學習:詳解前饋、卷積和迴圈神經網路

對於分類任務來說,損失函式一般可以使用交叉熵函式。針對預測分佈最小化交叉熵函式就等價於 KL 散度,所以它評估了預測分佈和真實分佈之間的距離:

技術概述深度學習:詳解前饋、卷積和迴圈神經網路

4.8 正則化技術

在處理深度學習技術時,一個重大難題是高效訓練神經網路。為了解決該問題,已經提出了多種正則化技術。這部分對這些技術進行了回顧。

4.9 反向傳播

反向傳播是減少損失函式錯誤的標準技術,只要準確地預測需要哪一個就行。就像名字所示,在 FNN 網路中反向傳播輸出層的錯誤,以便於更新權重。在實際中,我們需要計算大量的梯度,這是一項冗長的計算任務。然而,如果表現準確,這也是 FN 中最有用、最重要的任務。


4.10 梯度下降使用哪些資料樣本

剛開始,我們顯示了用來訓練模型的資料樣本。該程式重複了很多次(每一次是一個 epoch)。但在文獻資料中,共有三種從資料中進行取樣的方法:Full-bath、隨機梯度下降、小批量梯度下降。

4.11 梯度優化技術

一旦我們在反向傳播過程中計算了梯度,那麼我們接下來就需要考慮如何使用這些梯度更新權重了。可能最自然和直觀的方法就是直接使用梯度下降更新權重,梯度下降的更新表示式為:

技術概述深度學習:詳解前饋、卷積和迴圈神經網路

其中η為超引數學習率,確定η最好的方法是在下降點執行直線搜尋而求得,不過這樣的計算成本非常高,所以我們一般可以根據經驗或交叉驗證等方法確定該超引數。同時學習率還可以使用指數衰減更進一步加快收斂速度。當我們在使用小批量梯度下降時,根據損失函式而更新的權重很容易陷入區域性極小值,因此有一些方法可以避免這種風險。我們會在下一部分介紹它們。

4.11.1 動量(Momentum)

Momentum[10] 引進了一個新向量 v_e,該向量對前面更新的 epoch 保留了一定的記憶。其中 e 代表 epoch 的數量,我們暫時不使用 f、f'和 v 的指代以簡化標記方法。因此我們有:

技術概述深度學習:詳解前饋、卷積和迴圈神經網路

權重在 epoch e 中更新的表示式為:

技術概述深度學習:詳解前饋、卷積和迴圈神經網路

γ為模型的新引數,其經常可以設定為 0.9,但它可以根據交叉驗證而得到更新與優化。

4.11.2 Nesterov accelerated gradient(略)

4.11.3 Adagrad(略)

4.11.4 RMSprop 

因為在 Adagrad,權重從第一個 epoch 開始新增梯度就會一直單調遞減。這一問題可以通過 Adadelta 技術得到緩解,因此我們有:

技術概述深度學習:詳解前饋、卷積和迴圈神經網路

其中γ為模型的新引數,其經常可以設定為 0.9。Adadelta 的更新規則可以表達為 Adagrad 那樣:

技術概述深度學習:詳解前饋、卷積和迴圈神經網路

其中η常常設定為固定值(10^-3)

4.11.5 Adadelta(略)

4.11.6 Adam

Adam[14] 可以通過以下兩個向量追蹤梯度和二階導:

技術概述深度學習:詳解前饋、卷積和迴圈神經網路

其中β1 和 β2 引數通常可以分別設定為 0.9 和 0.999。但是 Adam 演算法的穩健和強大可以保證整個學習過程極少依賴於它們的取值。為了避免第一次迭代陷入數值問題,該向量可以標準化為:

技術概述深度學習:詳解前饋、卷積和迴圈神經網路

在進行權重更新前:

技術概述深度學習:詳解前饋、卷積和迴圈神經網路

這一最優化技術在整個過程中隱含使用的學習率衰減為:

技術概述深度學習:詳解前饋、卷積和迴圈神經網路

其中α_0 可由交叉驗證決定,η_0 通常是初始化為 10^-3 到 10^-2。

4.12 權重初始化

在沒有任何正則化的情況下,訓練神經網路令人望而卻步,因為要對權重初始化條件進行微調。這也是為什麼神經網路經歷過寒冬的一個原因。因為 dropout 與批規範化技術,該問題有所改進,但我們不能用對稱的方式初始化權重(例如都是 0),也不能把它們初始化的太大。一個好的 heuristic 是

技術概述深度學習:詳解前饋、卷積和迴圈神經網路

第五章 卷積神經網路

5.1 簡介

本章中我們將回顧神經網路的第二個型別,可能也是最流行的一個:卷積神經網路(CNN)。CNN 尤其擅長影象分類。我們將會回顧其相關創新並與 FNN 相對比。其中卷積和池化是 CNN 的構建基元。另外,在 FNN 部分所推導的正則化技巧方面,我們將會觀察需要對 CNN 做出哪些修改?最後,從 LeNet 到 ResNet,我們將會介紹最常使用的 CNN 架構。

5.2 CNN 架構

CNN 由若干個卷積和池化操作組成,通常跟隨著一個或多個全連線層(與傳統的 FNN 層相似)。

技術概述深度學習:詳解前饋、卷積和迴圈神經網路

圖 5.1:一個典型的 CNN 架構(受到 LeNet 啟發):卷積操作之後跟著池化操作,直到每一個特徵圖的大小降為 1。然後再引入全連線層。

5.4 改進批歸一化(MBN)

在 CNN 中,通過以下方式改進批歸一化(這裡,與常規 FNN 不同,並非所有隱藏層需要被批歸一化。實際上這一操作並不在池化層的輸出上執行。因此我們將針對正則化和批歸一化的隱藏層使用不同的名字 v 和 n。)

技術概述深度學習:詳解前饋、卷積和迴圈神經網路



技術概述深度學習:詳解前饋、卷積和迴圈神經網路

由於兩個額外的引數技術概述深度學習:詳解前饋、卷積和迴圈神經網路,恆等變換可被實現

技術概述深度學習:詳解前饋、卷積和迴圈神經網路

對於交叉驗證和測試集的評估(e 為迭代/epochs 的數量),我們可以計算

技術概述深度學習:詳解前饋、卷積和迴圈神經網路

並且測試時將被使用的是技術概述深度學習:詳解前饋、卷積和迴圈神經網路技術概述深度學習:詳解前饋、卷積和迴圈神經網路

5.5 網路架構

我們現在來了解過去 20 年文獻中使用的標準 CNN 架構,我們將按時間順序介紹這些架構(到 2015 年底)。我們將採用以下圖示進行介紹。

技術概述深度學習:詳解前饋、卷積和迴圈神經網路

圖 5.8:不同層的圖示

5.5.1 現實架構(Realistic architecture)

在現實架構中,每一個全連線層(除了最後一個輸出層)後是一個 ReLU(或者其他)啟用和批歸一化步驟(這兩個資料處理步驟可以顛倒順序)。

技術概述深度學習:詳解前饋、卷積和迴圈神經網路

圖 5.9:現實的全連線操作


對卷積層也是同樣的操作

技術概述深度學習:詳解前饋、卷積和迴圈神經網路

圖 5.10:現實的卷積操作

我們使用上圖右側的表示方法以簡化表達,記住真正的 CNN 結構要更豐富。[16] 中詳細介紹了 CNN 近期進展,現在我們轉向深度學習社群使用的第一個流行 CNN。

5.5.2 LeNet

LeNet[3](90 年代末)網路中包含一個輸入,後面是兩個卷積池化層和全連線層,最後是輸出層。如圖 5.11 所示。

技術概述深度學習:詳解前饋、卷積和迴圈神經網路

圖 5.11:LeNet CNN

在處理大影象(224 × 224)時,使用較大的感受野和步幅。這有兩個負面影響:一,給定權重矩陣中的引數與感受野大小成正比,因此感受野越大,引數越大。因此,該網路更容易過擬合。二,大步幅和大感受野意味著對影象微觀結構的分析精細度降低。所有後續的 CNN 實現的目的都是解決這兩個問題。

5.5.3 AlexNet

在 CNN 理論中,AlexNet[17] (2012) 並沒有出現質的飛躍,模型效能的大幅度提升是因為更好的處理器能夠處理更多的隱藏層。

技術概述深度學習:詳解前饋、卷積和迴圈神經網路

圖 5.12:AlexNet CNN

5.5.4 VGG

The VGG[4] 網路 (2014) 採用了一個簡單的標準:只有步長為 2 的 2 x 2 padding 和步長為 1 的 3 x 3 卷積(帶有一個大小為 1 的 padding),因此通過卷積操作儲存了影象寬度與高度的大小。

技術概述深度學習:詳解前饋、卷積和迴圈神經網路

圖 5.13: VGG CNN

這一網路在處理 CNN 任務中是一個標準的深度學習架構。不過自出現以來其設計創新性已經降低了,因此不再是當前最優。

5.5.5 GoogleNet

GoogleNet[18] 引入新型」層」(現有層的聯結):inception 層(名字來自諾蘭的電影《盜夢空間》)。GoogleNet 不通過簡單的池化、卷積或全連線操作從 CNN 的一個層到達下一個層,而是平均下列架構的結果。

技術概述深度學習:詳解前饋、卷積和迴圈神經網路

圖 5.14:Inception 模組


我們不會詳細講解 concat 層,因為上圖所示 Google Net 不再是最先進的了。

技術概述深度學習:詳解前饋、卷積和迴圈神經網路

圖 5.15 GoogleNet CNN

確實,平均多個卷積池化操作的結果來獲取 CNN 下一個隱藏層被先進的 CNN——ResNet 大大簡化。

5.5.6 ResNet

技術概述深度學習:詳解前饋、卷積和迴圈神經網路

圖 5.16:Bottleneck 殘差架構。左圖比較簡略,右圖較為具體。共有步幅 1、padding 為 0 的 1 x 1 卷積,一個標準的 VGG 卷積和 1 x 1 卷積。圖示對 ResNet 做出的兩個重要更新是:BN 操作放在 ReLU 之後,最後的 ReLU 在額外操作之前。

ResNet[5] 不使用 VGG 網路用同樣的規模進行卷積操作(除了第一個)的做法。它該考慮一個實驗事實:全連線層(通常在同等規模內包含最多引數)對良好的網路效能並不必要。移除全連線層導致 CNN 引數數量大幅下降。此外,池化操作也越來越不常用,可能會被卷積操作取代。這為 ResNet 基本構建塊,圖 5.16 中的殘差模組提供了基礎部分。

殘差模組有兩個重點必須要提。一,通常的卷積-卷積-卷積(conv-conv-conv)結構將導致下一個輸出(不考慮出於簡化目的和當前時間的批歸一化,表示無需在 1 x 1 卷積操作中進行 padding),

技術概述深度學習:詳解前饋、卷積和迴圈神經網路

殘差模組將前面的方程修改為(隱含條件為輸入特徵的寬、大小和數量與輸出是一樣的):

技術概述深度學習:詳解前饋、卷積和迴圈神經網路

嘗試擬合輸入的一個微小改善而不是輸入,因此稱之為殘差。相比於傳統架構,這允許網路在必要時最小化改善輸入。第二,如果特徵圖的數量很重要,步長為 1 的 3 x 3 卷積就執行時間和傾向於過擬合(大量的引數)而言可以非常昂貴。這就是 1 x 1 卷積存在的原因,其目標僅是準備 3 x 3 卷積的輸入,以減少特徵圖的數量,數量接著將通過殘差模組的最後的 1x1 卷積恢復。第一個 1 x 1 卷積讀作加權平均操作

技術概述深度學習:詳解前饋、卷積和迴圈神經網路

但是被設計成技術概述深度學習:詳解前饋、卷積和迴圈神經網路,第二個 1 x 1 卷積讀取

技術概述深度學習:詳解前饋、卷積和迴圈神經網路

技術概述深度學習:詳解前饋、卷積和迴圈神經網路,恢復最初的特徵圖大小。ResNet 架構接著堆疊大量殘差模組(通常是 50 個),從卷積池層開始,以池化操作結束,從而獲得一個輸出函式可以直接應用的全連線層。下面是一張圖示。


技術概述深度學習:詳解前饋、卷積和迴圈神經網路

圖 5.17 ResNet CNN

ResNet 在一些常見的訓練集中都達到了業內最佳的結果(如 CIFAR、MNIST 等)。以下我們將介紹 CNN 中標準架構(如 VGG)的反向傳播演算法。

5.6 反向傳播(略)

在 FNN 中,我們只需要計算兩種反向傳播,從輸出到全連線層,以及從 fc 到 fc。在傳統 CNN 中,4 種傳播方式被計算:fc 到 pool、pool 到卷積、卷積到卷積,以及卷積到 pool。

第六章 迴圈神經網路

本章中,我們將介紹第三種神經網路架構:迴圈神經網路。與卷積神經網路(CNN)相比,這種網路引入了真正的新架構——而不僅僅是在空間方向上進行傳播,資料也以新的時間依賴方向傳遞。在這裡,我們將介紹第一個迴圈神經網路(RNN)架構,同時還有目前最流行的一種:長短期記憶(LSTM)神經網路。

技術概述深度學習:詳解前饋、卷積和迴圈神經網路

圖 6.1 RNN 架構,資料在「空間」和「時間」域同時傳播。在我們的例子中,時間尺寸為 8,而空間尺寸為 4。

這種型別的神經網路真正的新穎之處在於,我們正試圖預測時間序列會被編碼進整個網路架構中。RNN 最開始被用於預測句子中的下一個單詞(分類任務),即時間序列上的預測。但這種網路架構也可以被應用在迴歸問題中。可以首先想到的問題就是股價走勢與溫度預測。與之前介紹的神經網路(定義 v 表示之前層空間方向的索引)相反,

技術概述深度學習:詳解前饋、卷積和迴圈神經網路

現在,隱藏層同時被「空間」和「時間」索引(T 是這個新方向的網路維度)。而且,RNN 的哲學也與其他方法不同:現在 a 通常以 c 的單元狀態、符號表示,一些瑣碎的基本 RNN 架構在 LSTM 網路中會更加重要。

技術概述深度學習:詳解前饋、卷積和迴圈神經網路

6.2.2 RNN-LSTM 中的反向傳遞

RNN-LSTM 中的反向傳遞必須遵守一定的時間規律,如下圖所示

技術概述深度學習:詳解前饋、卷積和迴圈神經網路

圖 6.2 架構與反向傳播。在這裡我們不能在沒有計算流入的情況下計算層梯度。

在這種思想下,我們來看看 RNN 和它那重要的變體:長短期記憶網路(LSTM)-RNN

6.4 RNN 特徵

RNN 是最基本的架構,由於它的內建結構是考慮到需要預測資料的時間結構。放大圖 6.1 的隱藏層,這就是我們看到的最簡單的迴圈神經網路結構。

技術概述深度學習:詳解前饋、卷積和迴圈神經網路

圖 6.3 RNN 隱藏層細節


而下圖顯示了圖 6.3 代表的隱藏層的輸出如何進入後續的隱藏單元。

技術概述深度學習:詳解前饋、卷積和迴圈神經網路

圖 6.4 RNN 隱藏層互相影響的方式

6.5 LSTM 特徵

6.5.1 LSTM 架構

在長短期記憶網路 [7], 中,給定單元的狀態並不由其左側或底部近鄰直接決定,而是由相應的隱藏單元決定,而該單元輸出是單元狀態的探測。首先,這個表示式看來令人困惑,但與第四章附錄中我們接觸到的 ResNet 方法類似:與嘗試讓輸入內容與複雜的函式適應相反,我們試圖讓這些輸入的變數產生微小的變化,從而允許梯度在網路中以更平滑的方式流動。在 LSTM 網路中,我們需要引入幾個門:輸入門判定是否讓新的資訊進入單元;輸出門判定是否將輸出值設定為 0,或反映目前的單元狀態;最後,遺忘門決定是否遺忘過去的單元狀態。所有這些都在圖 6.5 中展示,其中 LSTM 與 6.4.1 中 RNN 結構相對應。

技術概述深度學習:詳解前饋、卷積和迴圈神經網路

圖 6.5 LSTM 隱藏單元細節

在 LSTM 中,不同的隱藏單元以下面的方式互動。

技術概述深度學習:詳解前饋、卷積和迴圈神經網路

圖 6.6 LSTM 隱藏單元的互動方式

第七章 結論

希望本文能讓讀者更好地瞭解神經網路的設計原理,以及它的工作機制。以上,我們已經討論了三中最為常見的神經網路架構,以及它們訓練公式的詳細數學推導。深度學習是一個快速發展的領域,或許本文所述內容將在不久的將來成為過時資訊,但其闡述的方法仍然可以為讀者構建新架構提供啟發。那時,我們已經獲得足夠的知識,可以構建自己的 FNN、CNN 與 RNN-LSTM 模型了。

相關文章