本文是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做了比较。
后面就是实验等内容了,就不继续了。