Transformer——《Attention is all you need》

2023-11-14

本文是Google 机器翻译团队在2017 年发表,提出了一个新的简单的网络模型——Transformer。该模型基于纯注意力机制(Attention mechanisms),完全抛弃了RNN和CNN网络结构,在机器翻译任务上取得了很好的效果。

目录

1 引言

2 背景

3 模型架构

3.1编码器和解码器的堆栈

编码器:

解码器:

3.2 注意力

3.2.1 Scaled Dot-Product Attention

3.2.2 Multi-Head Attention

3.2.3 Applications of Attention in our Model

3.3 Position-wise Feed-Forward Networks

3.4 Embeddings and Softmax

3.5 Positional Encoding

4 Why Self-Attention

1 引言

RNN是一个序列模型,为了保持ht-1到ht的时序信息,难以实现并行计算,当ht不那么大的时候早期的信息容易丢失。

Attention可以对序列模型中的依赖关系进行建模,通常情况下与RNN一起使用。

本文,提出了可以避免递归的Transformer模型,它完全依赖于一个注意机制来表达输入和输出之间的全局依赖关系。Transformer允许更多的并行化,在8个 P100 GPUs上经过短短12个小时的训练后,可以使翻译质量更上台阶。

2 背景

CNN可以并行计算,但为了表示2个输入或输出之间的联系,就需要通过叠加卷积层,层数也是随着2个之间的距离呈线性增加。

Self-attention是一种表示单个序列不同位置关系的注意力机制,可以用来计算序列表示。

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

Transformer是第一个完全依赖于Self-attention来计算其输入和输出的表示的转导模型,而不使用序列对齐的RNN或CNN。

3 模型架构

大多数神经序列模型都具有编码器-解码器结构。在这里,编码器将一个符号表示的输入序列(x1,...,xn)映射到一个连续表示的序列z=(z1,...,zn)。给定z,解码器一次生成一个元素符号的输出序列(y1,...,ym),每个时刻输出一个结果。在每一步,模型是自回归,在生成下一个时使用之前生成的符号作为额外的输入。Transformer遵循这种整体架构,对编码器和解码器使用堆叠的自注意层和点积的完全连接层,如图1,左边为编码器,右边为解码器。

3.1编码器和解码器的堆栈

编码器:

Encoder有N=6层,每层包括两个sub-layers:

        第一个sub-layer是multi-head self-attention mechanism,用来计算输入的self-attention

        第二个sub-layer是简单的全连接网络

在每个sub-layer都模拟了残差网络,每个sub-layer的输出都是

        LayerNorm(x + Sublayer(x))

其中Sublayer(x) 表示Sub-layer对输入x做的映射,为了确保连接,所有的sub-layers和embedding layer输出的维数都相同dmodel = 512

解码器:

Decoder也是N=6层,每层包括3个sub-layers:

        第一个是Masked multi-head self-attention,也是计算输入的self-attention,但是因为是生成过程,因此在时刻t 的时候,大于t的时刻都没有结果,只有小于 t的时刻有结果,因此需要做Mask

        第二个sub-layer是对encoder的输入进行attention计算

        第三个sub-layer是全连接网络,与Encoder相同

3.2 注意力

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

3.2.1 Scaled Dot-Product Attention

简单来说就是归一化的点乘Attention,公式如上图,假设输入的query Q 、key维度为dk,value维度为 dv, 那么就计算query和每个key的点乘操作,并除以根号 dk,然后应用Softmax函数计算权重。

维度分别为:

,输出

注意:这里Q的长度可以是n

那么Scaled Dot-Product Attention的示意图如下所示,Mask是可选的(opt.),如果是能够获取到所有时刻的输入(K, V), 那么就不使用Mask;如果是不能获取到,那么就需要使用Mask。使用了Mask的Transformer模型也被称为Transformer Decoder,不使用Mask的Transformer模型也被称为Transformer Encoder。

3.2.2 Multi-Head Attention

如果只对Q、K、V做一次这样的权重操作是不够的,学习的东西太少,这里提出了Multi-Head Attention,如上右图:

  •         首先对Q、K、V做一次线性映射,将输入维度均为dmodel的Q、K、V矩阵映射到
  •         然后在采用Scaled Dot-Product Attention计算出结果
  •         多次进行上述两步操作,然后将得到的结果进行合并——h
  •         将合并的结果进行线性变换

