2017-NIPS-Attention Is All You Need
1. 摘要
这篇文章[1]主要提出了一种新的序列转录神经网络结构:Transformer。在主流的序列转录模型中,往往都是使用编码器+解码器并配合注意力机制,Transformer 也是如此。与以前的主流序列转录模型相比,Transformer 完全没有使用 RNN 和 CNN。在两项机器翻译任务上,Transformer 显示出了强大的性能。
2. 动机
RNN 是经典的处理序列数据的模型,然而它在处理较长的序列数据时,需要一步一步计算出每一个预测数据,因此训练较为困难。同时,如果序列较长时,早期的数据可能就被丢弃而无法被使用。为了解决 RNN 的这些问题,作者借鉴了 CNN 和自注意力的想法,提出了 Transformer 架构。
3. 模型
Transformer 的模型架构如下:

其中, 表示有 个相同的块累在一起; 表示向量相加。上图左边是编码器,右边是解码器。图中黑色实线一分为多表示将数据张量直接复制多份,进入 Multi-Head Attention 的三条实黑线从右往左依次为 (见下一小节),指向 Add & Norm 的单黑色实线表示 shortcut 连接。
- Input Embedding:对输入序列(比如一个句子)进行分词和编码;
- Output Embedding:对之前的输出序列进行分词和编码;
- Add & Norm:即向量相加(shortcut)+ Layer 规范化(不同于 Batch 规范化);
- Feed Forwad:即 MLP 层;
- Multi-Head Attention:多头注意力层;
- Masked Multi-Head Attention:带掩码的多头注意力层;
3.1 注意力
作者在 Transformer 中使用的注意力机制为:
其中, 分别代表 Query、Key 和 Value,对应到 Transformer 架构图中可以发现,进入 Multi-Head Attention 就有三条实黑线,即分别对应 (三者其实是相等的),假设其特征维度为 ; 表示每一个 的维度, 表示每一个 的维度。 是由 乘以一个系数矩阵得到的:
有关 三者具体的维度如下图所示:
![]()
当然,注意力机制也有很多种,作者这里使用的是最简单的一种,即点乘注意力机制,如下图所示。由于除以了一项 ,所以作者称为 Scaled Dot-Product Attention,除以 的主要目的在于防止点乘后,Softmax 对过大的值进一步放大,而过小的值进一步缩小。

-
上图左边部分,Mask 部分是可选的,主要用在解码器中(即 Masked Multi-Head Attention)。Mask 是用来遮盖当前时刻后来的序列,因为 Transformer 一次是处理整个的序列,所以当前时刻前后都能看到,为了维持自回归的特性,作者便采用了这种 Maks 机制:即计算注意力时还是都计算,但在过 Softmax 前通过 Mask 将当前时刻后的时刻的值都乘以一个很小的值比如 这种。
因为在实际预测时,当前时刻还无法得到后来时刻的输出值。所以为了保证在训练阶段和测试阶段的一致性,作者加入了 Mask。
-
上图右边部分,是对左边的单头注意力的改进。具体是由于单头注意力基本没有可学习的参数,所以效果并不好。于是作者提出,可以将 先投影到更低维的空间,投影 次,投影函数即上图所示的 Linear 层;然后对投影后的低维 分别作 Scaled Dot-Product Attention,再拼接到一起,最后使用一个线性层投影回原来的维度。这就是多头注意力的想法,这样相当于多了可学习的投影函数,我们是希望不同的投影函数通过学习能关注到不同的部分,即最后学到不同的投影函数。
这里的多头注意力机制,类似于 CNN 中有多输出通道的想法。
3.2 前向传播
Transformer 中的前向传播层其实本质就是 MLP,唯一的不同是它是 Position-wise 的,即对其输入的每个点都使用同一个 MLP 进行处理。具体公式如下:
其中, 为 维(Transformer 的默认设置), 将 投影到 维, 再将 的输出投影回 维(因为和输入有 Shortcut 连接)。因此,FFN 层就是两层的 MLP。
3.3 位置编码
由于注意力机制是没有任何时序信息的,对 进行相同的乱操作后,其输出还是不变的。这在处理时序数据时就会有问题,因此作者提对序列数据作位置编码,并和输入序列数据加在一起处为 Transformer 的输入。具体的位置编码公式如下:
\begin{align*} P E_{(p o s, 2 i)} &=\sin \left(p o s / 10000^{2 i / d_{\text {model }}}\right) \\ P E_{(p o s, 2 i+1)} &=\cos \left(p o s / 10000^{2 i / d_{\text {model }}}\right) \tag{3} \end{align*}
其中, 是当前词在序列中的位置, 是当前词向量的索引下标。
4. 为什么使用自注意力机制
作者对比了自注意力和循环层、卷积层之间的区别,具体如下图所示:

其中,带限制的自注意力是指做 Query 时只和最近的 个邻居做运算。
- Complexity per Layer:浮点计算量;
- Sequential Operations:计算当前时刻 需要的操作数;
- Maximum Path Length:使用 时刻前的数据需要传递多少步。
参考沐神的解释,下面给出了 Transformer 和 RNN 在处理时序数据的简单对比:

5. 实验
5.1 设置
-
训练数据集:WMT 2014 English-German 数据集;
-
词嵌入:BPE 编码;
-
优化器:Adam(;
-
学习率:,其中 作者设置为 ;
-
正则化:对于 Transformer 中的每一个子层,都对其输出使用了一个 的 Dropout 层;同时,训练时还使用了 Label Smoothing 策略,并设置了 .
Label Smoothing 策略主要是避免 硬标签的学习难度。因为 Softmax 要输出为 ,则那一项需要很大( 才能真正输出 ),因此不利于输出的学习。Label Smoothing 就是把真实标签的值由硬标签改为软标签,比如将 概率降为 的概率(即本文采用的值),当输出大于 时,即认为分类正确。
5.2 结果
作者在两个机器翻译任务上和不同模型的性能进行了对比,如下图所示:

作者还做了消融实验,来对比不同的超参数设置对最终模型的性能的影响,如下图所示:

6. 结论
作者表示,纯使用注意力模块和 MLP 的 Transformer 在机器翻译任务上取得了非常好的效果。而且,Transformer 相比于 RNN 和 CNN 训练起来还更快。同时,作者提出 Transformer 有望用在其它任务上,比如图像任务、视频任务以及多模态任务等。
附录
- Vaswani, A., Shazeer, N., Parmar, N., Uszkoreit, J., Jones, L., Gomez, A. N., ... & Polosukhin, I. (2017). Attention is all you need. Advances in neural information processing systems, 30. ↩
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!