【论文阅读笔记】Attention Is All You Need

1.论文介绍

Attention Is All You Need
2017年 NIPS
transformer 开山之作 回顾一下经典,学不明白了
Paper Code

2. 摘要

显性序列转导模型基于包括编码器和解码器的复杂递归或卷积神经网络。性能最好的模型还通过注意力机制连接编码器和解码器。我们提出了一个新的简单的网络架构,Transformer,完全基于注意力机制,完全免除了递归和卷积。在两个机器翻译任务上的实验表明,这些模型在质量上是上级的,同时具有更好的并行性,并且需要更少的训练时间。我们的模型在WMT 2014英语到德语翻译任务中达到了28.4 BLEU,比现有的最佳结果(包括集成)提高了2 BLEU以上。在WMT 2014英语到法语的翻译任务中,我们的模型在8个GPU上训练了3.5天后,建立了一个新的单模型最先进的BLEU得分为41.0,这是文献中最佳模型训练成本的一小部分。

Keywords:transformer,纯注意力机制

3.Introduction

递归模型通常沿输入和输出序列的符号位置沿着因子计算。将位置与计算时间中的步骤对齐,它们生成隐藏状态ht的序列,作为前一个隐藏状态ht-1和位置t的输入的函数。这种固有的顺序性质排除了训练示例中的并行化,这在较长的序列长度下变得至关重要,因为内存约束限制了示例之间的并行化。最近的工作通过因式分解技巧和条件计算实现了计算效率的显着提高,同时还提高了后者的模型性能。然而,顺序计算的基本约束仍然存在。注意力机制已经成为各种任务中引人注目的序列建模和转导模型的组成部分,允许在不考虑它们在输入或输出序列中的距离的情况下对依赖关系进行建模。然而,除了少数情况外,在所有情况下,这种注意力机制都与循环网络结合使用。在这项工作中,我们提出了Transformer,一个模型架构避免复发,而是完全依赖于注意力机制,以绘制输入和输出之间的全局依赖关系。Transformer支持更高的并行化,在8个P100 GPU上训练12小时后,翻译质量就能达到最新水平。

减少顺序计算的目标也构成了扩展神经GPU,ByteNet 和ConvS 2S 的基础,所有这些都使用卷积神经网络作为基本构建块,并行计算所有输入和输出位置的隐藏表示。在这些模型中,将来自两个任意输入或输出位置的信号关联起来所需的操作数量随着位置之间的距离而增长,对于ConvS 2S是线性的,而对于ByteNet是线性的。这使得学习远距离位置之间的依赖关系变得更加困难。在Transformer中,这被减少到恒定数量的操作,尽管由于平均注意力加权位置而降低了有效分辨率。自我注意力(英语:Self-attention),有时也被称为内部注意力(intra-attention),是一种将单个序列的不同位置联系起来以计算该序列的表示的注意力机制。自我注意已成功用于各种任务,包括阅读理解,抽象概括,文本蕴涵和学习任务独立的句子表征。端到端记忆网络基于循环注意机制而不是序列对齐的循环,并且已被证明在简单语言问题回答和语言建模任务中表现良好。然而,据我们所知,Transformer是第一个完全依靠自我注意力来计算其输入和输出的表示而不使用序列对齐的RNN或卷积的转换模型。

传统的递归模型通常沿着输入和输出序列的符号位置进行计算,这意味着它们需要依次处理每个符号的位置,这在处理长序列时会导致效率低下。
最近的一些研究工作尝试通过不同的技术来改善计算效率,但是仍然受到顺序计算的基本限制。注意力机制是一种常见的用于处理序列数据的方法,它允许模型在不考虑符号在输入或输出序列中的距离的情况下对它们之间的依赖关系进行建模。然而,传统的注意力机制通常与循环神经网络(RNN)结合使用,而且仍然受到顺序计算的限制。
为了克服这些限制,作者提出了一种名为Transformer的新型模型架构,它完全依赖于自我注意力机制来处理序列数据,而不使用循环神经网络或卷积。这使得Transformer能够更有效地处理长序列,并且支持更高的并行计算,因此能够更快地训练模型并获得更好的性能。Transformer已经在机器翻译等任务中取得了很好的表现。

4. 网络结构详解

