独家 | Transformer的可视化理解——深入本质探索其优良表现的原因(附链接)

2021-07-16 10:39:45 浏览数 (1)

作者:Ketan Doshi 翻译:欧阳锦校对:和中华 本文约3800字,建议阅读10分钟本文通过可视化的方式清晰地展示了Transformer的工作本质,并从本质中探索了它具有优良表现的原因。

关键字:注意力机制 Transformer NLP

图源自Olav Ahrens Røtne

在过去的几年里,Transformers席卷了NLP 的世界。现在,它们也成功地用于NLP 以外的技术中。

由于注意力(Attention)模块,Transformer 从中受益良多,而这一切都是因为注意力模块捕获了序列中每个单词与每个其他单词之间的关系。

然而,最重要的问题是transformer究竟是如何做到这一点的?

在本文中,我们将尝试回答这个问题,并理解为什么它要执行它所做的计算。

本文作者在关于transformer的系列文章中还有几篇文章。在那些文章中,我们了解了 Transformer架构,并逐步了解了它们在训练和推理过程中所进行的操作。我们还探索了其背后的理论细节,并准确了解了它们的工作原理。

1. 功能概述(如何使用 Transformer,以及为什么它们比RNN 更好。该架构的组件,以及训练和推理期间的行为。)

https://towardsdatascience.com/transformers-explained-visually-part-1-overview-of-functionality-95a6dd460452

2. 工作原理(端到端的内部操作。数据如何流动以及执行哪些计算,其中包括矩阵表示。)

https://towardsdatascience.com/transformers-explained-visually-part-2-how-it-works-step-by-step-b49fa4a64f34

3. 多头注意力(整个Transformer中注意力模块的内部工作原理。)

https://towardsdatascience.com/transformers-explained-visually-part-3-multi-head-attention-deep-dive-1c1ff1024853

如果你对一般的 NLP 应用感兴趣,这里还有一些你可能喜欢的其他文章。

1. 集束搜索(在Speech-to-Text 和 NLP 应用中常用于增强预测的算法)

https://towardsdatascience.com/foundations-of-nlp-explained-visually-beam-search-how-it-works-1586b9849a24

2. Bleu分数(Bleu Score 和 Word Error Rate 是 NLP 模型的两个基本指标)

https://towardsdatascience.com/foundations-of-nlp-explained-bleu-score-and-wer-metrics-1a5ba06d812b

要了解是什么让Transformer得以工作,我们必须关注注意力机制。让我们从它的输入开始,看看它如何处理这个输入。

输入序列如何到达注意力模块

注意力模块存在于编码器堆栈中的每个编码器中,以及解码器堆栈中的每个解码器中。我们将首先来看看编码器的注意力机制。

编码器中的Attention机制(图源自作者)

例如,假设我们正在解决英语到西班牙语的翻译问题,其中一个样本源序列“是蓝色的”。目标序列是“La bola es azul”。

源序列首先通过Embedding层和位置编码层(Position Encoding layer),它为序列中的每个词生成嵌入向量。Embedding向量被传递到编码器,在那里它将首先到达注意力模块。

在注意力机制中,嵌入序列将通过三个线性层,产生三个独立的矩阵——称为查询(Query)、键(Key)和价值(Value)。这些是用于计算注意力分数的三个矩阵。

要记住的重要一点是,这些矩阵的每一“行”对应源序列中的一个词。

源序列的流程(图源自作者)

每个输入行都是序列中的一个单词

我们了解注意力机制的方式是从源序列中的单个单词开始,然后沿着它们通过Transformer的路径走。我们尤其要关注注意力模块内部发生的事情。

这将帮助我们清楚地看到源和目标序列中的每个单词如何与源和目标序列中的其他单词交互。

因此,在我们对此进行解释时,请专注于对每个单词执行哪些操作,以及每个向量如何映射到原始的输入单词。如果一些细节与每个单词的去向没有直接关系,我们则不需要关注他们,例如矩阵形状、算术计算的细节、多头注意力等。

因此,为了简化解释和可视化过程,我们将忽略嵌入维度并只跟踪对应于每个单词的行。

源序列中每个单词的走向(图源自作者)

每个单词都经过一系列可学习的转换

每行都是其对应的源词通过一系列转换生成的——这些转换是:嵌入、位置编码和线性层。

