《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 可編程邏輯 > 業(yè)界動態(tài) > 學(xué)界 | 新型循環(huán)神經(jīng)網(wǎng)絡(luò)IndRNN:可構(gòu)建更長更深的RNN(附GitHub實現(xiàn))

學(xué)界 | 新型循環(huán)神經(jīng)網(wǎng)絡(luò)IndRNN:可構(gòu)建更長更深的RNN(附GitHub實現(xiàn))

2018-03-20

選自arXiv

作者:Shuai Li等

機器之心編譯

參與:張倩、黃小天


近日,澳大利亞伍倫貢大學(xué)聯(lián)合電子科技大學(xué)提出一種新型的循環(huán)神經(jīng)網(wǎng)絡(luò) IndRNN,不僅可以解決傳統(tǒng) RNN 所存在的梯度消失和梯度爆炸問題,還學(xué)習(xí)長期依賴關(guān)系;此外,借助 relu 等非飽和激活函數(shù),訓(xùn)練之后 IndRNN 會變得非常魯棒,并且通過堆疊多層 IndRNN 還可以構(gòu)建比現(xiàn)有 RNN 更深的網(wǎng)絡(luò)。實驗結(jié)果表明,與傳統(tǒng)的 RNN 和 LSTM 相比,使用 IndRNN 可以在各種任務(wù)中取得更好的結(jié)果。同時本文還給出了 IndRNN 的 TensorFlow 實現(xiàn),詳見文中 GitHub 鏈接。


循環(huán)神經(jīng)網(wǎng)絡(luò) (RNN) [16] 已在動作識別 [8]、場景標(biāo)注 [4] 、語言處理 [5] 等序列學(xué)習(xí)問題中獲得廣泛應(yīng)用,并且成果顯著。與卷積神經(jīng)網(wǎng)絡(luò) ( CNN ) 等前饋網(wǎng)絡(luò)相比,RNN 具有循環(huán)連接,其中最后的隱藏狀態(tài)是到下一狀態(tài)的輸入。狀態(tài)更新可描述如下:

微信圖片_20180320102548.jpg


其中微信圖片_20180320102625.jpg  和微信圖片_20180320102629.jpg分別為時間步 t 的輸入和隱藏狀態(tài)。微信圖片_20180320102732.jpg、微信圖片_20180320102736.jpg 和微信圖片_20180320102739.jpg 分別為當(dāng)前輸入的權(quán)重、循環(huán)輸入以及神經(jīng)元偏差,σ 是神經(jīng)元的逐元素激活函數(shù),N 是該 RNN 層中神經(jīng)元的數(shù)目。

由于循環(huán)權(quán)重矩陣不斷相乘,RNN 的訓(xùn)練面臨著梯度消失和梯度爆炸的問題。長短期記憶 ( LSTM ) [ 10,17 ] 和門控循環(huán)單元 ( GRU ) [5] 等若干 RNN 模型可用來解決這些梯度問題。然而,在這些變體中使用雙曲正切和 Sigmoid 函數(shù)作為激活函數(shù)會導(dǎo)致網(wǎng)絡(luò)層的梯度衰減。因此,構(gòu)建和訓(xùn)練基于 RNN 的深度 LSTM 或 GRU 其實存在困難。

相比之下,使用 relu 等非飽和激活函數(shù)的現(xiàn)有 CNN 可以堆棧到非常深的網(wǎng)絡(luò)中 (例如,使用基本卷積層可以堆疊到 20 層以上;使用殘差連接可以到 100 層以上 [12]),并且仍然在接受高效的訓(xùn)練。雖然在若干研究 [44, 36] 中已經(jīng)嘗試把殘差連接用于 LSTM 模型,但情況并沒有明顯改善 (上述使用雙曲正切和 sigmoid 函數(shù)的 LSTM 的梯度衰減是主要原因)。

