到目前為止,我們一直專注于定義由序列輸入、單個隱藏 RNN 層和輸出層組成的網絡。盡管在任何時間步長的輸入和相應的輸出之間只有一個隱藏層,但從某種意義上說這些網絡很深。第一個時間步的輸入會影響最后一個時間步的輸出T(通常是 100 或 1000 步之后)。這些輸入通過T在達到最終輸出之前循環層的應用。但是,我們通常還希望保留表達給定時間步長的輸入與同一時間步長的輸出之間復雜關系的能力。因此,我們經常構建不僅在時間方向上而且在輸入到輸出方向上都很深的 RNN。這正是我們在 MLP 和深度 CNN 的開發中已經遇到的深度概念。
構建這種深度 RNN 的標準方法非常簡單:我們將 RNN 堆疊在一起。給定一個長度序列T,第一個 RNN 產生一個輸出序列,也是長度T. 這些依次構成下一個 RNN 層的輸入。在這個簡短的部分中,我們將說明這種設計模式,并提供一個簡單示例來說明如何編寫此類堆疊 RNN。下面,在 圖 10.3.1中,我們用L隱藏層。每個隱藏狀態對順序輸入進行操作并產生順序輸出。此外,每個時間步的任何 RNN 單元(圖 10.3.1中的白框 )都取決于同一層在前一時間步的值和前一層在同一時間步的值。
正式地,假設我們有一個小批量輸入 Xt∈Rn×d(示例數量: n,每個示例中的輸入數量:d) 在時間步 t. 同時step,讓hidden state的 lth隱藏層(l=1,…,L) 是 Ht(l)∈Rn×h(隱藏單元的數量:h) 和輸出層變量是 Ot∈Rn×q(輸出數量: q). 環境Ht(0)=Xt, 的隱藏狀態lth使用激活函數的隱藏層?l計算如下:
權重在哪里 Wxh(l)∈Rh×h和 Whh(l)∈Rh×h, 連同偏差bh(l)∈R1×h, 是模型參數lth隱藏層。
最終輸出層的計算只是根據最終的隱藏狀態Lth隱藏層:
重量在哪里Whq∈Rh×q和偏見
評論
查看更多