RNN、Seq2Seq、Transformers:NLP 中常用的神经架构简介
循环神经网络是一类神经架构,具有很酷的特性——循环机制——这使得它们成为处理可变长度的顺序数据的自然选择。与标准神经网络不同,RNN 可以在接受新输入的同时保留前一层的信息。
这是它的工作原理
假设我们正在构建一个电子商务聊天机器人,由一个处理文本的 RNN 和一个预测其背后意图的前馈网络组成。机器人收到这条消息:“嗨!你们这件衬衫有不同颜色吗?”
我们有 11 个单词(11 个单词嵌入)作为输入,并且序列被切成标记,看起来像这样 I1, I2…..I11。
RNN 背后的核心思想是,它将相同的权重矩阵应用于每个输入,并生成一系列隐藏状态(我们有输入就有多少个隐藏状态),这些隐藏状态携带来自先前时间步骤的信息。
每个隐藏状态(Ht)都是根据前一个隐藏状态(Ht-1)和当前输入(It)计算的;正如我们所提到的,它们实际上是在每个时间步上不断修改的相同状态。
因此,处理从第一个词嵌入 ( I1 ) 与初始隐藏状态 ( H0 )一起进入模型开始;在 RNN 的第一个单元内,对I1和H0执行线性变换,添加偏差,并通过某种非线性(Sigmoid、ReLU 等)对最终值进行处理 — 这就是我们得到H1的方式。
之后,模型吃掉I2与H1配对并执行相同的计算,然后I3与H2进入,然后是I4与H3,依此类推,直到我们处理整个序列。
由于我们一遍又一遍地使用相同的权重矩阵,因此 RNN 可以处理较长的序列,并且本身的大小不会增加。另一个优点是,理论上,每个时间步都可以访问许多步之前的数据。
问题
RNN 的显着特征——它多次使用同一层——也使其极易受到梯度消失和爆炸的影响。实际上,这些网络很难通过多个步骤保存数据。
此外,RNN 在序列中看不到任何层次结构。每次处理新输入时,模型都会改变隐藏状态,尽管它可能微不足道。因此,当网络到达序列末尾时,来自较早层的数据可能最终被完全清除。
这意味着在我们的示例中“嗨!你们这件衬衫有不同颜色的吗?” 前馈网络可能会尝试仅根据“任何不同的颜色?”来预测意图。即使对于人类来说,这也不容易做到。
另一个固有的缺点在于顺序处理的本质:由于一次处理一个输入的部分(除非有 H1,否则我们无法计算 H2),因此网络的计算总体上非常慢。
门控变体
为了解决上述问题,人们提出了不同的架构修改来改进 RNN,其中最流行的是长短期记忆 (LSTM) 和门控循环单元 (GTU)。
粗略地说,LSTM 背后的主要思想是,除了隐藏状态(它们都是相同大小的向量)之外,每个单元内部还有一个单元状态——一种记忆存储。
此外,这些模型具有三个门(遗忘门、输入门、输出门),用于确定从单元状态写入、读取或擦除哪些信息。
所有门都是与隐藏状态长度相同的向量,这正是它们的用途:
遗忘门决定了上一个时间步中应保留的内容和应删除的内容。
输入门决定应将哪些新信息输入到细胞状态中。
输出门决定单元中的哪些数据应合并到隐藏状态中。
它们都是使用 sigmoid 函数计算的,因此它们始终输出 0 到 1 之间的值。
如果门产生接近 1 的值,则认为它是开放的(数据可以包含在单元状态中),如果它给出接近 0 的值,则该信息将被忽略。
GRU 的运行方式与 LSTM 类似,但它们的架构要简单得多;他们取消了单元状态并在隐藏状态之前计算两个门而不是三个。
GRU 的要点是保留 LSTM 的功能和鲁棒性(就减轻梯度消失而言)并消除其复杂性。GRU 的大门是:
更新门决定隐藏状态的哪些部分应该修改,哪些部分应该保留。在某种程度上,它的作用与 LSTM 中的输入门和遗忘门的作用相同。
重置门决定了隐藏状态的哪些部分现在很重要。如果它输出一个接近 1 的数字,我们可以复制之前的状态,并使网络不必更新权重(无需调整权重 - 不会消失梯度。)
LSTM 和 GRU 都能够控制信息流、掌握长程依赖性,并根据输入以不同的强度控制错误消息流。
序列到序列(seq2seq)模型和注意力机制
序列到序列模型曾经在神经机器翻译 (NMT) 领域非常流行,它由两个堆叠在一起的 RNN(编码器和解码器)组成。
编码器按顺序处理输入并生成一个思想向量来保存每个时间步的数据。然后,其输出被传递到解码器,解码器使用该上下文来预测适当的目标序列(翻译、聊天机器人的回复等)
图片标题
然而,普通 seq2seq 的问题在于,它试图将整个输入的上下文塞入一个固定大小的向量中,并且它可以携带的数据量是有限的。
这就是注意力机制发挥作用的地方。它们允许解码器网络在生成输出时专注于输入的相关部分。他们通过向来自编码步骤的每个解码步骤添加额外的输入来实现这一点。
RNN
是的,我们可以使用 LSTM 构建在 RNN 中延长短记忆,甚至使用注意力机制来延长长记忆。但我们仍然无法完全消除梯度消失的影响,使这些模型(其设计抑制并行计算)更快,或者让它们显式地建模序列中的远程依赖关系和层次结构。
Transformer 是Google 研究人员于 2017 年推出的模型,克服了 RNN 的所有缺点。这种全新的革命性架构使我们能够消除重复计算,并仅依靠注意力机制在各种 NLP 任务(NMT、问答等)中取得最先进的结果。
变压器也由编码器和解码器组成。它实际上在一侧有一堆编码器,在另一侧有一堆解码器(具有相同数量的单元)。
编码器
每个编码器单元由自注意力层和前馈层组成。
自注意力是一种机制,允许单元将输入的内容与序列中的所有其他输入进行比较,并将它们之间的关系包含到嵌入中。如果我们谈论一个单词,自注意力可以表示它与句子中的哪些其他单词有很强的关系。
在 Transformer 模型中,每个位置都可以同时与输入中的所有其他位置交互;网络的计算并行化很简单。
多头注意力机制进一步增强了自注意力层,该机制提高了模型关注不同位置的能力,并使其能够创建表示子空间(将不同的权重矩阵应用于相同的输入)。
为了建立输入的顺序,Transformers 向每个嵌入添加另一个向量(这称为位置编码),这有助于它们识别序列中每个输入的位置以及它们之间的距离。
每个编码器将其输出推送到其正上方的单元。
在解码器一侧,单元也有一个自注意力层、一个前馈层以及中间的一个附加元素——编码器解码器注意力层。Transformers 中的解码器组件接收顶部编码器的输出(一系列注意力向量),并在预测目标序列时使用它来关注输入的相关部分。
总体而言,Transformer 是比 RNN 更轻的模型,它们更容易训练并且非常适合并行化;他们可以学习远程依赖性。