門控循環單元 (GRU) 循環神經網絡 (RNN) 層中有多少參數?
標題說明了一切——GRU 層中有多少可訓練參數?在嘗試比較不同 RNN 層類型的模型(例如長短期記憶 (LSTM) 單元與 GRU)的每個參數性能時,經常會出現此類問題。由於大量可訓練參數通常會增加網絡的學習能力,因此在每個參數的基礎上比較替代模型是對 GRU 和 LSTM 相對有效性的逐一比較。
Kyunghyum Cho 等人的原始 GRU 論文“ Learning Phrase Representations using RNN Encoder–Decoder for Statistical Machine Translation ”。在他們的方程中不包括偏置參數。相反,作者寫道
為了使方程整潔,我們省略了偏差。
這無助於讀者理解作者如何使用偏置神經元;它也不允許讀者輕鬆計算偏置神經元的數量。
所以我們不得不去別處看看。根據 Rahul Dey 和 Fathi M. Salem,“門控循環單元 (GRU) 神經網絡的門變體”:
… GRU RNN 中的參數總數等於 $ 3 \times (n^2 + nm + n) $ .
在哪裡 $ m $ 是輸入維度和 $ n $ 是輸出維度。這是因為有三組操作需要這些大小的權重矩陣。
Dey 和 Salem 以這種方式概述了 GRU:
GRU RNN 將門控信號從 LSTM RNN 模型減少到兩個。這兩個門稱為更新門 $ z_t $ 和一個複位門 $ r_t $ . GRU RNN 模型以如下形式呈現: $$ \begin{align} h_t &= (1 - z_t)\odot h_{t-1} + z_t \odot \tilde{h}t \ \tilde{h}t &= g(W_h x_t + U_h(r_t \odot h{t-1}) + b_h) \end{align} $$ 兩個門表示為: $$ \begin{align} z_t &= \sigma(W_z x_t + U_z h{t-1} + b_z) \ r_t &= \sigma(W_r x_t + U_r h_{t-1} + b_r) \end{align} $$
在論文的開頭,他們列出了用作
$ W $ 是一個 $ n \times m $ 矩陣, $ U $ 是一個 $ n \times n $ 矩陣和 $ b $ 是一個 $ n \times 1 $ 大小隱藏狀態的矩陣(或向量) $ n $ 和大小的輸入 $ m $ .
**這些參數計數可能與您在軟件中找到的不同。**似乎某些軟件(例如 PyTorch、Keras)決定通過包含額外的偏置單元來過度參數化模型。在這些軟件實現中,總參數計數為
$$ 3 (n^2 + nm + 2n). $$
這似乎改變了三個 GRU 方程:
$$ \begin{align} \tilde{h}t &= g(W_h x_t + b{hW} + U_h(r_t \odot h_{t-1}) + b_{hU}) \ z_t &= \sigma(W_z x_t + b_{zW} + U_z h_{t-1} + b_{zU}) \ r_t &= \sigma(W_r x_t + b_{rW} + U_r h_{t-1} + b_{rU}) \end{align} $$
我們可以看到在代數上是相同的,使用替換 $ b_{iW} + b_{iU} = b_{i} $ . 我不確定為什麼軟件會這樣做。也許目的是使用現有線性層類的組合來創建 GRU,並且兩個線性層中都包含偏差。出於某種原因,這種參數化可能更適用於 CUDA 設備。