循环神经网络


文档摘要

循环神经网络 课前测验 在之前的章节中,我们使用了丰富的语义表示来处理文本,并在嵌入层之上添加了一个简单的线性分类器。这种架构的作用是捕捉句子中词语的聚合意义,但它并没有考虑词语的顺序,因为在嵌入层之上进行的聚合操作已经去除了原始文本中的这一信息。由于这些模型无法对词序建模,它们无法解决更复杂或模棱两可的任务,如文本生成或问答。 为了捕捉文本序列的意义,我们需要使用另一种神经网络架构,称为循环神经网络(RNN)。在RNN中,我们将句子逐个符号地通过网络传递,并产生一些状态,然后将该状态与下一个符号一起传递给网络。 RNN 图片由作者提供 给定输入序列中的标记X 0 ,...,X n ,RNN创建一个神经网络块序列,并使用反向传播从头到尾训练这个序列。

循环神经网络

课前测验

在之前的章节中,我们使用了丰富的语义表示来处理文本,并在嵌入层之上添加了一个简单的线性分类器。这种架构的作用是捕捉句子中词语的聚合意义,但它并没有考虑词语的顺序,因为在嵌入层之上进行的聚合操作已经去除了原始文本中的这一信息。由于这些模型无法对词序建模,它们无法解决更复杂或模棱两可的任务,如文本生成或问答。

为了捕捉文本序列的意义,我们需要使用另一种神经网络架构,称为循环神经网络(RNN)。在RNN中,我们将句子逐个符号地通过网络传递,并产生一些状态,然后将该状态与下一个符号一起传递给网络。

RNN

图片由作者提供

给定输入序列中的标记X0,...,Xn,RNN创建一个神经网络块序列,并使用反向传播从头到尾训练这个序列。每个网络块以一对(Xi,Si)作为输入,并产生结果Si+1。最终状态Sn或输出Yn进入线性分类器以生成结果。所有网络块共享相同的权重,并通过一次反向传播训练。

因为状态向量S0,...,Sn通过网络传递,它能够学习词语之间的顺序依赖关系。例如,当某个序列中出现单词“not”时,它可以学习到在状态向量中否定某些元素,从而实现否定。

✅ 由于图中所有RNN块的权重是共享的,可以将同一张图表示为一个块(右侧),其中包含一个循环反馈回路,将网络的输出状态传递回输入。

RNN单元的解剖

让我们看看一个简单的RNN单元是如何组织的。它接受前一状态Si-1和当前符号Xi作为输入,并必须生成输出状态Si(有时我们也对其他输出Yi感兴趣,例如在生成网络的情况下)。

一个简单的RNN单元内部有两个权重矩阵:一个用于变换输入符号(我们称之为W),另一个用于变换输入状态(记作H)。在这种情况下,网络的输出计算公式为σ(W×Xi+H×Si-1+b),其中σ是激活函数,b是附加偏置。

RNN单元解剖

图片由作者提供

在许多情况下,输入标记会在进入RNN之前通过嵌入层降低维度。在这种情况下,如果输入向量的维度是emb_size,而状态向量的大小是hid_size,那么W的大小是emb_size×hid_size,H的大小是hid_size×hid_size

长短期记忆(LSTM)

经典RNN的主要问题之一是所谓的梯度消失问题。因为RNN是在一次反向传播中从头到尾训练的,它很难将误差传播到网络的第一层,因此网络不能学习远距离标记之间的关系。避免这个问题的一种方法是通过使用所谓的来引入显式的状态管理。在这方面有两种著名的架构:长短期记忆(LSTM)和门控循环单元(GRU)。

展示一个长短期记忆单元的例子

图片来源待定

LSTM网络的组织方式类似于RNN,但有两组状态被逐层传递:实际状态C和隐藏向量H。在每个单元中,隐藏向量Hi与输入Xi连接在一起,并通过控制状态C的变化。每个门是一个具有sigmoid激活函数(输出范围[0,1])的神经网络,可以看作是一种位掩码,当与状态向量相乘时。上图中依次有以下门:

  • 遗忘门接收隐藏向量并确定哪些C向量的组件需要被遗忘,哪些需要传递。
  • 输入门从输入和隐藏向量中获取一些信息并将其插入状态。
  • 输出门通过带有tanh激活函数的线性层转换状态,然后使用隐藏向量Hi选择其部分组件以生成新的状态Ci+1

状态C的组件可以看作是一些可以打开和关闭的标志。例如,当我们在序列中遇到名字“Alice”时,我们可以假设它指的是女性角色,并在状态中设置一个标志,表明句子中有女性名词。当我们进一步遇到短语“and Tom”时,我们会设置一个标志,表明句子中有复数名词。因此,通过操纵状态,我们可以跟踪句子各部分的语法属性。

✅ 对于理解LSTM内部工作原理的一个优秀资源是Christopher Olah的文章《理解LSTM网络》Understanding LSTM Networks

双向和多层RNN

我们讨论了从序列开始到结束按顺序运行的循环网络。这看起来很自然,因为它类似于我们阅读和听语音的方式。然而,在许多实际情况下,我们对输入序列有随机访问权限,因此可能有必要在两个方向上运行循环计算。这种网络被称为双向RNN。处理双向网络时,我们需要两个隐藏状态向量,一个用于每个方向。

无论是单向还是双向的循环网络,都可以捕获序列内的某些模式,并将其存储到状态向量或传递到输出中。就像卷积网络一样,我们可以在第一层之上再构建另一层循环网络,以捕获更高层次的模式,并从第一层提取的低层次模式构建。这引导我们到多层RNN的概念,它由两个或多个循环网络组成,其中前一层的输出作为下一层的输入。

展示多层长短时记忆-RNN

图片来自Fernando López的这篇精彩文章

✍️ 练习:嵌入

继续在以下笔记本中学习:

结论

在本单元中,我们了解到RNN可以用于序列分类,但实际上它们可以处理更多任务,如文本生成、机器翻译等。我们将在下一单元中探讨这些任务。

挑战

阅读一些关于LSTM的文献并考虑它们的应用:

课后测验

复习与自学

作业:笔记本

声明:
本文件灏天文库团队进行了翻译。尽管我们力求准确,但请注意,翻译可能包含错误或不准确之处。原文档以其原始语言为准。我们不对因使用此翻译而产生的任何误解或误译负责。


作者与出处
原作者: microsoft
来源:microsoft
许可证:MIT
整理: 灏天文库整理
由灏天文库结构化整理,提供目录导航、全文检索与在线阅读,便于系统化学习
发布者: 作者: microsoft 转发
评论区 (0)
U