此外,現(xiàn)有的 RNN 模型在 ( 1 ) 中使用相同的微信圖片_20180320102826.jpg ,其中的循環(huán)連接連通所有神經(jīng)元。這使得解釋和理解已訓(xùn)練的神經(jīng)元 (如每個神經(jīng)元響應(yīng)哪種模式) 的作用變得困難,因為單個神經(jīng)元 [18] 的輸出的簡單可視化很難在不考慮其它神經(jīng)元的情況下確定一個神經(jīng)元的功能。


本文提出了一種新型循環(huán)神經(jīng)網(wǎng)絡(luò)——獨立循環(huán)神經(jīng)網(wǎng)絡(luò)(IndRNN)。在 IndRNN 中,循環(huán)輸入用 Hadamard 乘積處理為

微信圖片_20180320102833.jpg

。與傳統(tǒng) RNN 相比,它有許多優(yōu)點,其中包括:


通過調(diào)節(jié)基于時間的梯度反向傳播,可以有效地解決梯度消失和爆炸問題。

利用 IndRNN 可以保留長期記憶,處理長序列。實驗表明,IndRNN 可以很好地處理 5000 步以上的序列,而 LSTM 能夠處理的序列還不到 1000 步。

IndRNN 可以很好地利用 relu 等非飽和函數(shù)作為激活函數(shù),并且訓(xùn)練之后非常魯棒。

IndRNN 可以實現(xiàn)高效的多層堆疊以增加網(wǎng)絡(luò)的深度,尤其是在層上具有殘差連接的情況下。語言建模實驗給出了一個 21 層 IndRNN 的實例。

由于各層神經(jīng)元相互獨立,就很容易解釋每層 IndRNN 神經(jīng)元的行為。


實驗表明,IndRNN 在加法問題、序貫 MNIST 分類、語言建模和動作識別等方面的性能明顯優(yōu)于傳統(tǒng)的 RNN 和 LSTM 模型。


3. 獨立循環(huán)神經(jīng)網(wǎng)絡(luò)(IndRNN)

本文提出了一種獨立循環(huán)神經(jīng)網(wǎng)絡(luò) ( IndRNN ),具體描述如下:

微信圖片_20180320103110.jpg


其中循環(huán)權(quán)重 u 是向量,表示 Hadamard 乘積。每一層的每個神經(jīng)元各自獨立,神經(jīng)元之間的連接可以通過堆疊兩層或更多層的 IndRNNs 來實現(xiàn)(見下文)。對于第 n 個神經(jīng)元,隱藏狀態(tài) h_n,t 可以通過下式得出:

微信圖片_20180320103114.jpg


其中 w_n 和 u_n 分別是輸入權(quán)重和循環(huán)權(quán)重的第 n 行。每個神經(jīng)元僅在前一時間步從輸入和它自己的隱藏狀態(tài)中接收信息。也就是說,IndRNN 中的每個神經(jīng)元獨立地處理一種類型的時空模型。傳統(tǒng)上,RNN 被視為時間上的、共享參數(shù)的多層感知器。與傳統(tǒng)的 RNN 不同的是,本文提出的 IndRNN 神經(jīng)網(wǎng)絡(luò)為循環(huán)神經(jīng)網(wǎng)絡(luò)提供了一個新視角,即隨著時間的推移 (即通過 u ) 獨立地聚集空間模式 (即通過 w )。不同神經(jīng)元之間的相關(guān)性可以通過兩層或多層的堆疊來加以利用。在這種情況下,下一層的每個神經(jīng)元處理上一層所有神經(jīng)元的輸出。

4. 多層 IndRNN

如上所述,同一 IndRNN 層中的神經(jīng)元彼此獨立,時間上的跨通道信息通過多層 IndRNN 進行探索。

IndRNN 基本架構(gòu)如圖 1(a) 所示,其中「weight」和「Recurrent+ ReLU」表示以 relu 作為激活函數(shù)的每個步驟的輸入處理和循環(huán)處理。通過堆疊此基本架構(gòu),可以構(gòu)建深度 IndRNN 網(wǎng)絡(luò)。

