(pytorch-深度学习)双向循环神经网络
雙向循環(huán)神經(jīng)網(wǎng)絡(luò)
一般,我們認(rèn)為循環(huán)神經(jīng)網(wǎng)絡(luò)模型都是假設(shè)當(dāng)前時(shí)間步是由前面的較早時(shí)間步的序列決定的,因此它們都將信息通過隱藏狀態(tài)從前往后傳遞。
有時(shí)候,當(dāng)前時(shí)間步也可能由后面時(shí)間步?jīng)Q定。
例如,當(dāng)我們寫下一個(gè)句子時(shí),可能會(huì)根據(jù)句子后面的詞來修改句子前面的用詞。雙向循環(huán)神經(jīng)網(wǎng)絡(luò)通過增加從后往前傳遞信息的隱藏層來更靈活地處理這類信息。
- 給定時(shí)間步ttt的小批量輸入Xt∈Rn×d\boldsymbol{X}_t \in \mathbb{R}^{n \times d}Xt?∈Rn×d(樣本數(shù)為nnn,輸入個(gè)數(shù)為ddd)
- 隱藏層激活函數(shù)為?\phi?。
在雙向循環(huán)神經(jīng)網(wǎng)絡(luò)的架構(gòu)中, 設(shè)
- 該時(shí)間步正向隱藏狀態(tài)為H→t∈Rn×h\overrightarrow{\boldsymbol{H}}_t \in \mathbb{R}^{n \times h}Ht?∈Rn×h(正向隱藏單元個(gè)數(shù)為hhh)
- 反向隱藏狀態(tài)為H←t∈Rn×h\overleftarrow{\boldsymbol{H}}_t \in \mathbb{R}^{n \times h}Ht?∈Rn×h(反向隱藏單元個(gè)數(shù)為hhh)。
我們可以分別計(jì)算正向隱藏狀態(tài)和反向隱藏狀態(tài):
H→t=?(XtWxh(f)+H→t?1Whh(f)+bh(f)),H←t=?(XtWxh(b)+H←t+1Whh(b)+bh(b))\begin{aligned} \overrightarrow{\boldsymbol{H}}_t &= \phi(\boldsymbol{X}_t \boldsymbol{W}_{xh}^{(f)} + \overrightarrow{\boldsymbol{H}}_{t-1} \boldsymbol{W}_{hh}^{(f)} + \boldsymbol{b}_h^{(f)}),\\ \overleftarrow{\boldsymbol{H}}_t &= \phi(\boldsymbol{X}_t \boldsymbol{W}_{xh}^{(b)} + \overleftarrow{\boldsymbol{H}}_{t+1} \boldsymbol{W}_{hh}^{(b)} + \boldsymbol{b}_h^{(b)})\end{aligned} Ht?Ht??=?(Xt?Wxh(f)?+Ht?1?Whh(f)?+bh(f)?),=?(Xt?Wxh(b)?+Ht+1?Whh(b)?+bh(b)?)?
其中權(quán)重Wxh(f)∈Rd×h\boldsymbol{W}_{xh}^{(f)} \in \mathbb{R}^{d \times h}Wxh(f)?∈Rd×h、Whh(f)∈Rh×h\boldsymbol{W}_{hh}^{(f)} \in \mathbb{R}^{h \times h}Whh(f)?∈Rh×h、Wxh(b)∈Rd×h\boldsymbol{W}_{xh}^{(b)} \in \mathbb{R}^{d \times h}Wxh(b)?∈Rd×h、Whh(b)∈Rh×h\boldsymbol{W}_{hh}^{(b)} \in \mathbb{R}^{h \times h}Whh(b)?∈Rh×h和偏差 bh(f)∈R1×h\boldsymbol{b}_h^{(f)} \in \mathbb{R}^{1 \times h}bh(f)?∈R1×h、bh(b)∈R1×h\boldsymbol{b}_h^{(b)} \in \mathbb{R}^{1 \times h}bh(b)?∈R1×h均為模型參數(shù)。
然后通過連結(jié)兩個(gè)方向的隱藏狀態(tài)H→t\overrightarrow{\boldsymbol{H}}_tHt?和H←t\overleftarrow{\boldsymbol{H}}_tHt?來得到隱藏狀態(tài)Ht∈Rn×2h\boldsymbol{H}_t \in \mathbb{R}^{n \times 2h}Ht?∈Rn×2h,并將其輸入到輸出層。
輸出層計(jì)算輸出Ot∈Rn×q\boldsymbol{O}_t \in \mathbb{R}^{n \times q}Ot?∈Rn×q(輸出個(gè)數(shù)為qqq):
Ot=HtWhq+bq,\boldsymbol{O}_t = \boldsymbol{H}_t \boldsymbol{W}_{hq} + \boldsymbol{b}_q,Ot?=Ht?Whq?+bq?,
其中權(quán)重Whq∈R2h×q\boldsymbol{W}_{hq} \in \mathbb{R}^{2h \times q}Whq?∈R2h×q和偏差bq∈R1×q\boldsymbol{b}_q \in \mathbb{R}^{1 \times q}bq?∈R1×q為輸出層的模型參數(shù)。不同方向上的隱藏單元個(gè)數(shù)也可以不同。
總結(jié)
以上是生活随笔為你收集整理的(pytorch-深度学习)双向循环神经网络的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 重返数学史的黄金时代,由数学推动诞生的人
- 下一篇: 全部物理宇宙全部能由数学理解