论文模型:Transformer
目录
-
Transformer之前的经典算法模型
1.循环神经网络
- 原始序列预测
- Encoder-Decoder
2.带有注意力机制的循环神经网络
- 使用“query”向量(解码器状态)和“key”向量(所有编码器状态)
- 对每个query-key对,计算权重
- 使用softmax归一化
- 通过加权和将value向量(通常是编码器状态,和key向量一样)组合在一起
- 在模型的任何一个部分中使用
3.注意力权重函数
q代表query,k代表key
(1)Multi-layer Perceptron(Bahdanau et al. 2015)
灵活,在大量数据上表现良好
(2)Bilinear(Luong et al. 2015)
(3)Dot Product(Luong et al. 2015)
没有参数,但需要相同的大小
(4)Scaled Dot Product(Vaswani et al. 2017)
问题:dot product的数量级会随着维度的增加而变大
改进方法:除以向量的大小
4.卷积神经网络
Neural machine translation in linear time. Kalchbrenner et al.
-
自注意力机制
自注意力函数
函数映射一个query和一组key-value对以输出每个权重。
注意力权重函数使用放缩后的点乘注意力:
编码自注意力
Attention注意力机制在序列对序列的学习中有着举足轻重的地位,在2014年的时候就被应用于机器翻译领域并卓有成效。在本篇论文中,为了克服循环神经网络和卷积神经网络的问题,研究者们第一次提出了完全不依赖于循环和卷积结构,单纯依靠注意力机制进行序列建模的方法,将其命名为Self-Attetion。Selt-Attention基于传统的注意力机制,将Attention看作是给定Query,Key和Value的一次查询,比如在图中,我们想要计算时刻的输出
,以第二时刻的输入
作为Query,以其他时刻的输入(
)作为Key,将Key和Query向量分别作线性变换后计算内积,这个内积衡量了第二时刻的信息与其他时刻信息的相关程度,我们把所有时刻的内积值作一次softmax,就得到了每个时刻的权重,这里我们取每个时刻的输入作为Value,对每个时刻的Value以刚刚计算的权重进行加权平均,输入一个前馈神经网络之后就得到了
。注意到这里的内积结束以后还除掉了
,是因为随着维度的增加,内积会增加,这样softmax梯度会变得很小,从而降低训练速度。
解码自注意力
自注意力机制与注意力机制的区别
注意力机制:
自注意力机制:
Attention的query来自外部序列,Self-attention的query来自原本的序列。
并行的注意力头
多头注意力
我们发现将query、key和value分别用不同的、学到的线性映射h倍到dk、dk和dv维效果更好,而不是用d model维的query、key和value执行单个attention函数。 基于每个映射版本的query、key和value,我们并行执行attention函数,产生dv 维输出值。 将它们连接并再次映射,产生最终值,如下图所示。
Multi-head attention允许模型的不同表示子空间联合关注不同位置的信息。 如果只有一个attention head,它的平均值会削弱这个信息。
其中映射为参数矩阵
采用h=8个并行attention层或头,对每个头,使用,由于每个头的大小减小,总的计算成本与具有全部维度的单个头attention相似。
-
Transformer模型框架
模型框架
Multi-head Attention是Transformer结构的核心部件。Transformer模型依然遵从了经典的Encoder-Decoder架构,左侧是编码器,右侧是解码器。
编码器
Encoder接收序列输入,在进行词嵌入的同时注入一些与序列位置有关的信息,这一步被称为Positional Encoding,这样我们就得到了输入序列的向量化表示。Encoder由若干(N=6)相同的层堆叠而成,每层内部有两个子层,首先是Multi-head Attention层,然后是一个简单的前馈神经网络层,在每个子层中,作者还使用了残差网络的shortconnection技术和Layer Normalization技术来增强深度神经网络的稳定性和运行表现。为了方便这些残差连接,模型中的所有子层以及嵌入层产生的输出维度都为。
解码器
Decoder同样由若干(N=6)相同的层堆叠而成,这里与Encoder有两处不同,首先是Decoder在中间插入了一个针对Encoder输出信息进行Attention的Multi-head Attention层,这让Decoder可以全面利用Encoder抽取的特征,其次是在低端的Self-Attention层,由于Decoder生成序列只能基于已有的序列,所以Self-Attention不能观察在该时刻之后的信息,我们用一个mask做到这一点。最后Decoder将输出做一次线性变换后用softmax转换为概率分布,作为对下一时刻输出的概率预测。
编码器与解码器的区别——Mask
编码器对整个序列进行编码
解码器是挨个字符进行解码
Residuals
残差网络技术最早被应用于图像识别领域,因为计算机视觉通常都会使用相当深层的卷积神经网络作为解决方案,而深层的卷积神经网络训练十分困难,于是研究人员提出了残差网络的思想。简单来说,考虑神经网络的一个子部分,图中即两个layer,让这个子层的输出直接加上x,之后再经过非线性激活函数,这样,如果原本这个子层需要学习的函数是F(x),那么现在它要学习的函数就是F(x)+x。这么做能够大大减轻深度神经网络的学习压力。
在Transformer模型中,研究者们研究了残差技术的影响,实践表明,在有残差的情况下,Attention学到了很明显的对角线分布,但在没有残差的情况下Attention几乎没有起到什么作用。
结论
Transformer模型的成功主要体现在两个方面。
首先,Transformer模型相当有效,在机器翻译的两个数据集上,Transformer模型在BLEU指标下取得了当时最好的成绩。
其次,Transformer模型没有使用任何循环或卷积结构,它的理论复杂度和实际训练代价都远小于其他模型,理论上Self-Attention层的时间复杂度与序列长度n的平方成正比,而循环和卷积操作都与维数d的平方成正比,对于机器翻译这样的任务来说,序列长度往往远小于维数,Transformer模型的训练代价自然要小很多。