深度學習迴圈神經網路詳解
作者:Jason Brownlee
原文連結:http://machinelearningmastery.com/recurrent-neural-network-algorithms-for-deep-learning/
迴圈神經網路(RNN/recurrent neural network)是一類人工神經網路,其可以通過為網路新增額外的權重來在網路圖(network graph)中建立迴圈,以便維持一個內部狀態。
為神經網路新增狀態的好處是它們將能在序列預測問題中明確地學習和利用背景資訊(context),這類問題包括帶有順序或時間元件的問題。
在這篇文章中,你將踏上了解用於深度學習的迴圈神經網路的旅程。
在讀完這篇文章後,你將瞭解:
用於深度學習的頂級迴圈神經網路的工作方式,其中包括 LSTM、GRU 和 NTM。
頂級 RNN 與人工神經網路中更廣泛的迴圈(recurrence)研究的相關性。
RNN 研究如何在一系列高難度問題上實現了當前最佳的表現。
注意,我們並不會覆蓋每一種可能的迴圈神經網路,而是會重點關注幾種用於深度學習的迴圈神經網路(LSTM、GRU 和 NTM)以及用於理解它們的背景。
那就讓我們開始吧!
概述
我們首先會設定迴圈神經網路領域的場景;然後,我們將深入瞭解用於深度學習的 LSTM、GRU 和 NTM;之後我們會花點時間介紹一些與用於深度學習的 RNN 相關的高階主題。
迴圈神經網路
完全迴圈網路(Fully Recurrent Networks)
遞迴神經網路(Recursive Neural Networks)
神經歷史壓縮器(Neural History Compressor)
長短期記憶網路(LSTM)
門控迴圈單元(GRU)神經網路
神經圖靈機(NTM)
迴圈神經網路
首先讓我們設定場景。
人們普遍認為迴圈(recurrence)是給網路拓撲結構提供一個記憶(memory)。
一種更好的看法是訓練集包含一種樣本——其帶有一組用於迴圈訓練樣本的輸入。這是「傳統的慣例」,比如傳統的多層感知器
X(i) -> y(i)
但是該訓練樣本得到了來自之前的樣本的一組輸入的補充。這是「非傳統的」,比如迴圈神經網路
[X(i-1), X(i)] -> y(i)
和所有的前饋網路正規化一樣,問題的關鍵是如何將輸入層連線到輸出層(包括反饋啟用),然後訓練該結構使其收斂。
現在,讓我們來看看幾種不同的迴圈神經網路,首先從非常簡單的概念開始
完全迴圈網路
多層感知器的分類結構得到了保留,但該架構中的每個元素與其它每個元素之間都有一個加權的連線,並且還有一個與其自身的反饋連線。
並不是所有這些連線都會被訓練,而且其誤差導數的極端非線性意味著傳統的反向傳播無法起效,因此只能使用通過時間的反向傳播(Backpropagation Through Time)方法或隨機梯度下降(SGD)。
另外,可參閱 Bill Willson 的張量積網路(Tensor Product Networks):http://www.cse.unsw.edu.au/~billw/cs9444/tensor-stuff/tensor-intro-04.html
遞迴神經網路
迴圈神經網路是遞迴網路的線性架構變體。
遞迴(recursion)可以促進分層特徵空間中的分支,而且其所得到的網路架構可以在訓練進行中模擬它。
其訓練是通過子梯度方法(sub-gradient methods)使用隨機梯度實現的。
R. Socher 等人 2011 年的論文《Parsing Natural Scenes and Natural Language with Recursive Neural Networks》中使用 R 語言對其進行了詳細的描述,參閱:http://machinelearning.wustl.edu/mlpapers/paper_files/ICML2011Socher_125.pdf
神經歷史壓縮器
在 1991 年,Schmidhuber 首先報告了一種非常深度的學習器,其可以通過一種 RNN 層次的無監督預訓練來在數百個神經層上執行功勞分配(credit assignment)。
每個 RNN 都是無監督訓練的,可以預測下一個輸入。然後只有產生錯誤的輸入會被前饋,將新資訊傳送到該層次結構中的下一個 RNN,然後以更慢的、自組織的時間尺度進行處理。
事實表明不會有資訊丟失,只是會有壓縮。該 RNN stack 是資料的一個「深度生成模型(deep generative model)。這些資料可以根據其壓縮形式重建。
參閱 J. Schmidhuber 等人 2014 年的論文《Deep Learning in Neural Networks: An Overview》:http://www2.econ.iastate.edu/tesfatsi/DeepLearningInNeuralNetworksOverview.JSchmidhuber2015.pdf
當誤差被反向傳播通過大型結構時,非線性導數的極限(extremity)的計算會增長,會使功勞分配(credit assignment)困難甚至是不可能,使得反向傳播失敗。
長短期記憶網路
使用傳統的通過時間的反向傳播(BPTT)或實時迴圈學習(RTTL/Real Time Recurrent Learning),在時間中反向流動的誤差訊號往往會爆炸(explode)或消失(vanish)
反向傳播誤差的時間演化指數式地依賴於權重的大小。權重爆炸可能會導致權重振盪,而權重消失則可能導致學習彌合時間滯後並耗費過多時間或根本不工作。
LSTM 是一種全新的迴圈網路架構,可用一種合適的基於梯度的學習演算法進行訓練。
LSTM 是為克服誤差反向流動問題(error back-flow problem)而設計的。它可以學習橋接超過 1000 步的時間間隔。
在有噪聲的、不可壓縮的輸入序列存在,而沒有短時間滯後能力的損失時,這是真實的。
通過一種有效的基於梯度的演算法,誤差反向流動問題可以克服,因為該演算法讓網路架構可以強迫常量(因此不會有爆炸或消失)誤差流過特殊單元的內部狀態。這些單元可以減少「輸入權重衝突(Input Weight Conflict)」和「輸出權重衝突(Output Weight Conflict)」的影響。
輸入權重衝突:如果輸入是非零的,則同樣的輸入權重必須被同時用於儲存特定的輸入並忽略其它輸入,那麼這就將會經常收到有衝突的權重更新訊號。
這些訊號將會試圖使該權重參與儲存輸入並保護該輸入。這種衝突會使學習變得困難,並且需要一個對背景更敏感的機制來通過輸入權重控制「寫入操作(write operations)」。
輸出權重衝突:只要一個單元的輸出是非零的,那麼這個單元的輸出連線的權重就將吸引在序列處理過程中生成的有衝突的權重更新訊號。
這些訊號將試圖使正在輸出的權重參與進來,獲取存在在處理單元中資訊,並且在不同的時間保護後續的單元免受正被饋送的單元的輸出的干擾。
這些衝突並不特定於長期滯後(long-term lags),並且也可以同樣影響到短期滯後(short-term lags)。值得注意的是,隨著滯後的增長,儲存的資訊必須被保護起來免受干擾,尤其是在學習的高階階段。
網路架構:不同型別的單元都可能傳遞關於網路當前狀態的有用資訊。比如說,一個輸入門(輸出門)可能會使用來自其它記憶單元(memory cell)的輸入來決定是否儲存(讀取)其記憶單元中的特定資訊。
記憶單元包含門(gate)。門特定於它們調解的連線。輸入門是為了糾正輸入權重衝突,而輸出門是為了消除輸出權重衝突。
門:具體來說,為了緩解輸入和輸出權重衝突以及干擾,我們引入了一個乘法輸入門單元來保護儲存的記憶內容免受不相關輸入的干擾,還引入了一個乘法輸出門單元來保護其它單元免受儲存中當前不相關記憶內容的干擾。
LSTM 架構示例。這個 LSTM 網路帶有 8 個輸入單元、4 個輸出單元和 2 個大小為 2 的記憶單元模組。in1 是指輸入門,out1 是指輸出門,cell1 = block1 是指 block 1 的第一個記憶單元。來自 1997 年的《Long Short-Term Memory》
因為處理元素的多樣性和反饋連線的,LSTM 中的連線比多層感知器的連線複雜。
記憶單元模組:記憶單元共享同一個輸入門和同一個輸出門,構成一種名叫記憶單元模組(memory cell block)的結構。
記憶單元模組有利於資訊儲存;就像傳統的神經網路一樣,在單個單元內編碼一個分散式輸入可不是一件容易的事情。一個大小為 1 的記憶單元模組就是一個簡單的記憶單元。
學習(Learning):一種考慮了由輸入和輸出門導致的修改過的、乘法動態的實時迴圈學習(RTRL/Real Time Recurrent Learning)的變體被用於確保通過記憶單元誤差的內部狀態反向傳播到達「記憶單元網路輸入(memory cell net inputs)」的非衰減誤差(non-decaying error)不會在時間中被進一步反向傳播。
猜測(Guessing):這種隨機方法可以超越許多時間滯後演算法。事實已經說明,之前的工作中所使用的許多長時間滯後任務可以通過簡單的隨機權重猜測得到比提出的演算法更快的解決。
參見 S. Hochreiter 和 J. Schmidhuber《Long-Short Term Memory》:http://dl.acm.org/citation.cfm?id=1246450
LSTM 迴圈神經網路最有意思的應用出現在語言處理領域。更全面的描述可參閱 Gers 的論文 :
F. Gers 和 J. Schmidhuber 2001 年的論文《LSTM Recurrent Networks Learn Simple Context Free and Context Sensitive Languages》:ftp://ftp.idsia.ch/pub/juergen/L-IEEE.pdf
F. Gers 2001 年的博士論文《Long Short-Term Memory in Recurrent Neural Networks》:http://www.felixgers.de/papers/phd.pdf
LSTM 的侷限性
LSTM 有效的截斷版本無法輕鬆解決類似於「強延遲的異或(strongly delayed XOR)」這樣的問題。
每個記憶單元模組都需要一個輸入門和一個輸出門。並不一定需要其它迴圈方法。
在記憶單元內穿過「常量誤差傳送帶(Constant Error Carrousels)」的常量誤差流可以得到與傳統的前饋架構(會一次性獲得整個輸入串)一樣的效果。
和其它前饋方法一樣,LSTM 也有「regency」概念上的缺陷。如果需要精密的計數時間步驟,那麼可能就需要額外的計數機制。
LSTM 的優點
該演算法橋接長時間滯後的能力來自其架構的記憶單元中的常量誤差反向傳播。
LSTM 可以近似有噪聲的問題域、分散式表徵和連續值。
LSTM 可以很好地泛化其所考慮的問題域。這是很重要的,因為有的任務無法用已有的迴圈網路解決。
在問題域上對網路引數進行微調看起來是不必要的。
在每個權重和時間步的更新複雜度方面,LSTM 基本上就等於 BPTT。
LSTM 很強大,在機器翻譯等領域實現了當前最佳的結果。
門控迴圈單元神經網路
門控迴圈單元神經網路已經在序列和時間資料上得到了成功的應用。
最適合語音識別、自然語言處理和機器翻譯。與 LSTM 一起,它們在長序列問題領域表現優良。
門控(gating)被認為是在 LSTM 主題中,涉及到一個門控網路生成訊號來控制當前輸入和之前記憶發生作用的方式,以更新當前的啟用,從而更新當前的網路狀態。
門本身是自我加權的,會在整個學習階段中根據一個演算法有選擇性地更新。
門網路會增加計算複雜度,從而會增加引數化(parameterization),進而引入額外的計算成本。
LSTM RNN 架構將簡單 RNN 的計算用作內部記憶單元(狀態)的中間候選項。門控迴圈單元(GRU)RNN 將 LSTM RNN 模型的門控訊號減少到了 2 個。這兩個門分別被稱為更新門(update gate)和重置門(reset gate)。
GRU(和 LSTM)RNN 的門控機制和在引數化方面的簡單 RNN 一樣。對應這些門的權重也使用 BPTT 隨機梯度下降來更新,因為其要試圖最小化成本函式。
每個引數更新都將涉及到與整體網路的狀態相關的資訊。這可能會有不利影響。
門控的概念可使用三種新變體的門控機制來探索和擴充套件。
這三種門控變體為:GRU1(其中僅使用之前的隱藏狀態和偏置來計算每個門——、GRU2(其中僅使用之前的隱藏狀態來計算每個門—)和 GRU3(其中僅使用偏置來計算每個門)。我們可以觀察到引數顯著減少,其中 GRU3 的引數數量最小。
這三種變體和 GRU RNN 在手寫數字的 MNIST 資料庫和 IMDB 電影評論資料集上進行了基準測試。
從 MNIST 資料集生成了 2 個序列長度,而從 IMDB 資料集生成了 1 個序列長度。
這些門的主要驅動訊號似乎是(迴圈)狀態,因為其包含關於其它訊號的基本資訊。
隨機梯度下降的使用隱含地攜帶了有關網路狀態的資訊。這可以解釋僅在門訊號中使用偏置的相對成功,因為其自適應更新攜帶了有關網路狀態的資訊。
門控變體可使用有限的拓撲結構評估來探索門控機制。
更多資訊請參閱:
R. Dey 和 F. M. Salem 2017 年的論文《Gate-Variants of Gated Recurrent Unit (GRU) Neural Networks》:https://arxiv.org/ftp/arxiv/papers/1701/1701.05923.pdf
J. Chung 等人 2014 年的論文《Empirical Evaluation of Gated Recurrent Neural Networks on Sequence Modeling》:https://pdfs.semanticscholar.org/2d9e/3f53fcdb548b0b3c4d4efb197f164fe0c381.pdf
神經圖靈機
神經圖靈機通過將神經網路與外部記憶資源耦合而對該神經網路的能力進行了延展——它們可以通過注意(attention)過程與外部記憶資源互動。
這種組合的系統類似於圖靈機或馮·諾依曼結構,但它是端到端可微分的,使得其可以有效地使用梯度下降進行訓練。
初步的結果表明神經圖靈機可以根據輸入和輸出樣本推理得到基本的演算法,比如複製、排序和聯想回憶(associative recall)。
RNN 相比於其它機器學習方法的突出之處在於其在長時間範圍內學習和執行資料的複雜轉換的能力。此外,我們都知道 RNN 是圖靈完備的,因此其有能力模擬任意程式,只要連線方式合適即可。
標準 RNN 的能力被擴充套件以簡化演算法任務的解決方案。這種豐富性主要是通過一個巨大的可定址的記憶實現的,所以通過類比於圖靈的通過有線儲存磁帶實現的有限狀態機(finite-state machine)的豐富性,其被命名為神經圖靈機(NTM)。
和圖靈機不同,神經圖靈機是一種可微分的計算機,可以通過梯度下降訓練,從而為學習程式提供了一種實用的機制。
神經圖靈機架構。NTM 架構大體上如上所示。在每一個更新迴圈中,控制器網路接收一個來自外部環境的輸入並給出一個輸出作為響應。它也會通過一系列並行的讀寫頭來讀寫一個記憶矩陣(memory matrix)。虛線是 NTM 迴路與外部世界的分界線。來自 2014 年的《Neural Turing Machines》
關鍵在於,該架構的每個元件都是可微分的,使其可以直接使用梯度下降進行訓練。這可以通過定義「模糊(blurry)」的讀寫操作來實現,其可以或多或少地與記憶中的所有元素進行互動(而非像普通的圖靈機或數字計算機那樣處理單個元素)。
更多資訊請參閱:
A. Graves 等人 2014 年的《Neural Turing Machines》:https://arxiv.org/pdf/1410.5401.pdf
R. Greve 等人 2016 年的《Evolving Neural Turing Machines for Reward-based Learning》:http://sebastianrisi.com/wp-content/uploads/greve_gecco16.pdf
NTM 實驗
複製(copy)任務可以測試 NTM 是否可以儲存和回撥長序列的任意資訊。向該網路提供一個隨機二進位制向量的輸入序列,後面跟著一個分隔符。
該網路被訓練用來複制 8 位的隨機向量序列,其中序列長度是在 1 到 20 之間隨機的。目標序列就僅僅是輸入序列的副本而已(沒有分隔符)。
重複複製任務是複製任務的擴充套件,即要求該網路輸出被複制的序列給定的次數,然後給出一個序列終止標誌。這個任務的主要目的是看 NTM 是否可以學習簡單的巢狀函式。
該網路的輸入是隨機長度的隨機二進位制向量序列,後面跟著一個標量值,表示我們想要的副本的數量,其出現在一個單獨的輸入通道上。
聯想記憶任務(associative recall tasks)涉及到組織間接產生的資料,即當一個資料項指向另一個項的時候。要建立一個項列表,使得查詢其中一個項時需要該網路返回後續的項。
我們定義了一個二進位制向量序列,通過分隔符對其左右進行了限制。在幾個項被傳播到該網路中後,通過展示隨機項對該網路進行查詢,看該網路是否可以產生下一個項。
動態 N-gram 任務測試的是 NTM 是否可以通過使用記憶作為可覆寫的表格來快速適應新的預測分佈;該網路可以使用這個表格來持續對轉換統計保持計數,從而模擬傳統的 N-gram 模型。
考慮在二進位制序列上的所有可能的 6-gram 分佈的集合。每個 6-gram 分佈都可以被表達成一個有 32 個數字的表格,其基於所有可能長度的 5 個二進位制歷史指定了下一位(bit)為 1 的概率。通過使用當前的查詢表繪製 200 個連續的位,會生成一個特定的訓練序列。該網路對該序列進行觀察,一次一位,然後被要求預測出下一位。
優先順序排序任務測試的是 NTM 的排序能力。該網路的輸入是一個隨機二進位制向量的序列,以及每個向量的一個標量優先順序評分。該優先順序是在 [-1, 1] 範圍內均勻分佈的。目標序列是根據它們的優先順序排序後的二進位制向量序列。
NTM 有 LSTM 的前饋結構作為它們的元件之一。
總結
你通過這篇文章瞭解了用於深度學習的迴圈神經網路。具體來說,你瞭解了:
用於深度學習的頂級迴圈神經網路的工作方式,其中包括 LSTM、GRU 和 NTM。
頂級 RNN 與人工神經網路中更廣泛的迴圈(recurrence)研究的相關性。
RNN 研究如何在一系列高難度問題上實現了當前最佳的表現。
《機器學習集訓營 第五期》開始報名,BAT級工業專案實戰輔導 + 一對一面試求職輔導,並提供一年GPU雲實驗平臺免費使用;北京、上海、深圳、廣州、杭州、瀋陽、濟南、鄭州、成都、武漢、西安十一城同步開營,點選“閱讀原文”試聽
相關文章
- 深度學習之RNN(迴圈神經網路)深度學習RNN神經網路
- NLP與深度學習(二)迴圈神經網路深度學習神經網路
- 深度學習四從迴圈神經網路入手學習LSTM及GRU深度學習神經網路
- 迴圈神經網路神經網路
- 深度學習與CV教程(11) | 迴圈神經網路及視覺應用深度學習神經網路視覺
- 迴圈神經網路(RNN)神經網路RNN
- 迴圈神經網路 RNN神經網路RNN
- 動畫圖解迴圈神經網路動畫圖解神經網路
- 【神經網路篇】--RNN遞迴神經網路初始與詳解神經網路RNN遞迴
- pytorch--迴圈神經網路PyTorch神經網路
- 迴圈神經網路介紹神經網路
- 【深度學習原理第4篇】卷積神經網路詳解(CNN)深度學習卷積神經網路CNN
- 深度學習與圖神經網路深度學習神經網路
- 【深度學習】神經網路入門深度學習神經網路
- 再聊神經網路與深度學習神經網路深度學習
- AI之(神經網路+深度學習)AI神經網路深度學習
- 【深度學習篇】--神經網路中的卷積神經網路深度學習神經網路卷積
- 第五週:迴圈神經網路神經網路
- 精講深度學習RNN三大核心點,三分鐘掌握迴圈神經網路深度學習RNN神經網路
- 【機器學習】李宏毅——Recurrent Neural Network(迴圈神經網路)機器學習神經網路
- 動手學深度學習第十四課:實現、訓練和應用迴圈神經網路深度學習神經網路
- 深度學習教程 | 深層神經網路深度學習神經網路
- 【深度學習】1.4深層神經網路深度學習神經網路
- 深度學習三:卷積神經網路深度學習卷積神經網路
- 常見迴圈神經網路結構神經網路
- (一)線性迴圈神經網路(RNN)神經網路RNN
- 迴圈神經網路(Recurrent Neural Network,RNN)神經網路RNN
- 深度學習與圖神經網路學習分享:CNN 經典網路之-ResNet深度學習神經網路CNN
- 深度學習——LeNet卷積神經網路初探深度學習卷積神經網路
- 深度學習之step by step搭建神經網路深度學習神經網路
- 深度學習之上,圖神經網路(GNN )崛起深度學習神經網路GNN
- 深度學習筆記------卷積神經網路深度學習筆記卷積神經網路
- 深度學習卷積神經網路筆記深度學習卷積神經網路筆記
- 深度學習小課堂:如何利用遞迴神經網路生成文字?深度學習遞迴神經網路
- 深度學習經典卷積神經網路之AlexNet深度學習卷積神經網路
- 4.5 RNN迴圈神經網路(recurrent neural network)RNN神經網路
- (二)非線性迴圈神經網路(RNN)神經網路RNN
- YJango的迴圈神經網路——實現LSTMGo神經網路