Transformer 论文重点

news2025/1/16 19:58:06

摘要

提出了一个 Transformer 模型,针对于一个机器翻译的小任务上表现结果比当时所有模型的效果都好,并且架构相比其它更加简单,后面就火到了发现什么方向都能用的地步。

介绍

循环神经网络,特别是长短时记忆[ 13 ]和门控循环[ 7 ]神经网络,已经成为诸如语言建模和机器翻译[ 35、2、5]等序列建模和转录问题中最先进的方法。

当时是 2017 年,因此 RNN 循环神经网络占据主流。

自那时以来,大量的努力一直在推动循环语言模型和编码器-解码器架构[ 38、24、15]的界限。

递归模型通常沿着输入和输出序列的符号位置进行因子计算。将位置与计算时间中的步骤对齐,它们生成一个隐藏状态序列ht,作为前一个隐藏状态ht - 1和位置t的输入的函数。这种固有的顺序特性排除了训练示例中的并行化,这在较长的序列长度时变得至关重要,因为内存约束限制了跨示例的批处理

这里主要讲了 RNN 的特点是什么,以及其缺点是什么。
在 RNN 里面给到一个序列,其计算方式是把这个序列从左到右一步一步的往前做,假设一个序列是一个句子的话,其计算就是一个词一个词的看,对于第 t 个词,它会计算一个输出叫 Ht,Ht 也被称为隐藏状态,然后它的 Ht 是由前面一个词的隐藏状态叫 Ht-1 和当前第 t 个词本身决定的,这样子它就可以把前面学习到的历史信息通过 Ht-1 放到当下,然后和当前的词做一些计算然后得到输出。这也是RNN如何能够有效处理时序信息的一个关键之所在。
但这也是 RNN 的问题所在,第一个问题是因为其是时序计算的方式,这难以并行,计算效率低下。
第二个问题则是因为历史信息是一步一步往后传递的,如果时序比较长的话,那么在很早期的那些时序信息在后面的时候可能会被丢弃,如果不想丢掉那么就得要让 Ht 比较大,那么内存开销就会很大。

最近的工作通过因式分解技巧[ 21 ]和条件计算[ 32 ]在计算效率方面取得了显著的改进,同时也提高了后者的模型性能。然而,顺序计算的基本约束依然存在。

注意力机制已经成为各种任务中引人注目的序列建模和转录模型的一个组成部分,允许建模依赖关系,而不考虑它们在输入或输出序列[ 2、19]中的距离。然而,在除少数情况外的所有情况下[ 27 ],这类注意力机制都与递归网络结合使用。

在这项工作中,我们提出了Transformer,一种不再使用循环神经网络的模型架构,而完全依靠注意力机制来绘制输入和输出之间的全局依赖关系。Transformer允许显著更多的并行化,并且在8个P100 GPU上经过短短12小时的训练后可以达到翻译质量的新境界。

背景

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

自注意力,有时称为帧内注意力,是一种将单个序列的不同位置联系起来的注意力机制,用于计算序列的表示。自注意力已成功应用于多种任务,包括阅读理解、抽象概括、文本蕴涵和学习任务无关的句子表征[ 4、27、28、22]。

端到端记忆网络基于循环注意力机制而非序列对齐的循环,在简单语言问答和语言建模任务中表现良好[ 34 ]。

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

网络架构(重点)

大多数竞争性神经序列转录模型都有一个编码器-解码器结构[ 5、2、35]。在这里,编码器将符号表示的输入序列( x1 , … , xn)映射到连续表示的序列z = ( z1 , … , zn)。

假设是一个句子的话,有 n 个词的话,那么 Xn 就表示第 n 个词,而编码器的作用就是将这个句子序列表示为一个长度也为 n 的但是其中的每一个元素都是对应的 Xn 的一个向量表示,即 Zn。Zn 就表示第 n 个词的一个向量的表示,这便是编码器的输出。

