Transformer模型---decoder
一、结构
1.编码器
Transformer模型---encoder - nxf_rabbit75 - 博客园
2.解码器
(1)第一个子层也是一个多头自注意力multi-head self-attention层,但是,在计算位置i的self-attention时屏蔽掉了位置i之后的序列值,这意味着:位置i的attention只能依赖于它之前的结果,不能依赖它之后的结果。因此,这种self-attention也被称作masked self-attention。
(2)第二个子层是一个多头注意力multi-head attention层,用于捕获decoder output和encoder output之间的attention。第三个子层是一个简单的全连接层。
(3)和encoder一样:每个子层都使用残差直连,并且残差直连之后跟随一个layer normalization:LN;decoder所有层的输入、输出的向量维度也是$d_{model}=512$维。
二、Tips
1.使用multi-head attention的三个适用场景:
encoder-decoder attention:使用multi-head attention,输入为encoder的输出和decoder的self-attention输出,其中encoder的self-attention作为 key and value,decoder的self-attention作为query
encoder self-attention:使用 multi-head attention,输入的Q、K、V都是一样的(input embedding and positional embedding)
decoder self-attention:在decoder的self-attention层中,deocder 都能够访问当前位置前面的位置
2.decoder的masked self-attention
注意encoder里面是叫self-attention,decoder里面是叫masked self-attention。
这里的masked就是要在做language modelling(或者像翻译)的时候,不给模型看到未来的信息。
3.优化

三、Transformer vs CNN vs RNN
1.假设输入序列长度为n,每个元素的维度为$d:\{x_1,...,x_n\}$,输出序列长度也为n,每个元素的维度也是d:$\{y_1,...,y_n\}$,从每层的计算复杂度、并行的操作数量、学习距离长度三个方面比较Transformer、CNN、RNN三个特征提取器:

1.每层的计算复杂度:
考虑到n个key和n个query两两点乘,因此self-attention每层计算复杂度为$O(n^2*d)$
考虑到矩阵(维度为$n*n$)和输入向量相乘,因此RNN每层计算复杂度为$O(n*d^2)$
对于k个卷积核经过n次一维卷积,因此CNN每层计算复杂度为$O(k*n*d^2)$,如果考虑深度可分离卷积,则计算复杂度下降为$O(k*n*d+n*d^2)$
因此:
当$n<d$时,self attention要比RNN和CNN快;
当$n>d$时,可以使用受限self attention,即:计算attention时仅考虑每个输出位置附近窗口的r个输入。这将带来两个效果:每层计算复杂度降为$O(r*n*d)$
最长学习距离降低为r,因此需要执行$O(n/r)$次才能覆盖到所有输入。
2.并行操作数量:
可以通过必须串行的操作数量来描述:
对于self-attention,CNN,其串行操作数量为O(1),并行度最大;
对于RNN,其串行操作数量为O(n),较难并行化。
3.最长计算路径:
覆盖所有输入的操作的数量
对于self-attention,最长计算路径为O(1);对于self-attention stricted,最长计算路径为O(n/r);
对于常规卷积,则需要O(n/k)个卷积才能覆盖所有的输入;对于空洞卷积,则需要$O(log_kn)$才能覆盖所有的输入;
对于RNN,最长计算路径为O(n)
4.作为额外收益,self-attention可以产生可解释性的模型:
通过检查模型中的注意力分布,可以展示与句子语法和语义结构相关的信息。
参考文献:
【1】BERT专题系列(二):Transformer (Attention is all you need)_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili
【2】NLP学习(5)----attention/ self-attention/ seq2seq/ transformer - Lee_yl - 博客园
Transformer模型---decoder的更多相关文章
- 文本分类实战(八)—— Transformer模型
1 大纲概述 文本分类这个系列将会有十篇左右,包括基于word2vec预训练的文本分类,与及基于最新的预训练模型(ELMo,BERT等)的文本分类.总共有以下系列: word2vec预训练词向量 te ...
- 详解Transformer模型(Atention is all you need)
1 概述 在介绍Transformer模型之前,先来回顾Encoder-Decoder中的Attention.其实质上就是Encoder中隐层输出的加权和,公式如下: 将Attention机制从Enc ...
- transformer模型解读
最近在关注谷歌发布关于BERT模型,它是以Transformer的双向编码器表示.顺便回顾了<Attention is all you need>这篇文章主要讲解Transformer编码 ...
- transformer模型简介
Transformer模型由<Attention is All You Need>提出,有一个完整的Encoder-Decoder框架,其主要由attention(注意力)机制构成.论文地 ...
- Transformer模型---encoder
一.简介 论文链接:<Attention is all you need> 由google团队在2017年发表于NIPS,Transformer 是一种新的.基于 attention 机制 ...
- Transformer模型总结
Transformer改进了RNN最被人诟病的训练慢的缺点,利用self-attention机制实现快速并行. 它是由编码组件.解码组件和它们之间的连接组成. 编码组件部分由一堆编码器(6个 enco ...
- NLP与深度学习(四)Transformer模型
1. Transformer模型 在Attention机制被提出后的第3年,2017年又有一篇影响力巨大的论文由Google提出,它就是著名的Attention Is All You Need[1]. ...
- Transformer模型详解
2013年----word Embedding 2017年----Transformer 2018年----ELMo.Transformer-decoder.GPT-1.BERT 2019年----T ...
- RealFormer: 残差式 Attention 层的Transformer 模型
原创作者 | 疯狂的Max 01 背景及动机 Transformer是目前NLP预训练模型的基础模型框架,对Transformer模型结构的改进是当前NLP领域主流的研究方向. Transformer ...
随机推荐
- 用pip命令把python包安装到指定目录
sudo pip install transforms3d --target=/usr/local/lib/python2.7/site-packages pip install transforms ...
- Hbulder 调试安卓app
目前开发app有原生开发和web开发两种方式,各有各的优势和劣势,利用web技术开发app可以只用写一套代码,即可以在Android和ios同时应用,比较方便和快捷,有很多中不同的开发方式,例如cor ...
- [LOJ 6435][PKUSC 2018]星际穿越
[LOJ 6435][PKUSC 2018]星际穿越 题意 给定 \(n\) 个点, 每个点与 \([l_i,i-1]\) 之间的点建立有单位距离的双向边. \(q\) 组询问从 \(x\) 走到 \ ...
- 探索 ASP.Net Core 3.0系列三:ASP.Net Core 3.0中的Service provider validation
前言:在本文中,我将描述ASP.NET Core 3.0中新的“validate on build”功能. 这可以用来检测您的DI service provider是否配置错误. 具体而言,该功能可检 ...
- 大话设计模式Python实现-备忘录模式
备忘录模式(Memento Pattern):不破坏封装性的前提下捕获一个对象的内部状态,并在该对象之外保存这个状态,这样已经后就可将该对象恢复到原先保存的状态 下面是一个备忘录模式的demo: #! ...
- LeetCode 557:反转字符串中的单词 III Reverse Words in a String III
公众号:爱写bug(ID:icodebugs) 给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序. Given a string, you need to reve ...
- Windows重要的win键
win+↓ 当前窗口操作,多按几下就缩没了(同理,其他箭头也一样) win+e 打开此电脑 win+v 展开剪切板 win+k 访问蓝牙 win+a win10的通知 win+d (切到桌面,再用能切 ...
- vue中引入mintui、vux重构简单的APP项目
最近在学习vue时也了解到一些常用的UI组件,有用于PC的和用于移动端的.用于PC的有:Element(饿了么).iView等:用于移动端APP的有Vux.Mint UI(饿了么).Vant(有赞团队 ...
- Kubernetes 静态PV使用
Kubernetes 静态PV使用 Kubernetes支持持久卷的存储插件:https://kubernetes.io/docs/concepts/storage/persistent-volum ...
- 状态(State)模式--设计模式
定义与特点 1.1 定义 状态模式允许一个对象在其内部状态改变的时候改变其行为.这个对象看上去就像是改变了它的类一样. 1.2 特点 状态模式优点: 封装了转换规则,并枚举可能的状态,它将所有与某个状 ...