Transformer原版论文译文完整版

Transformer原版论文译文完整版

原英文论文地址:https://arxiv.org/abs/1706.03762

你所需要的只是注意力

摘要

主要序列转导模型基于包含编码器和解码器的复杂循环或卷积神经网络。性能最好的模型还通过注意力机制连接编码器和解码器。我们提出了一种新的简单网络架构,Transformer,仅基于注意力机制,完全无需递归和卷积。在两个机器翻译任务上的实验表明,这些模型在质量上更好,同时可并行化且训练时间显着减少。我们的模型在 WMT 2014英语到德语的翻译任务上实现了28.4BLEU,比现有的最佳结果(包括集成)提高了2BLEU 以上。在 WMT 2014英语到法语的翻译任务上,我们的模型在8个 GPU 上训练3.5天后,建立了一个新的单模型最先进的 BLEU 分数41.8,一小部分训练成本来自文献。我们表明,通过使用大量且有限的训练数据,Transformer 通过成功应用于英语选区解析,可以很好地推广到其他任务。

1.介绍

特别是循环神经网络、长短期记忆和门控循环神经网络已被牢固确立为语言建模和机器翻译等序列建模和转导问题的最新方法。此后,许多努力继续推动循环语言模型和编码器-解码器架构的边界。

循环模型通常沿输入和输出序列的符号位置分解计算。将位置与计算时间的步骤对齐,它们生成一系列隐藏状态 ht,作为先前隐藏状态 ht-1和位置 t 的输入的函数。这种固有的顺序性质排除了训练示例中的并行化,这在更长的序列长度下变得至关重要,因为内存限制限制了示例之间的批处理。最近的工作通过分解技巧和条件计算实现了计算效率的显着改进,同时还提高了后者情况下的模型性能。然而,顺序计算的基本约束仍然存在。

注意力机制已成为各种任务中引人注目的序列建模和转导模型的一个组成部分,允许对依赖关系进行建模,而不考虑它们在输入或输出序列中的距离 。然而,除了少数情况 ,这种注意力机制与循环网络结合使用。

在这项工作中,我们提出了 Transformer,这是一种模型架构,避免了递归,而是完全依靠注意力机制来绘制输入和输出之间的全局依赖关系。Transformer 允许更多的并行化,并且在八个 P100 GPU 上训练多达12小时后,可以在翻译质量方面达到新的技术水平。

2.背景

减少顺序计算的目标也构成了扩展神经 GPU [16]、ByteNet [18] 和 ConvS2S [9] 的基础,所有这些都使用卷积神经网络作为基本构建块,并行计算所有输入和输出位置的隐藏表示。在这些模型中,关联来自两个任意输入或输出位置的信号所需的操作数量随着位置之间的距离而增加,对于 ConvS2S 是线性的,对于 ByteNet 呈对数增长。这使得学习远距离位置之间的依赖关系变得更加困难[12]。在 Transformer 中,这减少到恒定数量的操作,尽管由于平均注意力加权位置而导致有效分辨率降低,但我们使用多头注意力抵消的效果,如第3.2节所述。

自注意力,有时称为内部注意力是一种注意力机制,它关联单个序列的不同位置以计算序列的表示。自注意力已成功用于各种任务,包括阅读理解、抽象摘要、文本蕴涵和学习任务无关的句子表示。

端到端记忆网络基于循环注意机制而不是序列对齐递归,已被证明在简单的语言问答和语言建模任务中表现良好。

然而,据我们所知,Transformer 是第一个完全依赖自注意力来计算输入和输出表示而不使用序列对齐的 RNN 或卷积的转换模型。在以下部分中,我们将描述 Transformer,激发自注意力并讨论其相对于[17,18]和[9]等模型的优势。

3.模型结构

大多数竞争性神经序列转导模型具有编码器-解码器结构。在这里,编码器映射符号表示的输入序列(x1,…, xn)到一系列连续表示 z = (z1,…, zn)。给定 z,解码器然后生成一个输出序列(y1,…, ym)一次一个元素的符号。在每一步,模型都是自回归的,在生成下一个时将先前生成的符号作为附加输入。
在这里插入图片描述
Transformer 遵循这种整体架构,使用编码器和解码器的堆叠自注意力和逐点全连接层,分别如图1的左半和右半所示。

3.1 编码器和解码器模块

