1 基础背景
由Google机器翻译Google Brain团队发表。
论文链接:https://arxiv.org/abs/1706.03762
源码链接:https://github.com/tensorflow/tensor2tensor
一句话概述:Attention机制摒弃了循环神经网络和卷积神经网络,一经提出就在机器翻译领域达到了SOTA。
2 Motivation
LSTM和CNN存在如下问题。
LSTM是循环执行的,依赖前一项隐藏层信息h(t-1),天然不适合并行,而且受限于隐藏层大小,更容易丢失以前的信息。
CNN需要很多层才能把距离很远的像素或者输入联系起来,输入长度和计算复杂度成线性关系,导致(1)难以学习远距离的输入;(2)网络结构更加复杂;Transformer能够一次将所有的像素或者输入联系起来。
训练时间都很长。Transformer因为不依赖之前的信息,所以可以进行并行可算,减少计算时间。
3 解决思路
其网络结构如下所示。
3.1 Encoder
- Input Embedding
这一步将一个单词src变成一个向量。 - Positional Encoding
因为Transformer本身并不关注词源和词源之间的位置关系,每个词源会和其他词源做注意力机制,所以缺少对词源在句子中的位置的信息的捕获,在这一步通过加入位置信息,来引导Transformer理解词源的位置。 - A stack of 6 identical layers(MultiHead + Add&Norm + FeedForward + Add&Norm)
(1)Attention
Attention一般分为加和additive注意力和点积dot product注意力。
本文使用的是Scaled dot product attention,是对【QKT】除以【根号下向量长度】
假设存在n个词源,Q的大小为 n x dk,K的大小为 n x dk,得到 n x n 的矩阵,再进行缩放。
缩放的原因是:在向量长度过长后,向量之间差异较大(部分维度的值大,部分小),算出来的值差异大,经过softmax之后会分别靠向0和1,除以dk之后差异变小,就一定程度上避免向两端靠拢。
注意:softmax是针对每个词源的,而不是所有放一起做。
softmax之后的矩阵维度是 n x n,可以看做一个权重矩阵,再乘以V。
本文采用了Multi-head attention
在获取Q/K/V矩阵之后,将其分为h个head,每个head i有自己的Wqi/Wki/Wvi,分别乘以QKV,得到每个head对应的Qi/Ki/Vi,其维度是原本的1/h,这个head相当于创建了subspace,进行更丰富的依赖关系学习,生成的向量di再拼起来,再经过一次线性变换后得到完整的输出。
(2)Add
借鉴了Resnet网络,将输入直接加到输出中,可以避免梯度消失或梯度爆炸。
(3)Norm
这一层Norm采用的是LayerNorm,不是Batchnorm。
(4)Feedforward
feedforward层 = linear(512-2048) + relu + linear(2048-512),因为是针对每个词源的,所以叫position-wise。因为之前一步的注意力已经获取了词源和词源之间的联系,所以这一步只需要针对单个词源就可以。
3.2 Decoder
- A stack of 6 identical layers(MultiHead + Add&Norm + FeedForward + Add&Norm)
Encoder的输出同时作为Key和Value,即这两个矩阵是相同的。
(1)Masked multi-head attention
因为在实际使用时,是使用的自回归auto-regression,所以前一个词预测出来之后,才会预测后一个词。
因此,在输入时,也应该到第t个词的时候,掩盖掉t+1之后的词,具体方式是计算完QKT之后将其设置为负无穷大,那么softmax之后就变成了0,相当于0权重。
masking out (setting to −∞) all values in the input of the softmax
4 复杂度分析
复杂度如下表
(1)当句子长度n小于token维度d时,self-attention的复杂度会低于RNN;
(2)卷积神经网络核大小k一般小于n,但是需要很多层卷积才能联系起来;
(3)如果句子长度太大了,可以限制每个词源的搜索范围,只限定和附近r个做注意力机制。
5 结果
在英语转德语的比赛和英语转法语的比赛中,均达到了SOTA。
6 知识补充
batchnorm | layernorm | |
---|---|---|
相同点 | 都是针对某部分输入进行标准化 | |
不同点 | 针对某一个feature,对所有样本进行标准化 | 针对某一个样本,对所有feature进行标准化 |
7 评价
1.相比于RNN,Transformer更少关注之前的序列信息,导致序列信息capture sequential information获取更难。
2.位置信息使用偏少lack of explicit modeling of positional information。这导致难以获取长范围的信息may not capture long-range dependencies。
3.难以获取局部的模式difficulty in capturing local patterns。因为CNN通过卷积和池化能够把局部信息联系起来,而Transformer更容易忽略这些信息。
4.Transformer的时间复杂度与序列长度成平方关系,而RNN和CNN与序列长度成正比,所以在数据集太大的时候,计算复杂度会更高computational complexity。