开启AI大模型时代|「Transformer论文精读」

论文地址: https://arxiv.org/pdf/1706.03762v5.pdf

代码地址: https://github.com/tensorflow/tensor2tensor.git

图片

首发:微信公众号「魔方AI空间」,欢迎关注~

大家好,我是魔方君~~

        近年来,人工智能技术发展迅猛,智能化应用不断涌现,随着深度学习等算法的不断发展,AI的模型也在变得更加庞大和强大。这些“大模型”能够处理大规模、复杂的数据集,并通过自我学习来提高算法的准确性和鲁棒性。开启AI大模型时代,意味着AI技术将可以更好地适应各行各业的需求,推进数字化转型,推动技术和应用的深入融合,进一步释放人工智能的巨大潜力,带来更多的社会和经济效益。

        近期,魔方君会精读一些论文,好记性不如烂笔头,实实在在的写一边才会印象更深刻!!!

        接下来,就从《Transformer》开始吧!!!

摘要

        目前主流的序列转换模型都是基于复杂的RNN或CNN网络,包括编码器和解码器。最好的性能模型还通过一种注意力机制将编码器和解码器连接起来。本文提出了一种新的简单的网络架构——Transformer,它仅基于注意力机制,完全摒弃了循环和卷积。对两个机器翻译任务的实验表明,这些模型在质量上优于传统的模型,并且可以并行化处理,同时需要训练的时间显著减少。我们展示了Transformer在应用到英语成分句法分析(包括大规模和有限数据情况)时,能够成功地进行推广和应用。

结论

        「Trnsformer」开创了继 MLP 、CNN和 RNN之后的第四大类模型,是第一个完全基于注意力机制的序列转换模型,用多头自注意力机制替代了编码器-解码器结构中常用的循环层。

对于翻译任务来说,相比于基于循环或卷积层的结构,Transformer的训练速度可以显著提高。在WMT 2014英德和WMT 2014英法翻译任务中,取得了新的最好成绩。

我们对基于注意力机制的模型的未来感到兴奋,并计划将其应用于其他任务。我们计划将Transformer扩展到涉及文本以外的输入和输出方式的问题,并研究局部、受限制的注意力机制,以有效处理大量的输入和输出,如图像、音频和视频等。

导言

  • 介绍RNN及其存在的问题;

  • 介绍Attention在RNN上的应用,并应用在编码器和解码器里面,主要是用在怎么把编码器的东西很有效的传给解码器里;

  • 提出Transformer这样一个新的模型,其不再使用之前被大家使用的循环神经网络层。

相关工作

  • 如何使用卷积神经网络替换掉RNN,使得减少时序的计算;CNN对较长的时序难以建模;卷积可以做多个输出通道,因此提出多头注意力机制,可以模拟CNN多输出通道的一个效果;

  • 自注意力机制

  • memory networks

  • Transformer第一个完全依赖于自注意力机制计算其输入和输出表示的转换模型,而不使用序列对齐的RNN或卷积。

模型架构

图片

图 1

        大多数神经序列转换模型都具有编码器-解码器结构。编码器将符号表示的输入序列(x1,...,xn)映射到连续表示的序列z = (z1,...,zn)。给定z,解码器逐步生成一个符号输出序列(y1,...,ym)。在每个步骤中,模型是自回归的,在生成下一个符号时,使用先前生成的符号作为附加输入。

        Transformer遵循这个总体结构,使用堆叠的自注意力机制和逐点连接的全连接层作为编码器和解码器,分别显示在上图的左半部分和右半部分。

Encoder and Decoder Stacks

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

        解释下LayerNorm:类似于batchNorm,layerNorm是对每个样本做Norm,而不是对每个特征做了,把每一行(样本)变成均值为0,方差为1。简单理解就是把数据整体转置一下,放入到batchNorm中,然后再转置回来。

        Decoder:解码器也由N = 6个相同的层组成。除了每个编码器层中的两个子层外,解码器还插入第三个子层,对编码器堆栈的输出执行多头注意力机制。与编码器类似,我们在每个子层周围使用残差连接,随后进行层归一化。还修改了解码器堆栈中的自注意力子层,以防止位置参考后续位置。这种Masked机制,加上输出嵌入向量向前偏移一个位置,保证在位置i处的预测仅依赖于位置小于i的已知输出。

Attention

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

图片

图 2

