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