编码器:编码器由 N = 6个相同层组成。每一层都有两个子层。第一个是多头自注意力机制,第二个是简单的、位置全连接的前馈网络。我们在两个子层中的每一个周围使用残差连接,然后是层归一化。也就是说,每个子层的输出是LayerNorm(x + Sublayer(x)),其中 Sublayer(x) 是子层本身实现的函数。为了便于这些残差连接,模型中的所有子层以及嵌入层都会产生维度 dmodel = 512的输出。

解码器:解码器还由 N = 6个相同层的堆栈组成。除了每个编码器层中的两个子层之外,解码器还插入了第三个子层,它对编码器堆栈的输出执行多头注意力。与编码器类似,我们在每个子层周围使用残差连接,然后是层归一化。我们还修改了解码器堆栈中的自注意力子层,以防止位置关注后续位置。这种掩蔽,再加上输出嵌入被一个位置偏移的事实,确保位置 i 的预测仅取决于位置小于 i 的已知输出。

3.2 注意力

注意力函数可以描述为将一个查询和一组键值对映射到输出,其中查询、键、值和输出都是向量。输出计算为值的加权总和,其中分配给每个值的权重由具有相应键的查询的兼容性函数计算。
在这里插入图片描述

3.2.1 注意力

我们称我们的特定注意力为“Scaled Dot-Product Attention”(图2)。输入由维度 dk 的查询和键以及维度 dv 的值组成。我们计算查询与所有键的点积,将每个键除以√dk,并应用 softmax 函数来获得值的权重。

在实践中,我们同时计算一组查询的注意力函数,打包成一个矩阵 Q。键和值也打包到矩阵 K 和 V 中。我们计算输出矩阵为:
在这里插入图片描述
两种最常用的注意函数是加性注意和点积(乘法)注意。点积注意力与我们的算法相同,只是比例因子为1/√dk。加性注意使用具有单个隐藏层的前馈网络计算兼容性函数。虽然两者在理论上的复杂性相似,但点积注意力在实践中要快得多,空间效率更高,因为它可以使用高度优化的矩阵乘法代码来实现。

虽然对于较小的 dk 值,这两种机制的表现相似,但加性注意力优于点积注意力,而不会缩放较大的 dk 值。我们怀疑对于较大的dk值,点积的幅度较大,将softmax函数推入梯度极小的区域4。为了抵消这种影响,我们将点积缩放1/√dk。

3.2.2 多头注意力

我们发现,与其使用 dmodel 维键、值和查询执行单个注意力函数,不如将查询、键和值线性投影 h 次,分别学习到 dk、dk 和 dv 维度。然后,在查询、键和值的每个投影版本上,我们并行执行注意力函数,生成 dv 维输出值。这些值被连接起来并再次投影,得到最终值,如图2所示。

多头注意力允许模型共同关注不同位置的不同表示子空间的信息。使用单个注意力头,平均会抑制这一点。
在这里插入图片描述
其中投影是参数矩阵WQi∈Rdmodel×dk, WKi∈Rdmodel×dk, WVi∈Rdmodel×dvand WO∈Rhdv ×dmodel。在这项工作中,我们使用 h = 8个并行注意力层或头部。对于每一个,我们使用k = dv = dmodel/h = 64。由于每个头的维数降低,总计算成本与全维数单头注意相似。

3.2.3 我们模型中意力的应用

Transformer 以三种不同的方式使用多头注意力:
• 在“编码器-解码器注意力”层中,查询来自前一个解码器层,内存键和值来自编码器的输出。这允许解码器中的每个位置关注输入序列中的所有位置。这模仿了序列到序列模型中典型的编码器-解码器注意机制,如[38,2,9]。
• 编码器包含自注意力层。在自注意力层中,所有键、值和查询都来自同一个地方,在这种情况下,编码器中前一层的输出。编码器中的每个位置都可以关注编码器前一层的所有位置。
•类似地,解码器中的自注意力层允许解码器中的每个位置关注解码器中的所有位置,直到并包括该位置。我们需要防止解码器中的向左信息流以保留自回归属性。我们通过屏蔽对应于非法连接的 softmax 的输入中的所有值(设置为-∞)来实现这种缩放点积注意力的内部。参见图2。

3.3 位置前馈网络

