
導讀: 深度學習自從2006年以後已經 "火" 了十多年了,目前大家看到的,最普遍的應用成果是在計算機視覺、語音識別和自然語言處理 ( NLP )。 最近工業界也在努力地擴充套件它的應用場景,比如遊戲、內容推薦和廣告匹配等等。
深度模型架構分三種:
❶ 前向反饋網路: MLP,CNN
❷ 後向反饋網路: stacked sparse coding, deconvolutional nets
❸ 雙向反饋網路: deep Boltzmann machines, stacked auto-encoders
卷積神經網路 ( Convolutional Neural Network, CNN ) 應該是最流行的深度學習模型,在計算機視覺也是影響力最大的。 下面介紹一下深度學習中最常用的 CNN 模型,以及相關的 RNN 模型,其中也涉及到著名的 LSTM 和 GRU。
——基本概念——
計算神經生物學對構建人工神經元的計算模型進行了重要的研究。 試圖模仿人類大腦行為的人工神經元是構建人工神經網路的基本組成部分。 基本計算元素 ( 神經元 ) 被稱為節點 ( 或單元 ),其接收來自外部源的輸入,具有產生輸出的一些內部引數 ( 包括在訓練期間學習的權重和偏差 )。 這個單位被稱為感知器。 感知器的基本框圖如下圖所示。
圖顯示神經元的基本非線性模型,其中 1, 2, 3,... 是輸入訊號; 1, 2, 3,⋯ 是突觸權重; 是輸入訊號的線性組合; φ ( ∙ ) 是啟用函式 ( 例如 sigmoid ), 是輸出。 偏移 與輸出的線性組合器相加,具有應用仿射變換的效果,產生輸出 。神經元功能可以用數學表示如下:

神經元的基本模型

人工神經網路或一般神經網路由多層感知器 ( MLP ) 組成,其中包含一個或多個隱藏層,每層包含多個隱藏單元 ( 神經元 )。 具有 MLP 的 NN 模型如圖所示。

帶有 MLP 的 NN 模型
多層感知器輸出:

學習率 ( learning rate ) 是訓練 DNN 的重要組成部分。 它是訓練期間考慮的步長,使訓練過程更快。 但是,選擇學習率是敏感的。 如果為 η 較大,網路可能會開始發散而不是收斂; 另一方面,如果 η 選擇較小,則網路需要更多時間收斂。 此外它可能很容易陷入區域性最小值。
有三種常用方法可用於降低訓練期間的學習率: 常數、因子和指數衰減。 首先,可以定義一個常數 ζ,基於定義的步長函式手動地降低學習率。 其次,可以在訓練期間根據以下等式調整學習率:

指數衰減的步進函式格式為:

梯度下降法是一階優化演算法,用於尋找目標函式的區域性最小值。 演算法1解釋了梯度下降的概念:
演算法1 梯度下降
輸入: 損失函式 ε,學習率 η,資料集 , 和模型 F ( θ, )
輸出: 最小化 ε 的最優 θ
重複 直到收斂:

結束
由於訓練時間長是傳統梯度下降法的主要缺點,因此隨機梯度下降 ( Stochastic Gradient Descent ,SGD ) 方法用於訓練深度神經網路 ( DNN )。 演算法2詳細解釋了 SGD。
演算法2 隨機梯度下降
輸入: 損失函式 ε,學習率 η,資料集 , 和模型 F ( θ, )
輸出: 最小化 ε 的最優 θ
重複 直到收斂:
隨機 ( , );
對於 ( , ) 的 每批 ( i, i ) 做:

結束
深度 NN 使用流行的反向傳播 ( BP ) 演算法和 SGD 進行訓練。 演算法3給出了基本 BP 的虛擬碼。 在 MLP 的情況下,可以容易地用有向非迴圈圖 ( directive acyclic graphs ) 這樣的計算圖來表示 NN 模型。 DL 的表示,如演算法3所示,讓一個單路徑網路使用鏈規則有效地計算從頂層到底層的梯度。
演算法3 BP 演算法
輸入: 具有 層的網路,啟用函式 σ 。
隱藏層的輸出:

和網路輸出:

計算梯度:

從 ← 到 0 計算當前層的梯度:

用

和

應用梯度下降 ( GD ), 反向傳播 ( BP ) 梯度到下一層:

結束
動量 ( Momentum ) 是一種有助於 SGD 加速訓練的方法。 它背後的主要思想是使用梯度的移動平均值,而不是僅使用梯度的當前實際值。 其數學表達如以下等式:

這裡 γ 是動量,η 是第 t 輪訓練的學習率。 在訓練期間使用動量的主要優點是防止網路卡在區域性最小值。 動量值為 γ∈ ( 0,1 )。 較高的動量值超過其最小值,可能使網路不穩定。 通常 γ 設定為0.5,直到初始學習穩定,然後增加到0.9或更高。
權重衰減 ( Weight decay ) 用於訓練深度學習模型作為 L2 正則化方法,這有助於防止過度擬合網路和模型泛化。 F ( θ, ) 的 L2 正則化可以定義為:


