《Attention Is All You Need》

2023-11-06

论文地址:https://arxiv.org/abs/1706.03762

谷歌于2017年发布论文《Attention Is All You Need》,提出了一个只基于attention的结构来处理序列模型相关的问题,比如机器翻译。相比传统的CNN与RNN来作为encoder-decoder的模型,谷歌这个模型摒弃了固有的方式,并没有使用任何的CNN或者RNN的结构,该模型可以高度并行的工作,相比以前串行并且无法叠加多层、效率低的问题。那么Transorformer可以高度并行的工作,所以在提升翻译性能的同时训练速度也特别快。

目录

0x01 传统的RNN存在的问题

0x02 Encorder

(一)输入处理

(二)Self-Attention与Multi-Attention注意力机制

(三)Multi-Head机制

(四) 残差和Layer Normalization

0x03 Decoder


作用是在机器翻译中,可以使用此神经网络进行机器翻译,从而得到正确的输出,它的基本组成也是一个Seq2Seq的结构:

 那么transformer的原理可以使用下图来进行表达:那么左边即为encorder,右边为decorder:

0x01 传统的RNN存在的问题

RNN也可以称为递归神经网络,RNN为一类以序列数据为输入,在序列的演进方向进行递归且所有节点按链式连接的递归神经网络。

那么它存在的问题有如下:

  • 串行结构无法做复杂的神经网络,此结构时间复杂度高,有人会说可以把它扩展为一层或者两层神经网络,可是他的本质还是在做不断地堆叠,其效率很低,建起来也就那么几层。

  • 对于输入我们称为token,我们把一句话分为好几个token之后进行处理。输入的词我们称为向量对于向量我们要进行更新,但是RNN中最大的问题就是这些向量是不会更新的,它不会随机应变。

  • RNN只会考虑上文,不会考虑下文,对于一句话来说,对于一段话的处理其实不是很理想,它不会去考虑下文的联系。

那么在NLP邻域中,RNN并不适合作为自然语言处理最好的方式,就像下面这个例子:

其中的it根据上下文可以解析为不同的意思。那么如何解决呢,在论文中引入了注意力机制这一概念。

0x02 Encorder

(一)输入处理

(1)Embedding

编码器和解码器的输入就是利用学习好的embedding将tokens转化为向量。常见的操作方法为word2vec。

(2)位置编码

对于普通的RNN,其输入的数据进行训练时,只使用了一套参数进行训练,RNN的梯度变为0,是因为它的梯度被近距离梯度主导,被远距离的梯度忽略。但是对于transorformer,其输入为并行化处理的,一句话一起处理的时候,我们需要注意其位置关系以及先后关系,这个时候就需要位置编码。

那么对于我们输入的词,它的处理是这样的:

那么使用cos以及sin进行位置嵌入会有用呢:

我们可以使用位置编码得到一个绝对位置,但是相对位置怎么办,利用三角函数的性质:

 我们可以得到:

可以得到的是,对于pos+k位置的位置向量某一维2i或2i+1而言,可以表示为,pos位置与k位置的位置向量的2i和2i+1维的线性组合,这样的线性组合意味着位置向量中蕴含了相对位置信息。但是这种相对位置信息会在注意力机制那里消失。

(二)Self-Attention与Multi-Attention注意力机制

我们可以抛出两个问题:

对于输入的数据,我们的关注点在哪?如何才能让计算机关注到这些有用的信息?

如何使计算机区分不同的语境?

Attention用于计算“相关程度”,例如在翻译的过程中,不同的英文对中文的依赖程度不同,我们融入权重,代表上下文的影响,对文本进行重构。那么如何去计算:

  • 输入经过编码后得到的向量。

  • 想得到当前上下文之间的关系,通过下面的计算公式,可以理解为是在加权。

  • 对于Queries这个向量,可以理解为是去询问别人,我们之间的关系怎么样。

  • 相反,对于Key这个向量,我们可以理解为是去回答别人,我们之间的关系是这样的。

  • 我们需要构建Queries、Key、Value这三个向量进行穿当前词与其他词的关系,表达我们的特征向量。