给定z,解码器然后生成一个输出序列( y1 , … , ym)的符号一次一个元素。在每一步,模型都是自回归的[ 10 ],在生成下一个符号时,消耗先前生成的符号作为额外的输入。

对于解码器来说,其会拿到编码器的输出,然后会生成一个长为 m (m可能等于n 也可能不等于 n,比如英文翻译成中文就很可能两个句子不一样长)的一个序列 Y,它跟编码器不一样的地方在于在解码器中,其词是一个一个生成的(对于编码器来说,其很有可能是一次性能看全整个句子,而在解码的时候只能一个一个生成),这个东西就叫做一个自回归,即 auto-regressive 的一个模型。
什么意思?
比如在最开始给定向量序列 Z,生成第一个输出是 Y1,在拿到 Y1 之后,就可以继续生成 Y2,因此如果要生成 Yt 的话,就应该要把之前所有的 Y1 到 Yt-1 全部拿到,也就是说在翻译的时候是一个词一个词的往外蹦,在过去时刻的输出也会作为当前时刻的输入,所以这个叫做自回归。

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

在这里插入图片描述

编码器和解码器堆栈

Encoder

编码器由N = 6个相同层的堆栈组成(也就是 6 个相同的Encoder模块)。每层有两个子层(即上面一个Encoder模块中的两个部分)。第一种是多头自注意力机制,第二种是简单的位置全连接前馈网络(说白了就是一个MLP,即几个全连接层的简单堆叠而已)。我们在两个子层的每一个周围使用一个残差连接[ 11 ],然后进行层规一化[ 1 ]。也就是说,每个子层的输出是LayerNorm( x +子层( x) ),其中子层( x )是子层本身实现的函数。为了便于这些残差连接,模型中的所有子层以及嵌入层都会产生维数dmodel = 512的输出

残差连接需要输入和输出是一样大小,如果不一样大小的话就得做投影,因此为了简单起见,本文就把每一个层它的输出的维度变成了 512 。
因此对于这个模型调参也是好调的,就是两个参数,一个是总共有多少层的编解码器,而另一个就是这个 dmodel ,也就是维度输出。

LayerNorm和BatchNorm的抉择问题

BatchNorm是什么:

在这里插入图片描述

mini-batch是什么:

在这里插入图片描述

LayerNorm是什么:

在这里插入图片描述
为什么在Transformer中使用layerNorm而不是batchNorm:

在这里插入图片描述

Decoder

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

因为在解码器的时候做的是一个自回归,也就是说当前的输出的输入集是上面一些时刻的输出,意味着是说在做预测的时候,模型当然不能看到之后的那些时刻的输出,但是在注意力机制里面,它每一次能看到整个完整的输入,所以这个地方要避免这个情况发生,也就是说在解码器训练的时候,在预测第 t 个时刻的输出的时候不应该看到 t 时刻以后的那些输入,而做法就是通过一个带掩码的注意力机制。

Attention

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

不同的注意力机制有不同的算法。
假设现在有三个value和三个对应的key:
在这里插入图片描述
假设现在给一个query,这个query跟第一个和第二个key比较近,那么输出就是这三个value的相加,但是query离得近的第一个key和第二个key这两个key的权重会大一下,而第三个key的权重因为隔得远所以就会小一些(下图黄色部分):
在这里插入图片描述
因为这个权重是等价于query和对应key的相似度的。
同样道理,假设又有一个query,但是他是跟最后那一个key比较像的话,那么这样子再去算输出value值的时候,就会发现其对后面分配的权重会更高一些(下图绿色部分):
在这里插入图片描述
此时就会得到一个新的输出,虽然key、value并没有变,但是随着 query 的改变,因为权重分配不一样,导致最后的输出会不一样,这就是注意力机制。

在这里插入图片描述

上图的缩放点积注意力机制图示中的 MaxMul 的意思是做矩阵乘法嗷。

Scaled Dot-Product Attention(缩放点积注意力)

