深度循环神经网络
循环神经网络只有一个单向的隐藏层,在深度学习应用里,我们通常会用到含有多个隐藏层的循环神经网络,也称作深度循环神经网络。
下图演示了一个有LLL个隐藏层的深度循环神经网络,每个隐藏状态不断传递至当前层的下一时间步和当前时间步的下一层。
具体来说
- 在时间步ttt里,设小批量输入Xt∈Rn×d\boldsymbol{X}_t \in \mathbb{R}^{n \times d}Xt∈Rn×d(样本数为nnn,输入个数为ddd)
- 第ℓ\ellℓ隐藏层(ℓ=1,…,L\ell=1,\ldots,Lℓ=1,…,L)的隐藏状态为Ht(ℓ)∈Rn×h\boldsymbol{H}_t^{(\ell)} \in \mathbb{R}^{n \times h}Ht(ℓ)∈Rn×h(隐藏单元个数为hhh)
- 输出层变量为Ot∈Rn×q\boldsymbol{O}_t \in \mathbb{R}^{n \times q}Ot∈Rn×q(输出个数为qqq),且隐藏层的激活函数为ϕ\phiϕ。
第1隐藏层的隐藏状态和之前的计算一样:
Ht(1)=ϕ(XtWxh(1)+Ht−1(1)Whh(1)+bh(1)),\boldsymbol{H}_t^{(1)} = \phi(\boldsymbol{X}_t \boldsymbol{W}_{xh}^{(1)} + \boldsymbol{H}_{t-1}^{(1)} \boldsymbol{W}_{hh}^{(1)} + \boldsymbol{b}_h^{(1)}),Ht(1)=ϕ(XtWxh(1)+Ht−1(1)Whh(1)+bh(1)),
其中权重Wxh(1)∈Rd×h\boldsymbol{W}_{xh}^{(1)} \in \mathbb{R}^{d \times h}Wxh(1)∈Rd×h、Whh(1)∈Rh×h\boldsymbol{W}_{hh}^{(1)} \in \mathbb{R}^{h \times h}Whh(1)∈Rh×h和偏差 bh(1)∈R1×h\boldsymbol{b}_h^{(1)} \in \mathbb{R}^{1 \times h}bh(1)∈R1×h分别为第1隐藏层的模型参数。
当1<ℓ≤L1 < \ell \leq L1<ℓ≤L时,第ℓ\ellℓ隐藏层的隐藏状态的表达式为
Ht(ℓ)=ϕ(Ht(ℓ−1)Wxh(ℓ)+Ht−1(ℓ)Whh(ℓ)+bh(ℓ)),\boldsymbol{H}_t^{(\ell)} = \phi(\boldsymbol{H}_t^{(\ell-1)} \boldsymbol{W}_{xh}^{(\ell)} + \boldsymbol{H}_{t-1}^{(\ell)} \boldsymbol{W}_{hh}^{(\ell)} + \boldsymbol{b}_h^{(\ell)}),Ht(ℓ)=ϕ(Ht(ℓ−1)Wxh(ℓ)+Ht−1(ℓ)Whh(ℓ)+bh(ℓ)),
其中权重Wxh(ℓ)∈Rh×h\boldsymbol{W}_{xh}^{(\ell)} \in \mathbb{R}^{h \times h}Wxh(ℓ)∈Rh×h、Whh(ℓ)∈Rh×h\boldsymbol{W}_{hh}^{(\ell)} \in \mathbb{R}^{h \times h}Whh(ℓ)∈Rh×h和偏差 bh(ℓ)∈R1×h\boldsymbol{b}_h^{(\ell)} \in \mathbb{R}^{1 \times h}bh(ℓ)∈R1×h分别为第ℓ\ellℓ隐藏层的模型参数。
最终,输出层的输出只需基于第LLL隐藏层的隐藏状态:
Ot=Ht(L)Whq+bq,\boldsymbol{O}_t = \boldsymbol{H}_t^{(L)} \boldsymbol{W}_{hq} + \boldsymbol{b}_q,Ot=Ht(L)Whq+bq,
其中权重Whq∈Rh×q\boldsymbol{W}_{hq} \in \mathbb{R}^{h \times q}Whq∈Rh×q和偏差bq∈R1×q\boldsymbol{b}_q \in \mathbb{R}^{1 \times q}bq∈R1×q为输出层的模型参数。
同多层感知机一样,隐藏层个数LLL和隐藏单元个数hhh都是超参数。此外,如果将隐藏状态的计算换成门控循环单元或者长短期记忆的计算,就可以得到深度门控循环神经网络。