以上这些转换都是可训练的操作。意味着这些操作中使用的权重不是预先确定的,而是由模型为了生成所需要的输出预测而不断学习更新的。

学习线性(Linear)和嵌入层的权重(图源自作者)

这里的关键问题是,Transformer如何确定哪组权重会给它最好的结果?请将这一点牢记在心,我们稍后会再讨论。

注意力得分——查询(Query)和关键词(Key)的点积

注意力模块执行几个步骤,但这里,我们只关注线性层和注意力得分。

多头注意力机制(图片源自作者)

注意力分数计算(图片源自作者)

从公式中我们可以看出,Attention模块中的第一步是在 Query (Q) 矩阵和 Key (K) 矩阵的转置之间进行矩阵乘法(即点积)。让我们来观察每个单词会发生什么。

我们生成一个中间矩阵(我们称之为“因子(Factor)”矩阵),其中每个单元格是两个词之间的矩阵乘法。

查询矩阵和关键矩阵之间的点积(图源自作者)

例如,第四行中的每一列对应于第四个查询词(Query)与每个关键字(Key)之间的点积。

查询矩阵和关键矩阵之间的点积(图源自作者)

注意力得分——Query-Key和Value词之间的点积

下一步,是在这个中间“因子(factor)”矩阵和价值(Value)矩阵之间进行矩阵乘法,来计算注意力模块输出的注意力分数。这里我们可以看到第四行对应的是第四个Query词矩阵乘以所有其他Key和Value词。

Query-Key矩阵和价值矩阵之间的点积(图源自作者)

于是,这样就生成了注意力模块输出的注意力得分向量 (Z)。

可以这样思考这个输出分数:对于每个单词,它是来自“Value”矩阵的每个单词的编码值,由“factor”矩阵加权。因子(factor)矩阵是该特定单词的Query值与所有单词的Key值的点积。

注意力得分是价值词的加权总和(图源自作者)

查询(Query)、键(Key)和价值(Value)词的作用是什么?

查询(Query)词可以解释为我们正在计算注意力的词。关键(Key)和价值(Value)词是我们关注的词,即该词与查询(Query)词的相关程度如何。

关注所有其他词时“蓝色”这个词的注意力得分(图源自作者)

例如,对于句子“The ball is blue”,单词“blue”所在的行将包含“blue”与其他单词的注意力得分。这里,“blue”是查询(Query)词,其他词是“Key/Value”。

与此同时,还有其他操作正在执行,例如除法和softmax函数。但我们可以在本文中忽略它们,因为它们只是改变矩阵中的数值,不影响矩阵中每个单词所对应行的位置。它们也不涉及任何词间交互。

点积代表了单词之间的相似性

我们已经看到,注意力得分通过计算点积然后将它们相加来捕捉特定单词和句子中每个其他单词之间的交互行为。但是矩阵乘法是如何帮助Transformer确定两个词之间的相关性呢?

为了理解这一点,请记住 查询(Query)、键(Key) 和 价值(Value)实际上是具有Embedding维度的向量。让我们重点看看这些向量之间的矩阵乘法是如何计算的。

每个单元格是两个词向量之间的点积(图源自作者)

当我们在两个向量之间进行点积,我们将成对的数字相乘,然后将它们相加。

  • 如果两个成对的数字(例如上面的“a”和“d”)都是正数或都是负数,那么乘积将为正数。乘积会使得最终总和增加。
  • 如果其中一个数为正数,另一个数为负数,则乘积将为负数。乘积会使得最终总和减少。
  • 如果乘积为正,则两个数字越大,它们使得最终总和的增长就越大。

这意味着如果两个向量中相应数字的正负号一致,则最终和会更大。

Transformer如何学习单词之间的相关性?

上一节介绍的点积这个概念也适用于注意力得分。如果两个词的向量越一致,则注意力得分会越高。

那么,我们想要Transformer做什么?

我们希望句子中两个相互关联的单词的注意力得分较高,两个互不相关的词的得分较低。

例如,对于句子“The black cat drink the milk”,“milk”这个词与“drank”的相关性很强,但可能与“cat”的相关性略低,甚至与“black”无关。我们希望“milk”和“drank”产生较高的注意力分数,“milk”和“cat”产生的分数略低,而“milk”和“black”产生的分数可以忽略不计。

这是我们希望模型通过学习而产生的输出。

