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