學(xué)界 | 新型循環(huán)神經(jīng)網(wǎng)絡(luò)IndRNN:可構(gòu)建更長(zhǎng)更深的RNN(附GitHub實(shí)現(xiàn))
2018-03-20
選自arXiv
作者:Shuai Li等
機(jī)器之心編譯
參與:張倩、黃小天
近日,,澳大利亞伍倫貢大學(xué)聯(lián)合電子科技大學(xué)提出一種新型的循環(huán)神經(jīng)網(wǎng)絡(luò) IndRNN,,不僅可以解決傳統(tǒng) RNN 所存在的梯度消失和梯度爆炸問(wèn)題,還學(xué)習(xí)長(zhǎng)期依賴(lài)關(guān)系,;此外,,借助 relu 等非飽和激活函數(shù),訓(xùn)練之后 IndRNN 會(huì)變得非常魯棒,,并且通過(guò)堆疊多層 IndRNN 還可以構(gòu)建比現(xiàn)有 RNN 更深的網(wǎng)絡(luò),。實(shí)驗(yàn)結(jié)果表明,與傳統(tǒng)的 RNN 和 LSTM 相比,,使用 IndRNN 可以在各種任務(wù)中取得更好的結(jié)果,。同時(shí)本文還給出了 IndRNN 的 TensorFlow 實(shí)現(xiàn),,詳見(jiàn)文中 GitHub 鏈接。
循環(huán)神經(jīng)網(wǎng)絡(luò) (RNN) [16] 已在動(dòng)作識(shí)別 [8],、場(chǎng)景標(biāo)注 [4] ,、語(yǔ)言處理 [5] 等序列學(xué)習(xí)問(wèn)題中獲得廣泛應(yīng)用,并且成果顯著,。與卷積神經(jīng)網(wǎng)絡(luò) ( CNN ) 等前饋網(wǎng)絡(luò)相比,,RNN 具有循環(huán)連接,其中最后的隱藏狀態(tài)是到下一狀態(tài)的輸入,。狀態(tài)更新可描述如下:
其中 和分別為時(shí)間步 t 的輸入和隱藏狀態(tài),。、 和 分別為當(dāng)前輸入的權(quán)重,、循環(huán)輸入以及神經(jīng)元偏差,,σ 是神經(jīng)元的逐元素激活函數(shù),N 是該 RNN 層中神經(jīng)元的數(shù)目,。
由于循環(huán)權(quán)重矩陣不斷相乘,,RNN 的訓(xùn)練面臨著梯度消失和梯度爆炸的問(wèn)題。長(zhǎng)短期記憶 ( LSTM ) [ 10,,17 ] 和門(mén)控循環(huán)單元 ( GRU ) [5] 等若干 RNN 模型可用來(lái)解決這些梯度問(wèn)題,。然而,在這些變體中使用雙曲正切和 Sigmoid 函數(shù)作為激活函數(shù)會(huì)導(dǎo)致網(wǎng)絡(luò)層的梯度衰減,。因此,,構(gòu)建和訓(xùn)練基于 RNN 的深度 LSTM 或 GRU 其實(shí)存在困難。
相比之下,,使用 relu 等非飽和激活函數(shù)的現(xiàn)有 CNN 可以堆棧到非常深的網(wǎng)絡(luò)中 (例如,,使用基本卷積層可以堆疊到 20 層以上;使用殘差連接可以到 100 層以上 [12]),,并且仍然在接受高效的訓(xùn)練,。雖然在若干研究 [44, 36] 中已經(jīng)嘗試把殘差連接用于 LSTM 模型,但情況并沒(méi)有明顯改善 (上述使用雙曲正切和 sigmoid 函數(shù)的 LSTM 的梯度衰減是主要原因),。
此外,,現(xiàn)有的 RNN 模型在 ( 1 ) 中使用相同的 ,其中的循環(huán)連接連通所有神經(jīng)元,。這使得解釋和理解已訓(xùn)練的神經(jīng)元 (如每個(gè)神經(jīng)元響應(yīng)哪種模式) 的作用變得困難,,因?yàn)閱蝹€(gè)神經(jīng)元 [18] 的輸出的簡(jiǎn)單可視化很難在不考慮其它神經(jīng)元的情況下確定一個(gè)神經(jīng)元的功能。
本文提出了一種新型循環(huán)神經(jīng)網(wǎng)絡(luò)——獨(dú)立循環(huán)神經(jīng)網(wǎng)絡(luò)(IndRNN),。在 IndRNN 中,,循環(huán)輸入用 Hadamard 乘積處理為
。與傳統(tǒng) RNN 相比,,它有許多優(yōu)點(diǎn),,其中包括:
通過(guò)調(diào)節(jié)基于時(shí)間的梯度反向傳播,,可以有效地解決梯度消失和爆炸問(wèn)題。
利用 IndRNN 可以保留長(zhǎng)期記憶,,處理長(zhǎng)序列,。實(shí)驗(yàn)表明,IndRNN 可以很好地處理 5000 步以上的序列,,而 LSTM 能夠處理的序列還不到 1000 步,。
IndRNN 可以很好地利用 relu 等非飽和函數(shù)作為激活函數(shù),并且訓(xùn)練之后非常魯棒,。
IndRNN 可以實(shí)現(xiàn)高效的多層堆疊以增加網(wǎng)絡(luò)的深度,,尤其是在層上具有殘差連接的情況下,。語(yǔ)言建模實(shí)驗(yàn)給出了一個(gè) 21 層 IndRNN 的實(shí)例,。
由于各層神經(jīng)元相互獨(dú)立,就很容易解釋每層 IndRNN 神經(jīng)元的行為,。
實(shí)驗(yàn)表明,,IndRNN 在加法問(wèn)題、序貫 MNIST 分類(lèi),、語(yǔ)言建模和動(dòng)作識(shí)別等方面的性能明顯優(yōu)于傳統(tǒng)的 RNN 和 LSTM 模型,。
3. 獨(dú)立循環(huán)神經(jīng)網(wǎng)絡(luò)(IndRNN)
本文提出了一種獨(dú)立循環(huán)神經(jīng)網(wǎng)絡(luò) ( IndRNN ),具體描述如下:
其中循環(huán)權(quán)重 u 是向量,,表示 Hadamard 乘積,。每一層的每個(gè)神經(jīng)元各自獨(dú)立,神經(jīng)元之間的連接可以通過(guò)堆疊兩層或更多層的 IndRNNs 來(lái)實(shí)現(xiàn)(見(jiàn)下文),。對(duì)于第 n 個(gè)神經(jīng)元,,隱藏狀態(tài) h_n,t 可以通過(guò)下式得出:
其中 w_n 和 u_n 分別是輸入權(quán)重和循環(huán)權(quán)重的第 n 行。每個(gè)神經(jīng)元僅在前一時(shí)間步從輸入和它自己的隱藏狀態(tài)中接收信息,。也就是說(shuō),,IndRNN 中的每個(gè)神經(jīng)元獨(dú)立地處理一種類(lèi)型的時(shí)空模型。傳統(tǒng)上,,RNN 被視為時(shí)間上的,、共享參數(shù)的多層感知器。與傳統(tǒng)的 RNN 不同的是,,本文提出的 IndRNN 神經(jīng)網(wǎng)絡(luò)為循環(huán)神經(jīng)網(wǎng)絡(luò)提供了一個(gè)新視角,,即隨著時(shí)間的推移 (即通過(guò) u ) 獨(dú)立地聚集空間模式 (即通過(guò) w )。不同神經(jīng)元之間的相關(guān)性可以通過(guò)兩層或多層的堆疊來(lái)加以利用,。在這種情況下,,下一層的每個(gè)神經(jīng)元處理上一層所有神經(jīng)元的輸出。
4. 多層 IndRNN
如上所述,,同一 IndRNN 層中的神經(jīng)元彼此獨(dú)立,,時(shí)間上的跨通道信息通過(guò)多層 IndRNN 進(jìn)行探索,。
IndRNN 基本架構(gòu)如圖 1(a) 所示,其中「weight」和「Recurrent+ ReLU」表示以 relu 作為激活函數(shù)的每個(gè)步驟的輸入處理和循環(huán)處理,。通過(guò)堆疊此基本架構(gòu),,可以構(gòu)建深度 IndRNN 網(wǎng)絡(luò)。
基于 [13] 中殘差層的「預(yù)激活」類(lèi)型的殘差 IndRNN 實(shí)例見(jiàn)圖 1(b),。在每個(gè)時(shí)間步,,梯度都可以從恒等映射直接傳播到其他層。由于 IndRNN 解決了隨時(shí)間累積的梯度爆炸和消失的問(wèn)題,,所以梯度可以在不同的時(shí)間步上有效地傳播,。因此,網(wǎng)絡(luò)可以更深更長(zhǎng),。
圖 1:( a ) 為 IndRNN 基本架構(gòu)圖解,;( b ) 為殘差 IndRNN 架構(gòu)圖解。
5. 實(shí)驗(yàn)
圖 2:不同序列長(zhǎng)度情況下解決相加問(wèn)題的結(jié)果,。所有圖的圖例相同,,因此僅在 ( a ) 中示出。
表 1:序貫 MNIST 和置換 MNIST(誤差率 ( % ) ) 結(jié)果,。
表 2:IndRNN 模型的 PTB-c 結(jié)果與文獻(xiàn)記錄結(jié)果的對(duì)比(基于 BPC),。
表 3:所有基于骨架的方法在 NTU RGB+D 數(shù)據(jù)集上的結(jié)果。
論文:Independently Recurrent Neural Network (IndRNN): Building A Longer and Deeper RNN
論文鏈接:https://arxiv.org/abs/1803.04831
摘要:循環(huán)神經(jīng)網(wǎng)絡(luò) ( RNN ) 已廣泛應(yīng)用于序列數(shù)據(jù)的處理,。然而,,由于眾所周知的梯度消失和爆炸問(wèn)題以及難以保持長(zhǎng)期學(xué)習(xí)的模式,RNN 通常難以訓(xùn)練,。長(zhǎng)短期記憶 ( LSTM ) 和門(mén)控循環(huán)單元 ( GRU ) 被用來(lái)解決這些問(wèn)題,,但是雙曲正切函數(shù)和 sigmoid 函數(shù)的使用會(huì)導(dǎo)致層上梯度衰減。因此,,構(gòu)建可有效訓(xùn)練的深度網(wǎng)絡(luò)頗具挑戰(zhàn)性,。此外,每層 RNN 中的所有神經(jīng)元都連接在一起,,它們的運(yùn)行狀況很難解釋,。針對(duì)這些問(wèn)題,本文提出了一種新的循環(huán)神經(jīng)網(wǎng)絡(luò)——獨(dú)立循環(huán)神經(jīng)網(wǎng)絡(luò) ( IndRNN ),,即同一層的神經(jīng)元相互獨(dú)立,,跨層連接。我們指出,,IndRNN 可以通過(guò)簡(jiǎn)單的調(diào)節(jié)避免梯度爆炸和消失問(wèn)題,,同時(shí)允許網(wǎng)絡(luò)學(xué)習(xí)長(zhǎng)期依賴(lài)關(guān)系。此外,,IndRNN 可以使用 relu 等非飽和激活函數(shù),,訓(xùn)練之后可變得非常魯棒,。通過(guò)堆疊多層 IndRNN 可以構(gòu)建比現(xiàn)有 RNN 更深的網(wǎng)絡(luò)。實(shí)驗(yàn)結(jié)果表明,,本文中的 IndRNN 能夠處理很長(zhǎng)的序列 (超過(guò) 5000 個(gè)時(shí)間步),,可以用來(lái)構(gòu)建很深的網(wǎng)絡(luò) (實(shí)驗(yàn)中使用了 21 層),并且經(jīng)過(guò)訓(xùn)練還可以更加魯棒,。與傳統(tǒng)的 RNN 和 LSTM 相比,,使用 IndRNN 可以在各種任務(wù)中取得更好的結(jié)果。
GitHub實(shí)現(xiàn)
上文是 IndRNN 具體的論文簡(jiǎn)介,,論文作者其實(shí)還提供了該循環(huán)架構(gòu)的 TensorFlow 實(shí)現(xiàn)代碼和試驗(yàn)結(jié)果,。我們發(fā)現(xiàn)架構(gòu)代碼中有非常詳盡的參數(shù)解釋?zhuān)虼烁魑蛔x者可參考 ind_rnn_cell.py 文件詳細(xì)了解 IndRNN 的基本架構(gòu)。此外,,作者表示該實(shí)現(xiàn)使用 Python 3.4 和 TensorFlow 1.5 完成,,所以我們可以在該環(huán)境或更新的版本測(cè)試。
項(xiàng)目地址:https://github.com/batzner/indrnn
1. 用法
將 ind_rnn_cell.py 文件復(fù)制到你的項(xiàng)目目錄中,,如下展示了 IndRNN 單元的簡(jiǎn)單調(diào)用過(guò)程:
from ind_rnn_cell import IndRNNCell
# Regulate each neuron's recurrent weight as recommended in the paper
recurrent_max = pow(2, 1 / TIME_STEPS)
cell = MultiRNNCell([IndRNNCell(128, recurrent_max_abs=recurrent_max),
IndRNNCell(128, recurrent_max_abs=recurrent_max)])
output, state = tf.nn.dynamic_rnn(cell, input_data, dtype=tf.float32)
...
2. 原論文中提到的實(shí)驗(yàn)
有關(guān)本文中重構(gòu)「相加問(wèn)題」的相關(guān)腳本,,請(qǐng)參見(jiàn)示例 examples/addition_rnn.py,。更多實(shí)驗(yàn)(如 Sequential MNIST)將在今后幾天進(jìn)行更新與展示,。
本文為機(jī)器之心編譯,轉(zhuǎn)載請(qǐng)聯(lián)系本公眾號(hào)獲得授權(quán),。