大多数竞争性神经序列转导模型具有编码器-解码器结构。这里,编码器将符号表示的输入序列(x1,,xn)转换为连续表示序列z =(z1,…,Zn)。给定z,解码器然后生成输出序列(y1,…,ym)中的每一个。在每一步,模型都是自回归的,在生成下一个符号时,模型会使用先前生成的符号作为额外的输入。Transformer遵循这种整体架构,编码器和解码器均使用堆叠的自注意和逐点全连接层,结构如下图所示。
在这里插入图片描述
编码器和解码器堆栈
编码器:编码器由N = 6个相同层的堆栈组成。每层有两个子层。第一个是多头自注意机制,第二个是一个简单的,位置明智的全连接前馈网络。两个子层的每一个周围使用残差连接,然后进行层归一化。也就是说,每个子层的输出是 L a y e r N o r m ( x + S u b l a y e r ( x ) ) LayerNorm(x + Sublayer(x)) LayerNorm(x+Sublayer(x)),其中Sublayer(x)是子层本身实现的函数。为了促进这些残差连接,模型中的所有子层以及嵌入层产生维度dmodel = 512的输出。

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

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

标度点积注意力:如下图所示,输入包含查询、键(维度dk)以及维度dv的值组成。计算查询与所有键的点积,将每个键除以 √ d k √dk dk,并应用softmax函数来获得值的权重。这些查询被打包到一个矩阵Q中。键和值也被打包到矩阵K和V中。我们计算输出矩阵为:
在这里插入图片描述
两种最常用的注意力函数是加法注意力和点积(乘法)注意力。点积注意力(计算相似度)与我们的算法相同,除了比例因子为 1 d k \frac{1}{\sqrt{d_k}} dk 1。加法注意力使用具有单个隐藏层的前馈网络计算兼容性函数。虽然两者在理论复杂度上相似,但点积注意力在实践中要快得多,空间效率更高,因为它可以使用高度优化的矩阵乘法代码来实现。虽然对于较小的dk值,这两种机制的表现相似,但在dk值较大的情况下,加法注意力优于点积注意力。我们怀疑,对于较大的dk值,点积的大小会变大,从而将softmax函数推到梯度非常小的区域。为了抵消这种影响,我们将点积缩放 1 d k \frac{1}{\sqrt{d_k}} dk 1
在这里插入图片描述
多头注意:我们发现,与使用 d m o d e l d_{model} dmodel维的键、值和查询来执行单个注意力函数。不同的是,使用不同的学习线性投影将查询、键和值分别线性投影h次到dk、dk和dv维是有益的。在这些查询、键和值的每个投影版本上,并行执行注意力函数,产生dv-dimensional输出值。这些数据被连接起来并再次投影,从而得到最终值,如下图所示。多头注意允许模型在不同的位置联合注意来自不同表示子空间的信息。对于一个单一的注意力头,平均化抑制了这一点。
在这里插入图片描述
其中投影是参数矩阵 W i Q ∈ R d m o d e l × d k W^Q_i ∈ R^{d_{model}×d_k} WiQRdmodel×dk W i K ∈ R d m o d e l × d k W^K_i ∈ R^{d_{model}×d_k} WiKRdmodel×dk W i V ∈ R d m o d e l × d v W^V_i ∈ R^{d_{model}×d_v} WiVRdmodel×dv W O ∈ R d v × d m o d e l W^O ∈ R^{dv ×dmodel} WORdv×dmodel。在这项工作中,采用h = 8平行注意层,或头。对于每一个,我们使用dk = dv = dmodel/h = 64。由于每个头的维数降低,总的计算成本是类似的单头注意与全维。
在这里插入图片描述
在“编码器-解码器注意”层中,查询Q来自先前的解码器层,并且存储器键K和值V来自编码器的输出。这使得解码器中的每个位置都可以覆盖输入序列中的所有位置。这模仿了序列到序列模型中典型的编码器-解码器注意力机制。编码器包含自注意层。在自关注层中,所有的键、值和查询都来自同一个地方,在这种情况下,是编码器中前一层的输出。编码器中的每个位置可以涉及编码器的前一层中的所有位置。类似地,解码器中的自关注层允许解码器中的每个位置关注解码器中的所有位置,直到并包括该位置。我们需要防止解码器中的冗余信息流,以保持自回归特性。我们通过屏蔽(设置为−∞)softmax输入中对应于非法连接的所有值来实现这一点。

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

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

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

位置编码
由于transformer不包含递归和卷积,为了让模型利用序列的顺序,必须注入一些关于序列中token的相对或绝对位置的信息。为此,在编码器和解码器堆栈的底部向输入嵌入添加“位置编码”。位置编码与嵌入具有相同的维度dmodel,因此两者可以相加。有许多位置编码的选择,学习和固定。在这项工作中,我们使用不同频率的正弦和余弦函数,
在这里插入图片描述
其中pos是位置,i是尺寸。即,位置编码的每个维度对应于正弦曲线。波长形成从2π到10000 · 2π的几何级数。之所以选择这个函数,是因为我们假设它可以让模型很容易地学会通过相对位置来参与,因为对于任何固定的偏移量k,PEpos+k都可以表示为PEpos的线性函数。我们还尝试使用学习的位置嵌入,发现两个版本产生了几乎相同的结果。我们选择正弦版本,因为它可以允许模型外推到比训练期间遇到的更长的序列长度。

