29 November 2019
14:48
GRU is a popular variant of LSTM which replaces the forget gate and the input gate with only one update gate
GRU achieves the similar performance in multiple tasks with less computation
LSTM 通過門控機制使循環神經網絡不僅能記憶過去的信息,同時還能選擇性地忘記一些不重要的信息而對長期語境等關系進行建模,而 GRU 基於這樣的想法在保留長期序列信息下減少梯度消失問題。本文介紹了 GRU 門控機制的運算過程,更詳細的內容請查看原論文。
在本文中,我們將討論相當簡單且可理解的神經網絡模型:門控循環單元(GRU)。根據 Cho, et al. 在 2014 年的介紹,GRU 旨在解決標准 RNN 中出現的梯度消失問題。GRU 也可以被視為 LSTM 的變體,因為它們基礎的理念都是相似的,且在某些情況能產生同樣出色的結果。如果讀者希望了解 LSTM 與 GRU 的詳細區別,可以查看論文 Empirical Evaluation of Gated Recurrent Neural Networks on Sequence Modeling。
GRU 原論文:https://arxiv.org/pdf/1406.1078v3.pdf
GRUS
GRU 背后的原理與 LSTM 非常相似,即用門控機制控制輸入、記憶等信息而在當前時間步做出預測,表達式由以下給出:
GRU 有兩個有兩個門,即一個重置門(reset gate)和一個更新門(update gate)。從直觀上來說,重置門決定了如何將新的輸入信息與前面的記憶相結合,更新門定義了前面記憶保存到當前時間步的量。如果我們將重置門設置為 1,更新門設置為 0,那么我們將再次獲得標准 RNN 模型。使用門控機制學習長期依賴關系的基本思想和 LSTM 一致,但還是有一些關鍵區別:
- GRU 有兩個門(重置門與更新門),而 LSTM 有三個門(輸入門、遺忘門和輸出門)。
- GRU 並不會控制並保留內部記憶(c_t),且沒有 LSTM 中的輸出門。
- LSTM 中的輸入與遺忘門對應於 GRU 的更新門,重置門直接作用於前面的隱藏狀態。
-
在計算輸出時並不應用二階非線性。
GRU 的原理
GRU 是標准循環神經網絡的改進版,但到底是什么令它如此高效與特殊?
為了解決標准 RNN 的梯度消失問題,GRU 使用了更新門(update gate)與重置門(reset gate)。基本上,這兩個門控向量決定了哪些信息最終能作為門控循環單元的輸出。這兩個門控機制的特殊之處在於,它們能夠保存長期序列中的信息,且不會隨時間而清除或因為與預測不相關而移除。
為了解釋這個過程的機制,我們將具體討論以下循環網絡中的單元傳遞過程。
帶有門控循環單元的循環神經網絡
以下展示了單個門控循環單元的具體結構。
門控循環單元
首先我們需要指定以下符號:
1.更新門
在時間步 t,我們首先需要使用以下公式計算更新門 z_t:
其中 x_t 為第 t 個時間步的輸入向量,即輸入序列 X 的第 t 個分量,它會經過一個線性變換(與權重矩陣 W(z) 相乘)。h_(t-1) 保存的是前一個時間步 t-1 的信息,它同樣也會經過一個線性變換。更新門將這兩部分信息相加並投入到 Sigmoid 激活函數中,因此將激活結果壓縮到 0 到 1 之間。以下是更新門在整個單元的位置與表示方法。
更新門幫助模型決定到底要將多少過去的信息傳遞到未來,或到底前一時間步和當前時間步的信息有多少是需要繼續傳遞的。這一點非常強大,因為模型能決定從過去復制所有的信息以減少梯度消失的風險。我們隨后會討論更新門的使用方法,現在只需要記住 z_t 的計算公式就行。
2. 重置門
本質上來說,重置門主要決定了到底有多少過去的信息需要遺忘,我們可以使用以下表達式計算:
該表達式與更新門的表達式是一樣的,只不過線性變換的參數和用處不一樣而已。下圖展示了該運算過程的表示方法。
如前面更新門所述,h_(t-1) 和 x_t 先經過一個線性變換,再相加投入 Sigmoid 激活函數以輸出激活值。
3. 當前記憶內容
現在我們具體討論一下這些門控到底如何影響最終的輸出。在重置門的使用中,新的記憶內容將使用重置門儲存過去相關的信息,它的計算表達式為:
輸入 x_t 與上一時間步信息 h_(t-1) 先經過一個線性變換,即分別右乘矩陣 W 和 U。
計算重置門 r_t 與 Uh_(t-1) 的 Hadamard 乘積,即 r_t 與 Uh_(t-1) 的對應元素乘積。因為前面計算的重置門是一個由 0 到 1 組成的向量,它會衡量門控開啟的大小。例如某個元素對應的門控值為 0,那么它就代表這個元素的信息完全被遺忘掉。該 Hadamard 乘積將確定所要保留與遺忘的以前信息。
將這兩部分的計算結果相加再投入雙曲正切激活函數中。該計算過程可表示為:
4. 當前時間步的最終記憶
在最后一步,網絡需要計算 h_t,該向量將保留當前單元的信息並傳遞到下一個單元中。在這個過程中,我們需要使用更新門,它決定了當前記憶內容 h'_t 和前一時間步 h_(t-1) 中需要收集的信息是什么。這一過程可以表示為:
z_t 為更新門的激活結果,它同樣以門控的形式控制了信息的流入。z_t 與 h_(t-1) 的 Hadamard 乘積表示前一時間步保留到最終記憶的信息,該信息加上當前記憶保留至最終記憶的信息就等於最終門控循環單元輸出的內容。
以上表達式可以展示為:
現在我們應該比較了解到底 GRU 是如何通過更新門與重置門存儲並過濾信息。門控循環單元不會隨時間而清除以前的信息,它會保留相關的信息並傳遞到下一個單元,因此它利用全部信息而避免了梯度消失問題。
原文鏈接:https://towardsdatascience.com/understanding-gru-networks-2ef37df6c9be