基于 [13] 中殘差層的「預(yù)激活」類型的殘差 IndRNN 實例見圖 1(b)。在每個時間步,梯度都可以從恒等映射直接傳播到其他層。由于 IndRNN 解決了隨時間累積的梯度爆炸和消失的問題,所以梯度可以在不同的時間步上有效地傳播。因此,網(wǎng)絡(luò)可以更深更長。

微信圖片_20180320103203.jpg


圖 1:( a ) 為 IndRNN 基本架構(gòu)圖解;( b ) 為殘差 IndRNN 架構(gòu)圖解。

5. 實驗

微信圖片_20180320103212.jpg


圖 2:不同序列長度情況下解決相加問題的結(jié)果。所有圖的圖例相同,因此僅在 ( a ) 中示出。

微信圖片_20180320103218.jpg


表 1:序貫 MNIST 和置換 MNIST(誤差率 ( % ) ) 結(jié)果。

微信圖片_20180320103222.jpg


表 2:IndRNN 模型的 PTB-c 結(jié)果與文獻記錄結(jié)果的對比(基于 BPC)。

微信圖片_20180320103226.jpg


表 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ù)的處理。然而,由于眾所周知的梯度消失和爆炸問題以及難以保持長期學(xué)習(xí)的模式,RNN 通常難以訓(xùn)練。長短期記憶 ( LSTM ) 和門控循環(huán)單元 ( GRU ) 被用來解決這些問題,但是雙曲正切函數(shù)和 sigmoid 函數(shù)的使用會導(dǎo)致層上梯度衰減。因此,構(gòu)建可有效訓(xùn)練的深度網(wǎng)絡(luò)頗具挑戰(zhàn)性。此外,每層 RNN 中的所有神經(jīng)元都連接在一起,它們的運行狀況很難解釋。針對這些問題,本文提出了一種新的循環(huán)神經(jīng)網(wǎng)絡(luò)——獨立循環(huán)神經(jīng)網(wǎng)絡(luò) ( IndRNN ),即同一層的神經(jīng)元相互獨立,跨層連接。我們指出,IndRNN 可以通過簡單的調(diào)節(jié)避免梯度爆炸和消失問題,同時允許網(wǎng)絡(luò)學(xué)習(xí)長期依賴關(guān)系。此外,IndRNN 可以使用 relu 等非飽和激活函數(shù),訓(xùn)練之后可變得非常魯棒。通過堆疊多層 IndRNN 可以構(gòu)建比現(xiàn)有 RNN 更深的網(wǎng)絡(luò)。實驗結(jié)果表明,本文中的 IndRNN 能夠處理很長的序列 (超過 5000 個時間步),可以用來構(gòu)建很深的網(wǎng)絡(luò) (實驗中使用了 21 層),并且經(jīng)過訓(xùn)練還可以更加魯棒。與傳統(tǒng)的 RNN 和 LSTM 相比,使用 IndRNN 可以在各種任務(wù)中取得更好的結(jié)果。

GitHub實現(xiàn)

上文是 IndRNN 具體的論文簡介,論文作者其實還提供了該循環(huán)架構(gòu)的 TensorFlow 實現(xiàn)代碼和試驗結(jié)果。我們發(fā)現(xiàn)架構(gòu)代碼中有非常詳盡的參數(shù)解釋,因此各位讀者可參考 ind_rnn_cell.py 文件詳細了解 IndRNN 的基本架構(gòu)。此外,作者表示該實現(xiàn)使用 Python 3.4 和 TensorFlow 1.5 完成,所以我們可以在該環(huán)境或更新的版本測試。

項目地址:https://github.com/batzner/indrnn

1. 用法

將 ind_rnn_cell.py 文件復(fù)制到你的項目目錄中,如下展示了 IndRNN 單元的簡單調(diào)用過程:

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. 原論文中提到的實驗

有關(guān)本文中重構(gòu)「相加問題」的相關(guān)腳本,請參見示例 examples/addition_rnn.py。更多實驗(如 Sequential MNIST)將在今后幾天進行更新與展示。



本文為機器之心編譯,轉(zhuǎn)載請聯(lián)系本公眾號獲得授權(quán)。


本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。