選單

基本的RNN單元

傳統的多層感知器神經網路假設所有輸入都是相互獨立的。這個假設不適用於許多型別的序列資料。例如,句子中的單詞、樂曲中的音符、一段時間內的股價,乃至化合物中的分子,這些都是序列的例子,其中一個元素將顯示對先前元素的依賴。RNN單元透過一種隱狀態或記憶包含這種依賴關係,這種狀態或記憶保留了迄今為止所看到的本質。

基本的RNN單元

我們還可以用圖形表示RNN單元在t時刻,單元有一個輸入x(t)和輸出y(t)。輸出y(t)部分(由隱狀態ht表示)被送回單元中,以便在下一個時間步t + 1使用。與傳統的神經網路一樣,學習的引數儲存為權重矩陣,RNN的引數由3個權重矩陣U、V和W定義,分別對應於輸入、輸出和隱狀態的權重:“展開檢視”中顯示了相同的RNN。

基本的RNN單元

“展開”只表示我們畫出網路的完整序列。這裡顯示的網路有3個時間步,適合處理三元素序列。注意,前面提到的權重矩陣U、V和W在每個時間步之間都是共享的。這是因為我們在每個時間步都對不同的輸入應用相同的操作。能夠在所有時間步上共享這些權重可以大大減少RNN需要學習的引數數量。

基本的RNN單元

我們還可以根據公式把RNN描述為一個計算圖。在t時刻,RNN的內部狀態是由隱向量h(t)的值給出的,隱向量h(t)的值是權重矩陣W和t-1時刻的隱狀態ht-1的和,權重矩陣U和t時刻的輸入xt相乘,結果傳遞給tanh啟用函式。與其他啟用函式(如sigmoid)相比,tanh在實踐中可以更有效地學習,並且有助於解決梯度消失的問題。

基本的RNN單元

Keras提供了SimpleRNN遞迴層,包含了目前為止我們看到的所有邏輯,以及更高階的變體(例如LSTM和GRU,詳見本章後面的內容)。嚴格地說,在使用它們進行構建時,無須瞭解它們是如何工作的。但是,當你需要構建自己專屬RNN單元來解決一個特定問題時,對結構和方程的理解是有幫助的。

基本的RNN單元

現在,我們已經理解了透過RNN單元轉發的資料流,即如何將其輸入狀態和隱狀態相結合,產生輸出和下一個隱狀態,現在讓我們檢查反向的梯度流。這個過程稱之為時間反向傳播(Backpropagation Through Time,BPTT)。