循环神经网络的图解指南

循环神经网络的图解指南

如果你刚刚开始使用机器学习(ML)并希望在Recurrent神经网络背后获得一些直觉,那么这篇文章就适合你。

循环神经网络是一种强大的技术,循环神经网络用于语音识别,语言翻译,股票预测等领域。它甚至可用于图像识别来描述图片中的内容。

我将避免所有数学,而是专注于RNN背后的直觉。在这篇文章的最后,你应该对RNN有一个很好的理解。

序列数据

RNN是神经网络,擅长建模序列数据。要理解这意味着什么,让我们做一个实验。假设你拍摄一张球在时间上移动的静态快照。

循环神经网络的图解指南

你想预测球的移动方向。你可以猜测,但你提出的任何答案都是随机的猜测,没有足够的数据来预测球的位置。

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

循环神经网络的图解指南

所以这是一个序列,一个特定的顺序,其中一个对象紧跟另一个对象。有了这些信息,您现在可以看到球向右移动。

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

循环神经网络的图解指南

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

顺序记忆

RNN擅长处理预测的序列数据。

他们通过我喜欢称为顺序记忆的概念来做到这一点。获得顺序记忆意味着什么的良好直觉......

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

循环神经网络的图解指南

这很简单。你学过这个特定的顺序,很容易理解。

现在试着倒着说字母表。

循环神经网络的图解指南

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

这是一个有趣的,从字母F开始。

循环神经网络的图解指南

一开始,你会纠结于最初的几个字母,但是当你的大脑学会了这个模式后,剩下的就会自然而然地出现。

这是一个非常合乎逻辑的原因。你把字母表当成一个序列来学习。顺序记忆是一种让大脑更容易识别序列模式的机制。

循环神经网络

所以RNN有顺序记忆的这个抽象概念,但是RNN如何复制这个概念呢?那么,让我们来看一个传统的神经网络,也称为前馈神经网络。它有输入层,隐藏层和输出层。

循环神经网络的图解指南

前馈神经网络

我们如何让前馈神经网络能够利用之前的信息来影响后面的信息?如果我们在神经网络中添加一个循环,可以将之前的信息向前传递呢?

循环神经网络的图解指南

循环神经网络

这就是循环神经网络的作用。RNN有一个循环机制,允许信息从一个步骤流到下一个步骤。

循环神经网络的图解指南

将隐藏状态传递给下一个步骤

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

假设我们想要构建一个聊天机器人假设聊天机器人可以根据用户输入的文本对意图进行分类。

循环神经网络的图解指南

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

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

用户输入... what time is it? 首先,我们将句子分解为单个单词。

循环神经网络的图解指南

将一个句子分成单词序列

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

循环神经网络的图解指南

对于下一步,我们提供单词“time”和上一步中的隐藏状态。RNN现在有关于“what”和“time”这两个词的信息。

循环神经网络的图解指南

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

循环神经网络的图解指南

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

循环神经网络的图解指南

对于那些喜欢在这里查看代码的人来说,有些python展示了控制流程。

循环神经网络的图解指南

RNN控制流的伪代码

首先,初始化网络层和初始隐藏状态。隐藏状态的shape和维度将取决于您的循环神经网络的shape和维度。然后循环输入,将单词和隐藏状态传递到RNN。RNN返回输出和修改后的隐藏状态。你继续循环,直到用完为止。最后,您将输出传递给前馈层,它将返回一个预测。就是这样!进行递归神经网络的正向传递的控制流程是for循环。

梯度消失

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

循环神经网络的图解指南

RNN的最终隐藏状态

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

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

循环神经网络的图解指南

梯度是用于调整网络内部权重的值,允许网络学习。梯度越大,调整越大,反之亦然。这就是问题所在。在进行反向传播时,层中的每个节点都会根据梯度效果计算它在其前面的层中的梯度。因此,如果在它之前对层的调整很小,那么对当前层的调整将更小。

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

循环神经网络的图解指南

梯度反向传播时收缩

让我们看看这如何适用于循环神经网络。您可以将循环神经网络中的每个时间步骤视为一个层。为了训练一个循环神经网络,你使用了反向传播方法。梯度值在每个时间步长传播时将呈指数级收缩。

循环神经网络的图解指南

随着时间的推移,梯度会收缩

同样,梯度用于在神经网络权重中进行调整,从而允许其学习。小梯度意味着小的调整。这导致早期层不学习。

由于梯度消失,RNN不会跨时间步骤学习远程依赖性。这意味着在尝试预测用户意图时,有可能不考虑what和time单词。然后,网络必须以“is it?”来做出最好的猜测。这很模糊,即使是人类也很难。因此,无法在较早的时间步骤上学习会导致网络具有短期记忆。

LSTM和GRU

那么RNN会受到短期记忆的影响,那么我们如何应对呢?为了减轻短期记忆,创建了两个专门的循环神经网络。一种叫做长短期记忆或简称LSTM。另一个是GRU。LSTM和GRU本质上就像RNN一样,但它们能够使用称为“gates”的机制来学习长期依赖性。这些门是不同的张量操作,可以学习添加或删除隐藏状态的信息。由于这种能力,短期记忆对他们来说不是一个问题。

最后

综上所述,RNN对于处理预测序列数据很有帮助,但也存在短期记忆问题。vanilla RNN的短期记忆问题并不意味着完全跳过它们,而使用更进化的版本,如LSTM或GRU。RNN的优点是训练更快,计算资源更少。那是因为有更少的张量运算要计算。当您希望用长期依赖关系建模较长的序列时,应该使用LSTM或GRU。

相关推荐