为什么用自注意力
一个是每层的总计算复杂度。另一个是可以并行化的计算量,这是通过所需的最小顺序操作数来衡量的。第三个是网络中长距离依赖之间的路径长度。学习长程依赖性是许多序列转导任务中的关键挑战。影响学习这种依赖关系的能力的一个关键因素是前向和后向信号必须在网络中穿过的路径的长度。输入和输出序列中任意位置组合之间的路径越短,就越容易学习长程依赖性。

5.总结

它没有用递归和卷积,只用注意力机制。包含一个编码器一个解码器,每个都有N层,在最开始有位置编码实现序列结构信息。编码器的每层包含一个多头自注意力和一个前馈神经网络层。
解码器包含一个多头自注意力、一个前馈神经网络外加一层对输出进行多头自注意力。

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

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

相关文章

【Numpy】练习题100道(26-50题)

#学习笔记# 在学习神经网络的过程中发现对numpy的操作不是非常熟悉,遂找到了Numpy 100题。 Git-hub链接 1.题目列表 26. 下面的脚本输出什么?(★☆☆) print(sum(range(5),-1)) from numpy import * print(sum(range(5),-1)) 27. 考虑一个整数向量…

怎样提升小程序日活?签到抽奖可行吗?

一、 日活运营策略 小程序应该是即用即走的,每个小程序都在用户中有自己的独特定位,可能是生活日常必备(美食、团购、商城),也可能是工作办公必备(文档、打卡、工具)。 如果你想要让自己的小程…

云计算与APP开发,如何利用云端服务提升应用性能?

随着移动应用程序(APP)的普及,如何提升应用性能成为了开发者们关注的重点之一。而云计算技术的发展为APP开发者提供了全新的解决方案。本文将探讨云计算与APP开发的结合,以及我们公司提出的解决方案,帮助开发者利用云端…

KMP 算法介绍

1. KMP 算法介绍 KMP 算法:全称叫做 「Knuth Morris Pratt 算法」,是由它的三位发明者 Donald Knuth、James H. Morris、 Vaughan Pratt 的名字来命名的。KMP 算法是他们三人在 1977 年联合发表的。 KMP 算法思想:对于给定文本串 T 与模式串 …

使用 ZipArchiveInputStream 读取压缩包内文件总数

读取压缩包内文件总数 简介 ZipArchiveInputStream 是 Apache Commons Compress 库中的一个类,用于读取 ZIP 格式的压缩文件。在处理 ZIP 文件时,编码格式是一个重要的问题,因为它决定了如何解释文件中的字符数据。通常情况下,Z…

代码随想录刷题笔记 Day 52 | 打家劫舍 No.198 | 打家劫舍 II No.213 | 打家劫舍III No.337

文章目录 Day 5201. 打家劫舍&#xff08;No. 198&#xff09;<1> 题目<2> 笔记<3> 代码 02. 打家劫舍 II&#xff08;No. 213&#xff09;<1> 题目<2> 笔记<3> 代码 03.打家劫舍III&#xff08;No. 337&#xff09;<1> 题目<2&g…

工智能的迷惑是技术发展的产物

简述&#xff1a; 随着ChatGPT在全球科技舞台上掀起一股热潮&#xff0c;人工智能再次成为了人们关注的焦点。各大公司纷纷紧跟潮流&#xff0c;推出了自己的AI大模型&#xff0c;如&#xff1a;文心一言、通义千问、讯飞星火、混元助手等等&#xff0c;意图在人工智能领域占据…

Vue多文件学习项目综合案例——购物车,黑马vue教程

一、项目截图 二、主要知识点 vuex的使用json-server的使用json-server --watch index.json三、需要注意的点 json-server 安装成功&#xff0c;查看版本直接报错。安装默认版本埋下的一个坑&#xff0c;和node版本不匹配作者直接安装vuex&#xff0c;默认安装也是版本不匹配…

鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:Panel)

可滑动面板&#xff0c;提供一种轻量的内容展示窗口&#xff0c;方便在不同尺寸中切换。 说明&#xff1a; 该组件从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 可以包含子组件。 说明&#xff1a; 子组件类型&a…

