论文阅读-《Attention is All You Need》

注意力就是一切

【要点】:论文提出了一种全新的网络架构——Transformer,完全基于注意力机制,无需使用循环和卷积,实现了在机器翻译任务上的性能提升和训练效率的显著提高。

【方法】:通过构建一个仅使用注意力机制的Transformer模型,该模型采用自注意力机制和多头注意力来处理序列数据,摒弃了传统的循环和卷积网络。

【实验】:作者在WMT 2014 English-to-German和English-to-French翻译任务上进行了实验,使用的数据集分别为WMT 2014,模型在两个任务上分别达到了28.4 BLEU和41.8 BLEU的成绩,优于现有最佳结果。此外,还成功将Transformer应用于英语句子结构解析任务。

【代码】https://github.com/tensorflow/tensor2tensor

摘要

研究提出了一种全新的神经网络架构——Transformer,它完全依赖于注意力机制,摒弃了传统的循环和卷积方法。通过在两个机器翻译任务上的实验,发现Transformer模型不仅在翻译质量上优于现有模型,而且在训练过程中更加高效,能够实现更好的并行化,显著减少了训练时间。在WMT 2014英德翻译任务中,Transformer模型取得了28.4的BLEU分数,超越了之前所有模型的最佳成绩。在英法翻译任务中,该模型在仅使用八个GPU训练3.5天后,就创造了41.8的BLEU分数新纪录,这一成绩远低于文献中其他最佳模型的训练成本。此外,还证明了Transformer模型在其他任务上也具有良好的泛化能力,例如在英语成分句法分析任务中,无论是在大量还是有限训练数据的情况下,都能取得成功。 

1 引言

本文介绍了一种名为Transformer的新型神经网络架构,它不使用传统的循环神经网络结构,而是完全依赖于注意力机制来处理序列数据。这种架构允许在训练过程中进行更多的并行计算,从而提高了计算效率。Transformer模型在机器翻译任务中表现出色,能够在相对较短的时间内达到高质量的翻译效果。这种模型的提出,为序列建模和转换问题提供了新的解决方案,可能会对自然语言处理领域的研究和应用产生重要影响。

2 背景

本节介绍了减少序列计算的目标,这是扩展神经GPU、ByteNet和ConvS2S等模型的基础。这些模型使用卷积神经网络并行计算所有输入和输出位置的隐藏表示。然而,这些模型在处理远距离依赖关系时存在困难,因为所需的操作数量随着位置间距离的增加而增加。Transformer通过自注意力机制解决了这个问题,将操作数量减少到恒定数量,并通过多头注意力机制提高了有效分辨率。

自注意力是一种关联单个序列中不同位置的注意力机制,已在多种任务中成功应用。端到端记忆网络基于循环注意力机制,而非序列对齐的递归,已在简单语言问答和语言建模任务上表现良好。

Transformer是第一个完全依赖自注意力来计算输入和输出表示的转换模型,不使用序列对齐的RNN或卷积。接下来的章节将详细描述Transformer的结构,并讨论自注意力相对于其他模型的优势。

3 模型架构

本节介绍了Transformer模型的架构,它采用了编码器-解码器结构,这是神经序列转换模型中常见的设计。编码器负责将输入序列的符号表示映射到连续的表示序列,而解码器则基于这些连续表示生成输出序列。Transformer模型的特点是使用了堆叠的自注意力机制和逐点全连接层,这些结构分别应用于编码器和解码器。自注意力机制允许模型在处理序列时考虑全局依赖关系,而逐点全连接层则用于进一步处理和转换这些表示。这种架构设计使得Transformer能够有效地处理序列数据,并在各种序列转换任务中表现出色。

3.1 编码器和解码器堆栈

编码器由6个相同的层组成,每层包含两个子层:多头自注意力机制和逐位置全连接前馈网络。每个子层都采用了残差连接和层归一化,以增强模型的学习能力和稳定性。解码器也有6个相同的层,除了编码器中的两个子层外,还额外增加了一个子层,用于处理编码器的输出。解码器的自注意力子层被修改以防止位置关注未来的位置,这是通过掩蔽和输出嵌入的偏移实现的,确保了解码器在生成每个位置的输出时只能依赖于之前的位置。这种设计使得Transformer能够有效地处理序列数据,同时保持对长距离依赖的敏感性。

