6.10. 双向循环神经网络

之前介绍的循环神经网络模型都是假设当前时间步是由前面的较早时间步的序列决定的,因此它们都将信息通过隐藏状态从前往后传递。有时候,当前时间步也可能由后面时间步决定。例如,当我们写下一个句子时,可能会根据句子后面的词来修改句子前面的用词。双向循环神经网络通过增加从后往前传递信息的隐藏层来更灵活地处理这类信息。图6.12演示了一个含单隐藏层的双向循环神经网络的架构。

双向循环神经网络的架构 图 6.12 双向循环神经网络的架构

下面我们来介绍具体的定义。给定时间步

6.10. 双向循环神经网络 - 图2 的小批量输入 6.10. 双向循环神经网络 - 图3 (样本数为 6.10. 双向循环神经网络 - 图4 ,输入个数为 6.10. 双向循环神经网络 - 图5 )和隐藏层激活函数为 6.10. 双向循环神经网络 - 图6 。在双向循环神经网络的架构中,设该时间步正向隐藏状态为 6.10. 双向循环神经网络 - 图7 (正向隐藏单元个数为 6.10. 双向循环神经网络 - 图8 ),反向隐藏状态为 6.10. 双向循环神经网络 - 图9 (反向隐藏单元个数为 6.10. 双向循环神经网络 - 图10 )。我们可以分别计算正向隐藏状态和反向隐藏状态:

6.10. 双向循环神经网络 - 图11

其中权重

6.10. 双向循环神经网络 - 图126.10. 双向循环神经网络 - 图136.10. 双向循环神经网络 - 图146.10. 双向循环神经网络 - 图15 和偏差 6.10. 双向循环神经网络 - 图166.10. 双向循环神经网络 - 图17 均为模型参数。

然后我们连结两个方向的隐藏状态

6.10. 双向循环神经网络 - 图186.10. 双向循环神经网络 - 图19 来得到隐藏状态 6.10. 双向循环神经网络 - 图20 ,并将其输入到输出层。输出层计算输出 6.10. 双向循环神经网络 - 图21 (输出个数为 6.10. 双向循环神经网络 - 图22 ):

6.10. 双向循环神经网络 - 图23

其中权重

6.10. 双向循环神经网络 - 图24 和偏差 6.10. 双向循环神经网络 - 图25 为输出层的模型参数。不同方向上的隐藏单元个数也可以不同。

6.10.1. 小结

  • 双向循环神经网络在每个时间步的隐藏状态同时取决于该时间步之前和之后的子序列(包括当前时间步的输入)。

6.10.2. 练习

  • 如果不同方向上使用不同的隐藏单元个数, 6.10. 双向循环神经网络 - 图26 的形状会发生怎样的改变?
  • 参考图6.11和图6.12,设计含多个隐藏层的双向循环神经网络。