AI语音领域的机器学习工程师,我是迈克尔,也被称为LearnedVector

总结:还在看数学公式来学习 RNN?出去!

欢迎阅读循环神经网络的图解指南。我是 Michael,也被称为 LearnedVector,我是 AI 语音领域的机器学习工程师。如果您刚刚开始使用 ML 并希望获得一些关于递归神经网络的直觉,那么这篇文章就是为您准备的。

循环神经网络是一种强大的技术前向和递归神经网络的区别,如果你想进入机器学习前向和递归神经网络的区别,那么理解它就变得非常重要。如果您经常使用智能手机或上网,那么您将经常使用 RNN 应用程序。因为 RNN 已被用于语音识别、语言翻译、股票预测等,它甚至被用于图像识别来描述图片中的内容。

所以我知道有很多关于循环神经网络的指南,但我想通过分享一个插图来解释我是如何理解它的。我将避免其背后的数学,并专注于 RNN 背后的真正含义。通过阅读本文,您应该对 RNN 有一个很好的了解。

序列数据

RNN是一种擅长对序列数据建模的神经网络。为了理解这意味着什么,让我们做一个小实验。假设您拍摄了球及时移动的静态快照。

假设您想预测球的移动方向。因此,您只能使用您在屏幕上看到的信息来执行此操作。但你可以猜测,但你想出的任何答案都是随机猜测。在不知道球的位置的情况下,没有足够的数据来预测球的位置。

如果您连续记录球位置的快照,那么您将有足够的信息来做出更好的预测。

所以这是一个顺序,一个特定的顺序,一个事情接一个接一个。有了这些信息,您现在可以看到球向右移动。

序列数据有多种形式。音频是一个自然序列,您可以将音频频谱图分割成块并将其输入 RNN。

音频频谱图切成块

文本也是序列的一种形式,可以将文本分解成一系列字符或一系列单词。

顺序存储

现在我们知道 RNN 擅长处理预测的序列数据,但它是如何做到的呢?

它通过一个我喜欢称之为顺序存储的概念来做到这一点。获得顺序存储能力意味着什么?我们用一个小例子来说明它。

我想请你说出你脑海中的字母。

这很简单,如果你被教过这个特定的序列,你应该能够很快记住它。

所以现在试着反过来说这些字母。

我敢打赌,这要困难得多。除非你以前练习过这个特定的序列,否则你可能会遇到困难。

现在来看一个更有趣的,让我们从字母 F 开始。

起初,你会在前几个字母上遇到困难,但在你的大脑学会了这个模式之后,剩下的就会自然而然地出现。

因此,这有一个非常合乎逻辑的原因。您将字母表作为一个序列来学习,而顺序存储是一种使大脑更容易识别顺序模式的机制。

递归神经网络

所以我们可以知道RNN有顺序存储这个抽象概念,但是RNN是如何学习这个概念的呢?那么,让我们看一下传统的神经网络,也称为前馈神经网络。它有输入层、隐藏层和输出层。

我们如何训练一个前馈神经网络,使其能够使用先前的信息来影响未来的信息?如果我们在传递先前信息的神经网络中添加一个循环会变成什么?

这基本上是一个循环神经网络。RNN 让循环机制充当高速公路,让信息从一个步骤流向下一步。

将隐藏状态传递到下一步

此信息是隐藏状态,它是先前输入的表示。让我们通过一个 RNN 用例来更好地理解它是如何工作的。

假设我们想构建一个聊天机器人,认为它们现在很流行。假设聊天机器人可以根据用户输入的文本对意图进行分类。

对用户输入的意图进行分类

来解决这个问题。首先,我们将使用 RNN 对文本序列进行编码。然后,我们将 RNN 输出馈送到一个前馈神经网络,该网络将对用户输入意图进行分类。

假设用户输入:现在几点?首先,我们将句子分解为单个单词。RNN 是按顺序工作的,所以我们一次只能输入一个单词。

将句子拆分为单词序列

第一步是将“What”输入 RNN,RNN 对“what”进行编码并产生输出。

对于下一步,我们提供“时间”一词和上一步的隐藏状态。RNN 现在有了关于“什么”和“时间”这两个词的信息。

我们重复这个过程直到最后一步。您可以通过最后一步看到,RNN 对前面步骤中所有单词的信息进行了编码。

