技術概述深度學習:詳解前饋、卷積和循環神經網絡
該筆記用技術教學的方式介紹三種最常見的神經網絡架構形式:前饋、卷積和循環,詳細介紹了每一種網絡的基本論文技術性地介紹了三種最常見的神經網絡:前饋神經網絡、卷積神經網絡和循環神經網絡。且該文詳細介紹了每一種網絡的基本構建塊,其包括了基本架構、傳播方式、連接方式、激活函數、反向傳播的應用和各種優化算法的原理。本文不僅介紹了這三種神經網絡的基本原理與概念,同時還用數學表達式正式地定義了這些概念。這是一份十分全面的神經網絡綜述論文,機器之心簡要摘取了部分章節,更詳細和完整的論述請查看原論文。
論文地址: 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 模型了。
來自:https://www.jiqizhixin.com/articles/2017-09-07-9