为此,“milk”和“drank”的词向量必须一致。“milk”和“cat”的向量会有些不同。对于“milk”和“black”向量,它们则非常不同。

回到我们一直牢记在心的那个问题——Transformer如何确定哪组权重会给它带来最好的结果?

词向量是基于词嵌入和线性层的权重生成的。因此,Transformer可以学习这些嵌入、线性权重等信息生成上述要求的词向量。

换句话说,它将以以下一种方式学习这些嵌入和权重:如果句子中的两个词彼此相关,那么它们的词向量将对齐或一致,从而产生更高的注意力得分。对于彼此不相关的词,词向量不会对齐,并且会产生较低的注意力得分。

因此,“milk”和“drank”的嵌入向量将非常一致并产生高注意力得分。对于“milk”和“cat”,它们的向量会略有不同,所以注意力得分略有下降,而“milk”和“black”的注意力得分最低。

以上就是注意力模块本质原理。

总结——是什么让Transformer工作?

Query和Key之间的点积计算了每对单词之间的相关性。然后将此相关性用作“因子(factor)”矩阵来计算所有价值词的加权总和,该加权总和作为注意力得分进行输出。

Transformer以这样一种方式学习嵌入向量等,使彼此相关的单词更加对齐或一致。

这是引入三个线性层并构造三个版本的输入序列(查询(Query)、键(Key)和值(Value))的原因之一。这给了注意力模块更多的参数,使它能够学习并调整词向量的构建。

Transformer中的编码器自注意力机制

注意力模块在Transformer中的三个地方使用:

  • 编码器中的自注意力机制——源序列关注自己
  • 解码器中的自注意力机制——目标序列关注自己
  • 解码器中的编码-解码注意力机制——目标序列关注源序列

Transformer中的注意力机制(图源自作者)

在编码器自注意力机制中,我们计算源句中每个单词与源句中其他单词的相关性。这发生在堆栈中的所有编码器中。

Transformer中的解码器自注意力机制

以上在编码器自注意力机制中看到的大部分内容也适用于解码器中的注意力机制,其中只有一些微小但重要的不同之处。

解码器中的注意力机制(图源自作者)

在解码器自注意力机制中,我们计算目标句子中每个单词与目标句子中每个其他单词的相关性。

解码器自我注意里机制(图源自作者)

Transformer中的编码-解码注意力机制

在编码-解码注意力机制中,查询(Query)从目标句中获取,键(Key)和价值(Value)从源句中获取。因此,它计算目标句子中的每个单词与源句子中的每个单词的相关性。

编码器-解码器注意力机制(图源自作者)

结论

希望本文能让你对Transformer设计的优美之处有一个很好的认识。请阅读作者本系列的其他 Transformer文章,以深入了解为什么Transformer 现在已成为众多深度学习应用程序的首选架构。

原文标题:

Transformers Explained Visually — Not Just How, but Why They Work So Well

原文链接:

https://towardsdatascience.com/transformers-explained-visually-not-just-how-but-why-they-work-so-well-d840bd61a9d3

编辑:王菁

校对:林亦霖

译者简介

欧阳锦,一名在埃因霍温理工大学就读的硕士生。喜欢数据科学和人工智能相关方向。欢迎不同观点和想法的交流与碰撞,对未知充满好奇,对热爱充满坚持。

翻译组招募信息

工作内容:需要一颗细致的心,将选取好的外文文章翻译成流畅的中文。如果你是数据科学/统计学/计算机类的留学生,或在海外从事相关工作,或对自己外语水平有信心的朋友欢迎加入翻译小组。

你能得到:定期的翻译培训提高志愿者的翻译水平,提高对于数据科学前沿的认知,海外的朋友可以和国内技术应用发展保持联系,THU数据派产学研的背景为志愿者带来好的发展机遇。

其他福利:来自于名企的数据科学工作者,北大清华以及海外等名校学生他们都将成为你在翻译小组的伙伴。

转载须知

如需转载,请在开篇显著位置注明作者和出处(转自:数据派ID:DatapiTHU),并在文章结尾放置数据派醒目二维码。有原创标识文章,请发送【文章名称-待授权公众号名称及ID】至联系邮箱,申请白名单授权并按要求编辑。

发布后请将链接反馈至联系邮箱(见下方)。未经许可的转载以及改编者,我们将依法追究其法律责任。

0 人点赞