当前位置: 首页 > news >正文

论文阅读-《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提供的有益评论、更正和启发表示感谢。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • android13隐藏桌面底部白线
  • 54.【C语言】 字符函数和字符串函数(strncpy,strncat,strncmp函数)
  • 大厂程序员的健身之路
  • Mybatis-plus进阶篇(五)
  • 探索Docker:轻松进入容器并运行命令的实用指南
  • MYSQL表操作
  • powerbi-L8-导入数据时候的动态列
  • Vue3:实现div拖拽
  • 算法打卡:第十一章 图论part02
  • Flask + Swagger 完整指南:从安装到配置和注释
  • 品牌力是什么?如何评估企业品牌影响力?
  • Java、JS与Go的扩展操作符,揭秘它们的‘魔法’!
  • Python编码系列—Python代理模式:为对象赋予超能力的魔法
  • sqlgun靶场训练
  • Scrapy爬虫框架 Items 数据项
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • FastReport在线报表设计器工作原理
  • Fundebug计费标准解释:事件数是如何定义的?
  • jdbc就是这么简单
  • Js基础知识(四) - js运行原理与机制
  • Lucene解析 - 基本概念
  • miaov-React 最佳入门
  • ng6--错误信息小结(持续更新)
  • php ci框架整合银盛支付
  • Puppeteer:浏览器控制器
  • React组件设计模式(一)
  • 对象引论
  • 高性能JavaScript阅读简记(三)
  • 机器学习中为什么要做归一化normalization
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 排序算法学习笔记
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 双管齐下,VMware的容器新战略
  • 通过几道题目学习二叉搜索树
  • zabbix3.2监控linux磁盘IO
  • ​比特币大跌的 2 个原因
  • #stm32整理(一)flash读写
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • $.ajax()
  • (poj1.3.2)1791(构造法模拟)
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (二)【Jmeter】专栏实战项目靶场drupal部署
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (贪心 + 双指针) LeetCode 455. 分发饼干
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world
  • (一)u-boot-nand.bin的下载
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • (转)mysql使用Navicat 导出和导入数据库
  • (转)一些感悟
  • (自用)仿写程序
  • .Family_物联网
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...