机器学习笔记 - Transformer/Attention论文解读

一、摘要

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

        关于BLEU分数的介绍,可以查看下面的链接。

https://skydance.blog.csdn.net/article/details/125055325https://skydance.blog.csdn.net/article/details/125055325

二、简介

        循环神经网络,特别是长短期记忆和门控循环神经网络,已被确立为序列建模和转换问题(如语言建模和机器翻译)的最先进方法。 此后,许多研究人员继续努力推动循环语言模型和编码器-解码器架构的发展。

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

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

        在这项工作中,我们提出了 Transformer,这是一种避免重复的模型架构,是完全依赖注意力机制来绘制输入和输出之间的全局依赖关系。Transformer 可以实现更多的并行化,在八个 P100 GPU 上经过短短 12 小时的训练后,可以在翻译质量方面达到最先进的水平。

三、背景

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

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

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

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

四、模型架构

        大多数竞争性神经序列转换模型具有编码器-解码器结构。这里,编码器将符号表示的输入序列 (x_1, ......, x_n)映射到连续表示的序列z = (z_1,......,z_n)。 给定 z,解码器然后一次生成一个元素的符号输出序列 (y_1, ...... ,y_m)。 在每个步骤中,模型都是自回归的,在生成下一个时将先前生成的符号用作附加输入。

        Transformer 遵循这种整体架构,对编码器和解码器使用堆叠的自注意力和逐点全连接层,分别如下图的左半部分和右半部分所示。

Transformer - 模型架构

 1、Encoder and Decoder Stacks

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

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

2、Attention

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

        关于这里查询、键、值到底是什么?请查看第八节,别人的回答。

图:(左)按比例缩放的点积注意力。 (右)多头注意力由多个并行运行的注意力层组成。

(1)Scaled Dot-Product Attention

        我们将我们的特别关注称为“Scaled Dot-Product Attention”(上图)。输入由维度d_k的查询和键以及维度d_v的值组成。我们计算的点积查询所有键,将每个键除以\sqrt{d_k},然后应用 softmax 函数来获得值的权重。

        在实践中,我们同时计算一组查询的注意力函数,并打包到矩阵 Q 中。键和值也打包到矩阵 K 和 V 中。 我们将输出矩阵计算为:

        

        两个最常用的注意函数是加法注意和点积(乘法)注意。点积注意力与我们的算法相同,除了 \frac{1}{\sqrt{d_k}}的缩放因子。附加注意使用具有单个隐藏层的前馈网络计算兼容性函数。虽然两者在理论上的复杂性相似,但点积注意力在实践中更快且更节省空间,因为它可以使用高度优化的矩阵乘法代码来实现。

        虽然对于较小的d_k值,这两种机制的性能相似,但加法注意力优于点积注意力,而无需针对较大的d_k值进行缩放。我们怀疑对于较大的d_k值,点积的幅度会增大,从而将 softmax 函数推入具有极小梯度的区域。为了抵消这种影响,我们通过\frac{1}{\sqrt{d_k}}缩放点积。

(2)Multi-Head Attention

        与使用 d_{model} 维度的键、值和查询执行单个注意功能不同,我们发现将查询、键和值分别线性投影到d_kd_kd_v 维度是有益的。然后,在每个查询、键和值的投影版本上,我们并行执行注意功能,产生 d_v 维输出值。这些被连接起来并再次投影,产生最终值,如上图所示。

        多头注意力允许模型共同关注来自不同位置的不同表示子空间的信息。对于单个注意力头,平均化会抑制这一点。

         其中投影是参数矩阵

         在这项工作中,我们使用h = 8个并行注意力层或头。 对于其中的每一个,我们使用d_k = d_v = d_{model}/h = 64。由于每个头的维度减少,总计算成本类似于具有全维度的单头注意力。