除了注意力子层之外,我们的编码器和解码器中的每一层都包含一个完全连接的前馈网络,该网络分别和相同地应用于每个位置。它由两个线性变换组成,中间有一个 ReLU 激活。
在这里插入图片描述
虽然线性变换在不同的位置是相同的,但它们使用与层到层的不同参数。另一种描述的方法是核大小为1的两个卷积。输入和输出的维数是dmodel = 512,内层维数为dff = 2048。

3.4 嵌入与Softmax

与其他序列转导模型类似,我们使用学习嵌入将输入标记和输出标记转换为维度 dmodel 的向量。我们还使用通常学习的线性变换和 softmax 函数将解码器输出转换为预测的下一个标记概率。在我们的模型中,我们在两个嵌入层和 pre-softmax 线性变换之间共享相同的权重矩阵,类似于[30]。在嵌入层中,我们将这些权重乘以√dmodel。

表 1:不同层的最大路径长度、每层复杂度和最小顺序操作数。n 是序列长度,d 是表示维度,k 是卷积的内核大小,r 是受限自注意力中邻域的大小。
在这里插入图片描述

3.5 位置编码

由于我们的模型不包含递归和没有卷积,为了让模型利用序列的顺序,我们必须注入一些关于序列中标记的相对位置或绝对位置的信息。为此,我们在编码器和解码器堆栈底部的输入嵌入中添加了“位置编码”。位置编码具有与嵌入相同的维度 dmodel,以便可以求和两者。位置编码、学习和固定有很多选择[9]。
在这项工作中,我们使用不同频率的正弦和余弦函数:
在这里插入图片描述
其中 pos 是位置,i 是维度。也就是说,位置编码的每个维度对应一个正弦信号。波长形成从2π到10000·2π的几何级数。我们选择这个函数是因为我们假设它将允许模型轻松学习关注相对位置,因为对于任何固定的偏移 k,PEpos+k 可以表示为 P Epos 的线性函数。

我们还尝试使用学习的位置嵌入 [9],并发现两个版本产生了几乎相同的结果(见表 3 行 (E))。我们选择正弦版本,因为它可能允许模型外推到比训练期间遇到的序列长度更长的序列长度。

4 为什么是自注意力

在本节中,我们将自注意力层的各个方面与通常用于映射一个可变长度的符号表示序列(x1,…, xn) 到另一个长度相等的序列 (z1,…, zn),其中 xi, zi ∈ Rd,例如典型序列转导编码器或解码器中的隐藏层。激发我们对自注意力的使用,我们考虑了三个要求。

一是每层的总计算复杂度。另一个是可以并行化的计算量,由所需的最小顺序操作数来衡量。

第三个是网络中远程依赖关系之间的路径长度。学习远程依赖关系是许多序列转导任务中的关键挑战。影响学习这种依赖关系的能力的一个关键因素是前向和后向信号必须在网络中遍历的路径的长度。输入和输出序列中任何位置组合之间的这些路径越短,就越容易学习长期依赖关系[12]。因此,我们还比较了由不同层类型组成的网络中任意两个输入和输出位置之间的最大路径长度。

如表1 所示,自注意力层以恒定数量的顺序执行操作连接所有位置,而循环层需要 O(n)次顺序操作。就计算复杂度而言,当序列长度 n 小于表示维数 d 时,自注意力层比递归层更快,这通常适用于机器翻译中最新模型使用的句子表示,例如词片和字节对表示。为了提高涉及非常长的序列的任务的计算性能,自注意力可以仅限于仅考虑以相应输出位置为中心的输入序列中大小为 r 的邻域。这将将最大路径长度增加到 O(n/r)。我们计划在未来的工作中进一步研究这种方法。

内核大小为 k <n 的单个卷积层不连接所有输入和输出位置对。这样做需要在连续内核的情况下堆叠 O(n/k) 卷积层,或者在扩张卷积的情况下需要 O(logk(n)),增加网络中任意两个位置之间最长路径的长度。卷积层通常比循环层更昂贵,因子为 k。然而,可分离卷积[6]大大降低了复杂度,为O(knd+ndd)。然而,即使 k = n,可分离卷积的复杂度也等于自注意力层和逐点前馈层的组合,我们在我们的模型中采用的方法。

作为附带好处,self-attention 可以产生更多可解释的模型。我们从我们的模型中检查注意力分布,并在附录中展示和讨论示例。单独的注意力头不仅清楚地学习执行不同的任务,似乎表现出与句子的句法和语义结构相关的行为。

5 训练