3.2 注意力

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

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

3.2.1 缩放点积注意力

本节详细介绍了缩放点积注意力的工作原理。这种注意力机制通过计算查询与键的点积,然后除以键的维度的平方根来缩放,最后应用softmax函数来获取每个值的权重。

计算输出矩阵如下:Attention(Q, K, V) = softmax \left ( \frac{QK^T }{\sqrt{d_{k}}} \right )V(1)

这种缩放是为了防止在键的维度较大时,点积结果过大,导致softmax函数的梯度过小,影响模型的学习效率。

缩放点积注意力与加性注意力和普通的点积注意力相比,具有更快的计算速度和更高的空间效率,因为它可以利用优化的矩阵乘法代码实现。此外,通过缩放点积,Transformer模型能够更有效地处理高维数据,避免在softmax函数中出现梯度消失的问题。这种注意力机制是Transformer模型高性能的关键因素之一。

3.2.2 多头注意力

多头注意力机制通过将查询、键和值分别投影到不同的子空间,并在这些子空间上并行执行注意力函数,从而允许模型同时从多个表示子空间中获取信息。这种机制提高了模型对信息的捕捉能力,因为它可以从不同的视角学习数据的表示。

在Transformer模型中,通常使用8个并行的注意力层,每个层(或头)处理不同的信息。每个头的维度被设置为模型维度除以头数,这样可以保证多头注意力的总计算成本与单头注意力相当,同时增加了模型的表达能力。这种设计使得Transformer能够有效地处理复杂的序列转换任务,提高了模型的性能和灵活性。

MultiHead(Q,K,V)=Concat\left ( head_{1},...,head_{h} \right )W^{O}其中\text{head}_i = \text{Attention}(QW_i^Q, KW_i^K, VW_i^V) 这里的投影是参数矩阵 W_i^Q \in \mathbb{R}^{d_{\text{model}} \times d_k}

W_i^K \in \mathbb{R}^{d_{\text{model}} \times d_k}W_i^V \in \mathbb{R}^{d_{\text{model}} \times d_v}W^O \in \mathbb{R}^{hd_{v}\times d_{model}}。 在这项工作中,使用h = 8个并行注意力层或头。对于每个头,我们使用 d_k = d_v = d_{\text{model}} / h = 64。由于每个头的维度减少,总的计算成本与具有完整维度的单头注意力相似。

3.2.3 我们模型中注意力的应用

Transformer模型通过三种不同的方式应用多头注意力机制:

  1. 编码器-解码器注意力层:在这些层中,查询向量来自解码器的前一层,而键和值向量来自编码器的输出。这种机制使得解码器的每个位置都能够关注输入序列中的所有位置,与典型的序列到序列模型中的编码器-解码器注意力机制相似。

  2. 编码器中的自注意力层:在自注意力层中,键、值和查询向量都来自编码器中前一层的输出。这样,编码器的每个位置都能够关注前一层中的所有位置。

  3. 解码器中的自注意力层:解码器中的自注意力层允许每个位置关注解码器中直到并包括该位置的所有位置。为了保持自回归属性,需要防止解码器中的信息向左流动。这是通过在缩放点积注意力中掩蔽(将softmax输入中对应非法连接的值设置为负无穷大)来实现的。

这种灵活的注意力应用方式使得Transformer能够有效地处理序列数据,并在各种序列转换任务中表现出色。通过编码器-解码器注意力和自注意力的结合,模型能够捕捉输入和输出之间的复杂关系,同时保持解码过程的自回归特性。

3.3 逐位置前馈网络

Transformer模型中的每一层除了包含注意力子层外,还包含一个逐位置前馈网络。这个网络对序列中的每个位置分别应用相同的操作,包括两个线性变换和一个ReLU激活函数。

\text{FFN}(x) = \max(0, xW_1 + b_1)W_2 + b_2 \quad (2)