Scaled Dot-Product Attention

        如图2,输入由维度为dk的query和key以及维度为dv的value组成。我们计算query与所有key的点积,将每个点积除以√dk,并应用softmax函数以获取value的权重。

        在实践中,同时在一组query上计算注意力函数,将query打包成矩阵Q。key和value也被打包成矩阵K和V。我们计算输出矩阵为:

图片

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

        虽然在dk的值较小时两种机制表现类似,但对于较大的dk值,加性注意力优于未缩放的点积注意力。我们怀疑对于较大的dk值,点积会变得非常大,将softmax函数推入其梯度极小的区域。为了抵消这种影响,我们通过1/√dk缩放点积。

Multi-Head Attention

        与使用dmodel维度的key、value和query执行单个注意力函数相比,我们发现将query、key和value进行h次不同的、可学习的线性投影到dk,dk和dv维度上会更有益。在这些query、key和value的投影版本中,我们以并行方式执行注意力函数,产生dv维度的输出值。然后将这些输出值进行连接,并再次进行投影,得到最终的值,如图2所示。

        多头注意力允许模型同时关注不同位置的不同表示子空间中的信息。使用单个注意力头,平均会抑制这种效果。

图片

        在这项工作中,我们使用h = 8个并行的注意力层或头。对于每个头,我们使用dk = dv = dmodel / h = 64。由于每个头的维度减小,总计算成本与具有完整维度的单头注意力相似。

注意力在模型中的应用

自注意力机制其实是指key、value、query是一个东西,是自己本身。

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

  • “编码器-解码器注意力”层中,query来自先前的解码器层,而存储的key和value来自编码器的输出。这使得解码器中的每个位置都可以关注输入序列中的所有位置。这模仿了序列到序列模型中的典型编码器-解码器注意力机制。

  • 编码器包含自注意力层。在自注意力层中,所有的key、value和quey都来自同一个地方,在这种情况下,来自编码器中前一层的输出。编码器中的每个位置都可以关注编码器前一层中的所有位置。

  • 同样,在解码器中,自注意力层允许解码器中的每个位置关注到该位置及其之前的所有位置。我们需要阻止解码器中的左向信息流,以保留自回归属性。我们通过在缩放点积注意力内部进行实现,通过将与非法连接相对应的所有值在softmax的输入中masked(设置为-∞)来实现。请参见图2。

Position-wise Feed-Forward Networks

        除了注意力子层外,编码器和解码器中的每一层还包含一个全连接的前馈网络,该网络分别应用于每个位置,并且是相同的。它由两个线性变换组成,其中间有一个ReLU激活函数。

图片

        尽管线性变换在不同位置上是相同的,但它们在不同的层之间使用不同的参数。另一种描述这个过程的方式是使用大小为1的内核进行两次卷积。输入和输出的维度为dmodel= 512,内部层的维度为dff = 2048。

Embeddings and Softmax

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

Positional Encoding

        由于模型不包含循环和卷积,为了使模型利用序列顺序,我们必须注入一些信息,描述令牌在序列中的相对或绝对位置。为此,我们在编码器和解码器堆栈的底部添加“位置编码”到输入嵌入中。位置编码与嵌入具有相同的dmodel维度,以便它们可以相加。有许多选择位置编码,包括学习性和固定性。

图片

评价

        「Transformer」开创了继 MLP 、CNN和 RNN之后的第四大类模型,是一篇非常有价值和有影响力的论文,它提出了一种新的模型结构——Transformer模型,基于注意力机制来完成序列学习任务。具体来说,它将自注意力机制应用于序列到序列学习中,在机器翻译等任务中取得了非常好的效果,并且成为了当前神经机器翻译领域的标配模型。

        从原理先进性上来看,Transformer提出了一个新的并且相对简单的模型结构,在处理长序列任务上优势十分明显,特别是相比于LSTM等传统的循环神经网络,Transformer能够更好地捕捉序列中的长程依赖关系,同时也降低了模型计算的时间复杂度,提高了模型的训练和预测效率。

        从应用的广泛性和前沿性上来看,Transformer不仅在机器翻译任务中有着非常好的效果,还被广泛应用于语音识别、文本生成、自然语言理解等多种NLP任务中。同时它也被成功应用到了计算机视觉任务中,如图像描述等任务。

        从性能上来看,Transformer在机器翻译任务中表现优异,其效果甚至超越了RNN和CNN等基于循环和卷积结构的模型。同时其效率和泛化能力也很高,可以处理长句子,更好地理解上下文,生成更加连贯、自然的翻译结果。

        总之Transformer是一篇非常有价值的论文,从原理上创新,应用广泛且前沿,表现优异,在自然语言处理、计算机视觉等任务中取得了良好的效果,对于推动人工智能的发展和应用具有重要的意义。