计算公式:

 

那么这个到底怎么运算的,简单来说就是根据我们输入的QK矩阵进行计算,下面的根号dk是为了避免维数不同而造成的差异,我们不可以因为一个图像它的维度多,我们就认为它是重要的,之后再进行归一化,生成0~1范围内的数,表示它的影响程度,最后再乘以V。

对于我们输入向量X1,我们会去逐个点乘包括自己的Key向量,反映了两个向量之间的相似度,如果点乘的结果越大表示向量的相似度越多,那我们就更加关注他:

那么QKV向量如何获取呢:

在我们只有单词向量的情况下,获取的方式如下,我们需要三个权重参数Wq、Wk、Wv,这三个权重参数是通过我们神经网络进行训练出来的。X1 = Wq * q1、X2 = Wq * q2...

 那么计算完后如何操作呢:

其实就是根据我们上面的公式进行计算,之后除以一个根号dk,dk作用为减小维度,我们不可以因为一副图像他维度大,我们就觉得它的特征大,它是对的。在实际的代码操作中,我们方便使用矩阵,方便并行:

(三)Multi-Head机制

多头注意力机制是什么,其实就是我们上面所说的一个字节的注意力机制,我们使用了很多套参数去进行训练,在不同的空间上进行学习,通过不同的head得到多个特征表达,最后将所有的特征拼接到一起,可以再通过一层全连接来进行降维。

 

使用了多头注意力机制,可以让特征更加丰富,可以得到不同的注意力结果。

(四) 残差和Layer Normalization

首先看看transorformer的整体架构:

 在上面,我们已经实现了Self-Attention,接下来看看Add与normalize(加速训练的作用):

 下面是指我们将输入的向量与其位置编码进行相加,一路送到Attention中进行计算,另外一路原封不动地送入残差连接

那么这样有什么作用?我们可以这么理解,我们要做两手准备,防止上一次处理的结果不理想,用一句话概括来说:至少不比原来差

那么根据数学公式:

 根据后向传播的链式法则:

很多时候梯度消失都是因为连乘所引起的,当我们加入原先的输入时,我们保证了尽管连乘最后导致的结果为0,但是我们还是有一个1,这个梯度不会为0。缓解了梯度消失的原因,所以这个网络结构才可以更加深层的进行。这也是为什么不使用RNN进行NLP的原因所在。

为什么使用Layer Normalization而不是用Batch Normalization:

  • BN中,如果batch_size较小的时候,效果差。

  • BN在RNN中的效果比较差。当向量维度不同时,我们不可以有效地将其做有效的处理。

  • LN单独对一个样本所有单词做缩放可以起到效果。以上的点也如下图

  • 在BN中,是以某一行或者某一列进行做均值方差,但是在NLP中,我们也不可以将每一行或者是每一列作为一样的性质进行比对,因为它所表达的意思肯定不一样。而LN则是在一个语句中不断地学习,这个在NLP中确实说得过去。

那么看看下面这张Normalize:

 我们可以看到对于BN他是在不同输入中进行同一行的比较,可是我们每一句话所对应的意思肯定不一样,语境都不一样我们怎么去比对,我们只能看看自己本身,自己体验自己的语境。

0x03 Decoder

我们再看看详细的图:

那么他与decoder有什么不同呢,这么看起来好像都是差不多的处理:

  • Attention计算不同。

  • 加入了Mask机制。(一个接着一个输出答案,就像我们手机输入语音一样,不可以使用下文的词,只可以使用前面的词,这也是机器翻译的过程)

那么关于Decoder的结构:

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

(2)第二个sub-layer是对encoder的输入进行attention的计算,这里仍然是multi-head的attention结构,只不过输入的分别是decoder的输出和encoder的输出。(交互层)

那么如何交互呢:

我们使用encoder生成了两个KV矩阵,注意,是KV矩阵。而Q矩阵在decoder中生成,最后行成多头注意力机制:

 

 (3)第三个sub-layer是全连接网络,与encoder相同。最后进行模型的输出:

 那么关于这篇的论文的分析到这里。

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