其中投影是参数矩阵,WiQ∈Rdmodel×dk,WiK∈Rdmodel×dk,WiV∈Rddodel×dv和WO∈Rhdv×dmodel。

本文使用了h=8平行的注意层或头。对于每一个头,我们都使用dk=dv=dmodel/h=64(dmodel=512)。由于每个头部的维数降低,其总计算成本与全维数的单头注意相似。

3.2.3 Applications of Attention in our Model

三种不同的多头注意力机制的应用:注意对照图片结构

  • Encoder-Decoder之间的Attention,其中Q 来自于之前的Decoder层输出, K、V 来自于Encoder的输出,这样Encoder的每个位置都能够获取到输入序列的所有位置信息。
  • Encoder模块的Self-Attention,在Encoder中,每层的Self-Attention的输入Q=K=V, 都是上一层的输出。Encoder中的每个position都能够获取到前一层的所有位置的输出。
  • Decoder模块的Mask Self-Attention,在Decoder中,每个position只能获取到之前position的信息,因此需要做mask,将其设置为-∞。

3.3 Position-wise Feed-Forward Networks

在进行了Attention操作之后,encoder和decoder中的每一层都包含了一个全连接前向网络,对每个position的向量分别进行相同的操作,包括两个线性变换和一个ReLU激活输出。

也可以看着卷积核大小为1的2次卷积,通道数分别为2048,512,维度变化512-2048-512。

3.4 Embeddings and Softmax

没什么特别,与RNN中处理类似。

3.5 Positional Encoding

因为没有使用RNN和CNN,因此是无法捕捉到序列信息或空间信息,比如扰乱词的顺序,结果一样。所以单独对位置信息进行编码,

维度与词向量相同,然后将原本的input embedding和position embedding加起来组成最终的embedding作为encoder/decoder的输入。

4 Why Self-Attention

与RNN和CNN做了比较。

后面就是实验等内容了,就不继续了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Transformer——《Attention is all you need》 的相关文章