因为不同的相似度函数导致不一样的注意力的版本,所以接下来这一章讲的就是 Transformer 自己用到的一个注意力计算函数。

我们称我们的注意力为"缩放点积注意力" (图2 )。输入由维度dk的查询和键以及维度dv的值组成。我们用所有键计算查询的点积,除以√dk,并应用一个softmax函数来获得值的权重。

意思是 query 和 key的长度是等长的,都等于 dk,然后value的值是 dv,那么输出同样也就是 dv。
具体计算是对于每一个query 和 key 做内积,然后将其作为相似度。
如果两个向量的long是一样的,那么内积值越大(也就是余弦值),那么就表示这两个向量的相似度越高。
如果内积为0了,那就等于是两个向量正交了,那就是没有相似度。
算出来之后再除以根号dk,也就是向量的长度,最后再用一个softmax来得到权重。
假设给一个 query,然后有 n 个key-value pair的话,那么就会算出 n 个值(query会跟每个key做内积)。算出来之后再放进softmax就会得到n个非负的而且加起来等于1的一个权重,然后这些权重作用在value上面就可以拿到最后的输出了。
在实践中肯定不能这么一个个算,因此下面给出了一种在实际中进行计算的方式。

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

在这里插入图片描述

两个最常用的注意力函数是加性注意力[ 2 ]和点积(乘性)注意力。点积注意与我们的算法相同,除了缩放因子1√dk。加性注意力使用具有单隐层的前馈网络计算相容性函数。虽然两者在理论复杂度上相似,但点积注意力在实际应用中速度更快,空间效率更高,因为它可以使用高度优化的矩阵乘法代码实现

而对于较小的dk值,两种机制的表现类似,对于较大的dk值,相加注意力优于不缩放的点积注意力[ 3 ]。我们猜想,对于dk的大值,点积的大小会变大,从而将softmax函数推到梯度极小的区域4。为了抵消这种影响,我们对点积进行1√dk的缩放

Multi-Head Attention

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

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

在这里插入图片描述

在这里插入图片描述

其中,投影为参数矩阵W Qi∈Rdmodel × dk,W Ki∈Rdmodel × dk,W Vi∈Rdmodel × dv和W O∈Rhdv × dmodel。

在这项工作中,我们采用h = 8个平行的注意层,或头。对于每一个,我们使用dk = dv = dmodel / h = 64。由于每个头的维度降低,总的计算成本与全维度的单头注意力相似。

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

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

1、在"编码器-解码器注意力"层中,查询来自前面的解码器层,而内存键和值来自编码器的输出。这使得解码器中的每个位置都可以参与输入序列中的所有位置。这模仿了序列到序列模型(如[ 38、2、9] )中典型的编码器-解码器注意力机制。

2、编码器包含自注意力层。在一个自注意力层中,所有的键、值和查询来自同一个地方(这就叫自注意力机制),在这种情况下,编码器中前一层的输出。编码器中的每个位置可以参与到编码器前一层的所有位置。

3、同样,解码器中的自注意力层允许解码器中的每个位置关注解码器中的所有位置,直到并包括该位置。我们需要在解码器中阻止向左的信息流动以保持自回归特性。我们通过屏蔽softmax输入中与非法连接相对应的所有(设置为-∞)值来实现缩放点积注意力的内部。见图2。

位置明智的前馈网络

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

在这里插入图片描述

虽然线性变换在不同位置上是相同的,但它们使用不同的参数。描述这一点的另一种方式是两个核大小为1的卷积。输入输出的维数dmodel = 512,内层的维数dff = 2048。

Embeddings and Softmax

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

在这里插入图片描述

位置编码

由于我们的模型不包含递归和卷积,为了使模型能够利用序列的顺序,我们必须在序列中注入一些关于令牌相对或绝对位置的信息。为此,我们在编码器和解码器堆栈底部的输入嵌入中加入"位置编码"。位置编码与嵌入具有相同的维数dmodel,因此可以将两者求和。位置编码有多种选择,有学习的,也有固定的[ 9 ]。

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

