什么是 RNN(循环神经网络)?

什么是 RNN?

循环神经网络 (RNN) 是一种用于深度学习的网络架构,它可以对时间序列或顺序数据进行预测。

RNN 特别适合处理长度不同的顺序数据以及解决自然信号分类、语言处理和视频分析等问题。

RNN 的工作原理

循环神经网络 (RNN) 是一种深度学习结构,它使用过去的信息来提高网络处理当前和将来输入的性能。RNN 的独特之处在于该网络包含隐藏状态和循环。循环结构支持网络以隐藏状态存储过去的信息,并对序列进行运算。

RNN 怎么知道如何将过去的信息应用于当前输入?该网络有两组权重:一组用于隐藏状态向量,另一组用于输入。在训练期间,网络会学习输入和隐藏状态的权重。在实现时,输出基于当前输入以及隐藏状态,而隐藏状态基于以前的输入。

RNN 中单个单元的展开图,显示信息如何通过数据序列的网络。该单元的隐藏状态作用于输入以产生输出,并且隐藏状态会传递给下一个时间步。

RNN 单元.JPG

展开的单个 RNN 单元,显示信息如何通过数据序列的网络。该单元的隐藏状态作用于输入以产生输出,并且隐藏状态会传递给下一个时间步。

LSTM

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

一种特殊类型的 RNN——长短期记忆 (LSTM) 网络可克服此类问题。LSTM 网络使用额外的门来控制隐藏状态中的哪些信息可以输出,并传递到下一个隐藏状态。这就使网络能够更高效地学习数据中长期关系。LSTM 是一种常用的 RNN。

RNN(左)和 LSTM 网络(右)的比较.JPG

RNN(左)和 LSTM 网络(右)的比较。

双向 LSTM 可学习时间序列数据或序列数据的时间步的双向依存关系。当您希望网络在每个时间步都从完整时间序列中学习时,这些依存关系会很有用。另一个学习长期依存关系的 RNN 变体是门控 RNN。您可以在 MATLAB® 中训练和使用双向 LSTM 和门控 RNN。

RNN 为何重要

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

信号处理

信号天然就是顺序数据,因为它们通常是传感器随着时间的推移采集的。对大型信号数据集的自动分类和回归使得实时预测成为可能。原始信号数据可以馈入深度网络,或进行预处理以关注特定特征,如频率分量。特征提取可以大大提高网络性能。

文本分析

语言天然就是顺序数据,文本片段的长度也各不相同。RNN 非常适合自然语言处理任务,如文本分类、文本生成、机器翻译和情绪分析(对单词和短语的含义进行分类),因为它们可以学习根据语境处理句子中的字词。

何时应使用 RNN?

当您使用序列和时间序列数据执行分类和回归任务时,请考虑使用 RNN。RNN 也非常适合处理视频,因为视频本质上是一个图像序列。与处理信号类似,在将序列馈送到 RNN 之前进行特征提取会很有帮助。利用 CNN(例如 GoogLeNet)对每帧进行特征提取。

用于分类、回归和视频分类任务的 RNN 网络架构.JPG

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

使用 MATLAB 实现 RNN

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

设计和训练网络

您可以仅用几行 MATLAB 代码以编程方式创建和训练 RNN。使用循环层(LSTM 层、双向 LSTM 层、门控循环层和 LSTM 投影层)构建 RNN。在 RNN 网络中使用单词嵌入层将单词映射到数值序列中。

您还可以使用深度网络设计器以交互方式创建和训练 RNN。通过准确度、损失和验证度量图监控训练。

部署网络

您可以在嵌入式系统、企业系统、FPGA 设备或云上部署经过训练的 RNN。您还可以使用 Intel®、NVIDIA® 和 ARM® 库生成代码,以创建具有高性能推断速度的可部署模型。

RNN 网络.JPG

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

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

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


文章来源:MATLAB

最新文章

最新文章