權重 的梯度是:

其中 = 0.0004。
批處理歸一化 ( BN ) 通過輸入樣本移位來減少內部協方差,從而加速 DL 過程。 這意味著輸入被線性轉換為零均值和單位方差。 對於白化的輸入,網路收斂速度更快,並且在訓練期間表現出更好的正則化,這對整體精度有影響。 由於資料白化是在網路外執行的,在模型訓練期間不會產生白化的影響。 在深度遞迴神經網路 ( RNN ),第 n 層的輸入是第 n-1 層的組合,不是原始特徵輸入。 隨著訓練的進行,歸一化或白化的效果分別降低,這導致梯度消失 ( vanishing gradient ) 問題。 這可能會減慢整個訓練過程並導致飽和 ( saturation )。 為了更好地訓練,BN 應用於深度神經網路的內部層。 這種方法確保了理論上和基準測試 ( benchmarks ) 實驗中更快的收斂。 在 BN 中,一層的特徵獨立地歸一化為均值零和方差1。 BN 的演算法在演算法4中給出。
演算法4 BN
輸入: 小批量 ( mini-batch ) x 值: = { 1,2,3......, }
輸出: {yi = BNγ,β(xi)}

啟用函式如下:

(a)sigmoid (b)雙曲正切

(c)ReLU

(d)Leaky ReLU (e)Exponential Linear Unit (ELU)
1. Sigmoid

2. TanH

1. Rectified Linear Unit (ReLU): y = max(x,0)
2. Leaky ReLU: y = max(x,ax)
3. Exponential Linear Unit (ELU):

——卷積神經網路 ( CNN )——
如圖顯示了一個 CNN 的整體架構,包括兩個主要部分: 特徵提取和分類器。 在特徵提取層,網路的每一層都接收來自其前一層的輸出作為其輸入,並將其輸出作為輸入傳遞給下一層。 這個 CNN 架構由三種型別層組合而成: 卷積 ( convolution ),最大池化 ( max-pooling ) 和分類 ( classification )。 在網路的低層和中層有兩種型別的層: 卷積層和最大池化層。 偶數層用於卷積,奇數層用於最大池化操作。 卷積和最大池化層的輸出節點組合成為一個 2D 平面,叫特徵圖 ( feature map )。 一個層的每個平面通常由前層一個或多個平面的組合匯出。 平面的節點連線到前一層每個連線平面的小區域。 卷積層的每個節點通過卷積運算從輸入影像中提取特徵。 CNN 的整體架構包括輸入層、多個交替的卷積層和最大池化層、一個全連線層和一個分類層。

CNN
更高階的特徵來自從較低層傳播的特徵。 隨著特徵傳播到最高層或級別,特徵的維度減小分別取決於卷積和最大池化操作的核心大小。 然而,為了確保分類準確性,通常增加特徵圖的數量代表更好的輸入影像特徵。 CNN 的最後一層輸出作為全連線網路的輸入,該網路稱為分類層。 前饋神經網路已被用作分類層。
相對於最終神經網路權重矩陣的維度,期望數量的特徵選擇在分類層中作為輸入。 然而,就網路或學習引數而言,全連線層是昂貴的。 有幾種技術,包括平均池化和全域性平均池化,作全連線網路的替代方案。 在頂部分類層中 softmax 層計算相關類別的得分。 分類器選最高分輸出相關類別。
❶ 卷積層
在此層,先前層的特徵圖與可學習的核心進行卷積。 核心的輸出經過線性或非線性啟用函式,例如 sigmoid、雙曲正切 ( hyperbolic tangent )、softmax,整流線性 ( rectified linear ) 和標識 ( identity ) 函式,生成輸出特徵圖。 每個輸出特徵圖可以與多個輸入特徵圖組合。 總的來說,有

其中 是當前層輸出, -1 是前一層輸出, 是當前層核心, 是當前層的偏差。 代表選擇的輸入地圖。 對於每個輸出圖,給出了附加偏差 。 但是,輸入圖將與不同的核心進行卷積生成相應的輸出圖。
❷ 池化層
亞取樣層對輸入圖執行下采樣操作,這通常稱為池化層。 在此層中,輸入和輸出特徵圖的數量不會更改。 例如,如果有 輸入對映,那麼將會有完全 輸出對映。 由於下采樣操作,輸出圖每個維度大小都減小,這取決於下采樣掩碼大小。 例如: 如果使用2×2下采樣核心,則所有影像輸出維度將是相應輸入影像維度的一半。 該操作可以表述為:

