2.3.3 循环神经网络

前面提到的两种神经网络都是FNN。一个FNN充当一个无记忆函数。其输出仅取决于其当前输入。在许多应用中,例如预测单词中的下一个字母,神经网络的输出不仅取决于当前输入,还取决于先前的输入。在这种情况下,简单的FNN是不够的。需要具有记忆或反馈机制的神经网络,即循环神经网络(RNN)。FNN和RNN之间的主要区别见图2.21。对于FNN,仅允许前向连接,而RNN中既存在横向连接又存在反馈连接。这种横向和反馈连接使得RNN具有记忆能力。最早的RNN之一是Hopfield网络。它以约翰·霍普菲尔德(John Hopfield)的名字命名,他为这种类型的神经网络做出了巨大贡献,使其开始流行[42]。Hopfield网络是具有二进制神经元(即只能提供0或1的输出的神经元)的RNN。该网络可以用作内容可寻址的存储器。附录中提供了Hopfield网络的详细信息和应用,供有兴趣的读者参考。

图2.21 FNN和RNN的对比。FNN只允许使用前向连接,RNN中可以使用横向连接和反馈连接。RNN中的反馈连接提供了网络的记忆

RNN具备的记忆能力有助于处理某些输入数据具有时间或顺序相关性的应用程序。例如,在预测单词中下一个字母的任务中,假设用户要输入的单词是“neuron”。对于RNN,可以将字母“n”输入神经网络,然后输入“e”,然后输入“u”。随着打字的进行,RNN有望能够预测下一个字母,因为它可以记住用户输入了哪些字母。

RNN的训练可以通过一种称为时间反向传播的技术来实现[43]。想法是在图2.21所示的隐藏层中展开循环。对于每个展开的循环,可以将误差反向传播到权重矩阵。由于权重是在所有展开的环路之间共享的,因此可以相加得到最终的误差梯度,并可以进行常规的梯度下降学习。

使用时间反向传播来训练RNN的问题之一是梯度消失。时间反向传播的本质将RNN展开为非常深的FNN。由于反向传播中涉及乘法,因此在传播几层后,梯度趋于消失或爆炸。由于此梯度消失问题,许多RNN无法得到适当的训练。为了解决这个问题,Hochreiter和Schmidhuber于1997年提出了一种称为长短期记忆(LSTM)的RNN[44],此后变得非常流行。LSTM通过强制执行恒定的误差流,成功解决了梯度消失的问题。恒定误差流由所谓的恒定误差传送带(CEC)确保,该传送带在记忆单元中包含对自身的身份反馈[45]。身份反馈可防止通过CEC传播的误差的消失或爆炸。LSTM中引入了门,以帮助确定何时将新信息输入到记忆单元中以及何时输出记忆单元[44]

LSTM模块的一种典型配置如图2.22所示。LSTM单元的输入向量和输出向量分别表示为xt和yt,其中t用于表示时间。存储单元的输出表示为ct,它是LSTM模块的核心。输入和输出门决定何时允许信息流入和流出单元。它们的输出可以由下式计算得到:

其中W表示权重矩阵或向量,⊙表示元素乘法,σ(·)是激活函数。在文献[47]中,作者提出了将遗忘门添加到LSTM块中,来重置其内部状态。遗忘门的输出和输入与输出门类似,可以描述为

图2.22 经典的LSTM模块示意图。输入信息从左至右流过LSTM模块。LSTM中嵌入了一个单元来储存信息。使用输入门、输出门、遗忘门这三个门来控制信息流动。来源:摘自文献[46]

注意,式(2.38)~式(2.40)中的项ct-1和ct,在原始LSTM块中不存在。后来在文献[48]中提出,可以增加窥视孔连接,以使LSTM更容易地学习精确的计时。

在所有这三个控制门的帮助下,单元状态可以通过下式更新

其中激活函数g(·)通常是双曲正切函数。

最后输出可以由下式得到:

除了LSTM模块的这种经典配置之外,还存在一些用于在某些方面提高性能的变量[46]。自从LSTM被发明以来,它已经成功地用于许多应用中,例如序列学习[49]、为图像生成标题[50]和创建手写文本[51]