大数跨境
0
0

图解循环神经网络RNN

图解循环神经网络RNN AI算法之道
2024-06-18
0
导读:Python中列表元组集合字典的区别











01


引言



循环神经网络(RNN)是一种独特的模型,它明确设计用于处理基于序列的问题,其中下一个位置依赖于前一个状态。


本文就来带大家进入RNN的世界,闲话少说,我们直接开始吧!






02


 序列处理问题


让我们用麻省理工学院课程中的一个简单例子来解释一下什么是基于序列的问题。想象一个球在一个特定的时间点 tn,如下所示:

如果让我们预测球的移动方向,在没有更多信息的情况下,这只是一个猜测游戏--它可能朝任何方向移动。

但是,如果我们能获得有关该球之前时刻的位置数据呢?

观察上图,现在我们可以肯定地预测,球将继续向右移动,如下所示:

这种预测情况就是上文我们所说的序列问题--答案受到先前数据的强烈影响。这些序列问题随处可见,从根据过去的温度数据预测明天的气温,到一系列语言模型,包括情感分析、机器翻译和语音识别。今天,我们将讨论情感词分析,这是基于序列问题的一个简单例子。





03


 情感分析


在情感分析中,我们会获取一段输入文本,并判断它传达的是积极情感还是消极情感。今天,我们将构建一个 RNN,它将一篇电影评论作为输入,并预测其是否具有积极意义。假设给定如下影评:

我们希望我们的神经网络能预测出这种情绪是积极向上的。

这听起来像是一个简单明了的分类问题,但标准神经网络在此面临两大挑战。

首先,我们要处理的是不同长度的输入。标准的神经网络很难处理不同长度的输入。例如,如果我们用一篇三字的影评来训练神经网络,那么我们的输入大小将固定为三字。但如果我们想输入更长的影评呢?

在有12个固定输入长度的情况下,该模型将无法处理上述评论。在这种情况下,模型需要灵活应变,无论有多少字扔过来,我们期望它都能灵活适应。

其次,我们的输入有次序。典型的神经网络无法完全理解输入的方向性,而这在这里至关重要。两个句子可能包含完全相同的单词,但顺序不同,表达的意思可能完全相反。

鉴于这些挑战,我们需要一种方法来连续处理动态数量的输入。这正是 RNN 的优势所在。





04


  RNN的引入


鉴于以上的分析,我们不得不引入今天的主角循环神经网络,它的优势就在于可以连续处理动态数量的输入。

我们来看RNN是如何处理上述问题的?它首先处理评论中的第一个单词 "that":

然后利用这些信息处理第二个单词 "was":

最后,利用上述所有信息处理最后一个词 "phenomenal",并对评论的情感类别进行预测:




05


  处理输入


在开始构建循环神经网络之前,我们需要先讨论一下其输入。神经网络的输入必须是数字。但是,我们例子中的输入是单词,因此我们需要将这些单词转换成数字。有几种方法可以做到这一点,但今天我们将使用一种最基本的方法。

现在,假设我们有一本包含 10,000 个单词的大词典。我们简单的认为,评论中出现的任何单词都可以在这本 10,000 个单词的字典中找到。每个单词都对应一个数字。

要将单词 "that "转换为一组数字作为模型的输入,我们需要确定"that "在字典中的位置...

然后将其表示为由 10,000 个0组成的矩阵,除了第 8600 个元素是1:
同样,接下来的两个单词"was"(字典中第 9680 个字)和 "phenomenal"(字典中第 4242 个字)的数字表示法也与之类似:

这就是我们如何将一个单词转换为神经网络友好输入的过程。






06


搭建神经网络

现在让我们来看看神经网络的设计。为简单起见,假设我们的网络有 10,000 个输入(= 1 个单词)、由一个神经元组成的一个隐藏层和一个输出神经元。

当然,如果这是一个经过全面训练的神经网络,那么每个输入都会有相关的权重,神经元也会有偏置项。

在该网络中,输入权重标记为wi,其中 i 表示输入。隐藏层神经元的偏置项为 bh。连接隐层和输出神经元的权重为 why。最后,输出神经元中的偏置用 by 表示,因为y表示我们的输出。此外,我们将使用双曲正切函数(tanh)作为隐藏层神经元的激活函数。

我们知道 tanh 接收输入并产生-1 到 1 范围内的输出。无穷大的输入趋向于 1,而无穷小的输入则接近于-1。

为了确定文本的情感,我们可以在输出神经元中使用 sigmoid 激活函数。该函数利用隐藏层的输出,输出一个介于 0 和 1 之间的值,代表正面情绪的概率。接近 1 的预测值表示评论是正面的,而接近 0 的预测值则表示评论不太可能是正面的。

有了这些激活函数,我们的神经网络看起来就像这样了:

上述神经网络接收文本输入,并预测其具有积极情感的概率。在上面的例子中,该网络处理了输入的 "that",并预测了其具有正面情绪的可能性。诚然,"that "这个词本身并没有提供太多关于情感的提示。现在,我们需要弄清楚如何将下一个词纳入网络。这时,循环神经网络的递归特性就会发挥作用,从而对基本结构进行修改。







07


RNN的递归性