(3)注意力在我们模型中的应用

        Transformer 以三种不同的方式使用多头注意力:

        1、在“编码器-解码器注意力”层中,查询来自前一个解码器层,记忆键和值来自编码器的输出。 这允许解码器中的每个位置参与输入序列中的所有位置。这模仿了序列到序列模型中典型的编码器-解码器注意机制。

        2、编码器包含自注意力层。 在自注意力层中,所有的键、值和查询都来自同一个地方,在这种情况下,是编码器中前一层的输出。 编码器中的每个位置都可以关注编码器上一层中的所有位置。

        3、类似地,解码器中的自注意力层允许解码器中的每个位置关注解码器中直到并包括该位置的所有位置。 我们需要防止解码器中的信息向左流动,以保持自回归特性。 我们通过屏蔽掉(设置为负无穷)softmax 输入中与非法连接对应的所有值,在缩放点积注意力内部实现这一点。

3、位置前馈网络

        除了注意力子层之外,我们的编码器和解码器中的每一层都包含一个完全连接的前馈网络,该网络分别且相同地应用于每个位置。 这包括两个线性变换,中间有一个 ReLU 激活。

        虽然线性变换在不同位置上是相同的,但它们在层与层之间使用不同的参数。另一种描述方式是内核大小为 1 的两个卷积。输入和输出的维度为d_{model} = 512,内层的维度为 d_{ff} = 2048

4、Embeddings and Softmax

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

5、Positional Encoding

        由于我们的模型不包含递归和卷积,为了让模型利用序列的顺序,我们必须注入一些关于序列中标记的相对或绝对位置的信息。为此,我们在编码器和解码器堆栈底部的输入嵌入中添加“位置编码”。位置编码与嵌入具有相同的维度d_{model},因此可以将两者相加。位置编码有很多选择,学习的和固定的。

        在这项工作中,我们使用不同频率的正弦和余弦函数:

         其中pos是位置,i是维度。

        也就是说,位置编码的每个维度对应一个正弦曲线。波长形成从2 \pi10000 \cdot 2 \pi的几何级数。我们选择这个函数是因为我们假设它可以让模型轻松学习通过相对位置来参与,因为对于任何固定的偏移量kPE_{pos+k} 可以表示为 PE_{pos}的线性函数。

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

五、为什么要自我关注

        在本节中,我们将自注意力层的各个方面与循环层和卷积层进行比较,这些层通常用于将一个可变长度的符号表示序列 (x1, ...... , xn) 映射到另一个等长序列 (z1, ...... ,zn), 与x_i, z_i \in R^d,例如典型的序列转导编码器或解码器中的隐藏层。为了激发我们对自我关注的使用,我们考虑了三个必要条件。

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

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

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

        表1:不同层类型的最大路径长度、每层复杂度和最小顺序操作数。n是序列长度,d是表示维度,k是卷积的核大小,r是受限自注意中的邻域大小。 

        内核宽度k < n的单个卷积层不会连接所有输入和输出位置对。 这样做需要在连续内核的情况下堆叠 O(n/k)卷积层,或者在扩张卷积的情况下需要O(log_k(n)),从而增加任意两个位置之间最长路径的长度 在网络中。 卷积层通常比循环层更昂贵,高出 k 倍。 然而,可分离卷积将复杂度显着降低到 O(k\cdot n\cdot d + n \cdot d^2)。 然而,即使k = n,可分离卷积的复杂度也等于自注意力层和逐点前馈层的组合,这是我们在模型中采用的方法。

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

六、训练

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

1、训练数据和批处理

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

2、Hardware and Schedule

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

3、Optimizer

        我们使用了 Adam 优化器,其中 \beta _1 =0.9\beta _2 =0.98\epsilon = 10 ^{-9}。 我们根据以下公式在训练过程中改变学习率:

         这对应于在第一个 warmup_steps 训练步骤中线性增加学习率,然后根据步数的平方根倒数按比例减少学习率。 我们使用了 warmup_steps = 4000。

4、Regularization

        我们在训练过程中采用了三种正则化:

        Residual Dropout:我们将dropout应用于每个子层的输出,然后将其添加到子层输入并进行归一化。此外,我们将dropout应用于编码器和解码器堆栈中嵌入和位置编码的总和。对于基本模型,我们使用P_{drop}= 0.1的比率。

        Label Smoothing:在训练期间,我们采用了值\varepsilon _ {ls} = 0.1的标签平滑。这个伤害困惑,因为模型学会了更加不确定,但提高了准确性和BLEU分数。