这种结构有时也被称为具有1x1卷积核的卷积操作。输入和输出的维度为 d_{\text{model}} = 512d,中间层的维度为 d_{ff} = 2048

这种设计使得模型能够在注意力机制的基础上,进一步对每个位置的表示进行非线性变换,增强了模型处理复杂特征的能力。输入和输出的维度保持一致,为512维,而中间层的维度则更大,为2048维,这为模型提供了更多的参数来学习数据的复杂表示。

逐位置前馈网络的引入,使得Transformer模型在处理序列数据时更加灵活和强大,有助于提升模型在各种自然语言处理任务中的表现。

3.4 嵌入和Softmax

Transformer模型使用嵌入层将输入和输出的令牌转换为固定维度的向量,这个维度与模型的其他部分保持一致。模型中,输入和输出嵌入层以及解码器的预softmax线性变换共享同一个权重矩阵,这样做可以减少模型的参数数量,并且使得模型在处理输入和输出时保持一致性。

在嵌入层中,权重被乘以 \sqrt{d_{\text{model}}}dmodel​​,这是一种常见的做法,用于调整嵌入层的缩放,以适应模型的维度。这种设计有助于模型更好地学习和处理词汇的表示,同时保持计算的稳定性。

表1提供了不同层类型在处理序列数据时的最大路径长度、每层复杂度和最小顺序操作数量的比较。这些参数对于理解和优化模型的计算效率至关重要,特别是在处理长序列或高维度表示时。通过这些设计,Transformer模型能够有效地处理各种序列转换任务,同时保持高效的计算性能。

3.5 位置编码 

Transformer模型通过位置编码来赋予模型对序列中元素位置的感知能力。由于模型中不使用递归和卷积,位置编码成为了让模型理解序列顺序的关键技术。位置编码通过将每个位置的正弦和余弦函数值添加到嵌入向量中实现,使得模型能够区分不同位置的嵌入。

使用不同频率的正弦和余弦函数:

PE(pos, 2i) = \sin\left(\frac{pos}{10000^{2i/d_{\text{model}}}}\right)

PE(pos, 2i+1) = \cos\left(\frac{pos}{10000^{2i/d_{\text{model}}}}\right) 其中 pos 是位置,i 是维度。也就是说,位置编码的每个维度对应一个正弦波。波长从 2π 到 10000⋅2π 形成一个几何级数。我们选择这个函数是因为我们假设它将允许模型容易地通过相对位置学习注意力,因为对于任何固定的偏移量 k,PE_{pos+k}可以表示为 PE_{pos} 的线性函数。

位置编码的设计允许模型通过相对位置轻松学习注意力,这对于处理序列数据至关重要。此外,使用正弦波函数的位置编码还可能使得模型能够处理比训练时遇到的更长的序列,增加了模型的泛化能力。这种设计是Transformer模型能够有效处理各种序列任务的一个重要因素。

4 为什么使用自注意力

本节讨论了自注意力层与循环和卷积层相比的优势。自注意力层在处理短序列时计算复杂度较低,并且能够并行处理所有位置,这使得它们在训练时更加高效。此外,自注意力层在网络中为长距离依赖提供了更短的路径,这有助于模型学习这些依赖关系。

自注意力层还可以通过限制考虑的邻域大小来适应非常长的序列,尽管这会增加最大路径长度。相比之下,卷积层需要多个层才能连接所有输入和输出位置,这增加了网络中最长路径的长度,并且计算成本更高。

自注意力层的另一个优点是它们可能产生更可解释的模型,因为注意力分布可以揭示模型在处理特定任务时关注的信息。这些特性使得自注意力成为Transformer模型中的关键组件,有助于提高模型的性能和解释性。

5 训练

本节描述了我们模型的训练方案。

5.1 训练数据和批处理

  1. 训练数据:使用了WMT 2014英德数据集和英法数据集,其中英德数据集包含约450万句对,英法数据集则包含3600万句子。

  2. 编码方式:句子使用字节对编码(BPE)和词片编码,以适应共享的源-目标词汇表。

  3. 批处理:根据大致的序列长度将句子对进行批处理,每个批次包含约25000个源令牌和25000个目标令牌。

