十 | 門控循環神經網絡LSTM與GRU(附python演練)

編輯 | 安可

出品 | 磐創AI技術團隊

目錄:

  • 門控循環神經網絡簡介
  • 長短期記憶網絡(LSTM)
  • 門控制循環單元(GRU)
  • TensorFlow實現LSTM和GRU
  • 參考文獻

一、 門控循環神經網絡

門控循環神經網絡在簡單循環神經網絡的基礎上對網絡的結構做了調整,加入了門控機制,用來控制神經網絡中信息的傳遞。門控機制可以用來控制記憶單元中的信息有多少需要保留,有多少需要丟棄,新的狀態信息又有多少需要保存到記憶單元中等。這使得門控循環神經網絡可以學習跨度相對較長的依賴關係,而不會出現梯度消失和梯度爆炸的問題。如果從數學的角度來理解,一般結構的循環神經網絡中,網絡的狀態

之間是非線性的關係,並且參數W在每個時間步共享,這是導致梯度爆炸和梯度消失的根本原因。門控循環神經網絡解決問題的方法就是在狀態

之間添加一個線性的依賴關係,從而避免梯度消失或梯度爆炸的問題。

二、 長短期記憶網絡(LSTM)

長短期記憶網絡(Long Short-term Memory,簡稱LSTM)的結構如圖1所示,LSTM[1]的網絡結構看上去很複雜,但實際上如果將每一部分拆開來看,其實也很簡單。在一般的循環神經網絡中,記憶單元沒有衡量信息的價值量的能力,因此,記憶單元對於每個時刻的狀態信息等同視之,這就導致了記憶單元中往往存儲了一些無用的信息,而真正有用的信息卻被這些無用的信息擠了出去。LSTM正是從這一點出發做了相應改進,和一般結構的循環神經網絡只有一種網絡狀態不同,LSTM中將網絡的狀態分爲內部狀態和外部狀態兩種。LSTM的外部狀態類似於一般結構的循環神經網絡中的狀態,即該狀態既是當前時刻隱藏層的輸出,也是下一時刻隱藏層的輸入。這裏的內部狀態則是LSTM特有的。

在LSTM中有三個稱之爲“門”的控制單元,分別是輸入門(input gate)、輸出門(output gate)和遺忘門(forget gate),其中輸入門和遺忘門是LSTM能夠記憶長期依賴的關鍵。輸入門決定了當前時刻網絡的狀態有多少信息需要保存到內部狀態中,而遺忘門則決定了過去的狀態信息有多少需要丟棄。最後,由輸出門決定當前時刻的內部狀態有多少信息需要輸出給外部狀態。

圖1 單個時間步的LSTM網絡結構示意圖

從上圖我們可以看到,一個LSTM單元在每個時間步都會接收三個輸入,當前時刻的輸入,來自上一時刻的內部狀態

以及上一時刻的外部狀態

。其中,

同時作爲三個“門”的輸入。

爲Logistic函數。

接下來我們將分別介紹LSTM中的幾個“門”結構。首先看一下輸入門,如圖2所示:

圖2 LSTM的輸入門結構示意圖

LSTM中也有類似於RNN(這裏特指前面介紹過的簡單結構的循環神經網絡)的前向計算過程,如圖2,如果去掉輸入門部分,剩下的部分其實就是RNN中輸入層到隱藏層的結構,“tanh”可以看作是隱藏層的激活函數,從“tanh”節點輸出的值爲:

式1

上式中,參數的下標“c”代表這是“tanh”節點的參數,同理,輸入門參數的下標爲“i”,輸出門參數的下標爲“o”,遺忘門參數的下標爲“f”。上式與簡單結構循環神經網絡中隱藏層的計算公式一樣。在LSTM中,我們將“tanh”節點的輸出稱爲候選狀態

輸入門是如何實現其控制功能的?輸入門的計算公式如下:

式2

由於

爲Logistic函數,其值域爲(0,1),因此輸入門的值就屬於(0,1)。LSTM將“tanh”節點的輸出(即候選狀態

)乘上輸入門的值後再用來更新內部狀態。如果的值趨向於0的話,那麼候選狀態

就只有極少量的信息會保存到內部狀態中,相反的,如果的值

趨近於1,那麼候選狀態

就會有更多的信息被保存。輸入門就是通過這種方法來決定保存多少中的信息,

值的大小就代表了新信息的重要性,不重要的信息就不會被保存到內部狀態中.

再來看遺忘門,如圖3所示:

圖3 LSTM的遺忘門結構示意圖

遺忘門的計算公式如下:

式3

和輸入門是同樣的方法,通過的值來控制上一時刻的內部狀態有多少信息需要“遺忘”。當

的值越趨近於0,被遺忘的信息越多。同樣的原理,我們來看“輸出門”,如圖4所示。輸出門的計算公式如下:

式4

的值月接近於1,則當前時刻的內部狀態

就會有更多的信息輸出給當前時刻的外部狀態

圖4 LSTM的輸出門結構示意圖

