为什么转换器在远程上下文依赖方面比 RNN 和 LSTM 做得更好?

人工智能 机器学习 自然语言处理 循环神经网络 长短期记忆 变压器
2021-11-12 19:31:08

我正在阅读作者所写的变压器如何工作的文章

RNN 和 LSTM 的另一个问题是很难并行处理句子的工作,因为您必须逐字处理。不仅如此,还没有长期和短期依赖的模型。

为什么转换器在远程上下文依赖中比 RNN 和 LSTM 做得更好?

4个回答

我将列出由 transformers 引入的主要创新的一些要点,然后是您提到的其他架构的主要特征的要点,以便我们进行比较。

变形金刚

Transformers(Attention is all you need)是在机器翻译的上下文中引入的,目的是避免递归,以允许并行计算(减少训练时间)并减少由于长依赖导致的性能下降。主要特点是:

  • 非顺序:句子作为一个整体处理,而不是逐字处理。
  • Self Attention:这是新引入的“单元”,用于计算句子中单词之间的相似度得分。
  • 位置嵌入:引入的另一项创新以取代重复。这个想法是使用固定的或学习的权重来编码与句子中标记的特定位置相关的信息。

第一点是transformer不存在长依赖问题的主要原因。原始转换器不依赖过去的隐藏状态来捕获与先前单词的依赖关系。相反,他们将一个句子作为一个整体来处理。这就是为什么没有丢失(或“忘记”)过去信息的风险。此外,多头注意力和位置嵌入都提供了有关不同单词之间关系的信息。

RNN/LSTM

对于这个问题,循环神经网络和长短期记忆模型的核心特性几乎相同:

  • 顺序处理:句子必须逐字处理。
  • 通过过去隐藏状态保留的过去信息:序列到序列模型遵循马尔可夫属性:假设每个状态仅依赖于先前看到的状态。

第一个属性是RNN和LSTM不能并行训练的原因。为了编码句子中的第二个单词,我需要之前计算的第一个单词的隐藏状态,因此我需要先计算它。第二个属性有点微妙,但在概念上并不难掌握。由于先前计算的隐藏状态,RNN 和 LSTM 中的信息得以保留。关键是特定单词的编码只保留到下一个时间步,这意味着一个单词的编码只强烈影响下一个单词的表示,因此它的影响在几个时间步后很快就消失了。LSTM(以及 GruRNN)可以提高一点他们可以学习的依赖范围,这要归功于通过特定单元对隐藏状态进行更深入的处理(这伴随着要训练的参数数量的增加),但问题本质上与递归有关。人们缓解此问题的另一种方法是使用双向模型。它们从头到尾,从头到尾对同一个句子进行编码,使句子末尾的单词在隐藏表示的创建中具有更强的影响力。但是,这只是一种解决方法,而不是非常长的依赖关系的真正解决方案。从结尾到开头,让句子结尾的单词对隐藏表示的创建有更大的影响。但是,这只是一种解决方法,而不是非常长的依赖关系的真正解决方案。从结尾到开头,让句子结尾的单词对隐藏表示的创建有更大的影响。但是,这只是一种解决方法,而不是非常长的依赖关系的真正解决方案。

美国有线电视新闻网

卷积神经网络在 nlp 中也被广泛使用,因为它们的训练速度非常快,并且对短文本有效。他们处理依赖关系的方法是将不同的内核应用于同一个句子,事实上,自从他们第一次应用于文本(Convolutional Neural Networks for Sentence Classification) 它们被实现为多通道 CNN。为什么不同的内核允许学习依赖关系?例如,因为大小为 2 的内核将学习成对单词之间的关系,所以大小为 3 的内核将捕获单词三元组之间的关系,依此类推。这里明显的问题是,捕获句子中所有可能的单词组合之间的依赖关系所需的不同内核的数量将是巨大且不切实际的,因为当增加输入句子的最大长度大小时,组合数量呈指数增长。

总而言之,Transformer 优于所有其他架构,因为它们完全避免了递归,通过将句子作为一个整体进行处理并通过多头注意力机制和位置嵌入来学习单词之间的关系。尽管如此,必须指出的是,转换器也只能捕获用于训练它们的固定输入大小内的依赖关系,即如果我使用最大句子大小 50,模型将无法捕获 a 的第一个单词之间的依赖关系。句子和出现在 50 多个单词之后的单词,例如在另一段中。新变压器,如Transformer-XL试图通过存储已编码句子的隐藏状态以在下一个句子的后续编码中利用它们来重新引入递归,从而解决这个问题。

让我们从 RNN 开始。一个众所周知的问题是梯度消失/爆炸,这意味着模型受到序列中最近输入的偏差,或者换句话说,较旧的输入实际上对当前步骤的输出没有影响。

LSTMs/GRUs 主要试图解决这个问题,通过包含一个单独的内存(单元)和/或额外的门来学习何时放弃过去/当前的信息。查看这些系列讲座以获得更深入的讨论。另请查看本文的交互部分,以直观地了解对过去元素的依赖关系。

现在,考虑到这一切,来自过去步骤的信息仍然要经过一系列计算,我们依靠这些新的门/内存机制将信息从旧步骤传递到当前步骤。

Transformer 架构的一个主要优点是,在每个步骤中,我们都可以直接访问所有其他步骤(自我注意),就消息传递而言,这实际上没有留下信息丢失的空间。最重要的是,我们可以同时查看未来和过去的元素,这也带来了双向 RNN 的好处,而无需 2 倍计算。当然,所有这些都是并行发生的(非循环),这使得训练/推理都更快。

输入中每个其他标记的自注意力意味着处理将按以下顺序进行O(N2)(忽略细节),这意味着与 RNN 相比,在长序列上应用转换器的成本会很高。这可能是 RNN 仍然比转换器具有优势的一个领域。

第一:RNN 是用于处理序列数据的神经网络家族的一部分。RNN 能够存储过去信息的方式是在其架构中循环,它会自动保存过去的信息。第二:sltm/gru是调节信息流的组件称为gate,GRU有2个gate,即reset gate和gate update。如果我们想像上面的类比那样做出吃的决定,重置 GRU 上的门将决定如何将新输入与过去的信息结合起来,更新门将决定应该保留多少过去的信息。来源:https ://link.springer.com/article/10.1007/s00500-019-04281-z

arxiv:1706.03762 表格来自 arxiv:1706.03762 Attention is All You Need

这是因为路径长度。如果你有一个长度为 n 的序列。然后,转换器将可以通过 O(1) 顺序操作访问每个元素,其中循环神经网络最多需要 O(n) 顺序操作来访问元素。
由于反向传播中的链式法则,非常长的序列会给您带来梯度爆炸和消失的问题。
Transformers 没有这个问题,因为到序列中每个元素的距离总是 O(1) 顺序操作。(因为它选择了正确的元素而不是试图“记住”它)

(arxiv:2103.05487) UNICORNN:一种用于学习非常长时间依赖的循环模型

“能够准确处理具有长期依赖的顺序输入的 RNN 的设计非常具有挑战性。
这主要是由于梯度爆炸和消失问题 (EVGP )。”