长短期记忆 (LSTM)

什么是长短期记忆 (LSTM)?

了解 LSTM 的工作原理、应用场景以及设计方法

长短期记忆 (LSTM) 网络是一种循环神经网络 (RNN)。LSTM 主要用于学习、处理和分类顺序数据,因为它们可以学习数据的时间步之间的长期相关性。

LSTM 的工作原理

LSTM 和 RNN

LSTM 网络是 RNN 架构的一种特殊形式。RNN 使用过去的信息来提高神经网络处理当前和将来输入的性能。它们包含隐藏状态和循环,这使得网络可以以隐藏状态存储过去的信息并对序列进行运算。RNN 有两组权重:一组用于隐藏状态向量,另一组用于输入。在训练期间,网络会学习输入和隐藏状态的权重。在实现时,输出基于当前输入以及隐藏状态,而隐藏状态基于以前的输入。

实际上,简单的 RNN 学习长期相关性的能力有限。RNN 通常通过反向传播来训练,在反向传播中,它们可能遇到梯度消失或爆炸问题。这些问题导致网络权重变得非常小或非常大,从而限制需要网络学习长期关系的应用的有效性。

RNN 对输入使用隐藏状态,并将该状态用作 RNN 在下一时间步的附加输入。

传统 RNN 在时间步 t 处的数据流。

LSTM 层架构

LSTM 层使用额外的门来控制隐藏状态中的哪些信息作为输出导出和传递到下一个隐藏状态。这些额外的门克服了 RNN 在学习长期相关性方面的常见问题。除了传统 RNN 中的隐藏状态之外,LSTM 模块的架构通常具有记忆单元、输入门、输出门和遗忘门。额外的门使网络能够更高效地学习数据中的长期关系。LSTM 网络对时间空缺的敏感度较低,这使得它比简单 RNN 更适合分析顺序数据。在下图中,您可以看到 LSTM 架构及其在时间步 t 处的数据流。

LSTM 网络使用遗忘门和记忆单元等额外的单元来防止出现梯度消失和爆炸问题。

一个 LSTM 单元在时间步 t 处的数据流。遗忘门和记忆单元可防止梯度消失和爆炸问题。

输入门的权重和偏置控制新值流入 LSTM 单元的程度。同样,遗忘门和输出门的权重和偏置分别控制值保留在单元中的程度以及单元中的值用于计算 LSTM 模块的输出激活的程度。

下图显示穿过一个具有多个时间步的 LSTM 层的数据流。输出中通道的数量与 LSTM 层中隐藏单元的数量匹配。

图中显示信息如何穿过一个 LSTM 层的多个时间步来传播。

一个具有多个时间步的 LSTM 的数据流。每个 LSTM 运算接收来自前一个运算的隐藏状态和单元状态,并将更新后的状态和单元状态传递给下一个运算。

LSTM 网络架构

LSTM 可以很好地处理用于分类和回归任务的序列和时间序列数据。LSTM 也非常适合处理视频,因为视频本质上是一个图像序列。与处理信号类似,在将图像序列馈送到 LSTM 层之前执行特征提取会很有帮助。利用卷积神经网络 (CNN)(例如 GoogLeNet)对每帧进行特征提取。下图显示如何为不同任务设计 LSTM 网络。

LSTM 网络架构图,其中各层用于构建适用于不同任务的 RNN。

适用于分类、回归和视频分类任务的 LSTM 网络架构。

双向 LSTM

双向 LSTM (BiLSTM) 可学习时间序列数据或序列数据的时间步的双向依存关系。当您希望网络在每个时间步都从完整时间序列中学习时,这些依存关系会很有用。BiLSTM 网络支持额外的训练,因为输入数据会传递过 LSTM 层两次,这可以提高网络的性能。

一个 BiLSTM 由两个 LSTM 组件组成:前向 LSTM 和后向 LSTM。前向 LSTM 从第一个时间步运算到最后一个时间步。后向 LSTM 从最后一个时间步运算到第一个时间步。在数据传递过两个 LSTM 组件后,该运算沿通道维度串联各个输出。

图中显示 BiLSTM 中的前向和后向 LSTM 运算。

一个具有多个时间步的 BiLSTM 的架构。

使用 MATLAB 中的 LSTM 示例快速入门

LSTM 应用

LSTM 特别擅长处理长度可能会变的顺序数据以及学习该数据的时间步之间的长期相关性。常见的 LSTM 应用包括情绪分析、语言建模、语音识别和视频分析

广泛的 LSTM 应用

RNN 是许多应用中的关键技术,例如:

  • 信号处理。信号天然就是顺序数据,因为它们通常是传感器随着时间的推移采集的。对大型信号数据集的自动分类回归使得实时预测成为可能。原始信号数据可以馈入深度网络,或进行预处理以关注特定特征,如频率分量。特征提取可以大大提高网络性能。
  • 自然语言处理 (NLP)。语言天然就是顺序数据,文本片段的长度也各不相同。LSTM 非常适合自然语言处理任务,如文本分类、文本生成、机器翻译和情绪分析,因为它们可以学习根据语境处理句子中的字词。

尝试以下示例,入门使用 LSTM 进行信号处理和自然语言处理。

垂直 LSTM 应用

随着深度学习应用的不断扩展,LSTM 也用于垂直应用,例如:

使用 LSTM 网络估计 NOx 排放量

雷诺汽车工程师使用 LSTM 开发下一代零排放车辆 (ZEV) 技术。

他们获得的训练数据来自真实发动机测试。在这些测试中,发动机经历了各种常见行驶工况。捕获的数据(包括发动机扭矩、发动机转速、冷却液温度和档位排放量)为 LSTM 网络提供输入。经过 LSTM 架构设计的反复迭代,LSTM 的最终版本预测 NOx 水平的准确度达到了 85-90%。

通过 MATLAB 使用 LSTM

借助 MATLAB®Deep Learning Toolbox™,您能够设计、训练和部署 LSTM。您可以使用 Text Analytics Toolbox™Signal Processing Toolbox™ 将 LSTM 应用于文本或信号分析。

设计和训练网络

您可以仅用几行代码便可以以编程方式设计和训练 LSTM。使用 LSTM 层双向 LSTM 层LSTM 投影层构建 LSTM。您还可以使用深度网络设计器以交互方式设计、分析和修改 LSTM。

截图:使用深度网络设计器以交互方式构建的简单 BiLSTM 网络。

使用深度网络设计器以交互方式构建、可视化和编辑 LSTM 网络。

导入和导出网络

您可以用基于 Python® 的深度学习框架来替换 LSTM 网络:

  • 用一行代码导入 PyTorch®、TensorFlow™ 和 ONNX™ 模型。
  • 使用深度网络设计器以交互方式导入 PyTorch 和 TensorFlow 模型。
  • 用一行代码将 LSTM 网络导出到 TensorFlow 和 ONNX。
图中显示 LSTM 和其他深度神经网络在 MATLAB、TensorFlow、ONNX 和 PyTorch 之间的互操作性。

在 MATLAB、TensorFlow、ONNX 和 PyTorch 之间转换 LSTM 网络。

部署网络

嵌入式系统、企业系统或云上部署经过训练的 LSTM:

  • 自动生成优化的 C/C++ 代码和 CUDA 代码以部署到 CPU 和 GPU。
  • 生成可综合的 Verilog® 和 VHDL® 代码以部署到 FPGA 和 SoC。
图中显示用于将深度神经网络部署到 CPU、GPU、微控制器和 FPGA 的 MATLAB 和 Simulink 代码生成。

将经过训练的深度学习网络快速部署到生产中。