目录

1. 深度循环神经网络

2. 双向循环神经网络


1. 深度循环神经网络

到目前为止介绍的循环神经网络只有一个单向的隐藏层,在深度学习应用里,我们通常会用到含有多个隐藏层的循环神经⽹网络,也称作深度循环神经⽹络。下图演示了一个有L个隐藏层的深度循环神经网络,每个隐藏状态不断传递至当前层的下一时间步和当前时间步的下一层。

动手学PyTorch | (36) 深度和双向循环神经网络

具体来说,在时间步t里,设⼩批量输入动手学PyTorch | (36) 深度和双向循环神经网络(样本数为n,输入个数为d),第l隐藏层(l=1,...,L)的隐藏状态为动手学PyTorch | (36) 深度和双向循环神经网络(隐藏单元数为h),输出层变量为动手学PyTorch | (36) 深度和双向循环神经网络(输出个数为q),且隐藏层的**函数为动手学PyTorch | (36) 深度和双向循环神经网络 。第1隐藏层的隐藏状态和之前的计算一样:

动手学PyTorch | (36) 深度和双向循环神经网络

其中权????重动手学PyTorch | (36) 深度和双向循环神经网络和偏差动手学PyTorch | (36) 深度和双向循环神经网络分别为第1隐藏层的模型参数。

动手学PyTorch | (36) 深度和双向循环神经网络时,第l隐藏层的隐藏状态的表达式:

动手学PyTorch | (36) 深度和双向循环神经网络

其中权????重动手学PyTorch | (36) 深度和双向循环神经网络和偏差动手学PyTorch | (36) 深度和双向循环神经网络分别为第l隐藏层的模型参数。

最终,输出层的输出只需基于第L隐藏层的隐藏状态:

动手学PyTorch | (36) 深度和双向循环神经网络

其中权????重动手学PyTorch | (36) 深度和双向循环神经网络和偏差动手学PyTorch | (36) 深度和双向循环神经网络分别为输出层的模型参数。

同多层感知机一样,隐藏层个数L和隐藏单元个数h都是超参数。此外,如果将隐藏状态的计算换成⻔控循环单元或者⻓短期记忆的计算,我们可以得到深度门控循环神经网络。

  • 小结

在深度循环神经网络中,隐藏状态的信息不断传递至当前层的下一时间步和当前时间步的下一层。

 

2. 双向循环神经网络

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

动手学PyTorch | (36) 深度和双向循环神经网络

下⾯我们来介绍具体的定义。 给定时间步t的⼩批量输入动手学PyTorch | (36) 深度和双向循环神经网络(样本数为n,输入个数为d),和隐藏层**函数为 动手学PyTorch | (36) 深度和双向循环神经网络。在双向循环神经⽹络的架构中,设该时间步正向隐藏状态为动手学PyTorch | (36) 深度和双向循环神经网络正向隐藏单元个数为h), 反向隐藏状态为 动手学PyTorch | (36) 深度和双向循环神经网络(反向隐藏单元个数为 h)。我们可以分别计算正向隐藏状态和反向隐藏状态:

动手学PyTorch | (36) 深度和双向循环神经网络

其中权????重动手学PyTorch | (36) 深度和双向循环神经网络和偏差动手学PyTorch | (36) 深度和双向循环神经网络均为模型参数。

然后我们连结两个方向的隐藏状态得到隐藏状态动手学PyTorch | (36) 深度和双向循环神经网络,并将其输⼊到输出层。输出层计算输出动手学PyTorch | (36) 深度和双向循环神经网络(输出个数为 q):

动手学PyTorch | (36) 深度和双向循环神经网络

其中权????重动手学PyTorch | (36) 深度和双向循环神经网络和偏差动手学PyTorch | (36) 深度和双向循环神经网络分别为输出层的模型参数。不同⽅向上的隐藏单元个数也可以不同。

 

  • 小结

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

2)双向循环神经网络可以有多个隐层,深度双向循环网络。

3)双向循环神经网络隐藏状态的计算可以是门控循环单元。