动手学深度学习 6.10 双向循环神经网络
前言
从零开始学习ai文章系列计划是个人在《动手学深度学习》和《磨菇书》两本书的学习中的个人笔记,文章也会以课本中的章节分开,即每个章节一片笔记。我会尽量的把主要内容以及遇到的难点进行记录与解决,如果哪里有错误的欢迎指正。或者不清晰的可以直接查看原文部分。
《动手学深度学习》原文(课本):https://tangshusen.me/Dive-into-DL-PyTorch/#/
《动手学深度学习》代码:https://github.com/ShusenTang/Dive-into-DL-PyTorch
(由于有时候公式太多,可能会直接贴图片)
(6.9和6.10都是网络架构的简单变化,因为原文中没有实验,因此这两篇理解其结构即可)
之前介绍的循环神经网络模型都是假设当前时间步是由前面的较早时间步的序列决定的,因此它们都将信息通过隐藏状态从前往后传递。有时候,当前时间步也可能由后面时间步决定。例如,当我们写下一个句子时,可能会根据句子后面的词来修改句子前面的用词。
双向循环神经网络通过增加从后往前传递信息的隐藏层来更灵活地处理这类信息。图6.12演示了一个含单隐藏层的双向循环神经网络的架构。

下面我们来介绍具体的定义。 给定时间步t的小批量输入 \(X_t \in \mathbb{R}^{n\times d}\) (样本数为n,输入个数为d)和隐藏层激活函数为ϕ。在双向循环神经网络的架构中, 设该时间步正向隐藏状态为 \(\overrightarrow{H} \in \mathbb{R}^{n\times h}\) (正向隐藏单元个数为h), 反向隐藏状态为 \(\overleftarrow{H} \in \mathbb{R}^{n\times h}\) (反向隐藏单元个数为h)。我们可以分别计算正向隐藏状态和反向隐藏状态:

(比如说,当你输入一句话的时候,分别从正反顺序输入到两个网络中。)
然后我们连结两个方向的隐藏状态 \(\overrightarrow{H}\) 和 \(\overleftarrow{H}\) 来得到隐藏状态 \(H_t \in \mathbb{R}^{n\times 2h}\) ,并将其输入到输出层。输出层计算输出 \(O_t \in \mathbb{R}^{n\times q}\) (输出个数为q)