练一练

(1)Transformer为何使用多头注意力机制?(为什么不使用一个头)

(2)Transformer为什么Q和K使用不同的权重矩阵生成,为何不能使用同一个值进行自身的点乘?(注意和第一个问题的区别)

(3)Transformer计算attention的时候为何选择点乘而不是加法?两者计算复杂度和效果上有什么区别?

(4)为什么在进行softmax之前需要对attention进行scaled?(为什么除以dk的平方根),并使用公式推导进行讲解

(5)在计算attention score的时候如何对padding做mask操作?

(6)为什么在进行多头注意力的时候需要对每个head进行降维?

(7)大概讲一下Transformer的Encoder模块?

(8)为何在获取输入词向量之后需要对矩阵乘以embedding size的开方?意义是什么?

(9)简单介绍一下Transformer的位置编码?有什么意义和优缺点?

(10)你还了解哪些关于位置编码的技术,各自的优缺点是什么?

(11)简单讲一下Transformer中的残差结构以及意义?

(12)为什么transformer块使用LayerNorm而不是BatchNorm?LayerNorm 在Transformer的位置是哪里?

(13)简答讲一下BatchNorm技术,以及它的优缺点?

(14)简单描述一下Transformer中的前馈神经网络?使用了什么激活函数?相关优缺点?

(15)Encoder端和Decoder端是如何进行交互的?(在这里可以问一下关于seq2seq的attention知识)

(16)Decoder阶段的多头自注意力和encoder的多头自注意力有什么区别?(为什么需要decoder自注意力需要进行 sequence mask)

(17)Transformer的并行化提现在哪个地方?Decoder端可以做并行化吗?

(18)Transformer训练的时候学习率是如何设定的?Dropout是如何设定的,位置在哪里?Dropout 在测试的需要有什么需要注意的吗?

(19)解码端的残差结构有没有把后续未被看见的mask信息添加进来,造成信息的泄露?

以上是关于Transformer的一些常见问题,快来测一测是否掌握了Transformer的原理吧,欢迎评论区回答!!!

图片

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

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

相关文章

你的librosa和scikit-learn打架了吗?

被这个问题困扰好久!!!!!!!!!!!!!! 我的原来版本librosa0.7.1 和 scikit-learn1.3.1 一直拆了按,按…

【UE5 Cesium】15-Cesium for Unreal 加载本地影像和地形

目录 一、加载全球无高度地形 二、加载区域DEM 三、加载离线地图影像 一、加载全球无高度地形 1. 先去如下网址下载全球无高度地形:Using a global terrain layer without height detail - #9 by RidhwanAziz - Cesium for Unreal - Cesium Community 下载后如下…

好物周刊#12:计算机考研资料

https://cunyu1943.github.io https://yuque.com/cunyu1943 村雨遥的好物周刊,记录每周看到的有价值的信息,主要针对计算机领域,每周五发布。 一、项目 1. JEECG BOOT 低代码开发平台 一款基于代码生成器的低代码开发平台!前后…

scala数组函数合集

目录 1. 添加类函数 2.生成类函数 3.删除类函数 4.查找类函数 5.统计类函数 6.修改类函数 7.判断类函数 8.获取集合元素 9.集合操作类函数 10.转换类函数 11.工具类函数 12.集合内与集合间计算函数 在 scala 中Array数组是一种可变的、可索引的数据集合 创建数组…

想升级macOS Big Sur,但是MacBook内存空间不够该怎么办?

随着使用时间的增长,我们会发现Mac电脑的存储空间越来越少,这时候我们就需要对Mac电脑进行清理,以释放更多的存储空间。那么,Mac空间不足怎么解决呢? 1.清理垃圾文件 Mac空间不足怎么解决?首先要做的就是清…

Linux: 基础IO

学习目标 1.C接口与系统调用接口的差别 2.文件描述符, 重定向, 一切皆文件, 缓冲区 3.fd与FILE, 系统调用和库函数的关系 4.系统中的inode 5.软硬链接 6.动静态库 预备知识 1.文件 内容 属性 2.文件的所有操作: a. 对内容的操作 b.对属性的操作 3.文件在磁盘(硬件)上, 我…

前端—— 分层模型和应用协议

1 分层模型 MAC地址 可以认为计算机专属,可以认为每台计算机的 MAC地址 固定不变; IP地址 可以认为是计算机当前的【家庭地址】,动态唯一,家庭地址变化,IP地址 也跟着变化; 举个例子,A 给 B 发…