5.2 硬件和计划

  1. 硬件配置:训练在一台配备8个NVIDIA P100 GPU的机器上进行。

  2. 训练计划:基础模型训练了100,000步,大约12小时;大型模型训练了300,000步,大约3.5天。

5.3 优化器 

使用了Adam优化器,具有特定的超参数设置,包括两个衰减率 \beta_1β1​ 和 \beta_2β2​,以及数值稳定性参数 \epsilonϵ。学习率根据一个特定的公式进行调整,该公式在训练初期线性增加学习率,并在之后按步数的逆平方根减少

5.4 正则化

  • 残差丢弃:在每个子层的输出上应用dropout,以及在编码器和解码器中对嵌入和位置编码的和应用dropout,以减少过拟合。
  • 标签平滑:使用标签平滑技术,使模型在训练时对标签的预测更加不确定,这有助于提高模型在实际应用中的泛化能力。

6 结果

6.1 机器翻译

在这部分,文档详细说明了Transformer模型在机器翻译任务上取得的显著成果:

  1. 英德翻译:大型Transformer模型在WMT 2014英德翻译任务上取得了28.4的BLEU分数,超越了之前所有模型,包括集成模型。

  2. 英法翻译:在WMT 2014英法翻译任务上,大型模型取得了41.0的BLEU分数,同样超越了所有之前发布的单一模型。

  3. 训练效率:基础模型和大型模型的训练成本远低于竞争模型,训练时间也更短。

  4. 模型平均:为了提高性能,模型在推理时采用了检查点平均技术,基础模型平均了最后5个检查点,而大型模型平均了最后20个检查点。

  5. 束搜索:在生成翻译时,使用了束搜索策略,束大小为4,长度惩罚为0.6。

  6. 成本估计:通过估算训练时间、使用的GPU数量和GPU的浮点运算能力,来估计训练模型的成本。

这些结果证明了Transformer模型在机器翻译领域的有效性和优越性,以及其在训练效率和成本效益方面的优势。

表2:Transformer在训练成本的一小部分情况下,在英德和英法的newstest2014测试中实现了比以往最先进的模型更好的BLEU分数。

6.2 模型变体

在这部分详细说明了对Transformer模型的不同变体进行的实验,以评估模型中各个组件的重要性:

  1. 注意力头数和维度:通过改变注意力头的数量和键值维度,但保持计算量不变,发现单头注意力的性能比最佳设置差,而头数过多也会导致性能下降。

  2. 注意力键大小:减少注意力键的大小 d_kdk​ 会降低模型质量,这表明点积可能不是最佳的兼容性函数,可能需要更复杂的函数。

  3. 模型大小和dropout:较大的模型通常表现更好,而dropout在防止过拟合方面非常有效。

  4. 位置编码:将正弦波位置编码替换为学习到的位置嵌入后,结果与基础模型几乎相同,表明两种位置编码方法在性能上是可比的。

表3 Transformer架构的变体。未列出的值与基础模型相同。所有指标均基于英德翻译开发集newstest2013。列出的困惑度是按词片计算的,根据我们的字节对编码,不应与按词困惑度进行比较。

6.3 英语成分句法分析

这部分描述了Transformer模型在英语成分句法分析任务上的应用和性能。尽管Transformer模型没有针对特定任务进行调整,但仍然取得了令人惊讶的好成绩,超过了除特定模型之外的所有先前模型。这表明Transformer模型具有很好的泛化能力,能够适应不同的自然语言处理任务。

  1. 数据集:使用了华尔街日报(WSJ)部分的宾夕法尼亚树库,以及高信心和BerkeleyParser语料库。
  2. 模型配置:4层Transformer模型,使用了不同的词汇表大小。
  3. 训练设置:包括仅使用WSJ训练集的设置和半监督设置。
  4. 超参数选择:在开发集上进行了少量实验,选择了dropout、学习率和束大小等超参数。
  5. 推理设置:在推理过程中,增加了最大输出长度,并使用了特定的束大小和长度惩罚。
  6. 性能:Transformer模型在该任务上的性能超过了大多数先前模型,证明了其强大的泛化能力。

