《Attention is All You Need》 五大重点内容:
Abstract(摘要)Abstract 摘要 目前主流的序列转换模型都基于复杂的循环神经网络(RNN)或卷积神经网络(CNN),包含编码器和解码器两部分。表现最好的模型还通过注意力机制将编码器和解码器连接起来。我们提出了一种全新的简单网络架构——Transformer,它完全基于注意力机制,摒弃了循环和卷积操作。在两个机器翻译任务上的实验表明,这些模型在质量上更优越,同时更易于并行化,且训练时间大大减少。我们的模型在WMT 2014英语到德语的翻译任务上达到了28.4的BLEU分数,比现有最佳结果(包括集成模型)高出2 BLEU以上。在WMT 2014英语到法语的翻译任务上,我们的模型在8个GPU上训练了3.5天后,创下了单模型新的最佳BLEU分数记录,达到了41.0分,这仅为文献中最佳模型训练成本的一小部分。 敲黑板,划重点引出了新的Transformer模型架构,该模型完全基于注意力机制,摒弃了循环和卷积操作。
1 Introduction(引言)Introduction 1 引言 循环神经网络(RNN)、特别是长短时记忆网络(LSTM)[12]和门控循环单元网络(GRU)[7],已经在序列建模和转换问题中牢固确立了其作为最先进方法的地位,这些问题包括语言建模和机器翻译[29, 2, 5]。自那以来,众多研究持续努力拓展循环语言模型和编码器-解码器架构的边界[31, 21, 13]。这些研究不仅提高了模型的性能,还进一步探索了模型在不同任务中的适用性和效率。这些成果为自然语言处理和其他序列建模领域的发展提供了重要推动力。 *注:贡献均等。名单顺序是随机的。Jakob提出了用自注意力机制替换RNN的想法,并开始努力评估这一想法。Ashish与Illia一起设计并实现了第一个Transformer模型,并在这项工作的各个方面都发挥了关键作用。Noam提出了缩放点积注意力、多头注意力和无参数位置表示,并几乎参与了这项工作的每一个细节。Niki在我们的原始代码库和tensor2tensor中设计、实现、调优和评估了无数模型变体。Llion也尝试了新型模型变体,负责我们最初的代码库,以及高效推理和可视化。Lukasz和Aidan花费了无数漫长的时间设计和实现了tensor2tensor的各个部分,取代了我们早期的代码库,极大地改进了结果,并大大加速了我们的研究。 *注:在Google Brain工作时完成的工作。 *注:在Google Research工作时完成的工作。 循环模型通常沿着输入和输出序列的符号位置进行计算。通过将位置与计算时间步骤对齐,它们生成一个隐藏状态序列ht,该序列是前一个隐藏状态ht-1和位置t的输入的函数。这种固有的顺序性质排除了训练样本内的并行化,这在序列长度较长时变得至关重要,因为内存限制会限制跨样本的批处理。最近的工作通过因式分解技巧[18]和条件计算[26]在计算效率方面取得了显著改进,同时在后者的情况下也提高了模型性能。然而,顺序计算的基本约束仍然存在。 注意力机制已经成为各种任务中强大序列建模和转换模型的重要组成部分,允许模型在不考虑输入或输出序列中距离的情况下建模依赖关系[2,16]。然而,在大多数情况下[22],这种注意力机制是与循环网络结合使用的。 在这项工作中,我们提出了Transformer模型架构,它摒弃了循环结构,转而完全依赖注意力机制来建立输入和输出之间的全局依赖关系。Transformer模型允许更多的并行化,并且在八个P100 GPU上仅训练十二小时后,即可达到翻译质量的新水平。 敲黑板,划重点
循环神经网络
注意力机制结合循环神经网络
Transformer架构
Transformer八子 2 Background(背景)Background 2 背景 减少顺序计算的目标也是Extended Neural GPU[20]、ByteNet[15]和ConvS2S[8]等模型的基础,它们都使用卷积神经网络作为基本构建块,为所有输入和输出位置并行计算隐藏表示。在这些模型中,将两个任意输入或输出位置的信号关联起来所需的操作数随位置之间的距离增长,对于ConvS2S是线性增长,对于ByteNet是对数增长。这使得学习远距离位置之间的依赖关系更加困难[11]。在Transformer中,这被减少到恒定数量的操作,尽管由于平均了注意力加权的位置而降低了有效分辨率,但我们通过第3.2节描述的多头注意力来抵消这一影响。 自注意力(有时也称为内部注意力)是一种注意力机制,它关联单个序列中不同位置的信息,以计算序列的表示。自注意力已成功应用于多种任务中,包括阅读理解、抽象摘要、文本蕴含和学习与任务无关的句子表示[4,22,23,19]。 端到端记忆网络基于循环注意力机制,而非序列对齐的循环,已被证明在简单的语言问答和语言建模任务中表现良好[28]。 据我们所知,Transformer是第一个完全依赖自注意力来计算输入和输出表示的转换模型,不使用序列对齐的RNN或卷积。在后续章节中,我们将描述Transformer模型,阐述自注意力的动机,并讨论其相对于如[14, 15]和[8]等模型的优势。 敲黑板,划重点
3 Model Architecture(模型架构)Transformer架构 Model Architecture 3 模型架构 大多数具有竞争力的神经序列转换模型都具有编码器-解码器结构[5,2,29]。在这里,编码器将符号表示的输入序列(x1,...,xn)映射到一系列连续表示z =(z1,...,zn)。给定z,解码器然后一次生成一个符号元素,从而生成输出序列(y1,...,ym)。在每个步骤中,模型是自回归的[9],在生成下一个符号时,会将先前生成的符号作为额外的输入。Transformer遵循这种总体架构,使用堆叠的自注意力机制和逐点、全连接层,分别用于编码器和解码器,如图1的左半部分和右半部分所示。 图1: The Transformer - model architecture 敲黑板,划重点
编码器-解码器结构
编码器:将输入序列映射为连续表示
解码器:根据连续表示以自回归的方式生成输出序列
Transformer编码器-解码器结构 Transformer模型通过词嵌入、位置编码、多头注意力、残差连接和前馈网络等组件,实现了对输入序列的高效编码和输出序列的生成。
3.1 Encoder and DecoderStacks(编码器与解码器堆叠)Encoder and Decoder Stacks 3.1 编码器与解码器堆叠 编码器:编码器由N=6个相同的层堆叠而成。每一层包含两个子层。第一个子层是多头自注意力机制,第二个子层是一个简单的、位置相关的全连接前馈网络。我们在每个子层周围使用残差连接[10],之后是层归一化[1]。也就是说,每个子层的输出是 LayerNorm(x + Sublayer(x)),其中 Sublayer(x) 是子层本身实现的函数。为了方便这些残差连接,模型中的所有子层以及嵌入层都产生维度为 dmodel = 512 的输出。 解码器:解码器也是由N=6个相同的层堆叠而成。除了编码器层中的两个子层之外,解码器还插入了第三个子层,该子层对编码器堆叠的输出执行多头注意力机制。与编码器类似,我们在每个子层周围使用残差连接,之后是层归一化。我们还修改了解码器堆叠中的自注意力子层,以防止位置注意到后续位置。这种遮蔽操作,加上输出嵌入的位置偏移一个单位,确保位置i的预测只能依赖于小于i位置的已知输出。 Encoder and Decoder Stacks 敲黑板,划重点
Transformer Encoder-Decoder
编码器与解码器堆叠 编码器与解码器堆叠-工作流程Transformer的编码器由多个包含多头自注意力层和前馈神经网络的层堆叠而成,负责处理输入序列;解码器则由多个包含掩蔽自注意力层、编码器-解码器注意力层和前馈神经网络的层堆叠构成,负责生成输出序列,二者均通过残差连接和层归一化优化信息流通。
Encoder(编码器)架构
Decoder(解码器)架构 3.2 Attention(注意力机制)Attention 3.2 注意力机制 注意力函数可以描述为一个将查询(query)和一组键值对(key-value pairs)映射到输出的过程,其中查询、键、值和输出都是向量。输出是通过对值的加权求和计算得出的,每个值所赋予的权重是由查询与相应键的兼容性函数计算得出的。 敲黑板,划重点注意力机制的核心思想:通过计算查询与键之间的兼容性来分配权重,进而实现对值的加权求和,从而得到输出。这种机制允许模型在处理信息时,能够专注于与当前任务最相关的部分,提高了模型的效率和性能。 注意力机制-组成部分注意力机制包括“缩放点积注意力机制”和“多头注意力机制”。
图2:(左)Scaled Dot-Product Attention (右)Multi-Head Attention 图2说明:
缩放点积注意力和多头注意力两个形象的比喻: ① 我们可以将点积缩放注意力机制比作一名学生,他通过思考和计算得到了某个问题的答案。而多头注意力机制则可以将这个问题交给多个学生来解决,每个学生都有自己独特的思考方式和解决方案,最后将所有方案综合起来,得到更加全面和准确的答案。 ② 想象一下,你去看一部悬疑破案题材的电影,点积缩放机制相当于只看了一次,而多头注意力机制看了N次电影,如果您只看一次这部电影,你非常有可能错过一些重要的细节导致无法理解整个故事的全貌。而经过多次反复观看,你也许就能兼顾到不同的微小细节,就能顺理成章地推理出案情的发展走势。 3.2.1 Scaled Dot-Product Attention(缩放点积注意力)Scaled Dot-Product Attention 3.2.1 缩放点积注意力 我们称特定的注意力机制为“缩放点积注意力”(如图2所示)。输入包括维度为dk的查询(queries)和键(keys),以及维度为dv的值(values)。我们计算查询与所有键的点积,每个点积结果都除以√dk,然后应用softmax函数,以得到值的权重。在实际操作中,我们同时对一组查询计算注意力函数,并将这些查询打包成一个矩阵Q。同样地,键和值也被打包成矩阵K和V。我们计算输出矩阵的公式如下: 最常用的两种注意力函数是加性注意力[2]和点积(乘性)注意力。点积注意力与我们的算法相同,除了缩放因子1/√dk。加性注意力使用一个带有单个隐藏层的前馈网络来计算兼容性函数。虽然两者在理论复杂度上相似,但点积注意力在实践中更快且空间效率更高,因为它可以使用高度优化的矩阵乘法代码实现。 对于较小的dk值,两种机制表现相似,但对于较大的dk值,加性注意力在没有缩放的情况下优于点积注意力[3]。我们怀疑,对于较大的dk值,点积的幅度会变得很大,使得softmax函数进入梯度极小的区域。为了抵消这种影响,我们将点积缩放为1/√dk。 敲黑板,划重点缩放点积注意力机制是一种高效的注意力计算方法,通过缩放点积和softmax函数得到值的权重,适用于大规模数据处理,并在实践中展现出优于加性注意力的性能。
缩放点积注意力-工作流程缩放点积注意力通过计算每个token的查询向量与所有token的键向量的点积,并经过softmax归一化得到注意力权重,再将这些权重应用于值向量进行加权求和,从而生成每个token的自注意力输出表示。
QK向量点积运算
计算Attention权重
构成Attention矩阵
加权求和Value向量
应用于每个token 3.2.2 Multi-Head Attention(多头注意力)Multi-Head Attention 3.2.2 多头注意力 我们并没有使用单个dmodel维度的键、值和查询来执行单一的注意力函数,而是发现将查询、键和值分别通过h个不同的、学习得到的线性投影,线性映射到dk、dk和dv维度上是有益的。然后,我们在这些投影后的查询、键和值的每一个版本上并行执行注意力函数,得到dv维度的输出值。这些输出值被拼接起来,并再次进行投影,得到最终的输出值,如图2所示。 多头注意力允许模型在不同的表示子空间中联合关注不同位置的信息。使用单个注意力头时,平均操作会抑制这种能力。 这里的投影是参数矩阵WiQ∈Rdmodel×dk,WiK∈Rdmodel×dk,WiV∈Rdmodel×dv和WO∈Rhdv×dmodel。 在这项工作中,我们使用了h=8个并行注意力层或“头”。对于每一个头,我们设置dk=dv=dmodel/h=64。由于每个头的维度降低了,所以总的计算成本与全维度的单头注意力相似。 敲黑板,划重点多头注意力机制通过并行执行多个注意力函数,并在不同表示子空间中捕获信息,提高了模型的表达能力和性能。
多头注意力-工作流程多头注意力将每个头得到向量拼接在一起,最后乘一个线性矩阵,得到 Multi-Head Attention 的输出。
拼接和线性变换 3.2.3 Applications of Attention in our Model(注意力机制在我们模型中的应用)Applications of Attention in our Model 3.2.3 注意力机制在我们模型中的应用 Transformer使用多头注意力机制的三种不同方式如下:
敲黑板,划重点Transformer模型利用三种方式应用多头注意力机制,包括编码器-解码器间的全局关注、编码器内部的自交互以及解码器的自回归关注
3.3 Position-wise Feed-Forward Networks(位置相关的前馈神经网络)Position-wise Feed-Forward Networks 3.3 位置相关的前馈神经网络 除了注意力子层之外,我们的编码器和解码器中的每一层都包含一个全连接的前馈神经网络,该网络分别且相同地应用于每个位置。这包括两个线性变换,并在它们之间使用ReLU激活函数。 前馈神经网络(FFN)的表达式为:FFN(x) = max(0, xW1 + b1)W2 + b2 (2) 尽管线性变换在不同位置上是相同的,但它们在不同层之间使用不同的参数。另一种描述方式是将其视为两个核大小为1的卷积操作。 输入和输出的维度为dmodel = 512,而内层的维度为dff = 2048。 Position-wise Feed-Forward Networks 敲黑板,划重点位置相关的前馈神经网络是Transformer模型中每层的重要组件,通过线性变换和ReLU激活函数处理数据,增强模型的表达能力。
位置相关的前馈神经网络 3.4 Embeddings and Softmax(嵌入与Softmax)Embeddings and Softmax 3.4 嵌入与Softmax 类似于其他序列转换模型,我们使用学习到的嵌入(embeddings)将输入和输出标记转换为维度为dmodel的向量。同样,我们使用常见的线性变换和softmax函数将解码器输出转换为预测的下一个标记的概率。在我们的模型中,两个嵌入层与softmax前的线性变换共享相同的权重矩阵,这与[24]类似。在嵌入层中,我们将这些权重乘以√dmodel。 敲黑板,划重点嵌入与Softmax是Transformer模型的关键组件,通过学习嵌入转换输入和输出标记为向量,并使用softmax生成概率预测,同时采用权重共享和缩放策略优化模型性能。
嵌入与Softmax 3.5 Positional Encoding(位置编码)Positional Encoding 3.5 位置编码 由于我们的模型不包含循环和卷积,为了让模型利用序列的顺序信息,我们必须在序列中的标记上注入一些关于相对或绝对位置的信息。为此,我们在编码器和解码器堆栈的底部向输入嵌入添加“位置编码”。位置编码的维度与嵌入的维度dmodel相同,以便可以将两者相加。关于位置编码,有多种选择,包括学习得到的和固定的[8]。 在这项工作中,我们使用不同频率的正弦和余弦函数来生成位置编码: 其中pos是位置,i是维度。也就是说,位置编码的每个维度对应于一个正弦波。波长从2π到10000·2π形成几何级数。我们选择这个函数是因为我们假设它能让模型轻松地学习根据相对位置进行关注,因为对于任何固定的偏移量k,PE(pos + k)都可以表示为PE(pos)的线性函数。 我们也尝试使用学习得到的位置嵌入[8],发现这两种版本产生了几乎相同的结果(参见表3中的行(E))。我们选择正弦波版本是因为它可能允许模型外推到比训练时遇到的更长的序列长度。 Positional Encoding 敲黑板,划重点位置编码是Transformer模型中用于注入序列位置信息的机制,通过正弦和余弦函数生成,使模型能够学习基于相对位置的注意力,提高序列处理性能。
位置编码 4 Why Self-Attention(为什么使用自注意力机制)4 为什么选择自注意力机制 在本节中,我们将比较自注意力层与常用于将一个可变长度的符号表示序列(x1,...,xn)映射到另一个等长序列(z1,...,zn)的循环和卷积层之间的各个方面,其中xi,zi ∈ Rd,例如典型序列转换编码器或解码器中的隐藏层。为了激发我们使用自注意力机制的动力,我们考虑了三个理想特性。 第一个特性是每一层的总计算复杂度。另一个特性是可以并行化的计算量,这可以通过所需的最小顺序操作数来衡量。 第三个特性是网络中长期依赖关系的路径长度。在许多序列转换任务中,学习长期依赖关系是一个关键挑战。影响学习这种依赖关系能力的一个关键因素是信号在网络中向前和向后传播所需经过的路径长度。输入和输出序列中任意组合位置之间的这些路径越短,学习长期依赖关系就越容易[12]。因此,我们还将比较由不同层类型组成的网络中任意两个输入和输出位置之间的最大路径长度。 如表1所示,自注意力层通过恒定数量的顺序执行操作将所有位置连接起来,而循环层则需要O(n)个顺序操作。在计算复杂度方面,当序列长度n小于表示维度d时,自注意力层比循环层更快,这在机器翻译中先进模型所使用的句子表示中通常是这种情况,例如单词片段[38]和字节对[31]表示。为了提高涉及非常长序列的任务的计算性能,自注意力可以限制为仅考虑输入序列中以相应输出位置为中心的大小为r的邻域。这将使最大路径长度增加到O(n/r)。我们计划在未来的工作中进一步调查这种方法。 单个卷积层,如果其核宽度k < n,则不会连接所有输入和输出位置对。要做到这一点,在连续核的情况下需要堆叠O(n/k)个卷积层,或在扩张卷积的情况下需要O(logk(n))个卷积层[18],这会增加网络中任意两个位置之间的最长路径长度。卷积层通常比循环层更昂贵,高出k倍。然而,可分离卷积[6]可以大大降低复杂度,降至O(k · n · d + n · d^2)。即使k = n,可分离卷积的复杂度也等于我们模型中采用的自注意力层和逐点前馈层的组合。 作为附加好处,自注意力可能会产生更可解释的模型。我们检查了模型中的注意力分布,并在附录中呈现和讨论了示例。不仅单独的注意力头明显学会了执行不同的任务,而且许多注意力头似乎表现出与句子的句法和语义结构相关的行为。 敲黑板,划重点使用自注意力机制的原因主要在于其高效处理长序列、易于学习长期依赖关系以及提高模型的可解释性。这些优势使得自注意力层在序列转换任务中成为一个有力的工具。
|
|