“Attention (& this post) is All You Need”:在 7 分钟阅读中理解 Transformer 论文的关键点。
“Attention (& this post) is All You Need”:在 7 分钟阅读中理解 Transformer 论文的关键点。
在这篇文章中,我将向您介绍注意力的概念,并解释在论文“注意力就是你需要的一切”中介绍的 Transformer 架构。让我们潜入水中,好吗?
先决条件: 熟悉神经网络 + 对编码器-解码器架构有大致的了解。
从复发到关注的转变: 是什么激励了变压器 ?
长期以来,RNN 和 CNN 一直是每场表演的核心 转导模型 .通常,它们用于构建编码器-解码器架构,其中两个部分通过注意力机制链接。然而,尽管这些架构性能良好,但由于其固有的顺序性,这些架构在训练方面的成本很高。我在下面的段落中解释了原因。
循环模型为输入和输出序列中的每个标记分配位置。对于每个这样的位置和计算的每个时间步 t,使用以下方法生成隐藏状态 hₜ:时间 t 的输入和前一个时间步的隐藏状态。
RNN 的这种顺序工作带来了一个问题,因为它使同一训练示例中的并行化变得不可能。对于非常长的序列,由于这些模型的执行需要为所有时间步存储一系列隐藏状态,因此会出现内存问题。
基于以上原因,《Attention is All You Need》的作者介绍了 Transformer: 一种完全依赖注意力的架构,不需要递归或卷积。
如果您想了解更多关于变形金刚的历史背景,Vinithavn 在她的身上讲述了一个引人入胜的故事 文章 .
介绍著名的变压器:它的架构和组件:
如果 Transformer 有 Facebook 帐户,下图就是他们的头像。乍一看肯定不是最讨人喜欢的数字,但我会在一分钟内为您分解!
The Transformer Architecture — From “Attention is All You Need”
现在,让我们勇敢地审视一下架构,并确定我们可以从中提取哪些组件。
首先,架构是一个 ** 编码器-解码器** (由灰色框表示)其中使用了两种类型的层: ** 前馈层** (蓝色)和 ** 注意力层** (橙色)。其次,输入和输出表示为 ** 嵌入** 除了使用 ** 位置编码** .一个 ** 软最大** 层(绿色)用于获取输出。
在下文中,我将解释上面突出显示的每个组件。
注意力:
从技术上讲,注意力只不过是一种功能。连接一个序列的不同部分的一个。实际上,键值对和查询之间的函数映射 (键、值和查询都是向量)。
键、查询和值的含义类似于它们在检索系统中的使用方式 :
- 查询 Q 是您计算注意力的向量。
- 关键 K 是您计算注意力的向量。
- 根据您的查询,值 V 类似于最佳匹配结果。
Scaled Dot-Product Attention vs. Multi-Head Attention — From “Attention is All You Need”
自注意力是当注意力机制用于 “关联来自同一序列的不同位置,以便计算序列的表示” .也就是说,Q、V 和 K 来自同一个位置/输入序列。
点积注意
有两种常用的注意力类型:加法和乘法/逐点。 Transformer 实现的乘法注意力的计算方式如下:
在哪里:
- Sqrt(dk) 用于缩放:怀疑dk(Q和K的维度)的值越大,点积越大。因此,后者落在梯度接近于零的 softmax 曲线区域。
- Softmax 的使用是获取 0 到 1 之间的值,以便后者可以作为权重。
多头注意力
Vaswani 等人没有使用单个点积注意力计算。发现最好使用对相同查询、键和值的不同线性投影执行相同操作的多个头。
换句话说,本文建议使用多个这样的值,而不是为键、值和查询使用一组值。
多头注意力的工作方式如下:
H 头堆叠在一起。它们的输出被连接起来并被预测:
磁头采用的 K、Q 和 V 值略有不同,首先要进行一些变换。 K、Q 和 V 是 “使用不同的学习线性投影进行线性投影” 在它们被喂到每个头之前。
为什么要多头注意力?
上述转换背后的想法是,该模型将“ 关注来自不同位置的不同表示子空间的信息”。 换句话说,每个头都会得到不同版本的 Q、V 和 K。
本文 这里 详细解释了多头注意力背后的直觉和数学。
编码器-解码器堆栈:
编码器-解码器架构是最具竞争力的转导模型的核心。
还记得变形金刚的 FB 头像吗?编码器是该图左侧的灰色框。
- 每层由两个子层组成:前馈网络 + 多头自注意力机制。
- Nx 是组成 Transformer 的编码器部分的相同层的数量。
- 使用了残差连接和层归一化。
解码器层(右侧的灰色框)与编码器层类似,不同之处在于以下修改:
- 解码器层有一个额外的子层:一个多头注意力子层(橙色的第二个框),负责处理编码器堆栈的输出。
- 将掩码添加到自注意力层(解码器底部的橙色框)以确保解码器只关注之前的位置而不关注后续位置。
位置编码:
由于没有递归或卷积,因此需要一种不同的方法来解释序列的顺序。为此,使用这些位置编码并将其汇总到编码器和解码器输入。
实际上,这些编码可以学习或固定。在本文的上下文中,后者是使用正弦和余弦函数实现的:
在哪里:
- 位置 是输入的位置。
- 一世 是每个维度对应一个正弦曲线的维度。
这种位置编码选择背后的直觉是基于使用正弦函数的假设,该模型将:
- “容易学会按相对位置参加”。
- “外推到比训练期间遇到的序列长度更长的序列长度”。
嵌入、Softmax 和前馈层:
嵌入
神经网络处理数字。在处理转导模型时,嵌入是必须的,以便将输入和输出标记转换为其维度的向量表示 模型 .
软最大
需要 softmax 函数将解码器输出转换为概率。后者用于在给定先前构建的词汇表的情况下解释解码器的输出。
前馈层
全连接的前馈层与 ReLU 激活函数一起使用。
在 Transformer 中使用多头注意力的 3 种不同方式:
编码器-解码器注意
查询来自解码器层,而键和值来自编码器输出,如解码器中的中间橙色框所示。这允许解码器中的每个位置关注输入序列中的所有位置。
编码器中的自注意力
这种注意力由编码器中的橙色框表示。查询、键和值都来自同一个地方,在这种情况下,是前一个编码器层的输出。
解码器中的自注意力
与编码器中的自注意力类似,查询、键和值都来自前一个解码器层。解码器底部的橙色框代表了这种类型的注意力。目标是每个解码器位置都关注自身和之前的位置。
有了这个,你可以放心,你对“注意力就是你需要的一切”论文中介绍的重要概念有了一个概述。
要坚持新概念,可能需要一些重复(以及很大的耐心)。祝你好运,学习愉快!
参考:
瓦斯瓦尼等人。 (2017)。 注意力就是你所需要的 .
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明