第五章
循环神经网络
到目前为止,我们看到的神经网络都是前馈型神经网络。前馈 (feedforward)是指网络的传播方向是单向的。
具体地说,先将输入信号传给下一层(隐藏层),接收到信号的层也同样传给下一层,然后再传给下一层 ...... 像这样,信号仅在一个方向上传播。
虽然前馈网络结构简单、易于理解,但是可以应用于许多任务中。不过,这种网络存在一个大问题,就是不能很好地处理时间序列数据(以下简称为“时序数据”)。
更确切地说,单纯的前馈网络无法充分学习时序数据的性质(模式)。于是,循环神经网络(Recurrent Neural Network,RNN)便应运而生。
本章我们将指出前馈网络的问题,并介绍 RNN 如何很好地解决这些问题。然后,我们会详细解释 RNN 的结构,并用 Python 对其进行实现。
1. RNN 具有环路,因此可以在内部记忆隐藏状态;2. 通过展开 RNN 的循环,可以将其解释为多个 RNN 层连接起来的神经网络,可以通过常规的误差反向传播法进行学习(= BPTT);3. 在学习长时序数据时,要生成长度适中的数据块,进行以块为单位的 BPTT 学习(= Truncated BPTT);4. Truncated BPTT 只截断反向传播的连接;5. 在 Truncated BPTT 中,为了维持正向传播的连接,需要按顺序输入数据;7. 理论上,使用 RNN 层的条件语言模型可以记忆所有已出现单词的信息;