这一节写的是deep RNN,有的也称之为堆叠循环神经网络(Stacked Recurrent Neural Network,SRNN),即把多个循环网络堆叠起来。具体可以看邱锡鹏老师的《神经网络与深度学习》。
之前学神经网络的时候我们知道单层神经网络就是只有一个输入层和一个输出层,多层感知机才会有隐藏层。
其实RNN也可以有多个隐藏状态。
之前我们讨论的RNN只有一个隐藏状态,长这样:
多个隐状态的深度循环神经网络长这样:
公式可以简写为:
$$
\begin{aligned}
&\mathbf{H}{t}^{1}=f{1}\left(\mathbf{H}{t-1}^{1}, \mathbf{X}{t}\right) \
& ... \
&\mathbf{H}{t}^{j}={ f}{j}\left( \mathbf{H}{t-1}^{j}, \mathbf{H}{t}^{j-1}\right) \
& ... \
&\mathbf{O}{t}=g\left(\mathbf{H}{t}^{L}\right)
\end{aligned}
$$
-
$f$和$g$都是对应的函数计算
-
$\mathbf{H}_t^{(1)} = \phi_l(\mathbf{X}t \mathbf{W}{xh}^{(1)} + \mathbf{H}{t-1}^{(l)} \mathbf{W}{hh}^{(1)} + \mathbf{b}_h^{(1)})$
第一层就是和普通的RNN一样的计算。
-
$\mathbf{H}_t^{(j)} = \phi_l(\mathbf{H}t^{(j-1)} \mathbf{W}{xh}^{(j)} + \mathbf{H}{t-1}^{(j)} \mathbf{W}{hh}^{(j)} + \mathbf{b}_h^{(j)})$
中间层无非就是把输入$X$换成$H$。
-
$\mathbf{O}_t = \mathbf{H}t^{(L)} \mathbf{W}{ho} + \mathbf{b}_o$
输出也可普通的RNN一样计算。
与多层感知机一样,隐藏层的数目 $L$ 和隐藏单元的数目 $h$ 都是超参数。可以由我们来调整或指定。
另外,用门控循环单元或长短期记忆网络的隐藏状态来代替上边的隐藏状态进行计算,可以很容易地得到深度门控循环神经网络。