Transformer 学习笔记
本部分来源于论文 《Attention Is All You Need》
0 摘要
- 提出了一种新的模型 Transformer ,完全基于注意力机制,彻底省去了卷积和递归。
- 在两个机器翻译的任务上证明了该模型质量上更优同时由于并行化更好导致所需的训练时间更少。
- 可以很好的应用到其他的任务上。
1 介绍
- RNN由于其固有的训练顺序导致很难并行化训练。
- 大部分情况下注意力机制仍然搭配RNN一起使用。
- Transformer 避免了循环递归,完全依赖于注意力机制来建立输入和输出之间的全局依赖关系,因此该模型对并行化的适应能力更强。
2 背景
- 卷积神经网络的结构使得学习远距离的特征变得十分困难。
- 自我注意力机制(内注意力机制)是一种将一个序列不同位置联系起来的机制,用来计算序列的表示。
- 端到端的记忆网络基于一种递归注意机制,而不是序列化的递归。
- Transformer 是第一个完全依赖于自我注意而不依赖于RNN或者卷积来计算输入和输出表示的转换模型。
3 模型架构
编码器将一个由符号 ( x 1 , ⋯   , x n ) \left ( x_{1},\cdots,x_{n} \right ) (x1,⋯,xn) 代表的输入序列映射到连续表示的 z = ( z 1 , ⋯   , z n ) z = \left ( z_{1},\cdots,z_{n} \right ) z=(z1,⋯,zn) 。给定的 z z z ,解码器一次一个元素的生成输出序列 ( y 1 , ⋯   , y n ) \left ( y_{1},\cdots,y_{n} \right ) (y1,⋯,yn) 。在每个步骤中,模型都是AR(auto-regressive)的,在生成下一步时使用之前生成的作为附加输入。
转换器就是遵循这一总体架构的一个编码器和解码器,具体架构如图一所示。
3.1 编码器和解码器堆
编码器: 编码器由 N = 6 N = 6 N=6 个相同的层堆叠而成,每一层有两个子层。第一层是一个 multi-head 的自注意机制层,第二层是一个简单的、全连接的前馈网络。在两个子层之间使用一个残差链接(residual connection),然后是层标准化。也就是说,每一个子层的输出是 L a y e r N o r m ( x + S u b l a y e r ( x ) ) LayerNorm\left( x + Sublayer\left( x \right) \right) LayerNorm(x+Sublayer(x)) ,其中 S u b l a y e r ( x ) Sublayer\left( x \right) Sublayer(x) 是子层自己实现的函数。为了使残差链接更加方便,这个模型里所有的子层,包括嵌入层(embedding layers),产生的输出维度 d m o d e l = 512 d_{model} = 512 dmodel=512 。
解码器: 解码器同样是由 N = 6 N = 6 N=6 个相同的层堆叠而成。除了每个编码器的两个子层之外,解码器还有第三个子层,用来对编码器的输出进行多头注意力机制计算。同样的,在每个子层做残差链接以及层标准化。同时修改了解码器中的自注意层防止注意到之后的位置。这种屏蔽机制加上输出嵌入层偏移了一个位置确保位置 i i i 的预测只依赖于 i i i 之前位置的数据。
3.2 注意力(attention)
注意力函数可以被描述为将一个 query 和一组键值对映射到输出,其中 query 、 key 、 values 和输出全部都是向量。输出计算为值的加权和,其中分配给每个值的权重由 query 的兼容性函数和对应的 key 来计算。
3.2.1 点积注意力(Dot-Product Attention)
输入由 queries ,keys的维度 d k d_{k} dk ,values的维度 d v d_{v} dv 组成。利用所有的keys来计算query,每个都除以 d k \sqrt{d_{k}} dk ,并利用一个 softmax 函数来获得 values 的权重。
在实际操作中,作者同时计算一组 query 上的注意力函数,并将其打包到一个矩阵