来源:Coursera吴恩达深度学习课程
目前我们学习了不同RNN的版本,每一个都可以独当一面(already work quite well by themselves)。但是要学习非常复杂的函数,通常我们会把RNN的多个层堆叠在一起构建更深的模型,来构建一些更深的RNN。我们开始吧。
如上图左侧,一个标准的神经网络,首先是输入x,然后堆叠上隐含层,所以这里应该有激活值,比如说第一层是a^[1],接着堆叠上下一层,激活值a^[2],可以再加一层a^[3],然后得到预测值y帽。深层的RNN网络如上图右侧,还是画这样的网络,然后按时间展开。注意这里的符号,a^[1](0)表示第1层0时刻的激活值,更一般的用a^[l](t)表示第l层第t个时间点的激活值。上图是一个有三个隐层的新的网络。
(备注:还是这个问题,不知道为什么右上角的符号就是显示不出来,这篇文章都会()代替,有时间会解决这个bug,望谅解。)
看一个具体例子,如上图紫色标记,看这个激活值a^[2](3)是怎么计算的,一共有两个输入:一个是下面过来的输入a^[1](3),一个是左边过来的输入a^[2](2),于是计算公式为:
上述参数(W_a)^[2]和(b_a)^[2]在这一层的计算里都一样。相应的第一层也有自己的参数(绿色标记)。
对于左侧这样标准的神经网络,有很深的网络,甚至于100层深,而对于RNN来说,有三层就已经不少了。由于时间的维度,RNN网络会变得相当大,即使只有很少的几层,很少会看到这种网络堆叠到100层。
但有一种会容易见到,如下图:
在每一个上面堆叠循环层(recurrent layers),把上述第3层的输出y^(1)去掉,换成一些深的层,这些层并不水平连接,只是一个深层的网络,然后用来预测y^(1)。其他几个类似。这种类型的网络结构用的会稍微多一点,这种结构有三个循环单元,在时间上连接,接着一个网络在后面接一个网络。通常这些单元(上图方框)没必要非是标准的RNN,也可以是GRU单元或者LSTM单元,或者构建深层的双向RNN网络。由于深层的RNN训练需要很多计算资源,需要很长的时间,尽管看起来没有多少循环层,这个也就是在时间上连接了三个深层的循环层(蓝色圆圈),你看不到多少深层的循环层,不像卷积神经网络一样有大量的隐含层。
这就是深层RNN的内容,从基本的RNN网络,基本的循环单元到GRU,LSTM,再到双向RNN,还有深层版的模型。现在工具箱中已经有了很多工具(have a rich toolbox)。
说明:记录学习笔记,如果错误欢迎指正!转载请联系我。