文章目录

  • 引言
  • 一、Structure of Transformers
  • 二、Encoder Structure
  • 三、Self-attention and multi-head self-attention
    • 1.Self-attention
    • 2.multi-head self-attention
  • 四、Residuals与Layer-Normalization
  • 五、Decoder structure of Transformer
    • 1.Mask self-attention
    • 2.Encoder-decoder attention
    • 3. 总结
  • 六、Word Embedding and position encoding
  • 七、扩展

  • Transformer理论部分
  • Transformer代码实现
  • 基于Transformer的机器翻译实战

引言

  Transformer同样也是seq2seq模型。在注意力机制诞生后,诞生了多种改进的模型,但是这些模型一般都是把注意力机制与循环神经网络结合(包括一些改良的,如LSTM),但是这些模型有个弊端:RNN由于其顺序结构训练速度常常受到限制,就是并行计算能力不强。既然Attention模型本身可以看到全局的信息, 那么一个自然的疑问是我们能不能去掉RNN结构,仅仅依赖于Attention模型呢,这样我们可以使训练并行化(encoder端并行计算),同时拥有全局信息?为解决这一些问题,论文提出了一种仅基于注意力机制的模型,具有强大的并行计算性以及效果很好。

一、Structure of Transformers

  Transformer模型的模型结构为encoder-decoder,

如下图,N个Encoder block组成encoder,N个Decoder block组成decoder。基于注意力机制的构造与基于RNN的不同,基于RNN的是在时间步上串联(在每个time step只能输入一个token),而基于注意力机制的是类似于桶状结构(一起将数据输入到模型中去)。

  那么,在Transformer中encoder中的信息如何传给decoder?

将encoder的最后一个Block分别传给decoder中的每一个block,然后decoder进行输出生成。

二、Encoder Structure


以输入为:Thinking Machines为例,Thinking与Machines最开始输入是维度为vocab的one-hot向量,经过embedding层,转换成embedding size大小的向量,输入到self-Attention层中,得到zzz,经过Feed Forward层将得到rrrrrr将作为下一个encoder Block的input。
  其中,Self-attention将在后面详细分析,这里介绍FFN。每一层经过attention之后,还会有一个FFN,这个FFN的作用就是空间变换。FFN包含了2层linear transformation层,中间的激活函数是ReLu。FFN的加入引入了非线性(ReLu激活函数),变换了attention output的空间, 从而增加了模型的表现能力。把FFN去掉模型也是可以用的,但是效果差了很多。

三、Self-attention and multi-head self-attention

  Word2vec的基本思想:句子中相近的词之间是有联系的,比如今天后面经常出现上午、下午和晚上。所以Word2vec的基本思想是用词来预测词,skip-gram使用中心词预测周围词,cbow使用周围词预测中心词。那么,一个词的embedding有没有可能关系到周围词外的部分?Self-attention就是自己与自己计算一个相关性(权重),利用自己(句子/文本)内部的表征得到一个更好的表征。

1.Self-attention

  Self-Attention的基本结构如下:

MatMul对应QKTQK^TQKT,Scale对应dk\sqrt{d_k}dk

Mask是因为每一个batch的数据经过padding后变得等长,在计算attention score时,不希望padding部分参与softmax计算,此时,需要Mask使得padding部分权重为0(padding部分的得分为−inf-infinf)。第二个MatMul对应权重与vector标的的计算。

  下面展示Self-attention内部是如何计算的

QQQ:标的
KKK:和别人计算的标的
VVV:加权的vector标的
对于self-attention来讲,Q(Query),K(Key),V(Value)Q(Query), K(Key), V(Value)Q(Query),K(Key),V(Value)三个矩阵均来自同一输入(Q、K、V来自embedding的线性变化),首先我们要计算QQQKKK之间的点乘,然后为了防止其结果过大,会除以一个尺度标度dk\sqrt{d_k}dk

,其中 dk\sqrt{d_k}dk

为一个query和key向量的维度。再利用Softmax操作将其结果归一化为概率分布,然后再乘以矩阵VVV就得到权重求和的表示。
举个例子:
假如我们要翻译一个词组Thinking Machines,其中Thinking的输入的embedding vector用x1x_1x1表示,Machines的embedding vector用x2x_2x2表示。

当我们处理Thinking这个词时,我们需要计算句子中所有词与它的Attention Score,这就像将当前词作为搜索的query,去和句子中所有词(包含该词本身)的key去匹配,看看相关度有多高。我们用q1q_1q1代表Thinking对应的query vector,k1k_1k1k2k_2k2分别代表Thinking以及Machines对应的key vector,则计算Thinking的attention score的时候我们需要计算q1q_1q1k1,k2k_1,k_2k1,k2的点乘,同理,我们计算Machines的attention score的时候需要计算q2q_2q2k1,k2k_1,k_2k1,k2的点乘。我们分别得到了q1q_1q1k1,k2k_1,k_2k1,k2的点乘积,然后我们进行尺度缩放与softmax归一化,如下图所示:

显然,当前单词与其自身的attention score一般最大,其他单词根据与当前单词重要程度有相应的score。然后我们在用这些attention score与value vector相乘,得到加权的向量。

如果将输入的所有向量合并为矩阵形式,则所有query, key, value向量也可以合并为矩阵形式表示

其中,WQ,WK,WVW^Q,W^K,W^VWQ,WK,WV是我们模型训练过程中学习到的合适参数,上述公式可以简化为矩阵计算:

2.multi-head self-attention

  multi-head self-attention的基本结构如下:

  multi-head self-attention 与self-attention 的区别在于可以有多组WQ,WK,WVW^Q,W^K,W^VWQ,WK,WV,得到不同的Q、K、VQ、K、VQKV,最后得到不同的ZZZ。我们认为一组线性变化提取的是一个维度的特征,采用多组可以从更高维来提取更多的特征。

其中,多个self-attention得到的结果ZiZ_iZi后续操作如下所示:

拼接后与矩阵WoW^oWo进行线性变化,

四、Residuals与Layer-Normalization

  • Residuals:是为了解决多层神经网络训练困难的问题,通过将前一层的信息无差的传递到下一层,可以有效的仅关注差异部分,这一方法之前在图像处理结构如ResNet等中常常用到。 Transformer的层数较多,反向传播时容易出现梯度消失与梯度爆炸,所以添加Residuals,防止信息的丢失与梯度回传的消失
  • Layer Normalization:在每个block中,最后出现的是Layer Normalization。Layer Normalization是一个通用的技术,其本质是规范优化空间,加速收敛。当我们使用梯度下降法做优化时,随着网络深度的增加,数据的分布会不断发生变化,为了保证数据特征分布的稳定性,我们加入Layer Normalization,这样可以加速模型的优化速度。

五、Decoder structure of Transformer

  这里我们着重介绍Mask self-attention与Encoder-decoder attention

1.Mask self-attention

  训练时,decoder端是一次性输入,但是在测试/生成,是不知道后面的token的,需要一个个预测出来,在每一个时间步,将已经生成的输入到桶里面去。在推理阶段,token是按照从左往右的顺序推理的。也就是说,在推理timestep=Ttimestep=Ttimestep=T的token时,decoder只能“看到”timestep<Ttimestep < Ttimestep<TT−1T-1T1 个Token, 不能和timestep大于它自身的token做attention(因为根本还不知道后面的token是什么)。为了保证训练时和推理时的一致性,所以,训练时要同样防止token与它之后的token去做attention。Decoder端的Mask的功能是为了保证训练阶段和推理阶段的一致性。这里的Mask与encoder端的Mask类似,一个是控制padding部分权重为0;一个是控制后续token部分权重为0。训练的时候需要Mask,预测的时候不需要Mask。

2.Encoder-decoder attention


  Encoder-decoder attention的输入:它的Q来自于之前一级的decoder层的输出,但K和V来自于encoder的输出,这使得decoder的每一个位置都可以attend到输入序列的每一个位置。
  下面展示Encoder-decoder attention的预测过程:



3. 总结

  decoder的训练过程:decoder端是一次性输入,经过Mask self-attention得到处理后的输入。decoder的预测过程:会将上一时间步decoder的输出输入到下一时间步中,如上面的预测过程。

六、Word Embedding and position encoding

  通过前面encoder部分,我们可以发现:encoder端并行输入,没有了序列信息,此时,就需要position encoding。position encoding只在encoder端和decoder端的embedding之后,第一个block之前出现,它非常重要,没有这部分,Transformer模型就无法用。position encoding是Transformer框架中特有的组成部分,补充了Attention机制本身不能捕捉位置信息的缺陷。为了更好的让模型学习位置信息,所以添加了position encoding并将其叠加在word embedding上。

该论文中选取了三角函数的encoding方式:

pospospos表示的是在这句话的第几个位置,iii表示的是在embedding的第几个维度。所以,通过三角函数,可以计算出这句话的每一个位置的每一个维度的值。这样计算的优势是:使模型轻松学到相对位置,因为对于任意的偏移量kkkPEpos+kPE_{pos+k}PEpos+k可以由PEposPE_{pos}PEpos的线性表示,同时,这个模型与可学习到的位置编码相比,可以解决sequence长度更长的位置信息。

  三角函数可视化结果为:

注意:position encoding在训练过程中是固定的

七、扩展

  为什么Transformer会work?

  • Transformer做到内部之间的相互attention
  • Transformer能够解决RNN/LSTM模型的长期依赖问题
  • Transformer是大模型,有更多的参数,可以提取更高维的信息,学到更好的表征
  • 利用self attention思想,结合预训练模型,能够产生语言学预训练知识,为后面的预训练模型提供了框架的基础,能方便下游任务做一个快速的finetune。

参考

  • 贪心课程中老师讲解的Transformer
  • Attention机制详解(二)——Self-Attention与Transformer
  • 【经典精读】Transformer模型深度解读
  • The Illustrated Transformer
  • pytorch tutorial


