10. 现代循环神经网络¶
上一章介绍了循环神经网络(RNN)背后的关键思想。然而,就像卷积神经网络一样,RNN架构也经历了大量的创新,最终出现了几种在实践中证明成功的复杂设计。特别是,最流行的设计采用了缓解RNN面临的臭名昭著的数值不稳定问题的机制,典型的例子是梯度消失和梯度爆炸。回想一下,在 第 9 节 中,我们通过应用一种粗糙的梯度裁剪启发式方法来处理梯度爆炸。尽管这种技巧很有效,但它并没有解决梯度消失的问题。
在本章中,我们介绍用于序列的最成功的RNN架构背后的关键思想,这些思想源于两篇论文。第一篇是长短期记忆(Long Short-Term Memory) (Hochreiter and Schmidhuber, 1997),它引入了记忆单元,这是一种取代网络隐藏层中传统节点的计算单元。有了这些记忆单元,网络能够克服早期循环网络训练时遇到的困难。直观地说,记忆单元通过在连续的多个时间步上,以权重为1的循环边级联每个记忆单元的内部状态值,从而避免了梯度消失问题。一组乘法门帮助网络不仅决定允许哪些输入进入记忆状态,还决定何时记忆状态的内容应影响模型的输出。
第二篇论文是双向循环神经网络(Bidirectional Recurrent Neural Networks)(Schuster and Paliwal, 1997),它引入了一种架构,其中来自未来(后续时间步)和过去(先前时间步)的信息都用于确定序列中任何一点的输出。这与之前的网络形成对比,在之前的网络中,只有过去的输入才能影响输出。双向RNN已成为自然语言处理中序列标注任务以及众多其他任务的支柱。幸运的是,这两项创新并非相互排斥,并且已成功地结合用于音素分类 (Graves and Schmidhuber, 2005) 和手写识别 (Graves et al., 2008)。
本章的前几节将解释LSTM架构,一个称为门控循环单元(GRU)的轻量级版本,双向RNN背后的关键思想,并简要解释RNN层如何堆叠在一起形成深度RNN。随后,我们将探讨RNN在序列到序列任务中的应用,介绍机器翻译以及编码器-解码器架构和束搜索等关键思想。