在这里插入图片描述

其中pos为位置,i为维度。也就是说,位置编码的每个维度对应一个正弦曲线。波长从2 π到10000 · 2 π形成几何级数。我们选择了这个函数,因为我们假设它可以让模型很容易地学习相对位置,因为对于任何固定的偏移k,P Epos + k可以表示为P Epos的线性函数。

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

结论

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

对于翻译任务,Transformer可以比基于循环或卷积层的架构更快地进行训练。在WMT 2014英语-德语和WMT 2014英语-法语翻译任务中,我们实现了新的技术状态。在前一个任务中,我们最好的模型甚至优于以前报告的所有集合。

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机SCI期刊,中科院3区,专业性强,审稿专业

一、期刊名称 Frontiers in Neurorobotics 二、期刊简介概况 期刊类型:SCI 学科领域:计算机科学 影响因子:3.1 中科院分区:3区 三、期刊征稿范围 神经机器人前沿在体现自主系统的科学和技术及其应用方面发表了严格的同行评审…

解决Mac无法上网/网络异常的方法,重置网络

解放方法 1、前往文件夹:/Library/Preferences/SystemConfiguration 2 、在弹窗中输入上边的地址 3 、把文件夹中除了下图未选中的文件全部删掉,删除时需要输入密码 4 、重启mac 电脑就搞定了。

Windows 宿主机访问 VirtualBox 虚拟机中创建的 docker 容器中的 mysql8.0 的数据

一、场景需求 在开发环境中,一般使用 windows 系统进行开发,但需要在 linux 系统中创建运行 mysql8.0 的 docker 容器中进行测试(win10特定版本或win11才能安装 docker),为了方便还需要在 windows 系统中通过 SQLyog …

操作系统笔记(1)进程相关

