實驗代表,RNN 在幾乎全部的序列問題上都有良好表現,包括語音/文本識別、機器翻譯、手寫體識別、序列數據分析(預測)等。網絡
在實際應用中,RNN 在內部設計上存在一個嚴重的問題:因爲網絡一次只能處理一個時間步長,後一步必須等前一步處理完才能進行運算。這意味着 RNN 不能像 CNN 那樣進行大規模並行處理,特別是在 RNN/LSTM 對文本進行雙向處理時。這也意味着 RNN 極度地計算密集,由於在整個任務運行完成以前,必須保存全部的中間結果。架構
CNN 在處理圖像時,將圖像看做一個二維的「塊」(m*n 的矩陣)。遷移到時間序列上,就能夠將序列看做一個一維對象(1*n 的向量)。經過多層網絡結構,能夠得到足夠大的感覺野。這種作法會讓 CNN 很是深,可是得益於大規模並行處理的優點,不管網絡多深,均可以進行並行處理,節省大量時間。這就是 TCN 的基本思想。app
TCN 模型以 CNN 模型爲基礎,並作了以下改進:ide
下面將分別介紹 CNN 的擴展技術。函數
由於要處理序列問題(時序性),就必須使用新的 CNN 模型,這就是因果卷積。序列問題能夠轉化爲:根據 去預測 。下面給出因果卷積的定義,濾波器 ,序列 ,在 處的因果卷積爲: 。下圖爲一個因果卷積的實例,假設輸入層最後兩個節點分別爲 ,第一層隱藏層的最後一個節點爲 ,濾波器 ,根據公式有 。性能
因果卷積有兩個特色:學習
標準的 CNN 經過增長 pooling 層來得到更大的感覺野,而通過 pooling 層後確定存在信息損失的問題。空洞卷積是在標準的卷積裏注入空洞,以此來增長感覺野。空洞卷積多了一個超參數 dilation rate,指的是 kernel 的間隔數量(標準的 CNN 中 dilatation rate 等於 1)。空洞的好處是不作 pooling 損失信息的狀況下,增長了感覺野,讓每一個卷積輸出都包含較大範圍的信息。下圖展現了標準 CNN (左)和 Dilated Convolution (右),右圖中的 dilatation rate 等於 2 。測試
下面給出空洞卷積的定義,濾波器 ,序列 ,在 處的 dilatation rate 等於 d 的空洞卷積爲:
,下圖爲一個空洞卷積的實例,假設第一層隱藏層最後五個節點分別爲 ,第二層隱藏層的最後一個節點爲 ,濾波器 ,根據公式有 。翻譯
空洞卷積的感覺野大小爲 ,因此增大 或 均可以增長感覺野。在實踐中,一般隨網絡層數增長, 以 的指數增加,例如上圖中 依次爲 。設計
CNN 可以提取 low/mid/high-level 的特徵,網絡的層數越多,意味着可以提取到不一樣 level的特徵越豐富。而且,越深的網絡提取的特徵越抽象,越具備語義信息。
若是簡單地增長深度,會致使梯度消失或梯度爆炸。對於該問題的解決方法是權重參數初始化和採用正則化層(Batch Normalization),這樣能夠訓練幾十層的網絡。解決了梯度問題,還會出現另外一個問題:網絡退化問題。隨着網絡層數的增長,在訓練集上的準確率趨於飽和甚至降低了。注意這不是過擬合問題,由於過擬合會在訓練集上表現的更好。下圖是一個網絡退化的例子,20 層的網絡比 56 層的網絡表現更好。
理論上 56 層網絡的解空間包括了 20 層網絡的解空間,所以 56 層網絡的表現應該大於等於20 層網絡。可是從訓練結果來看,56 層網絡不管是訓練偏差仍是測試偏差都大於 20 層網絡(這也說明了爲何不是過擬合現象,由於 56 層網絡自己的訓練偏差都沒有降下去)。這是由於雖然 56 層網絡的解空間包含了 20 層網絡的解空間,可是咱們在訓練中用的是隨機梯度降低策略,每每獲得的不是全局最優解,而是局部最優解。顯然 56 層網絡的解空間更加的複雜,因此致使使用隨機梯度降低沒法獲得最優解。
假設已經有了一個最優的網絡結構,是 18 層。當咱們設計網絡結構時,咱們並不知道具體多少層的網絡擁有最優的網絡結構,假設設計了 34 層的網絡結構。那麼多出來的 16 層實際上是冗餘的,咱們但願訓練網絡的過程當中,模型可以本身訓練這 16 層爲恆等映射,也就是通過這16 層時的輸入與輸出徹底同樣。可是每每模型很難將這 16 層恆等映射的參數學習正確,這樣的網絡必定比最優的 18 層網絡表現差,這就是隨着網絡加深,模型退化的緣由。
所以解決網絡退化的問題,就是解決如何讓網絡的冗餘層產生恆等映射(深層網絡等價於一個淺層網絡)。一般狀況下,讓網絡的某一層學習恆等映射函數 比較困難,可是若是咱們把網絡設計爲 ,咱們就能夠將學習恆等映射函數轉換爲學習一個殘差函數 ,只要 ,就構成了一個恆等映射 。在參數初始化的時候,通常權重參數都比較小,很是適合學習 ,所以擬合殘差會更加容易,這就是殘差網絡的思想。
下圖爲殘差模塊的結構,該模塊提供了兩種選擇方式,也就是 identity mapping(即 ,右側「彎彎的線",稱爲 shortcut 鏈接) 和 residual mapping(即 ),若是網絡已經到達最優,繼續加深網絡,residual mapping 將被 push 爲 0,只剩下 identity mapping,這樣理論上網絡一直處於最優狀態了,網絡的性能也就不會隨着深度增長而下降了。
這種殘差模塊結構能夠經過前向神經網絡 + shortcut 鏈接實現。並且 shortcut 鏈接至關於簡單執行了同等映射,不會產生額外的參數,也不會增長計算複雜度,整個網絡依舊能夠經過端到端的反向傳播訓練。
上圖中殘差模塊包含兩層網絡。實驗證實,殘差模塊每每須要兩層以上,單單一層的殘差模塊 並不能起到提高做用。shortcut 有兩種鏈接方式:
(1)identity mapping 同等維度的映射( 與 維度相同):
(2)identity mapping 不一樣維度的映射( 與 維度不一樣):
以上是基於全鏈接層的表示,實際上殘差模塊能夠用於卷積層。加法變爲對應 channel 間的兩個 feature map 逐元素相加。
設計 CNN 網絡的規則:
(1)對於輸出 feature map 大小相同的層,有相同數量的 filters,即 channel 數相同;
(2)當 feature map 大小減半時(池化),filters 數量翻倍;
對於殘差網絡,維度匹配的 shortcut 鏈接爲實線,反之爲虛線。維度不匹配時,同等映射(identity mapping)有兩種可選方案:
(1)直接經過 zero padding 來增長 channels(採用 zero feature map 補充)。
(2)增長 filters,直接改變 1x1 卷積的 filters 數目,這樣會增長參數。
在實際中更多采用 zero feature map 補充的方式。
在殘差網絡中,有不少殘差模塊,下圖是一個殘差網絡。每一個殘差模塊包含兩層,相同維度殘差模塊之間採用實線鏈接,不一樣維度殘差模塊之間採用虛線鏈接。網絡的 二、3 層執行 3x3x64 的卷積,他們的 channel 個數相同,因此採用計算: ;網絡的 四、5 層執行 3x3x128 的卷積,與第 3 層的 channel 個數不一樣 (64 和 128),因此採用計算方式: 。其中 是卷積操做(用 128 個 3x3x64 的 filter),用來調整 x 的 channel 個數。
由於研究對象是時間序列,TCN 採用一維的卷積網絡。下圖是 TCN 架構中的因果卷積與空洞卷積,能夠看到每一層 時刻的值只依賴於上一層 時刻的值,體現了因果卷積的特性;而每一層對上一層信息的提取,都是跳躍式的,且逐層 dilated rate 以 2 的指數增加,體現了空洞卷積的特性。因爲採用了空洞卷積,所以每一層都要作 padding(一般狀況下補 0),padding 的大小爲 。
下圖是 TCN 架構中的殘差模塊,輸入經歷空洞卷積、權重歸一化、激活函數、Dropout(兩輪),做爲殘差函數 ;輸入經歷 1x1 卷積 filters,做爲 shortcut 鏈接的 。
下圖是 TCN 的一個例子,當 時,空洞卷積退化爲普通卷積。