原文鏈接:http://www.keraschina.com/keras_gru/
GRU(Gated Recurrent Unit) 是由 Cho, et al. (2014) 提出,是LSTM的一種變體。GRU的結構與LSTM很相似,LSTM有三個門,而GRU只有兩個門且沒有細胞狀態,簡化了LSTM的結構。而且在許多情況下,GRU與LSTM有同樣出色的結果。GRU有更少的參數,因此相對容易訓練且過擬合問題要輕一點。
下圖展示了GRU的網絡結構,GRU的網絡結構和LSTM的網絡結構很相似,LSTM中含有三個門結構和細胞狀態,而GRU只有兩個門結構:更新門和重置門,分別為圖中的z_t和r_t,結構上比LSTM簡單。
將GRU網絡結構具體運算操作用下圖進行表示。接下來將會針對該圖每一部分進行詳細的講解。
首先說明圖中每個符號的意義:
1.更新門(update gate):
[.]j表示一個向量的第j個元素。與LSTM中忘記門和輸入門的操作一樣,也是該時刻的輸入x_t、上一時刻隱藏層h(t-1)分別和權重矩陣W_z、U_z相乘,再將這兩部分結果相加后放入sigmoid激活函數中,將結果壓縮在0-1之間。
更新門的作用是決定上一層隱藏層狀態中有多少信息傳遞到當前隱藏狀態h_t中,或者說前一時刻和當前時刻的信息有多少需要繼續傳遞的(在最后的公式中可以看到此功能的表示,並有詳細講解更新門為什么有這個作用)。當z_j越接近0為說明上一層隱藏狀態的第j個信息在該隱藏層被遺忘,接近1則說明在該隱藏層繼續保留。
2.重置門(reset gate):
和更新門的運算操作類似,只是權重矩陣不同而已。重置門是決定上一時刻隱藏狀態的信息中有多少是需要被遺忘的。當該值接近於0,則說明上一時刻第j個信息在當前記憶內容(在后文解釋該詞)中被遺忘,接近於1則說明在當前記憶內容中繼續保留。
讀到這里,有些讀者可能會感覺重置門和更新門的作用很相似,是否可以再簡化只用一個門即可?其實不然,這兩個門作用的對象是不一樣的,GRU雖然沒有LSTM的細胞狀態,但是它有一個記憶內容,更新門是作用於上一時刻隱藏狀態和記憶內容,並最終作用於當前時刻的隱藏狀態(如文中最后一條公式所表達),而重置門作用於當前記憶內容。
3.確定當前記憶內容:
除了和上面兩個門一樣與權重矩陣相乘之外,還計算重置門結果r_t和h_(t-1)進行Hadamard乘積,即對應元素相乘。因為r_t是由0到1的向量組成的,因此,進行Hadamard乘積的意義就在於使用重置門決定在當前記憶內容中要遺忘多少上一時刻隱藏狀態的內容,正如重置門處描述,值接近於0說明該信息被遺忘,接近於1則保留該信息。最后再將這兩部分信息相加放入tanh激活函數中,將結果縮放到-1到1中。
記憶內容就是GRU記錄到的所有重要信息,類似於LSTM中的細胞狀態,比如在語言模型中,可能保存了主語單復數,主語的性別,當前時態等所有記錄的重要信息。
因此,通過此處的運算操作的說明,就可以了解該時刻的記憶內容由兩部分組成,一部分是使用重置門儲存過去相關的重要信息,另一部分是加上當前時刻輸入的重要信息。這兩部分就組成了當前時刻的所有記憶內容。
4.確定當前時刻隱藏層保留的信息:
(公式說明:此處是標量相乘,若是以向量表示,需要使用Hadamard乘積)
解釋在第2部分更新門處遺留的問題:
最后,該網絡需要計算 h_t向量,該向量將保留當前單元的信息並傳遞到下一個單元中。在此過程,使用更新門,一方面,如公式第一項,它決定了上一個時刻的h_(t-1)中多少信息在此時刻隱藏單元h_t需要保留,另一方面,如公式的第二項,通過(1-z_j)表示那些需要遺忘的信息,用此時刻的記憶內容中相應的內容進行更新。這樣更新門就能決定了分別需要在當前時刻的記憶內容和上一時刻隱藏層的信息收集哪些內容了。
需要注意的是,雖然隱藏層信息的符號和當前記憶內容的符號相似,但是這兩者是有一定的區別的。當前記憶內容在上文中已經說明了是當前時刻保存的所有信息,而隱藏層信息則是當前時刻所需要的信息。比如在語言模型中,在當前時刻可能我們只需要知道當前時態和主語單復數就可以確定當前動詞使用什么時態,而不需要其他更多的信息。