进程概念: 进程同步:多个相关进程在执行次序上进行协调,使并发执行的进程之间能按照一定的规则共享系统资源,并能很好的合作,从而使进程的执行具有可再现性。 进程之间可能存在互斥或者同步的关系。 互斥(间接相互制…

Android gradle kts 8.0以上版本配置签名和修改APK输出名字

目录 概述修改签名配置新建签名文件目录配置签名信息使用签名信息打包 修改APK名称 概述 之前写过一篇文章是通过Kotlin的Dsl结合gradle编写的插件来管理项目依赖,我是从一个开源项目叫DanDanPlayAndroid项目上学到的,那时还没有使用toml文件来管理项目…

模糊小波神经网络(MATLAB 2018)

模糊系统是一种基于知识或规则的控制系统,从属于智能控制,通过简化系统的复杂性,利用控制法来描述系统变量之间的关系,采用语言式的模糊变量来描述系统,不必对被控对象建立完整的数学模型。相比较传统控制策略&#xf…

【Git】分支管理 -- 详解

一、理解分支 分支就是科幻电影里面的平行宇宙,当你正在电脑前努力学习 C 的时候,另一个你正在另一个平行宇宙里努力学习 JAVA。 如果两个平行宇宙互不干扰,那对现在的你也没啥影响。不过,在某个时间点,两个平行宇宙…

Jenkins流水线pipeline--基于上一章的工作流程

1流水线部署 1.流水线文本名Jenkinsfile,将流水线放入gitlab远程仓库代码里面 2构建参数 2pipeline脚本 Jenkinsfile文件内容 pipeline {agent anyenvironment {key"value"}stages {stage("拉取git仓库代码") {steps {deleteDir()checkout scmGit(branc…

小熊家务帮day5-day7 客户管理模块1 (小程序认证,手机验证码认证,账号密码认证,修改密码,找回密码等)

客户管理模块 1.认证模块1.1 认证方式介绍1.1.1 小程序认证1.1.2 手机验证码登录1.1.3 账号密码认证 1.2 小程序认证1.2.1 小程序申请1.2.2 创建客户后端工程jzo2o-customer1.2.3 开发部署前端1.2.4 小程序认证流程1.2.4.1 customer小程序认证接口设计Controller层Service层调用…

运营商卷大模型,云厂商霸主地位不保?

文|艺 思 编|王一粟 经过了2023年的小试牛刀,2024年,三大运营商带着大模型一路狂飙。 刚刚过去的5月,中国电信、中国移动、中国联通三大运营商集体完成了新一轮的大模型进化,特别是围绕大模型的研发与…

2023年计算机图形学课程知识总结

去年就该写的,但是去年这个时候太忙了。 就写来自己看看。留个记录留个念 文章目录 1. 图形,图像的定义2. 点阵、矢量3. 走样,反走样4. 字符裁剪精度(1) 串精度(2) 字符精度(3&…

【ubuntu软件版本管理】利用update-alternatives管理ubuntu软件

​ 我们有的时候希望在安装了新软件之后保留旧版本的软件,比如希望保留旧版本的gcc,以防以前写的C编译出问题,这时候就需要版本管理软件update-alternatives。 ​ 在此之前我们需要先弄清楚,什么是ubuntu的软件?拿C源…

力扣 54.螺旋矩阵

题目描述: 给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。 示例 1: 输入:matrix [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2,3,6,9,8,7,4,5]示例 2: 输入&#…

【宠粉赠书】大模型时代的网络安全:安恒“网安三剑客”实战指南

不知不觉中,小智的粉丝已经突破一万。为了回馈粉丝们的厚爱,今天小智给大家送上一套网络安全界的三宝书——安恒"网安三剑客"。下面我会详细给大家介绍这套图书,文末留有领取方式。 随着人工智能(AI)和大模型…

基于协同过滤算法的东北特产销售系统的设计

基于协同过滤算法的东北特产销售系统的设计 管理员账户功能包括:系统首页,个人中心,管理员管理,基础数据管理,公告管理,新闻信息管理,商品管理 农户账户功能包括:系统首页&#xf…

【数据库】SQL--DQL(初阶)

文章目录 DCL1. 基本介绍2. 语法2.1 基础查询2.2 条件查询2.3 聚合函数2.4 聚合查询2.5 分组查询2.6 排序查询2.7 分页查询2.8 综合案例练习2.9 执行顺序 3. DQL总结 DCL 更多数据库MySQL系统内容就在以下专栏: 专栏链接:数据库MySQL 1. 基本介绍 DQL英…

WPF -> MVVM

1.1安装MVV MLight 打开 Visual Studio 2022。 在顶部菜单栏中选择“工具” -> “NuGet 包管理器” -> “程序包管理器控制台”。 在控制台中输入以下命令,并按回车键运行: Install-Package MvvmLightLibsStd104.等待安装完成后,你就…

汇编:调用Win32 API

在32位汇编程序中使用 Win32 API 是很常见的,特别是在开发 Windows 应用程序时调用的频率很高,Win32 API 提供了访问 Windows 操作系统功能的接口,包括窗口、消息处理、文件操作、网络通信等等。以下是使用 Win32 API 的一般步骤:…

Vue3项目练习详细步骤(第二部分:主页面搭建)

主页面搭建 页面主体结构 路由 子路由 主页面搭建 页面主体结构 在vuews目录下新建Layout.vue文件 主页面内容主体代码 <script setup> import {Management,Promotion,UserFilled,User,Crop,EditPen,SwitchButton,CaretBottom } from element-plus/icons-vue imp…

在线建站流程分析

建站流程是指通过互联网创建一个个人或企业网站的过程。随着互联网的发展&#xff0c;越来越多的人和机构开始意识到网络的重要性&#xff0c;建站成为一种常见的行为。在线建站的流程一般包括以下几个步骤。 首先&#xff0c;选择一个合适的建站平台。目前&#xff0c;有很多在…