接着我们通过创建一个与上述神经网络完全相同的副本来输入评论的第二个单词 "was"。不过,我们不使用 "that "作为输入,而是使用 "was":

请记住,我们还希望在这个神经网络中使用前一个单词 "this "的信息。因此,我们将前一个神经网络隐藏层的输出传递到当前网络的隐藏层:

这是至关重要的一步,让我们来慢慢分解。







08


处理细节


我们知道,神经网络中每个神经元的处理过程包括两个步骤:求和与激活函数。让我们看看我们的第一个神经网络是怎样的。

在第一个神经网络的隐层神经元中,第一步是求和:

在这里,我们将每个输入乘以相应的权重,然后将偏差项与所有乘积之和相加:

为了简化这个等式,我们可以这样表示,其中 wx代表输入权重,x 代表输入:
接下来,在第 2 步中,我们通过激活函数 tanh 进行求和:

其计算公式如下:

这就产生了第一个神经网络隐藏层的输出 h1。在这里,我们接下来有两个选择:将 h1传递给输出神经元传递给下一个神经网络的隐藏层。




09


传递给输出神经元


如果我们只想对单词 "that"进行情感预测,那么我们可以取 h1 并将其传递给输出神经元:

对于输出神经元,我们执行求和步骤,如下:

公式表示如下:

然后对这个结果应用 sigmoid 激活函数,如下:

这就是我们预测的单词that具有积极情绪的输出:

因此,y1_hat 给出了单词"that "具有积极情感的预测概率。





10


传递给隐含层

虽然上面可以预测单词that的情感分析,但这并不是我们想要的。因此,我们不把 h1传递给输出神经元,而是像这样把信息传递给下一个神经网络:

与神经网络其他部分的输入权重类似,我们也有一个输入权重 whh,用于从一个隐藏层输入到另一个隐藏层。隐藏层通过将 h1 和 whh 的乘积加入隐藏神经元的求和步骤,从而纳入 h₁。因此,第二个神经网络神经元的隐藏神经元中更新后的求和步骤将是:

上过过程用公式表示如下:

需要注意的关键点是:整个网络中的所有权重和片植项都保持不变,因为它们都是前一个网络的简单复制。

然后将该和通过 tanh 函数,产生 h₂,即第二个神经网络隐藏层的输出如下:

上述过程用公式表示如下:

在此基础上,我们可以再次通过输出神经元 h获得情感预测:

上述过程用公式表示如下:

这里,y2_hat 表示 "that was "具有积极情绪的预测概率。






11


处理最后一个单词

接着,我们将复制这个过程,再次克隆这个网络,但输入为最后一个单词 "phenomenal",并将前一个隐含层的输出传递到当前的隐含层。

我们对隐藏层神经元进行处理:

得到输出h3,如下:


由于这是评论中的最后一个词,因此也是最终的输入,我们将此数据传递给最后一个神经元,如下:

让我们对本评论有一个最终的预测:

而这正是我们想要的影评情感分析,也是我们实现最初设想的方式!







12


简化形式


如果我们把之前的细节补充完整,就会得到这样的网络结构:

该过程的每个阶段都包含一个输入 x,通过隐藏层产生一个输出 h。该输出要么进入下一个神经网络的隐藏层,要么产生一个情感预测结果,如 y_hat。每个阶段都包含权重和偏置项(图中未显示偏置)。

需要强调的一点是,我们将所有的隐藏层整合到了一个紧凑的盒子中。虽然我们的模型只包含一层,且隐藏层中只有一个神经元,但更复杂的模型可能包含多个隐藏层和无数个神经元,所有这些神经元都被浓缩到这个称为隐藏状态的盒子中。这个隐藏状态包含了隐藏层的抽象概念。

从本质上讲,这是下列神经网络的简化版:

另外值得注意的是,为了简单起见,我们可以用这个精简的图表来表示这一切:

这一过程的本质是将隐含层的输出再送回自身,因此被称为循环神经网络或者递归神经网络。教科书中通常是这样表述该网络的。





13


RNN可以解决什么问题?


  • 多对一

我们刚讨论了将多个输入(在我们的例子中,评论中的所有单词)输入 RNN 的情况。然后,RNN 生成一个输出,代表评论的情感。虽然每一步都可能有输出,但我们最感兴趣的是最终输出,因为它囊括了整篇评论的情感。

  • 一对多

一对多问题的一个典型例子是图像标题描述生成。在这里,单个输入是一幅图像,输出是由多个单词组成的标题。

  • 多对多


这种 RNN 多用于机器翻译等任务,例如将英语句子翻译成中文。












点击上方小卡片关注我




扫码进群,交个朋友!


【声明】内容源于网络
0
0
AI算法之道
一个专注于深度学习、计算机视觉和自动驾驶感知算法的公众号,涵盖视觉CV、神经网络、模式识别等方面,包括相应的硬件和软件配置,以及开源项目等。
内容 573
粉丝 0
AI算法之道 一个专注于深度学习、计算机视觉和自动驾驶感知算法的公众号,涵盖视觉CV、神经网络、模式识别等方面,包括相应的硬件和软件配置,以及开源项目等。
总阅读129
粉丝0
内容573