随机推荐

  • .NET Core API框架实战(五) 依赖注入 服务的注册与提供

    ASP NET Core 的底层设计支持和使用依赖注入 ASP NET Core 应用程序可以利用内置的框架服务将它们注入到启动类Startup的方法中 并且应用程序服务ConfigureServices能够配置注入 依赖注入 Depend
  • 【Unity入门计划】利用Cinemachine实现简单的相机跟随&设置相机边界

    目录 使用情景 1 从Packages载入Cinemachine 2 创建2D Camera的Cinemachine 3 设置摄像机跟随玩家角色 4 设置主摄像机边界 5 加上相机跟随和边界的效果 使用情景 Cinemachine是Unit
  • 【20230103】FROM_UNIXTIME和UNIX_TIMESTAMP函数

    首先知道UNIX TIMESTAMP函数的由来 是自 1970 01 01 的道当前时间的秒数差 累似1337276321 一般10位 1 FROM UNIXTIME 函数 FROM UNIXTIME unix timestamp form
  • python 2、python读取.htm文件报错:UnicodeDecodeError: 'utf8' codec can't decode byte 0xb3 in position 0的解决方法

    问题是这样的 我用python写的程序去读取 htm文件中的数据 刚开始我用 fr open 0 htm r 时 程序运行后直接崩溃 后来根据提示的错误信息 ValueError encoding must be one of utf 8
  • 不同文件格式与图像类型

    文件格式 通常有BMP 8 位 24 位 32 位 PNG JPG JPEG GIF PPM PNM 和 TIF 图像类型 单通道图像 每个像素由单个值表示 包括二值 单色 图像 每个像素由一个 0 1 位 和灰度图像 每个像素由 8 位表
  • Kotlin:Android世界的Swift

    转载自 http www infoq com cn news 2015 06 Android JVM JetBrains Kotlin Kotlin 是一门与 Swift 类似的静态类型 JVM 语言 由 JetBrains 设计开发并开源
  • 2019年7月3日星期三 恒指/美原油/美黄金 走势分析

    财经早餐 2019年7月3日重点关注的财经数据与事件 09 45 中国6月财新服务业PMI 15 50 法国6月服务业PMI终值 15 55 德国6月服务业PMI终值 16 00 欧元区6月服务业PMI终值 16 30 英国6月服务业PMI
  • malloc和free,brk和sbrk和mmap和munmap的使用和关系以及内存分配的原理

    目录 一 使用 1 1 malloc和free 2 brk和sbrk 2 1 sbrk 2 2 brk 3 mmap munmap 二 关系 三 内存分配原理 四 malloc底层 一 使用 1 1 malloc和free 参数 申请内存大
  • Android进阶——AIDL详解

    看这篇之前先看看binder Android Binder机制 1 简介 AIDL Android 接口定义语言 可以使用它定义客户端与服务端进程间通信 IPC 的编程接口 在 Android 中 进程之间无法共享内存 用户空间 不同进程之
  • 【第13篇】Bert论文翻译

    文章目录 摘要 1 简介 2 相关工作 2 1 无监督的基于特征的方法 2 2 无监督微调方法 2 3 从监督数据中迁移学习 3 Bert 3 1 预训练BERT 3 2 微调BERT 4 实验 4 1 GLUE 4 2 SQuAD v1
  • 应该选择使用哪个版本的 JDK?

    要构建和运行 Java 应用程序 就需要安装 JDK 环境 OpenJDK 是 Java SE 规范的开源软件 但它只是源代码 二进制发行版由不同的供应商提供 适用于许多受支持的平台 这些发行版在许可证 商业支持 支持的平台和更新频率方面有
  • All in AI,现在开始算不算太晚?

    编者按 目前大模型近乎可以帮助人类处理方方面面的事情 如对话 写文章 写代码等等 在大模型 狂飙 趋势下 想要从事AI领域的小伙伴可能会犹疑 现在进入AI领域会不会已经太晚了 本文作者结合自身转型经历和对AI市场的研判 阐述了进入人工智能领
  • 软件设计能力提升之设计匠艺

    简介 课程将高效率的软件项目质量管理 UML 重构设计与功能实现 单元测试几个课程合而为一 我们称之为设计匠艺 这几个课程当然可以分开来讲 但是如果把他们组织在一起 将会形成一个有效的开发闭环 事实上 在实际的开发过程中 它们本身就是一个整
  • 荣耀play4tpro能升级鸿蒙系统吗,荣耀Play4T Pro的Magic UI系统有哪些优化和升级

    一个好的体验度离不开一个好的系统支持 那咱们的这个荣耀Play4T Pro手机所采用的系统有哪些提升和改变呢 其实这个手机还是搭载了了大家比较熟悉的Magic UI系统 凭借华为方舟编译器先进的技术 系统的应用执行效率提升29 系统操作流畅
  • token 应该存在 Cookie、SessionStorage 还是 LocalStorage 中?

    在Web开发中 token 令牌 可以存储在多个地方 包括cookie sessionStorage和localStorage 每种存储方式都有其优点和缺点 选择哪种方式取决于你的应用需求 1 Cookie 将token存储在cookie中
  • WSL和VM的不兼容问题

    目前的问题是鱼与熊掌不可兼得 所以每次只能用一个 假如要用wsl2 则执行 dism exe online enable feature featurename VirtualMachinePlatform all norestart ws
  • SQL 常用优化实践

    对查询进行优化 要尽量避免全表扫描 首先应考虑在 where 及 order by 涉及的列上建立索引 应尽量避免在 where 子句中对字段进行 null 值判断 否则将导致引擎放弃使用索引而进行全表扫描 如 select id from
  • 神位纷争服务器维护,神位纷争steam版3月12日版本更新公告

    Steam上的神位纷争即将迎来重大版本更新 以下更新也将在之后的移动端版本中体现 本次更新将在3月12日下午推送至Steam版本的 神位纷争 另外需要补充一句的是 神位纷争HD已可免费游玩了 欢迎各位玩家前往体验 系统 1 对战系统相关改动
  • 软件版本号的意思是什么?从PC到安卓,带你了解版本号命名逻辑

    猫三科技杂烩 18 12 2114 49 很多朋友在安装软件的时候都会注意到软件下方一行意义不明的版本号 有的软件会用x x x逻辑命名版本号 有的软件则是x x x x 而windows系统的版本号例如1803就更让人摸不到头脑了 那么这
  • Transformer——《Attention is all you need》

    本文是Google 机器翻译团队在2017 年发表 提出了一个新的简单的网络模型 Transformer 该模型基于纯注意力机制 Attention mechanisms 完全抛弃了RNN和CNN网络结构 在机器翻译任务上取得了很好的效果