表4 Transformer模型在英语成分句法分析上泛化得很好(结果基于WSJ的第23部分)

7 结论 

这部分总结了Transformer模型的主要贡献和未来的研究方向:

  1. 模型创新:Transformer是首个完全基于注意力机制的序列转换模型,它用多头自注意力取代了传统的循环层。

  2. 性能:在WMT 2014英德和英法翻译任务上,Transformer达到了新的最高水平,甚至超越了之前所有的集成模型。

  3. 训练效率:与基于循环或卷积层的架构相比,Transformer的训练速度显著更快。

  4. 未来工作:作者对基于注意力的模型的未来感到兴奋,并计划将这些模型应用于其他任务,如处理图像、音频和视频等非文本输入和输出模态的问题。同时,研究局部、受限的注意力机制,以及减少生成过程的序列化也是未来的研究方向。

  5. 代码开源:训练和评估模型的代码已经在GitHub上开源,方便其他研究者使用和参考。https://github.com/tensorflow/tensor2tensor

  6. 致谢:作者对Nal Kalchbrenner和Stephan Gouws提供的有益评论、更正和启发表示感谢。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/427437.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【计算机网络 - 基础问题】每日 3 题(十三)

✍个人博客:Pandaconda-CSDN博客 📣专栏地址:http://t.csdnimg.cn/fYaBd 📚专栏简介:在这个专栏中,我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞👍收藏&…

cadence SPB17.4 - allegro - 用板子外形创建整板铺铜

文章目录 cadence SPB17.4 - allegro - 用板子外形创建整板铺铜概述笔记先确定自己板子的 board Geometry/Design_Outline 是否有外形shape为了将软件提示看得更清楚,在每个操作之前,先将命令提示区内容先删了用Z-copy从外形层生成整板的铺铜备注END cad…

【JS】postMessage与MessageChannel

前言 postMessage 和 MessageChannel 都是用来实现跨文档、跨窗口或跨线程(Web Worker)的消息传递机制。 postMessage 可以在 iframe、同源或跨源窗口之间传递数据,也可以用于主线程与 Web Worker 之间的通信。 postMessage 是一种单向的…

数据结构-3.1.栈的基本概念

一.栈的定义: 栈和线性表的区别:栈只能在表尾一端进行插入或者删除的操作,而线性表可以在任意一个地方进行插入或者删除 二.有关栈的关键术语: 三.栈的基本操作: 1.回顾线性表的基本操作: 2.栈的基本操作&…

佰朔资本:国内海风加速招标 船舶行业景气上行

昨日,沪指盘中一度下探失守2700点,尾盘在地产、银行等板块的带动下发力上扬,深证成指亦翻红。到收盘,沪指涨0.49%报2717.28点,深证成指涨0.11%报7992.25点,创业板指跌0.11%报1533.47点,上证50指…

商业终端架构技术-未来之窗行业应用跨平台架构

未来之窗行业应用跨平台架构 以下是对未来之窗行业应用跨平台架构中客户端的稳定优势和网页跨平台性质的扩展列举: 一、客户端的稳定优势: 1. 离线可用性 - 即使在没有网络连接的…

如何将MySQL卸载干净(win11)

相信点进来的你肯定是遇到了这个问题,那就是在安装MySQL的时候操作错误,最后结果不是自己想要的。卸载重新安装又发现安装不了。其实最主要的原因就是没有将MySQL卸载干净,那么如何把MySQL卸载干净?下面本篇文章就来给大家一步步介…

Tiny-universe 1:Qwen整体介绍Qwen-blog

Qwen模型架构讲解直播:直播链接 Qwen的整体架构与Llama2类似,如下图所示: 其中: tokenizer将文本转为词表里面的数值。数值经过embedding得到一一对应的向量。attention_mask是用来看见左边、右边,双向等等来设定。各类下游任务&#xff0…

Kafka集群扩容(新增一台kafka节点)

