Gated Recurrent Unit/zh
| Article | |
|---|---|
| Topic area | Deep Learning |
| Prerequisites | Recurrent Neural Networks, Long Short-Term Memory, Backpropagation |
概述
門控循環單元(GRU)是一種循環神經網絡單元,它使用門控機制來控制信息在各時間步之間的流動。該結構由 Cho 等人於 2014 年作為統計機器翻譯用編碼器-解碼器模型的一部分提出,旨在作為長短期記憶 (LSTM)單元更為簡潔的替代方案,同時保留對長程依賴的建模能力並緩解梯度消失問題。[1]
與LSTM相比,GRU 將細胞狀態和隱藏狀態合併為單個向量,並用兩個門——更新門和重置門——替換原有的輸入門、遺忘門和輸出門。其結果是一種參數更少、訓練更快、在大量序列建模任務上具有競爭性準確率的單元。雖然Transformer 架構的興起在許多大規模自然語言任務中取代了循環單元,但 GRU 仍在低延遲推理、設備端語音模型、時間序列預測以及作為混合架構組件等場景中被廣泛使用。
背景與動機
原始的循環網絡通過對前一隱藏狀態和當前輸入的線性組合施加一個非線性變換來更新隱藏狀態。當使用時間反向傳播進行訓練時,損失關於早期時間步的梯度涉及對相同 Jacobi 矩陣的反覆相乘,這會導致梯度在長序列中消失或爆炸。因此,普通循環網絡難以學習跨越幾十步以上的依賴關係。
LSTM由 Hochreiter 和 Schmidhuber 於 1997 年提出,通過引入一個獨立的細胞狀態(具有加性更新)以及若干學習何時寫入、保留或讀取信息的門來解決上述問題。LSTM 在十多年間一直是主流的循環架構,但其三門設計帶來了相當可觀的參數與計算開銷。GRU 的提出源於這樣一個問題:能否用更簡單的門控方案,在更少參數、更易優化和更低內存佔用的前提下達到相當的性能?這種特性在編碼器-解碼器場景中尤為有吸引力,因為每個訓練樣本都需要執行大量的循環步驟。
架構
GRU 單元在每個時間步處理一個輸入向量並輸出一個隱藏狀態。在時間步 $ t $,它接收當前輸入 $ x_t \in \mathbb{R}^{d_x} $ 和上一隱藏狀態 $ h_{t-1} \in \mathbb{R}^{d_h} $,並通過兩個門和一個候選激活值產生更新後的隱藏狀態 $ h_t \in \mathbb{R}^{d_h} $:
- 重置門 $ r_t $ 控制有多少前一隱藏狀態被混合進候選狀態。當重置門接近零時,候選狀態會忽略過去的上下文,表現得仿佛序列剛剛開始。
- 更新門 $ z_t $ 控制前一隱藏狀態與新候選狀態之間的凸組合。當更新門接近一時,單元基本上將其前一狀態向前複製,從而為梯度提供近似恆等的傳播路徑。
- 候選隱藏狀態 $ \tilde{h}_t $ 是一個由 tanh 激活的提議值,它在 $ r_t $ 的調控下,將當前輸入中的新信息與對過去(可能被削弱)的視圖共同編碼。
與LSTM不同,GRU 不存在獨立的細胞狀態,也沒有輸出門;隱藏狀態本身既是暴露給後續層的輸出,也是循環反饋給該單元的內容。
數學表述
設 $ \sigma $ 表示按元素的邏輯S 形函數,$ \odot $ 表示按元素乘積。GRU 的標準更新方程為:
$ {\displaystyle z_t = \sigma\bigl(W_z x_t + U_z h_{t-1} + b_z\bigr)} $
$ {\displaystyle r_t = \sigma\bigl(W_r x_t + U_r h_{t-1} + b_r\bigr)} $
$ {\displaystyle \tilde{h}_t = \tanh\bigl(W_h x_t + U_h (r_t \odot h_{t-1}) + b_h\bigr)} $
$ {\displaystyle h_t = (1 - z_t) \odot h_{t-1} + z_t \odot \tilde{h}_t} $
這裏 $ W_\bullet \in \mathbb{R}^{d_h \times d_x} $ 用於映射輸入,$ U_\bullet \in \mathbb{R}^{d_h \times d_h} $ 用於映射前一隱藏狀態,$ b_\bullet \in \mathbb{R}^{d_h} $ 為偏置。單個 GRU 單元的參數總數為 $ 3 \cdot d_h \cdot (d_x + d_h + 1) $,大約是相同隱藏寬度的 LSTM 的四分之三——後者使用四個門而非三個。一些實現採用約定 $ h_t = z_t \odot h_{t-1} + (1 - z_t) \odot \tilde{h}_t $;這兩種表述僅在門的命名上有所不同,本質上等價。
最終方程中的凸組合是 GRU 能夠跨多個時間步傳遞信息的關鍵所在。每當 $ z_t $ 較小時,$ h_t \approx h_{t-1} $,因此梯度 $ \partial h_t / \partial h_{t-1} $ 接近單位矩陣,梯度信號得以無幾何衰減地傳播。
訓練與推理
GRU 通常採用端到端的方式,使用Adam或其變體配合梯度裁剪進行時間反向傳播訓練,以控制門控機制下少數仍會出現的梯度爆炸。常用的正則化選項包括對單元輸入與輸出施加Dropout(在某些變體中通過變分 Dropout作用於循環連接),以及對輸入-隱藏和隱藏-隱藏權重矩陣施加權重衰減。
在推理階段,GRU 一次消費一個 token 並就地更新其隱藏狀態,使每 token 的計算和內存開銷與序列長度無關。現代框架會將三個門的計算融合為單次矩陣乘法,每個時間步對應一個形狀為 $ 3 d_h \times (d_x + d_h) $ 的堆疊權重矩陣,並提供 cuDNN 或 Metal 的內核,在訓練時進一步沿時間維度融合計算。在部署中,GRU 較小的參數量以及不存在顯式細胞狀態的特點,使其在流式應用以及內存帶寬是瓶頸的嵌入式硬件上頗具吸引力。
變體
若干變體對基本公式進行了修改:
- 極簡門控單元(MGU)去掉了重置門,僅使用一個類似遺忘門的單門,從而進一步減少參數量,在字符級語言建模和音樂建模基準測試中仍保持競爭力。[2]
- 輸入-遺忘耦合變體在重置門和更新門之間共享權重,以少量的表達能力換取額外的參數節省。
- 雙向 GRU 運行兩個相互獨立的 GRU 層,一個沿前向序列、另一個沿反向序列,並將其隱藏狀態拼接。在推理時可獲取完整序列的標註與分類任務中,這是標準做法。
- 堆疊或深層 GRU 在垂直方向上堆疊多個 GRU 層,下層的輸出序列作為上層的輸入序列。層間的殘差連接有助於訓練深層循環堆棧。
- 卷積 GRU 用卷積替代稠密權重矩陣,得到適用於視頻、氣象雷達等時空數據的循環單元。
與 LSTM 的比較
在實際應用中,GRU 與 LSTM 通常可以互換。Chung 等人在復調音樂和語音信號建模上的實證比較未發現明確的贏家,選擇取決於任務和計算預算。[3] Greff 等人也得出類似結論:沒有任何重大的架構變體能夠持續地勝過標準 LSTM,而 GRU 則是一種更廉價且具有競爭力的替代方案。[4]
實際差異可以從公式中直接預見。在相同隱藏寬度下,GRU 的每步計算和內存約低 25%,因為它只有三個門而非四個,且沒有獨立的細胞狀態。LSTM 的獨立細胞狀態和輸出門提供了更細粒度的機制,可以保護長期記憶不被覆蓋,並選擇性地將其暴露給下游層,這在具有極長依賴關係的任務中可能很重要。GRU 的耦合更新——其中 $ z_t $ 同時控制保留多少過去信息以及寫入多少候選信息——對許多任務來說是一種有用的歸納偏置,但它無法表示 LSTM 能夠刻畫的某些模式。
應用
在基於注意力的模型被廣泛採用之前,GRU 是許多序列到序列任務的默認構件:用於機器翻譯的編碼器-解碼器模型、用於語音識別的聲學模型和語言模型、用於命名實體識別的序列標註,以及基於會話級點擊序列的推薦系統。它們至今仍常見於:
- 設備端及流式語音識別和關鍵詞檢測——這些場景對模型體積和每 token 延遲非常敏感。
- 工業表格類時間序列預測,其中循環結構所帶來的歸納偏置及其較少的參數量與有限的訓練數據相匹配。
- 需要隨時間整合觀測的強化學習策略,特別是在部分可觀測環境中。
- 同時結合卷積、循環與注意力組件的混合架構。
局限性
使 GRU 高效的那些特性同時也限制了其表達能力。嚴格的順序更新規則意味着訓練無法在時間維度上並行化,這正是 Transformer 在自然語言建模前沿大幅取代 GRU 的核心原因。即使加性更新路徑可以緩解最壞情形,長序列在實踐中仍會出現梯度衰減;標準 GRU 的有效上下文長度通常以數百步而非數千步為單位衡量。耦合的更新門也使得難以分別調整遺忘和寫入的動態,這有時相對於 LSTM 是一個真實的劣勢。最後,與所有循環模型一樣,GRU 對初始化以及循環權重的尺度具有敏感性,深層堆棧需要仔細選擇初始化方式(通常是正交或按單位矩陣縮放)才能穩定訓練。