在該層中主要執行兩種型別的操作: 平均池化或最大池化。 在平均池化方法,函式通常總結來自前一層的特徵圖的 N×N 個補丁並選擇平均值。 在最大池化,從特徵圖的 N×N 個補丁中選擇最高值。 因此,輸出地圖尺寸減少 n 次。 特殊情況下,輸出圖乘以一個標量。 已經有一些替代的亞取樣層,例如分數最大池化 ( fractional max pooling ) 層和帶卷積的亞取樣。
❸ 分類層
這是全連線層,根據前面卷積層提取的特徵計算每個類的得分。 最終的層特徵圖表示為一組標量數值的向量,這些標量值傳遞到全連線層。 全連線前饋神經層作為 softmax 分類層。
在 CNN 的反向傳播 ( BP ) 中,全連線層按照全連線神經網路 ( FCNN ) 的方法更新。 在卷積層和其前一層之間對特徵圖執行全卷積運算來更新卷積層的濾波器。 如圖顯示了輸入影像的卷積和亞取樣等基本操作。

卷積和池化
❹ 網路引數和內參需求
計算引數的數量是衡量深度學習模型複雜性的重要指標。 輸出特徵圖的大小:
=( - )/ +1
其中 是指輸入特徵圖的尺寸, 是指濾波器或感受野 ( receptive field ) 的尺寸, 是指輸出特徵圖的尺寸, 代表步幅 ( stride )。 填充 ( padding ) 通常在卷積應用,以確保輸入和輸出特徵圖具有相同的尺寸。 填充尺寸取決於核心的大小。 填充的行數和列數如下:
=( - 1)/ 2
這裡 是填充尺寸, 是核心維度。 有幾個標準考慮來比較模型。 但是,大多數情況下會考慮網路引數的數量和記憶體需求。 第 層的引數 ( ) 量計算按以下等式:
=( × × -1)×
如果偏移與權重引數相加,則上述等式可重寫:
=( ×( +1)× -1)×
這裡第 層的引數總數記為 , 是輸出特徵圖的總數, -1 是輸入特徵圖或通道的總數。 例如,假設第 層具有 -1 = 32 個輸入特徵圖, = 64 個輸出特徵圖,並且濾波器大小為 = 5,在這種情況下,該層的偏移引數總數為:
=(5×5×33)× 64 = 528,000
因此,第 層操作所需的記憶體大小 ( ) 可以表示為:
=( × × )
——遞迴神經網路 ( RNN )——
RNN 是唯一的,它允許隨時間推移在一系列向量上進行操作。 如圖示意所示。

RNN 基本架構
在 Elman 架構中,使用隱層的輸出和隱層的正常輸入一起作為輸入。 另一方面,Jordan 網路中輸出單元的輸出作為隱藏層的輸入。 相反地 Jordan 使用輸出單元的輸出同時作為自身和隱藏層的輸入。 在數學上,可以表達為:
Elman 網路:
h = h( h + hh −1 + h)
= ( h + )
Jordan 網路:
h = h( h + h −1 + h)
= ( h + )
其中 是輸入向量,h 是隱層向量, 是輸出向量, w 和 u 是權重矩陣, b 是偏移向量。
迴圈允許資訊從網路的一個步驟傳遞到下一個步驟。 可以將遞迴神經網路視為同一網路的多個副本,每個網路將訊息傳遞給後繼者。 下圖顯示瞭如果迴圈展開 ( unroll the loop ) 會發生什麼。

展開的 RNN
RNN 方法的主要問題是梯度消失。
——LSTM ( Long Short Term Memory )——
長短時記憶 ( LSTM,Long Short Term Memory ) 的關鍵思想是單元 ( cell ) 狀態,如圖水平線貫穿的頂部。 LSTM 將資訊移除或新增到單元狀態 ( cell state ),稱為門 ( gates ): 輸入門 ( ),忘記門 ( ) 和輸出門 ( ) 可以定義為如下公式:

LSTM






LSTM 模型在時間資訊處理中很受歡迎。 大多數包含 LSTM 模型的論文都有一些微小的差異。
——Gated Recurrent Unit ( GRU )——
門控遞迴單元 ( Gated Recurrent Unit,GRU ) 也來自 LSTMs。 GRU 受歡迎的主要原因是計算成本和模型的簡單性,如圖所示。 在拓撲、計算成本和複雜性方面,GRU 是比標準 LSTM 更輕的 RNN 版。 該技術將遺忘門 ( forget gates ) 和輸入門 ( input gates ) 組合成單個 "更新門 ( update gate )",並將單元狀態、隱藏狀態以及一些其他變化合並。 更簡單的 GRU 模型越來越受歡迎。 數學上 GRU 可以用表示如下公式:

GRU




GRU 需要較少的網路引數,這使模型更快。 另一方面,如果有足夠的資料和計算能力,LSTM 可以提供更好的效能。