以上就是LSTM的整個網絡結構以及各個“門”的計算公式。通過選擇性的記憶和遺忘狀態信息,使的LSTM要比一般的循環神經網絡能夠學習更長時間間隔的依賴關係。根據不同的需求,LSTM還有着很多不同的變體版本,這些版本的網絡結構大同小異,但都在其特定的應用中表現出色。

三、 門控制循環單元(GRU)

門控制循環單元(gated recurrent unit,GRU)網絡是另一種基於門控制的循環神經網絡,GRU[2]的網絡結構相比LSTM要簡單一些。GRU將LSTM中的輸入門和遺忘門合併成了一個門,稱爲更新門(update gate)。在GRU網絡中,沒有LSTM網絡中的內部狀態和外部狀態的劃分,而是通過直接在當前網絡的狀態

和上一時刻網絡的狀態

之間添加一個線性的依賴關係,來解決梯度消失和梯度爆炸的問題。

圖5 單個時間步的GRU網絡結構示意圖

在GRU網絡中,更新門用來控制當前時刻輸出的狀態

中要保留多少歷史狀態

,以及保留多少當前時刻的候選狀態

。更新門的計算公式如下:

式5

如圖5所示,更新門的輸出分別和歷史狀態

以及候選狀態

進行了乘操作,其中和

相乘的是

。最終當前時刻網絡的輸出爲:

式6

重置門的作用是決定當前時刻的候選狀態是否需要依賴上一時刻的網絡狀態以及需要依賴多少。從圖5可以看到,上一時刻的網絡狀態

先和重置門的輸出相乘之後,再作爲參數用於計算當前時刻的候選狀態。重置門的計算公式如下:

式7

的值決定了候選狀態

對上一時刻的狀態

的依賴程度,候選狀態

的計算公式如下:

式8

其實當

的值爲0且

的值爲1時,GRU網絡中的更新門和重置門就不再發揮作用了,而此時的GRU網絡就退化成了簡單循環神經網絡,因爲此時有:

式9

四、 TensorFlow實現LSTM和GRU

前面介紹了LSTM和GRU的理論知識,這一小節裏我們使用TensorFlow來實現一個LSTM模型。爲了方便,這裏我們使用前面介紹過的mnist數據集。可能讀者對於在循環神經網絡中使用圖像數據會有一點疑惑,因爲通常情況下圖像數據一般都是使用卷積神經網絡來訓練。事實的確是這樣,由於卷積神經網絡和循環神經網絡的結構不同,也就使得它們各自有不同的適用場景,但這不代表卷積神經網絡只能用來處理時序數據,同樣也不能認爲循環神經網絡不能用來處理圖像數據,只要在輸入數據的格式上稍作調整即可,就像上一章中我們使用卷積神經網絡網絡來處理文本數據一樣。

mnist數據集我們在第三章中就已經使用過,這裏就不再多做介紹了,直接上代碼:

我們首先導入需要的包,然後定義了神經網絡中的一些相關參數。其中第6行代碼定義了LSTM中的時間步的長度,由於我們mnist數據集的圖像大小爲28X28,所以我們將一行像素作爲一個輸入,這樣我們就需要有28個時間步。第7行代碼定義了每個時間步輸入數據的長度(每個時間步的輸入是一個向量),即一行像素的長度。

第10行代碼用來加載mnist數據集,並通過參數“validation_size”指定了驗證集的大小。第16行代碼用來將mnist數據集的格式轉換成“dynamic_rnn”函數接受的數據格式“[batch_size, max_time,data_length]”。

在上面的代碼中,我們定義了一個兩層的LSTM網絡結構,並使用了交叉熵損失函數和“Adam”優化器。LSTM多層網絡結構的定義和我們前面使用過的多層神經網絡的定義方法一樣,只是將“BasicRNNCell”類換成了“BasicLSTMCel”類。

在上面的整個代碼中,我們使用的參數都是比較隨意的進行選擇的,沒有進行任何的優化,最終在測試集上的結果能達到96%左右,當然這肯定不是LSTM網絡處理mnist數據集所能達到的最好的效果,有興趣的讀者可以試着去調整網絡的結構和參數,看是否能達到更高的準確率。

TensorFlow中實現LSTM和GRU的切換非常簡單,在上面的代碼中,將第22和26行代碼註釋掉,然後取消第24和27行代碼的註釋,實現的就是GRU。

本文介紹了門控循環神經網絡LSTM以及GRU的原理及其tensorflow代碼實現,希望能讓大家對常用到的LSTM及GRU能夠有更好的理解。下一篇,我們將介紹RNN循環神經網絡的應用部分,分析RNN循環神經網絡是怎樣用在文本分類,序列標註以及機器翻譯上的,以及其存在的不足與改進方法。

五、 參考文獻

[1]Sepp Hochreiter: Long Short-term Memory .1997

[2]Kazuki Irie, Zoltán Tüske, TamerAlkhouli, Ralf Schlüter, Hermann Ney:

LSTM, GRU, Highway and a Bit of Attention:AnEmpirical Overview for Language Modeling in Speech Recognition.INTERSPEECH2016: 3519-3523

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章