七、结果

1、机器翻译

        在 WMT 2014 英德翻译任务中,大 Transformer 模型(表 2 中的 Transformer (big))比之前报告的最佳模型(包括 ensembles)高出 2:0 BLEU 以上,建立了一个新的 state-of- 最先进的 BLEU 得分为 28:4。该模型的配置列于表 3 的最后一行。在 8 个 P100 GPU 上训练耗时 3:5 天。 甚至我们的基础模型也超过了所有先前发布的模型和集成,其训练成本只是任何竞争模型的一小部分。

         表2:Transformer 在英语到德语和英语到法语的 newstest2014 测试中获得了比以前最先进的模型更好的 BLEU 分数,而训练成本只是其中的一小部分。

        在 WMT 2014 英法翻译任务中,我们的大模型达到了 41.0 的 BLEU 分数,优于之前发布的所有单一模型,其训练成本低于之前状态的 1/4 最优模型。 为英语到法语训练的 Transformer(大)模型使用的辍学率 P_{drop} = 0.1,而不是 0.3。

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

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

2、Model Variations

        为了评估 Transformer 不同组件的重要性,我们以不同的方式改变了我们的基础模型,测量了开发集 newstest2013 上英德翻译性能的变化。 我们使用了上一节中描述的光线搜索,但没有检查点平均。 我们在表 3 中展示了这些结果。

         表 3:Transformer 架构的变化。 未列出的值与基本模型的值相同。 所有指标都在英语到德语的翻译开发集 newstest2013 上。 根据我们的字节对编码,列出的困惑度是每个单词的,不应与每个单词的困惑度进行比较。

        在表 3 行 (A) 中,我们改变了注意力头的数量以及注意力键和值维度,保持计算量不变。 虽然单头注意力比最佳设置差 0.9 BLEU,但质量也会因头过多而下降。

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

3、英语选区解析

        为了评估 Transformer 是否可以泛化到其他任务,我们对英语选区解析进行了实验。 这项任务提出了具体的挑战:输出受到强烈的结构约束,并且明显长于输入。此外,RNN 序列到序列模型无法在小数据方案中获得最先进的结果。

        我们在 Penn Treebank 的华尔街日报 (WSJ) 部分训练了一个 d_{model} = 1024 的 4 层转换器,大约 40K 训练句子。 我们还在半监督环境中对其进行了训练,使用来自大约 1700 万个句子的更大的高置信度和 BerkleyParser 语料库。 我们将 16K 令牌的词汇表用于 WSJ 唯一设置,将 32K 令牌词汇表用于半监督设置。

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

         表 4:Transformer 很好地推广到英语选区解析(结果在《华尔街日报》第 23 节)

        我们在表 4 中的结果表明,尽管缺乏针对特定任务的调整,但我们的模型表现得非常好,比之前报告的所有模型都产生了更好的结果,但递归神经网络语法除外。

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

七、结论

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

        对于翻译任务,Transformer 的训练速度明显快于基于循环或卷积层的架构。 在 WMT 2014 英语到德语和 WMT 2014 英语到法语的翻译任务上,我们都达到了新的水平。 在前一项任务中,我们最好的模型甚至优于所有先前报道的集成。

        我们对基于注意力的模型的未来感到兴奋,并计划将它们应用于其他任务。我们计划将 Transformer 扩展到涉及文本以外的输入和输出模式的问题,并研究局部的受限注意力机制,以有效处理图像、音频和视频等大型输入和输出。 减少生成的顺序是我们的另一个研究目标。我们用于训练和评估模型的代码可在https://github.com/tensorflow/tensor2tensor获得。

八、相关参考

Multi-head attention mechanism: "queries", "keys", and "values," over and over again - Data Science Blogicon-default.png?t=M4ADhttps://data-science-blog.com/blog/2021/04/07/multi-head-attention-mechanism/neural networks - What exactly are keys, queries, and values in attention mechanisms? - Cross Validatedhttps://stats.stackexchange.com/questions/421935/what-exactly-are-keys-queries-and-values-in-attention-mechanisms

猜你喜欢

转载自blog.csdn.net/bashendixie5/article/details/125055412