由于最终输出是从序列的一部分创建的,我们应该能够获取最终输出并将其传递给前馈层以对意图进行分类。

对于喜欢看这里代码的人来说,用python来展示控制流应该是最好的选择。

RNN 控制流的伪代码

首先,初始化网络层和初始隐藏状态。隐藏状态的形状和尺寸将取决于循环神经网络的形状和尺寸。然后循环输入,将单词和隐藏状态传递给 RNN。RNN 返回输出和修改后的隐藏状态,然后循环继续。最后,输出被传递到前馈层,它返回预测。整个过程就是这样!执行循环神经网络前向传递的控制流是一个 for 循环。

渐变消失

您可能已经注意到隐藏状态下奇怪的颜色分布。这是为了说明 RNN 称为短期记忆的问题。

RNN的最终隐藏状态

短期记忆问题是由臭名昭著的梯度消失问题引起的,这在其他神经网络架构中也很普遍。由于 RNN 处理许多步骤,因此很难保留先前步骤的信息。如您所见,“什么”和“时间”这两个词的信息在最后一个时间步中几乎不存在。短期记忆和梯度消失是由于反向传播的性质,该算法用于训练和优化神经网络。为了理解为什么会这样,让我们​​看看反向传播对深度前馈神经网络的影响。

训练神经网络的三个主要步骤。首先,它进行前向传递并进行预测。其次,它使用损失函数将预测与基本事实进行比较。损失函数输出一个错误值,该错误值是对网络性能有多差的估计。最后,它使用这个误差值进行反向传播,计算网络中每个节点的梯度。

梯度是用来调整网络内部权重以更新整个网络的值。梯度越大,调整越大,反之亦然,这就是问题所在。反向传播时,该层中的每个节点根据梯度效应计算其在其前面层中的梯度。所以如果对之前图层的调整小,对当前图层的调整就会小一些。

这会导致梯度在向后传播时呈指数收缩。由于梯度极小,内部权重几乎没有调整,因此较早的层无法进行任何学习。这就是梯度消失问题。

随着梯度向后传播而收缩

让我们看看这如何应用于循环神经网络。您可以将循环神经网络中的每个时间步视为一个层。要训​​练循环神经网络,您可以使用一种称为随时间反向传播的方法。这样,梯度值将在每个时间步传播时呈指数收缩。

梯度随时间缩小

同样,梯度值将用于对神经网络权重进行调整,使其能够学习。小的渐变意味着小的调整。这将导致最前面的层没有被优化。

由于梯度消失,RNN 不会跨时间步学习长期依赖关系。这意味着在尝试预测用户的意图时可能不会考虑“什么”和“时间”这两个词。那么网络的可能猜测是“是吗?”。它是如此模糊,以至于即使是人类也很难破译它的真正含义。因此,无法在较早的时间步学习导致网络具有短期记忆。

LSTM 和 GRU

RNN 受到短期记忆的影响,那么我们该如何处理呢?为了减轻短期记忆的影响,研究人员创建了两个专门的循环神经网络,一个称为长短期记忆,简称 LSTM。另一个是门控循环单元或 GRU。LSTM 和 GRU 本质上类似于 RNN,但它们能够使用称为“门”的机制来学习长期依赖关系。这些门是不同的张量操作,它们学习从隐藏状态添加或删除信息。由于这种能力,短期记忆对他们来说不是问题。如果您想了解有关 LSTM 和 GRU 的更多信息,可以查看我的插图视频。

总结

总之,RNN 适合处理序列数据进行预测,但会受到短期记忆的影响。普通 RNN 的短期存储问题并不意味着完全跳过它们并使用更进化的版本,如 LSTM 或 GRU。RNN 具有更快的训练和使用更少的计算资源的优势,因为要计算的张量操作更少。当您希望对具有长期依赖关系的较长序列进行建模时,您应该使用 LSTM 或 GRU。

如果您有兴趣深入挖掘,这里有一些解释 RNN 及其变体的链接。

https://iamtrask.github.io/2015/11/15…

云栖社区翻译的LSTM的“前世”

本文由阿里云云栖社区组织翻译。

文章原标题“illustrated-guide-to-recurrent-neural-networks”

作者:迈克尔·阮

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论