如果对您有帮助,麻烦点赞关注,这真的对我很重要!!!如果需要互关,请评论或者私信!


NLP学习—21.自注意力机制(Self-Attention)与Transformer详解相关推荐

  1. NLP学习笔记(五) 注意力机制

    大家好,我是半虹,这篇文章来讲注意力机制 (Attention Mechanism) 在序列到序列模型中的应用 在上一篇文章中,我们介绍了序列到序列模型,其工作流程可以概括为以下两个步骤 首先,用编码 ...

  2. [ 注意力机制 ] 经典网络模型1——SENet 详解与复现

  3. 深度学习-Transformer详解

    2017 年,Google 在论文 Attention is All you need 中提出了 Transformer 模型,其使用 Self-Attention 结构取代了在 NLP 任务中常用的 ...

  4. NLP中的Attention注意力机制+Transformer详解

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 作者: JayLou娄杰 知乎链接:https://zhuanlan.zhihu. ...

  5. 【NLP】四万字全面详解 | 深度学习中的注意力机制(四,完结篇)

    作者 | 蘑菇先生 知乎 | 蘑菇先生学习记 深度学习Attention小综述系列: 四万字全面详解 | 深度学习中的注意力机制(一) 四万字全面详解 | 深度学习中的注意力机制(二) 四万字全面详解 ...

  6. 【NLP】四万字全面详解 | 深度学习中的注意力机制(三)

    NewBeeNLP原创出品 公众号专栏作者@蘑菇先生 知乎 | 蘑菇先生学习记 深度学习Attenion小综述系列: 四万字全面详解 | 深度学习中的注意力机制(一) 四万字全面详解 | 深度学习中的 ...

  7. 【NLP】四万字全面详解 | 深度学习中的注意力机制(二)

    NewBeeNLP原创出品 公众号专栏作者@蘑菇先生 知乎 | 蘑菇先生学习记  前情提要:四万字全面详解 | 深度学习中的注意力机制(一) 目前深度学习中热点之一就是注意力机制(Attention ...

  8. 【NLP】全面详解 | 深度学习中的注意力机制(一)

    NewBeeNLP原创出品 公众号专栏作者@蘑菇先生 知乎 | 蘑菇先生学习记 目前深度学习中热点之一就是注意力机制(Attention Mechanisms).Attention源于人类视觉系统,当 ...

  9. Transformer:注意力机制(attention)和自注意力机制(self-attention)的学习总结

    目录 前言 1. 注意力机制 1.1非自主提示和自主提示 1.2 查询,键和值 1.3 注意力机制的公式 1.3.1 平均汇聚 1.3.2 非参数的注意力汇聚(Nadaraya-Watson核回归) ...

  10. 深入理解深度学习——注意力机制(Attention Mechanism):带掩码的多头注意力(Masked Multi-head Attention)

    分类目录:<深入理解深度学习>总目录 相关文章: ·注意力机制(AttentionMechanism):基础知识 ·注意力机制(AttentionMechanism):注意力汇聚与Nada ...

最新文章

  1. 伪语言PHP,PHP语言之伪静态几种做法
  2. 什么样的女人才算是好老婆?
  3. assert 闪退 android,AEX部分软件闪退问题,求解!
  4. java编译找不到符号_关于久违的Javac,编译出现“找不到符号”
  5. python2 安装 MySQL-python
  6. (原+转)ubuntu终端输出彩色文字
  7. Spring+MyBatis多数据源配置实现
  8. Keil下Debug随笔
  9. iOS 极光推送:This application or a bundle it contains has the same bundle identifier as this applicatio
  10. 短信发送/支付/密码重置逻辑漏洞学习
  11. 【武汉加油!中国加油!】挑战七天 实现机器视觉检测有没有戴口罩系统——第四五六七天
  12. 第三届“传智杯”全国大学生IT技能大赛(初赛B组)题解合集
  13. IR Cut Filter主要作用分别是什么?_安防 | 说说监控摄像头中IR-CUT双滤光片哪些事...
  14. 仍然不足够--读后感
  15. 文献阅读《Squeezing Backbone Feature Distributions to the Max for Efficient Few-Shot Learning》
  16. 计算机中心述职报告诉,计算中心的述职报告范文
  17. 涉密信息系统集成甲级资质认证通过条件
  18. springboot高校学术交流论坛平台 java校园论坛交流网站
  19. 建立Windows AD对Kerberos的单向信任(允许使用域账号登录Kerberos集群)
  20. python怎么批量爬取图片_Python制作批量爬取网络图片的方法

热门文章

  1. 判断web app是否从主屏启动
  2. Python3.0 我的DailyReport 脚本(四)发送日报
  3. 自己做的一个水印生成类
  4. java day06【类与对象、封装、构造方法】
  5. Android Stutio 3.0 - Gradle sync failed
  6. 最常用的css垂直居中方法
  7. Java 集合系列06之 Vector详细介绍(源码解析)和使用示例
  8. 彻底搞定char/wchar_t/unicode
  9. 中国Linux源镜像站大全
  10. pillow安装出错的解决办法