MyBatisPlus(十五)分页查询

说明 MyBatisPlus 提供了分页查询的功能。 MyBatisPlus 的分页功能,是通过分页插件实现的。要使用分页功能,需要配置分页插件的拦截器。 MyBatisPlus 的分页功能,可以通过内置的API接口实现;也可以通过自定义的 mapper#method …

consulmanage使用

一、监控自建主机 需要在所有被监控的主机上部署node_exporter收集主机的监控数据 在此页面下载node_exporter安装包 Download | Prometheus 下载后解压安装包,并启动node_exporter服务 mkdir /opt/node_exporter && cd /opt/node_exporter tar -zxvf node_…

【计算机视觉|人脸建模】学习从4D扫描中获取的面部形状和表情的模型

本系列博文为深度学习/计算机视觉论文笔记,转载请注明出处 标题:Learning a model of facial shape and expression from 4D scans 链接:Learning a model of facial shape and expression from 4D scans | ACM Transactions on Graphics Pe…

stm32的GPIO寄存器操作以及GPIO外部中断,串口中断

一、学习参考资料 (1)正点原子的寄存器源码。 (2)STM32F103最小系统板开发指南-寄存器版本_V1.1(正点) (3)STM32F103最小系统板开发指南-库函数版本_V1.1(正点&a…

【数据结构】论如何拿捏快速排序?(含非递归)

目录 一,快速排序(递归) 1,快排思想 2,霍尔排序 3,挖坑法 4,前后指针法 5,快速排序优化 1,三数取中法选key 2,小区间优化 二,快速排序&a…

Decorator

Decorator 动机 在某些情况下我们可能会“过度地使用继承来扩展对象的功能”, 由于继承为类型引入的静态特质,使得这种扩展方式缺乏灵活性; 并且随着子类的增多(扩展功能的增多),各种子类的组合&#xff…

typescript: Builder Pattern

/*** file: CarBuilderts.ts* TypeScript 实体类 Model* Builder Pattern* 生成器是一种创建型设计模式, 使你能够分步骤创建复杂对象。* https://stackoverflow.com/questions/12827266/get-and-set-in-typescript* https://github.com/Microsoft/TypeScript/wiki/…

用这些IDEA插件,让你早下班两小时

GenerateAllSetter:一键调用一个对象的所有setter方法 RestfulTool:自动显示所有URL接口,快速检索接口 SequenceDiagram:以图形界面形式显示方法调用链,方便阅读源码、梳理代码 CamelCase:变量下划线转驼峰命名 Rainbow Brackets:帮助程序员识别代码中括…

SpringCloud Alibaba - Sentinel 限流规则(案例 + JMeter 测试分析)

目录 一、Sentinel 限流规则 1.1、簇点链路 1.2、流控模式 1.2.1、直接流控模式 1.2.2、关联流控模式 a)在 OrderController 中新建两个端点. b)在 Sentinel 控制台中对订单查询端点进行流控 c)使用 JMeter 进行测试 d)分…

Aurora中的策略模式和模板模式

Aurora中的策略模式和模板模式 在aurora中为了方便以后的扩展使用了策略模式和模板模式实现图片上传和搜索功能,能够在配置类中设置使用Oss或者minio上传图片,es或者mysql文章搜索。后续有新的上传方式或者搜索方式只需要编写对应的实现类即可&#xff…

【C++设计模式之迭代器模式】分析及示例

简介 迭代器模式是一种行为型设计模式,它提供了一种顺序访问聚合对象元素的方法,而又不需要暴露聚合对象的内部结构。迭代器模式通过将遍历算法封装在迭代器对象中,可以使得遍历过程更简洁、灵活,并且符合开闭原则。 描述 迭代…

延时队列java

Redis过期键通知(使用redis来实现延迟通知) Slf4j public class KeyExpiredListener extends KeyExpirationEventMessageListener {public KeyExpiredListener(RedisMessageListenerContainer listenerContainer) {super(listenerContainer);}Overridep…

arm 点灯实验代码以及现象

.text .global _start _start: 1.设置GPIOE寄存器的时钟使能 RCC_MP_AHB4ENSETR[4]->1 0x50000a28 LDR R0,0x50000A28 LDR R1,[R0] ORR R1,R1,#(0x1<<4) 第4位置1 STR R1,[R0] 1.设置GPIOF寄存器的时钟使能 RCC_MP_AHB4ENSETR[4]->1 0x50000a28 LDR R…