本节描述了我们模型的训练机制。

5.1 训练

数据和批处理我们在标准 WMT 2014 英德数据集上进行训练,该数据集由大约 450 万个句子对组成。句子使用字节对编码 [3] 进行编码,该编码具有大约 37000 个标记的共享源目标词汇表。对于英法,我们使用了更大的 WMT 2014 英法数据集,该数据集由 36M 个句子组成,并将标记拆分为 32000 个单词片段词汇表 [38]。句子对按近似序列长度分批在一起。每个训练批次包含一组句子对,包含大约 25000 个源标记和 25000 个目标标记。

5.2 硬件和时间表

我们在一台配备8个 NVIDIA P100 GPU 的机器上训练我们的模型。对于我们使用整篇论文中描述的超参数的基本模型,每个训练步骤大约需要0.4秒。我们总共训练了100,000步或12小时的基本模型。对于我们的大型模型,(在表3的底行中描述),步骤时间为1.0秒。大型模型训练了30万步(3.5)。

5.3优化器

我们使用了Adam优化器[20],β1 = 0.9, β2 = 0.98, ε = 10−9。根据以下公式,我们在训练过程中改变了学习率:
在这里插入图片描述
这对应于在第一个 warmup_steps 训练步骤中线性增加学习率,然后与步数的平方根成反比减少它。我们使用了warmup_steps = 4000。

5.4 正则化

我们在训练期间采用了三种类型的正则化:
表 2:Transformer 在英语到德语和英语到法语 newstest2014 测试上以训练成本的一小部分实现了比以前的最先进模型更好的 BLEU 分数。
在这里插入图片描述
残差 Dropout 我们将 dropout [33] 应用于每个子层的输出,然后将其添加到子层输入中并进行归一化。此外,我们将 dropout 应用于编码器和解码器堆栈中的嵌入和位置编码的总和。对于基本模型,我们使用 Pdrop = 0.1 的速率。
标签平滑在训练期间,我们采用值 εls = 0.1 [36] 的标签平滑。这会损害困惑度,因为模型学习更不确定,但提高了准确性和 BLEU 分数。

6 结果

6.1 机器翻译

在 WMT 2014英德翻译任务上,表2中的大变压器模型(Transformer (big))比之前报道的最好的模型(包括集成)高出2.0BLEU 以上,建立了一个新的最先进的 BLEU 分数 28.4。该模型的配置列在表3的底线中。在 8个P100 GPU 上训练需要3.5天。即使是我们的基础模型也超过了所有先前发布的模型和集成,只是任何竞争模型的训练成本的一小部分。

在 WMT 2014英法翻译任务中,我们的大型模型的 BLEU 得分为41.0,优于所有先前发布的单一模型,不到之前最先进模型的训练成本的1/4。为英法训练的 Transformer (big) 模型使用 dropout 率 Pdrop = 0.1,而不是0.3。

对于基本模型,我们使用了通过平均最后5个检查点获得的单一模型,这些检查点以10分钟间隔编写。对于大型模型,我们对最后20个检查点进行平均。我们使用了光束大小为4的光束搜索和长度惩罚 α =0.6[38]。这些超参数是在对开发集进行实验后选择的。我们将推理期间的最大输出长度设置为输入长度 + 50,但在可能的情况下提前终止。

表 2总结了我们的结果,并将我们的翻译质量和培训成本与文献中的其他模型架构进行了比较。我们通过乘以训练时间、使用的 GPU 数量和每个 GPU 5 的持续单精度浮点容量的估计来估计用于训练模型的浮点运算的数量。

6.2模型变化

为了评估 Transformer 不同组件的重要性,我们以不同的方式改变了我们的基本模型,测量了开发集 newstest2013 上英语到德语翻译的性能变化。我们使用了上一节所述的光束搜索,但没有检查点平均。我们在表3中列出了这些结果。
表 3:Transformer 架构的变化。未列出的值与基本模型的值相同。所有指标都在英德翻译开发集上 newstest2013。根据我们的字节对编码,列表的困惑度是每个单词,不应与每个单词的困惑度进行比较。
在这里插入图片描述
在表 3 行 (A) 中,我们改变了注意力头的数量和注意力键和值维度,保持计算量不变,如第 3.2.2 节所述。虽然单头注意力比最佳设置差 0.9 BLEU,但质量也会随着头太多而下降。

