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

6.10_birnn.svg

下面我们来介绍具体的定义。
给定时间步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%7D%20%2B%20%5Coverrightarrow%7B%5Cboldsymbol%7BH%7D%7D%7Bt-1%7D%20%5Cboldsymbol%7BW%7D%7Bhh%7D%5E%7B(f)%7D%20%20%2B%20%5Cboldsymbol%7Bb%7Dh%5E%7B(f)%7D)%2C%5C%5C%0A%5Coverleftarrow%7B%5Cboldsymbol%7BH%7D%7D_t%20%26%3D%20%5Cphi(%5Cboldsymbol%7BX%7D_t%20%5Cboldsymbol%7BW%7D%7Bxh%7D%5E%7B(b)%7D%20%2B%20%5Coverleftarrow%7B%5Cboldsymbol%7BH%7D%7D%7Bt%2B1%7D%20%5Cboldsymbol%7BW%7D%7Bhh%7D%5E%7B(b)%7D%20%20%2B%20%5Cboldsymbol%7Bb%7Dh%5E%7B(b)%7D)%2C%0A%5Cend%7Baligned%7D%0A#card=math&code=%5Cbegin%7Baligned%7D%0A%5Coverrightarrow%7B%5Cboldsymbol%7BH%7D%7D_t%20%26%3D%20%5Cphi%28%5Cboldsymbol%7BX%7D_t%20%5Cboldsymbol%7BW%7D%7Bxh%7D%5E%7B%28f%29%7D%20%2B%20%5Coverrightarrow%7B%5Cboldsymbol%7BH%7D%7D%7Bt-1%7D%20%5Cboldsymbol%7BW%7D%7Bhh%7D%5E%7B%28f%29%7D%20%20%2B%20%5Cboldsymbol%7Bb%7Dh%5E%7B%28f%29%7D%29%2C%5C%5C%0A%5Coverleftarrow%7B%5Cboldsymbol%7BH%7D%7D_t%20%26%3D%20%5Cphi%28%5Cboldsymbol%7BX%7D_t%20%5Cboldsymbol%7BW%7D%7Bxh%7D%5E%7B%28b%29%7D%20%2B%20%5Coverleftarrow%7B%5Cboldsymbol%7BH%7D%7D%7Bt%2B1%7D%20%5Cboldsymbol%7BW%7D%7Bhh%7D%5E%7B%28b%29%7D%20%20%2B%20%5Cboldsymbol%7Bb%7D_h%5E%7B%28b%29%7D%29%2C%0A%5Cend%7Baligned%7D%0A)

其中权重6.10 双向循环神经网络 - 图12%7D%20%5Cin%20%5Cmathbb%7BR%7D%5E%7Bd%20%5Ctimes%20h%7D#card=math&code=%5Cboldsymbol%7BW%7D%7Bxh%7D%5E%7B%28f%29%7D%20%5Cin%20%5Cmathbb%7BR%7D%5E%7Bd%20%5Ctimes%20h%7D)、![](https://g.yuque.com/gr/latex?%5Cboldsymbol%7BW%7D%7Bhh%7D%5E%7B(f)%7D%20%5Cin%20%5Cmathbb%7BR%7D%5E%7Bh%20%5Ctimes%20h%7D#card=math&code=%5Cboldsymbol%7BW%7D%7Bhh%7D%5E%7B%28f%29%7D%20%5Cin%20%5Cmathbb%7BR%7D%5E%7Bh%20%5Ctimes%20h%7D)、![](https://g.yuque.com/gr/latex?%5Cboldsymbol%7BW%7D%7Bxh%7D%5E%7B(b)%7D%20%5Cin%20%5Cmathbb%7BR%7D%5E%7Bd%20%5Ctimes%20h%7D#card=math&code=%5Cboldsymbol%7BW%7D%7Bxh%7D%5E%7B%28b%29%7D%20%5Cin%20%5Cmathbb%7BR%7D%5E%7Bd%20%5Ctimes%20h%7D)、![](https://g.yuque.com/gr/latex?%5Cboldsymbol%7BW%7D%7Bhh%7D%5E%7B(b)%7D%20%5Cin%20%5Cmathbb%7BR%7D%5E%7Bh%20%5Ctimes%20h%7D#card=math&code=%5Cboldsymbol%7BW%7D_%7Bhh%7D%5E%7B%28b%29%7D%20%5Cin%20%5Cmathbb%7BR%7D%5E%7Bh%20%5Ctimes%20h%7D)和偏差 6.10 双向循环神经网络 - 图13%7D%20%5Cin%20%5Cmathbb%7BR%7D%5E%7B1%20%5Ctimes%20h%7D#card=math&code=%5Cboldsymbol%7Bb%7D_h%5E%7B%28f%29%7D%20%5Cin%20%5Cmathbb%7BR%7D%5E%7B1%20%5Ctimes%20h%7D)、6.10 双向循环神经网络 - 图14%7D%20%5Cin%20%5Cmathbb%7BR%7D%5E%7B1%20%5Ctimes%20h%7D#card=math&code=%5Cboldsymbol%7Bb%7D_h%5E%7B%28b%29%7D%20%5Cin%20%5Cmathbb%7BR%7D%5E%7B1%20%5Ctimes%20h%7D)均为模型参数。

然后我们连结两个方向的隐藏状态6.10 双向循环神经网络 - 图156.10 双向循环神经网络 - 图16来得到隐藏状态6.10 双向循环神经网络 - 图17,并将其输入到输出层。输出层计算输出6.10 双向循环神经网络 - 图18(输出个数为6.10 双向循环神经网络 - 图19):

6.10 双向循环神经网络 - 图20

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

小结

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

注:本节与原书基本相同,原书传送门