選自arXiv算法
機器之心編譯網絡
本論文技術性地介紹了三種最多見的神經網絡:前饋神經網絡、卷積神經網絡和循環神經網絡。且該文詳細介紹了每一種網絡的基本構建塊,其包括了基本架構、傳播方式、鏈接方式、激活函數、反向傳播的應用和各類優化算法的原理。本文不只介紹了這三種神經網絡的基本原理與概念,同時還用數學表達式正式地定義了這些概念。這是一份十分全面的神經網絡綜述論文,機器之心簡要摘取了部分章節,更詳細和完整的論述請查看原論文。架構
論文地址:https://arxiv.org/pdf/1709.01412.pdf機器學習
目錄函數
簡介工具
該論文旨在用一種技術性可是偏教學的方式介紹三種常見的神經網絡架構形式,隨着章節的深刻,內容的複雜度逐漸增長。性能
第 4 章首先介紹引入的第一種網絡類型:常規前饋神經網絡,它自己是經典感知機 [8] 算法的進化版本。你們應該看到後者是非線性迴歸,前饋網絡一層層堆疊感知器層。學習
咱們還在第 4 章介紹了最簡單的神經網絡層的基本構建塊:加權平均(weight averaging)和激活函數(activation function),整個訓練的目的是最小化適應任務(分類或迴歸)的損失函數。反向傳播算法的更多技術細節詳見第 4 章附錄,附錄中還包含對先進前饋神經網絡 ResNet 的介紹。你能夠找到前饋網絡的矩陣描述。測試
第 5 章中,咱們介紹了第二種神經網絡類型:卷積網絡,尤爲是適用於處理和標註圖像的卷積網絡。這意味着咱們要介紹與之相關的數學工具:卷積、池化、步幅等等。咱們以後會介紹多個卷積架構,附錄中再次詳細介紹本章主要內容較難的步驟。優化
最後,第 6 章介紹了適合時間序列數據的網絡架構——循環神經網絡。前面兩章內容的新發現和修訂將在本章的主要內容中進行介紹,附錄介紹有助於理解該網絡架構最複雜公式的知識。
第 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 殘差架構。左圖比較簡略,右圖較爲具體。共有步幅 一、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中,咱們只須要計算兩種反向傳播:從輸出到全鏈接層,以及從全鏈接到全鏈接。在傳統CNN中,須要計算4種新的傳播方式:全鏈接到池化、池化到卷積、卷積到卷積,以及卷積到池化。
第六章 循環神經網絡
本章中,咱們將介紹第三種神經網絡架構:循環神經網絡。與卷積神經網絡(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 模型了。