注意力机制与变换器


文档摘要

注意力机制与变换器 课前小测验 自然语言处理领域中最重要的一项任务是机器翻译,这是像谷歌翻译这样的工具的基础。在这一部分中,我们将专注于机器翻译,或者更广泛地说,任何序列到序列的任务(也称为句子转换)。 使用RNNs实现序列到序列的方法是通过两个递归网络,其中一个是编码器,它将输入序列压缩成一个隐藏状态;另一个是解码器,它将这个隐藏状态展开为翻译结果。这种方法存在一些问题: 编码器网络的最终状态很难记住句子的开头,因此对于长句来说,模型的质量较差。 序列中的所有词对结果的影响相同。但实际上,在输入序列中,某些词对后续输出的影响往往比其他词更大。 注意力机制提供了一种方法来衡量每个输入向量对RNN每个输出预测的上下文影响。其实现方式是创建输入RNN和输出RNN之间的一些捷径。

注意力机制与变换器

课前小测验

自然语言处理领域中最重要的一项任务是机器翻译,这是像谷歌翻译这样的工具的基础。在这一部分中,我们将专注于机器翻译,或者更广泛地说,任何序列到序列的任务(也称为句子转换)。

使用RNNs实现序列到序列的方法是通过两个递归网络,其中一个是编码器,它将输入序列压缩成一个隐藏状态;另一个是解码器,它将这个隐藏状态展开为翻译结果。这种方法存在一些问题:

  • 编码器网络的最终状态很难记住句子的开头,因此对于长句来说,模型的质量较差。
  • 序列中的所有词对结果的影响相同。但实际上,在输入序列中,某些词对后续输出的影响往往比其他词更大。

注意力机制提供了一种方法来衡量每个输入向量对RNN每个输出预测的上下文影响。其实现方式是创建输入RNN和输出RNN之间的一些捷径。这样,在生成输出符号yt时,我们会考虑所有输入隐藏状态hi,但使用不同的权重系数αt,i

显示编码器/解码器模型和加性注意力层的图像

Bahdanau等,2015年中的带有加性注意力机制的编码器-解码器模型,摘自这篇博客文章

注意力矩阵{αi,j}表示特定输入词在生成输出序列中的某个词时所起的作用程度。以下是一个此类矩阵的例子:

显示RNNsearch-50找到的样本对齐的图像,取自Bahdanau - arviz.org

Bahdanau等,2015年中的图(图3)

注意力机制负责当前或接近当前自然语言处理领域的最先进水平。然而,添加注意力机制大大增加了模型参数的数量,导致了RNN的扩展问题。RNN扩展的关键限制在于模型的递归性质使其难以批量并行化训练。在RNN中,序列中的每个元素需要按顺序处理,这意味着无法轻松并行化。

带注意力的编码器-解码器

谷歌博客中的图

注意力机制的采用加上这种约束导致了如今最先进的变换器模型的诞生,如我们今天使用的BERT到Open-GPT3。

变换器模型

变换器背后的主要思想之一是避免RNN的顺序性质,并创建一种可以在训练过程中并行化的模型。这通过实现两个想法来实现:

  • 位置编码
  • 使用自注意力机制捕捉模式,而不是使用RNN(或CNN)(这就是介绍变换器的论文被称为*注意力就是你所需要的*的原因)

位置编码/嵌入

位置编码的想法如下:

  1. 当使用RNNs时,标记的相对位置由步数表示,因此不需要显式表示。
  2. 然而,一旦切换到注意力机制,我们需要知道序列内标记的相对位置。
  3. 要获取位置编码,我们在标记序列中添加一个标记位置序列(即,一系列数字0,1,...)。
  4. 然后,我们将标记位置与标记嵌入向量混合。要将位置(整数)转换为向量,我们可以使用不同的方法:
  • 可训练嵌入,类似于标记嵌入。这是我们在这里考虑的方法。我们在标记及其位置上都应用嵌入层,从而得到维度相同的嵌入向量,然后将它们相加。
  • 固定的位置编码函数,如原始论文中提出的那样。

作者提供的图像

位置嵌入的结果是将原始标记及其在序列中的位置嵌入在一起。

多头自注意力

接下来,我们需要在序列中捕获一些模式。为此,变换器使用自注意力机制,本质上是对同一序列作为输入和输出应用注意力。应用自注意力使我们能够考虑到句子中的上下文,并看到哪些词相互关联。例如,它允许我们看到哪些词由指代词(如)引用,并且还考虑到上下文:

谷歌博客中的图像

在变换器中,我们使用多头注意力以赋予网络捕捉多种不同类型的依赖关系的能力,例如长期与短期词语关系、共指与其他关系等。

TensorFlow笔记本包含有关变换器层实现的更多细节。

编码器-解码器注意力

在变换器中,注意力用于两个地方:

  • 使用自注意力捕捉输入文本中的模式
  • 执行序列翻译——它是编码器和解码器之间的注意力层。

编码器-解码器注意力非常类似于本节开头描述的RNN中使用的注意力机制。此动画图解释了编码器-解码器注意力的作用。

显示如何在变换器模型中执行评估的动画GIF

由于每个输入位置独立映射到每个输出位置,变换器可以比RNN更好地并行化,这使得可以构建更大且更具表现力的语言模型。每个注意力头可以学习不同的词间关系,从而改善下游自然语言处理任务。

BERT

BERT(来自变换器的双向编码器表示)是一个非常大的多层变换器网络,对于BERT-base有12层,而对于BERT-large则有24层。该模型首先在一个大型文本数据集(维基百科+书籍)上使用无监督训练(预测句子中的被屏蔽单词)进行预训练。在预训练期间,模型吸收了大量的语言理解能力,这些能力可以在使用其他数据集进行微调时加以利用。这一过程称为迁移学习

来自http://jalammar.github.io/illustrated-bert/的图片

图片来源:http://jalammar.github.io/illustrated-bert/

✍️ 练习:变换器

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

结论

在这节课中,你了解了变换器和注意力机制,这些都是自然语言处理工具箱中必不可少的工具。有许多变换器架构的变体,包括BERT、DistilBERT、BigBird、OpenGPT3等,可以进行微调。HuggingFace包提供了训练这些架构的存储库,支持PyTorch和TensorFlow。

挑战

课后小测验

复习与自学

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


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