kafka集群扩容、kafka topic迁移 现有环境 IP组件角色192.168.17.51kafka01broker1192.168.17.52kafka02broker2192.168.17.53kafka03broker3 扩容之后环境 IP组件角色192.168.17.51kafka01broker1192.168.17.52kafka02broker2192.168.17.53kafka03broker3192.168.17.54ka…

InternVL 微调实践闯关任务

基础任务 follow 教学文档和视频使用QLoRA进行微调模型,复现微调效果,并能成功讲出梗图. 尝试使用LoRA,或调整xtuner的config,如LoRA rank,学习率。看模型Loss会如何变化,并记录调整后效果(选做&#xff…

【论文串烧】多媒体推荐中的模态平衡学习 | 音视频语音识别中丢失导致的模态偏差对丢失视频帧鲁棒性的影响

文章目录 一、多媒体推荐中的模态平衡学习1.1 研究背景1.2 解决问题1.3 实施方案1.4 文章摘要1.5 文章重点1.6 文章图示图 1:不同模型变体在 AmazonClothing 数据集上的初步研究图 2:CKD模型架构的说明图 3:在 Amazon-Clothing 数据集上训练过…

【LabVIEW】事件结构的用法

本篇文章记录我学习LabVIEW的事件结构用法,希望我的分享对你有所帮助! 目录 一、案例说明 1、 LabVIEW实现“YAXBXC的计算” 2、添加事件结构 一、案例说明 在LabVIEW实现“YAXBXC的计算”的基础上,加上事件结构,实现单击一次按…

后端接收数组,集合类数据

文章目录 一. 请求行Path参数(不建议)二.数组接收(不建议)三.List集合接收(建议)四. GET请求既包含请求体又包含请求行 一. 请求行Path参数(不建议) DeleteMapping("/{ids}&quo…

分布式Redis(14)哈希槽

文章目录 一致性哈希算法理论普通哈希的问题一致性hash算法 Redis 使用哈希槽Redis Cluster集群 为什么Redis是使用哈希槽而不是一致性哈希呢?为什么Redis Cluster哈希槽数量是16384? 关键词:一致性 Hash,哈希槽, 带着…

iOS 巨魔神器,Geranium 天竺葵:6大功能,个个都解决痛点

嘿,这是黑猫。如果你装了巨魔,却只知道安装第三方APP,那就是暴殄天物。巨魔的价值不仅是应用侧载,还有强大的玩机工具生态——这也是我花费大量时间,去制作巨魔精选IPA合集的原因。 通过巨魔商店安装的APP&#xff0c…

SQL优化-MySQL Explain中出现Select tables optimized away

文章目录 前言相关解释总结 前言 今天在做SQL优化的时候,在使用explain执行SQL时,出现了以下情况: EXPLAIN SELECT m1.id from station m1 INNER JOIN site s ON m1.codes.stationcode where receivetime(SELECT MAX(m2.receivetime) FROM…

Python爱心射线(完整代码)

目录 系列目录 写在前面​ 完整代码 下载代码 代码分析 写在后面 系列目录 序号直达链接表白系列1Python制作一个无法拒绝的表白界面2Python满屏飘字表白代码3

springsecurity+jwt实现前后端分离认证授权

文章目录 1.简介2.快速入门3.认证3.1登录校验流程3.2原理初探3.3认证详流程详解3.4 分析UsernamePasswordAuthenticationFilter 4.案例实战4.1 思路分析4.2准备工作4.3实战1.数据库校验用户2.核心代码1.创建UserDetailsService实现类2.创建UserDetails实现类3.密码加密存储模式…

ClickHouse的安装配置+DBeaver远程连接

1、clickhouse的下载: 先去clickhouse官网进行下载,继续往下翻找文档,将DBeaver也下载下来 下载地址:https://packages.clickhouse.com/rpm/stable/ 下载这个四个rpm包 2、上传rmp文件到Linux中 自己创建的一个clickhouse-ins…

Linux文件IO(一)-open使用详解

在 Linux 系统中要操作一个文件,需要先打开该文件,得到文件描述符,然后再对文件进行相应的读写操作(或其他操作),最后在关闭该文件;open 函数用于打开文件,当然除了打开已经存在的文…