在表 3 行 (B) 中,我们观察到减少注意力键大小 dk 会损害模型质量。这表明确定兼容性并不容易,比点积更复杂的兼容性函数可能是有益的。我们进一步在第 © 和 (D) 行中观察到,正如预期的那样,更大的模型更好,dropout 对避免过度拟合非常有帮助。在第 (E) 行,我们用学习的位置嵌入 [9] 替换我们的正弦位置编码,并观察到与基本模型几乎相同的结果。

6.3 英语选区解析

为了评估 Transformer 是否可以推广到其他任务,我们对英语选区解析进行了实验。该任务提出了具体的挑战:输出受到强大的结构约束,并且明显长于输入。此外,RNN 序列到序列模型无法在小数据状态下获得最先进的结果 [37]。

我们在 Penn Treebank [25] 的华尔街日报 (WSJ) 部分上训练了一个 dmodel = 1024 的 4 层转换器,大约 40K 的训练句子。我们还在半监督设置中对其进行了训练,使用来自大约 17M 个句子 [37] 的更大的高置信度和 BerkleyParser 语料库。我们为 WSJ 仅使用设置使用了 16K 个标记的词汇表,为半监督设置使用了 32K 个标记的词汇表。

我们只进行了少量实验来选择第 22 开发集上的 dropout、attention 和 residual(第 5.4 节)、学习率和波束大小,所有其他参数均与英德基础翻译模型保持不变。在推理过程中,我们将最大输出长度增加到输入长度 + 300。我们使用的光束尺寸为 21,α = 0.3,仅适用于 WSJ 和半监督设置。

表 4:Transformer 可以很好地推广到英语选区解析(结果在 WSJ 的第 23 节)
在这里插入图片描述
我们在表4中的结果表明,尽管缺乏特定于任务的调整,但我们的模型表现得非常好,除了循环神经网络语法之外,所有先前报告的模型都产生了更好的结果。

与 RNN 序列到序列模型相比,即使仅在 40K 个句子的 WSJ 训练集上进行训练,Transformer 也优于 BerkeleyParser。

7 结论

在这项工作中,我们提出了 Transformer,这是第一个完全基于注意力的序列转导模型,用多头自注意力替换了编码器-解码器架构中最常用的循环层。

对于翻译任务,Transformer 可以比基于循环或卷积层的架构快得多。在 WMT 2014 英德和 WMT 2014英法翻译任务上,我们达到了新的技术水平。在前一个任务中,我们最好的模型甚至优于所有先前报告的集成。

我们对基于注意力的模型的未来感到兴奋,并计划将它们应用于其他任务。我们计划将 Transformer 扩展到涉及文本以外的输入和输出模式的问题,并研究局部、受限的注意力机制,以有效地处理图像、音频和视频等大型输入和输出。使生成不那么顺序是我们的另一个研究目标。

我们用于训练和评估我们的模型的代码可在 https://github.com/tensorflow/tensor2tensor 获得。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Transformer是一种非常流行的深度学习模型,用于处理序列数据,特别是在自然语言处理任务中表现出色。下面是一个Transformer的代码完整版的简要介绍: 1. 数据预处理:首先,需要对输入数据进行预处理。这包括将文本转换为数字表示,创建输入和输出序列,以及对序列进行填充和截断等操作。 2. 模型架构:Transformer模型由编码器和解码器组成。编码器和解码器都由多个相同的层堆叠而成。 3. 位置编码:为了捕捉序列中的位置信息,Transformer使用了位置编码。位置编码是一个矩阵,其中每一行代表一个位置的编码。 4. 注意力机制:Transformer中的核心是自注意力机制。自注意力机制允许模型在处理序列时关注不同位置的不同程度。 5. 前馈神经网络:除了自注意力机制,每个编码器和解码器层还包括一个前馈神经网络。前馈神经网络由两个全连接层组成,通过一个激活函数进行非线性变换。 6. 残差连接和层归一化:为了避免梯度消失和梯度爆炸问题,Transformer使用了残差连接和层归一化。 7. 损失函数:在训练过程中,使用交叉熵损失函数来计算模型的预测结果与真实标签之间的差异。 8. 优化器和训练:使用优化器(如Adam)来更新模型的参数,并通过反向传播算法来计算梯度并进行参数更新。 9. 推理和生成:在推理阶段,使用训练好的模型来生成输出序列。这可以通过贪婪搜索或束搜索等方法实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值