《Attention Is All You Need》 的相关文章

  • 如何在javascript中动态构建json数组

    我从 wit ai 收到一个 json 对象 其中包含一些快速回复元素 如下所示 msg So glad to have you back What do you want me to do action id 6fd7f2bd db67
  • 如何计算两个单词之间的相似度以检测它们是否重复?

    我有两个单词 我想计算它们之间的相似度 以便对它们是否重复进行排名 如何使用深度学习 NLP 方法实现这一目标 这里有一些解决文本相似性的方法 基于字符串的方法 给定 2 个句子字符串计算余弦相似度 https stackoverflow
  • 改进现有的基本 GloVe 模型

    我正在使用 GloVe 作为我研究的一部分 我已经从以下位置下载了模型here https nlp stanford edu projects glove 我一直在使用 GloVe 进行句子分类 我正在分类的句子特定于特定领域 例如某些 S
  • 波特 油炸的去梗

    为什么波特词干算法在线 http text processing com demo stem http text processing com demo stem stem fried to fri并不是fry 我不记得任何以以下结尾的单词
  • 如何在keras中使用Bert作为长文本分类中的段落编码器来实现网络?

    我正在做一个长文本分类任务 文档中有超过 10000 个单词 我计划使用 Bert 作为段落编码器 然后将段落的嵌入逐步输入 BiLSTM 网络如下 输入 batch size max paragraph len max tokens pe
  • 有什么工具可以以编程方式将日语句子转换为其罗马字(语音阅读)? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 Input 日本 好 Output 日本 ga sukidesu 遗憾的是 无法通过 Google Translate API 进行语音阅读 KAKA
  • 如何找到句子的主语? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我是 NLP 新手 正在研究应该使用哪种语言工具包来执行以下操作 我想做两件事之一来完成同样的事情 我基本上想对文本进行分类 通常是一个包
  • Attention机制中的“源隐藏状态”指的是什么?

    注意力权重计算如下 我想知道什么h s指 在tensorflow代码中 编码器RNN返回一个元组 encoder outputs encoder state tf nn dynamic rnn 正如我所想 h s应该是encoder sta
  • Python 3 和 NLTK 与 WordNet 2.1 - 这可能吗?

    我将 Python 3 和 NLTK 3 0 0 与 WordNet 3 0 结合使用 我想用该数据 semval2007 https github com alvations pywsd tree master pywsd data se
  • 日语/字符的编程技巧[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个想法 可以编写一些网络应用程序来帮助我 也许还有其他人 更好地学习日语 因为我正在学习日语 我的问题是该网站主要是英文的 所以
  • 使用 Hadoop MapReduce 的计算语言学项目构想

    我需要做一个关于计算语言学课程的项目 是否有任何有趣的 语言 问题 其数据密集程度足以使用 Hadoop MapReduce 来解决 解决方案或算法应尝试分析并提供 语言 领域的一些见解 但是它应该适用于大型数据集 以便我可以使用 hado
  • SpaCy 的相似度是如何计算的?

    初学者 NLP 问题在这里 similarity 方法如何运作 哇 spaCy 太棒了 它的tfidf模型可以更容易预处理 但w2v只有一行代码 token vector 惊人的 In his spaCy 上的 10 行教程 https g
  • 这个 NLP 问题层次结构描述中的最大池化是什么类型

    我正在尝试实现这个描述以及我所做的 我生成了形状的 uni gram bi gram tri gram 15 512 使用填充 然后对于每个单词 我连接三个特征向量 3 512 然后我向他们申请 Globalmaxpooling1D 我不知
  • 将 python NLTK 解析树保存到图像文件[重复]

    这个问题在这里已经有答案了 这可能会复制这个 stackoverflowquestion https stackoverflow com questions 23429117 saving nltk drawn parse tree to
  • python中的语音识别持续时间设置问题

    我有一个 Wav 格式的音频文件 我想转录 我的代码是 import speech recognition as sr harvard sr AudioFile speech file wav with harvard as source
  • ANEW 字典可以用于 Quanteda 中的情感分析吗?

    我正在尝试找到一种方法来实施英语单词情感规范 荷兰语 以便使用 Quanteda 进行纵向情感分析 我最终想要的是每年的 平均情绪 以显示任何纵向趋势 在数据集中 所有单词均由 64 名编码员按照 7 分李克特量表在四个类别上进行评分 这提
  • 将复数名词转换为单数名词

    如何使用 R 将复数名词转换为单数名词 我使用 tagPOS 函数来标记每个文本 然后提取所有标记为 NNS 的复数名词 但是如果我想将这些复数名词转换为单数该怎么办 library openNLP library tm acq o lt
  • 如何对德语文本进行词形还原?

    我有一篇德语文本 我想对其应用词形还原 如果不可能进行词形还原 那么我也可以接受词干提取 Data 这是我的德语文本 mails Hallo Ich spielte am fr hen Morgen und ging dann zu ein
  • 如何检测文本是否可读?

    我想知道是否有一种方法可以告诉给定的文本是人类可读的 我所说的人类可读的意思是 它有一些含义 格式就像某人写的文章 或者至少是由软件翻译器生成的供人类阅读的文章 这是背景故事 最近我正在制作一个应用程序 允许用户将短文本上传到数据库 在部署
  • 如何在Python中使用多处理来加速循环执行

    我有两个清单 列表 A 包含 500 个单词 列表 B 包含 10000 个单词 我正在尝试为列表 A 找到与 B 相关的相似单词 我正在使用 Spacy 的相似函数 我面临的问题是计算需要很长时间 我是多处理使用的新手 因此请求帮助 如何

随机推荐

  • Python安装教程(2022最新保姆级安装教程)

    网工2 0已来 网络工程师单单会路由交换已经不吃香了 所以 这里提倡广大网络工程师抽空学习编程 至少掌握一门编程语言 后续可以用于自动化运维 因此 本期为大家分享了python安装教程 供大家参考学习 python官方链接 https ww
  • 基于PKI密钥认证在CentOS7.9搭建OpenVPN(一)

    一 OpenVPN介绍 OpenVPN官方文档 https openvpn net community resources how to additional documentation 1 OpenVPN概述 OpenVPN是一种全功能的
  • Cesium教程(十九):Cesium粒子系统

    Cesium教程 十九 Cesium粒子系统 1 粒子系统 1 1 什么是粒子系统 Cesium粒子系统是一种模拟复杂物理效应的图形技术 是由小图像组成的集合 当他们在一起形成更复杂的 模糊 对象时 会形成火 烟 云或烟火等 1 2 初始粒
  • 将figma的设计图上传到蓝湖

    前言 将figma的设计图上传到蓝湖 实现步骤 1 把文件保存到本地 拿到一个 fig的文件 2 打开一个在线的 ui编辑软件 MasterGo 注 该软件跟figma一样 都可以在线编辑 好用 点个赞 注册个账户或者微信登录 3 导入我们
  • 如何将TXT文本编码变为GB2312

    如果你用记事本 另存为选择ansi就是gb2312 另外 如果你不确认文件是什么编码 推荐用Replace Pioneer 首先用Replace Pioneer检测出一个文件是什么编码 1 选择Tools gt Encoding Detec
  • RPC服务

    1 rpc是什么 RPC Remote Procedure Call 是远程过程调用 它是一种通过网络从远程计算机程序上请求服务 而不需要了解底层网络技术的协议 简单的理解是一个节点请求另一个节点提供的服务 RPC协议假定某些传输协议的存在
  • Latex报错_101719.bbl! perhaps a missing \item. immediate help.immediate help.l.24\end{thebibliography}

    IEEElatex模板 报这个错 可能是bib文件中文献重复 或者tex文件里面cite的文献不在bib文件里面造成的 要仔细检查bib文件 补充 IEEE使用bib应用参考文献的标准用法 去IEEE官网 IEEE Manuscript T
  • 入职后发现是超级「屎山」代码,怎么破?网友看不下去了...... 丨黑马头条

    大家好 我是播妞 昨天有位粉丝和我聊天 说他喜欢的一位女生说他是 技术宅 问我这是褒义还是贬义 思考了两秒我回答 如果妹子喜欢你就是褒义 不喜欢你就是贬义 看到文章的各位技术宅们 大家觉得是什么意思呢 又到了每周的黑马头条时间 最近的技术圈
  • 09 线性回归及矩阵运算

    09 线性回归及矩阵运算 线性回归 定义 通过一个或者多个自变量与因变量之间进行建模的回归分析 其中可以为一个或者多个自变量之间的线性组合 一元线性回归 涉及到的变量只有一个 多元线性回归 变量两个或以上 通用公式 h w w0 w1x1
  • kafka生产者幂等与事务

    目录 前言 幂等 事务 总结 参考资料 前言 Kafka 消息交付可靠性保障以及精确处理一次语义的实现 所谓的消息交付可靠性保障 是指 Kafka 对 Producer 和 Consumer 要处理的消息提供什么样的承诺 常见的承诺有以下三
  • 【杨氏矩阵】

    文章目录 前言 一 题目描述 二 题目解析 一 解法1 二分查找 二 解法2 Step wise线性搜索解法 总结 前言 大家好 我是熊猫 今天要和大家一起学习的是在杨氏矩阵中寻找数字的问题 一 题目描述 有一个数字矩阵 矩阵的每行从左到右
  • centos和ubantu安装软件的区别

    序言 安装软件时经常会遇到类似下面这张图 那这些不同的Linux版本有哪些区别 安装软件又应该注意哪些 本文将就以下问题展开讨论 Linux发行版本有哪些 Linux不同版本安装软件的方式和区别 说明 图中FreeBSD Oracle So
  • 小技巧:如何在R语言与excel/word之间进行复制粘贴

    原创 康哥 勤用统计 问 R语言中能进行类似电脑中control C control V的操作吗 现实数据处理过程中 经常需要进行R语言与Excel word等文件的数据传输 笨方法 是直接导出or导入整个文件 答 R语言也可以与Excel
  • [蓝桥杯][算法提高VIP]我们的征途是星辰大海

    题目 题目链接 题解 实现题 这也很基础 写代码的时候细心点就行 代码 include
  • 时序预测

    时序预测 MATLAB实现PSO BP时间序列预测 粒子群优化BP神经网络时间序列预测 多指标评价 目录 时序预测 MATLAB实现PSO BP时间序列预测 粒子群优化BP神经网络时间序列预测 多指标评价 效果一览 基本介绍 程序设计 参考
  • 动态路由协议

    动态路由协议 在各台路由器上 激活同一种协议后 路由器间沟通计算获取未知路由信息 最终生成路由表实现全网可达 静态协议的缺点 1 在中大型网络中配置量大 2 不能实时收敛 不能基于拓扑的变化而变化 动态协议的优点 1 在中大型的配置量较静态
  • CRM-统计分析--线索统计--新增线索数量折线图(接口实现)

    统计分析 线索统计 新增线索数量折线图 需求 统计出一段时间内的每一天 新增的线索数量 通过每天新增的线索数量和线索总数量 分析线上线下活动的执行情况 难度级别 B级 接口名 report salesStatistics 请求方式 get请
  • 个人免签支付云端监听免挂机支付宝收款

    GOGO支付 打不开了 貌似liangle 然后自己根据原理实现了一套 方案用来替代 gogo支付收款 云端监听免挂机 支付宝采用抓包技术云端调用官方接口 获取收款信息 监听效率非常高 而且很稳定 GOGO支付个人免签支付系统实现原理说明
  • 让flexmojos modulefiles支持通配符文件集,模块输出不带版本号且按包结构输出

    jar包下载 http download csdn net source 1879817 1 从http svn sonatype org flexmojos tags flexmojos 3 2 0 check out 源码 2 修改fl
  • 《Attention Is All You Need》

    论文地址 https arxiv org abs 1706 03762 谷歌于2017年发布论文 Attention Is All You Need 提出了一个只基于attention的结构来处理序列模型相关的问题 比如机器翻译 相比传统的