QMI8658芯片I2C驱动开发指南

这个芯片纯国产挺好用的&#xff0c;电路很好设计&#xff0c;我这垃圾焊功&#xff0c;纯手焊&#xff0c;&#xff0c;居然能用。 第一部分 硬件连接 画的很简陋&#xff0c;看看就可以了&#xff0c;这里I2C总线需要接10K上拉没有画出来&#xff0c;这个需要注意一下。 …

树形结构 一篇文章梳理

树形结构是一种非常重要的非线性数据结构&#xff0c;它模拟了具有层次关系的数据模型。在树形结构中&#xff0c; 目录 一、组成元素&#xff1a; 二、树的属性&#xff1a; 深度或高度 度 路径 路径长度 三、树的类型 1 二叉树 2 多叉树 3 完全二叉树 4 满二叉树…

【计算机网络_传输层】UDP和TCP协议

文章目录 1. 重新理解端口号端口号划分netstat指令pidof 2. UDP协议2.1 UDP协议端格式2.2 UDP的特点2.3 UDP的注意事项2.4 基于UDP的应用层协议 3. TCP协议&#xff08;传输控制协议&#xff09;3.1 TCP协议的格式和报头字段3.2 如何解包和分用3.3 理解TCP协议报头3.4 TCP协议的…

day-20 二叉树的层序遍历

思路&#xff1a;利用队列进行广度优先遍历即可 注意点&#xff1a;ArrayList执行remove之后&#xff0c;索引i会立即重排&#xff0c;注意可能越界 code: /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeN…

Xcode调试Qt 源码

在Mac下使用Xcode 开发Qt程序&#xff0c;由于程序断点或者崩溃后&#xff0c;Qt库的堆栈并不能够正确定位到源码的cpp文件&#xff0c;而是显示的是汇编代码&#xff0c;导致不直观的显示。 加载的其他三方库都是同理。 所以找了攻略和研究后&#xff0c;写的这篇文章。 一&a…

SIP调试之SIPP测试工具

SIPP是针对SIP协议的一个性能测试的命令行工具&#xff0c;可以动态显示测试的统计信息&#xff08;如呼叫速率、延时、消息统计等&#xff09;。用户可以通过XML场景配置文件&#xff0c;自定义模拟各种UAC/UAS测试场景的信令交互流程&#xff0c;可以被用来测试IP话机、SIP代…

【IC设计】Verilog线性序列机点灯案例(二)(小梅哥课程)

文章目录 该系列目录&#xff1a;设计目标设计思路RTL 及 Testbench仿真结果存在的问题&#xff1f;改善后的代码RTL代码testbench代码 仿真结果 案例和代码来自小梅哥课程&#xff0c;本人仅对知识点做做笔记&#xff0c;如有学习需要请支持官方正版。 该系列目录&#xff1a;…

Nexus如何导入jar以及批量导入Maven的本地库目录

上传依赖包到Nexus 服务器的方式有多种, 包含: 1.单个jar上传: 在Nexus管理台页面上传单个jar 2.源码编译上传:在源码项目中使用 Maven的deploy 命令发布 3. 使用脚本批量上传Maven本地库的目录 前言 本篇基于 Nexus 的版本是 nexus-3.55.0-01本方法适用Linux和WindowsWind…

MySQL-HMA 高可用故障切换

本章内容&#xff1a; 了解MySQL MHA搭建MySQL MHAMySQL MHA故障切换 1.案例分析 1.1.1案例概述 目前 MySQL 已经成为市场上主流数据库之一&#xff0c;考虑到业务的重要性&#xff0c;MySQL 数据库 单点问题已成为企业网站架构中最大的隐患。随着技术的发展&#xff0c;MHA…

【四 (2)数据可视化之 Matplotlib 常用图表及代码实现 】

目录 文章导航一、介绍二、安装Matplotlib三、导入Matplotlib四、设置可以中文显示四、常用图形1、散点图&#xff08;Scatter Plot&#xff09;2.1、线性图&#xff08;Line Plot&#xff09;2.2、堆叠折线图2.3、多图例折线图3.1、柱状图/条形图&#xff08;Bar Chart&#x…

PostgreSQL中vacuum 物理文件truncate发生的条件

前言 前段时间&#xff0c;有些同学说到vacuum截断的行为时&#xff0c;认为&#xff0c;只要末尾是空页&#xff0c;无论多少&#xff0c;都会被截断&#xff0c;真是这样的吗&#xff1f; PostgreSQL当中&#xff0c;由于vacuum的操作并不总能将死元组的空间进行”物理截断…