长短期记忆 (LSTM)

长短期记忆 (LSTM) 是一种递归神经网络,专用于防止给定输入的神经网络输出在通过反馈回路循环时发生衰减或爆炸。反馈回路可以使递归网络比其他神经网络更出色地进行模式识别。输入过去的记忆对于攻克序列学习任务至关重要,与其他 RNN 结构相比,长短期记忆网络可以通过缓解所谓的梯度消失问题,进而提供更卓越的性能。

由于 LSTM 具有学习长期依赖关系的能力,因而适于解决众多序列学习问题,其中包括语言建模和翻译、语音声学建模、语音合成、语音识别、音频和视频数据分析、手写识别和生成、序列预测和蛋白质二级结构预测。

长短期记忆网络结构

长短期记忆网络结构由自连接线性单元(权重为常数 1.0)组成。这使得流入该自循环单元的值(向前推算)或梯度(向后推算)可以保持不变,且随后可在所需的时间步进行回调。乘以单元乘数之后,前一时间步的输出或误差仍与下一时间步的输出相同。该自循环单元(即记忆单元)能够存储包含过去十几个时间步的信息。这对许多任务都极其有效。例如,对于文本数据,LSTM 单元能够存储前一段落中包含的信息,并能将此信息应用于当前段落的句子中。

lstm

双向 LSTM 在输入序列上训练两个 LSTM,其中一个是在常规输入序列上训练,而另一个则在反转输入序列上训练。这可以使未来数据在时间序列中为历史数据提供上下文,以此提高 LSTM 网络的性能。与简单的前馈网络相比,这些 LSTM 网络能够更有效地解决复杂的序列学习/机器学习问题。

LSTM 中的梯度消失问题

简单的 LSTM 模型只有一个 LSTM 隐藏层,而堆叠式 LSTM 模型(高级应用所需)则具有多个 LSTM 隐藏层。深度网络的一个常见问题是“梯度消失”,在该问题中,每层梯度会越来越小,直至无法影响最深的层。LSTM 中的记忆单元可让我们获得连续的梯度流(误差保持原值),从而消除梯度消失问题,同时还能学习数百个时间步长的序列。

LSTM 中的记忆门

有时我们想要丢弃记忆单元或单元状态中的信息,并将其替换为更新、更相关的信息。同时,我们还不希望向网络释放不必要的信息,以免使其余的递归网络产生混淆。为解决此问题,我们为 LSTM 单元设计了一个遗忘门,遗忘门可删除自循环单元中的信息以为新的记忆腾出空间。删除信息时,遗忘门不会向网络释放信息,因而可避免潜在的混淆事故。遗忘门通过将记忆单元的值乘以 0(删除)和 1(保留所有内容)之间的某个数值来实现此目的。确切值则由当前输入和前一时间步的 LSTM 单元输出确定。

在其他情况下,记忆单元还包含需为许多时间步保留的值。为此,LSTM 模型增加了另一个门(即输入门或写入门),此门可以关闭以防止新信息流入记忆单元(参见图 1)。如此便可保护记忆单元中的数据,直至需要调用时为止。

另一个门则通过将记忆单元的输出乘以 0(无输出)和 1(保留输出)之间的某个数值,以此操控记忆单元的输出(参见图 1)。如果多个记忆互相竞争,此输出门便可能发挥作用。

使用 GPU 加速长短期记忆

GPU 的并行处理能力可以加速 LSTM 的训练和推理过程。GPU 是应用 LSTM 的事实标准,与 CPU 相比,GPU 可将训练速度提高 6 倍,并将推理吞吐量提高 140 倍。cuDNN 是 GPU 加速深度神经网络库,可支持训练 LSTM 递归神经网络以进行序列学习。TensorRT 是一款深度学习模型优化器和运行时引擎,可支持在 GPU 上推理 LSTM 递归神经网络。cuDNN 和 TensorRT 均为 NVIDIA 深度学习 SDK 的组成部分

其他资源

1.  “Deep Learning in a Nutshell: Sequence Learning”作者:Tim Dettmers,Parallel For All,NVIDIA,2016 年 3 月 7 日。
2.  “LSTM: A Search Space Odyssey”作者:Klaus Greff 等,《神经网络与学习系统汇刊》,IEEE,2017 年 10 月 10 日。
3.  “Long Short-Term Memory”作者:Sepp Hochreiter,Neural Computation Journal,1997 年 11 月 15 日。
4.  “Optimizing Recurrent Neural Networks in cuDNN 5”作者:Jeremy Appleyard,Parallel For All,NVIDIA,2016 年 4 月 6 日。
5.  “Understanding LSTM Networks”作者:Christopher Olah,Colah 的博客,2015 年 8 月 27 日。