1. 摘要

这篇文章[1]主要提出了一种新的序列转录神经网络结构:Transformer。在主流的序列转录模型中,往往都是使用编码器+解码器并配合注意力机制,Transformer 也是如此。与以前的主流序列转录模型相比,Transformer 完全没有使用 RNN 和 CNN。在两项机器翻译任务上,Transformer 显示出了强大的性能。

2. 动机

RNN 是经典的处理序列数据的模型,然而它在处理较长的序列数据时,需要一步一步计算出每一个预测数据,因此训练较为困难。同时,如果序列较长时,早期的数据可能就被丢弃而无法被使用。为了解决 RNN 的这些问题,作者借鉴了 CNN 和自注意力的想法,提出了 Transformer 架构。

3. 模型

Transformer 的模型架构如下:

其中,N×N\times 表示有 NN 个相同的块累在一起;\oplus 表示向量相加。上图左边是编码器,右边是解码器。图中黑色实线一分为多表示将数据张量直接复制多份,进入 Multi-Head Attention 的三条实黑线从右往左依次为 Q,K,VQ, K, V(见下一小节),指向 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 中使用的注意力机制为:

Attention(Q,K,V)=softmax(QKTdk)V(1)\operatorname{Attention}(Q, K, V)=\operatorname{softmax}\left(\frac{Q K^{T}}{\sqrt{d_{k}}}\right) V \tag{1}

其中,Q,K,VQ, K, V 分别代表 Query、Key 和 Value,对应到 Transformer 架构图中可以发现,进入 Multi-Head Attention 就有三条实黑线,即分别对应 Q^,K^,V^\hat{Q}, \hat{K}, \hat{V}(三者其实是相等的),假设其特征维度为 CCdkd_k 表示每一个 KK 的维度,dvd_v 表示每一个 VV 的维度。Q,K,VQ, K, V 是由 Q^,K^,V^\hat{Q}, \hat{K}, \hat{V} 乘以一个系数矩阵得到的:

Q=Q^DQ,DQRC×dkK=K^DK,DKRC×dkV=V^DV,DVRC×dvQ = \hat{Q} D_Q, D_Q \in \mathbb{R}^{C \times d_k} \\ K = \hat{K} D_K, D_K \in \mathbb{R}^{C \times d_k} \\ V = \hat{V} D_V, D_V \in \mathbb{R}^{C \times d_v} \\

有关 Q,K,VQ, K, V 三者具体的维度如下图所示:

当然,注意力机制也有很多种,作者这里使用的是最简单的一种,即点乘注意力机制,如下图所示。由于除以了一项 dk\sqrt{d_k},所以作者称为 Scaled Dot-Product Attention,除以 dk\sqrt{d_k} 的主要目的在于防止点乘后,Softmax 对过大的值进一步放大,而过小的值进一步缩小。

  • 上图左边部分,Mask 部分是可选的,主要用在解码器中(即 Masked Multi-Head Attention)。Mask 是用来遮盖当前时刻后来的序列,因为 Transformer 一次是处理整个的序列,所以当前时刻前后都能看到,为了维持自回归的特性,作者便采用了这种 Maks 机制:即计算注意力时还是都计算,但在过 Softmax 前通过 Mask 将当前时刻后的时刻的值都乘以一个很小的值比如 1010-10^{10} 这种。

    因为在实际预测时,当前时刻还无法得到后来时刻的输出值。所以为了保证在训练阶段和测试阶段的一致性,作者加入了 Mask。

  • 上图右边部分,是对左边的单头注意力的改进。具体是由于单头注意力基本没有可学习的参数,所以效果并不好。于是作者提出,可以将 Q,K,VQ, K, V 先投影到更低维的空间,投影 hh 次,投影函数即上图所示的 Linear 层;然后对投影后的低维 Ql,Kl,VlQ_l, K_l, V_l 分别作 Scaled Dot-Product Attention,再拼接到一起,最后使用一个线性层投影回原来的维度。这就是多头注意力的想法,这样相当于多了可学习的投影函数,我们是希望不同的投影函数通过学习能关注到不同的部分,即最后学到不同的投影函数。

    这里的多头注意力机制,类似于 CNN 中有多输出通道的想法。

3.2 前向传播

Transformer 中的前向传播层其实本质就是 MLP,唯一的不同是它是 Position-wise 的,即对其输入的每个点都使用同一个 MLP 进行处理。具体公式如下:

FFN(x)=max(0,xW1+b1)W2+b2(2)\operatorname{FFN}(x)=\max \left(0, x W_{1}+b_{1}\right) W_{2}+b_{2} \tag{2}

其中, xx512512 维(Transformer 的默认设置),W1W_1xx 投影到 20482048 维,W2W_2 再将 W1W_1 的输出投影回 512512 维(因为和输入有 Shortcut 连接)。因此,FFN 层就是两层的 MLP。

3.3 位置编码

由于注意力机制是没有任何时序信息的,对 Q,K,VQ, K, V 进行相同的乱操作后,其输出还是不变的。这在处理时序数据时就会有问题,因此作者提对序列数据作位置编码,并和输入序列数据加在一起处为 Transformer 的输入。具体的位置编码公式如下:

PE(pos,2i)=sin(pos/100002i/dmodel )PE(pos,2i+1)=cos(pos/100002i/dmodel )(3)\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*}

其中,pospos 是当前词在序列中的位置,ii 是当前词向量的索引下标。

4. 为什么使用自注意力机制

作者对比了自注意力和循环层、卷积层之间的区别,具体如下图所示:

其中,带限制的自注意力是指做 Query 时只和最近的 rr 个邻居做运算。

  • Complexity per Layer:浮点计算量;
  • Sequential Operations:计算当前时刻 nn 需要的操作数;
  • Maximum Path Length:使用 nn 时刻前的数据需要传递多少步。

参考沐神的解释,下面给出了 Transformer 和 RNN 在处理时序数据的简单对比:

5. 实验

5.1 设置

  • 训练数据集:WMT 2014 English-German 数据集;

  • 词嵌入:BPE 编码;

  • 优化器:Adam(β1=0.9,β2=0.98,ϵ=109\beta_1 = 0.9, \beta_2 = 0.98, \epsilon = 10^{-9}

  • 学习率 lrate =dmodel 0.5min( step_num 0.5, step_num  warmup_steps 1.5)\text { lrate }=d_{\text {model }}^{-0.5} \cdot \min \left(\text { step\_num }^{-0.5}, \text { step\_num } \cdot \text { warmup\_steps }^{-1.5}\right),其中  warmup_steps \text { warmup\_steps } 作者设置为 40004000

  • 正则化:对于 Transformer 中的每一个子层,都对其输出使用了一个 Pdrop=0.1P_{\text{drop}} = 0.1 的 Dropout 层;同时,训练时还使用了 Label Smoothing 策略,并设置了 ϵls=0.1\epsilon_{ls} = 0.1.

    Label Smoothing 策略主要是避免 0,10, 1 硬标签的学习难度。因为 Softmax 要输出为 11,则那一项需要很大(\infty 才能真正输出 11),因此不利于输出的学习。Label Smoothing 就是把真实标签的值由硬标签改为软标签,比如将 11 概率降为 0.10.1 的概率(即本文采用的值),当输出大于 0.10.1 时,即认为分类正确。

5.2 结果

作者在两个机器翻译任务上和不同模型的性能进行了对比,如下图所示:

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

6. 结论

作者表示,纯使用注意力模块和 MLP 的 Transformer 在机器翻译任务上取得了非常好的效果。而且,Transformer 相比于 RNN 和 CNN 训练起来还更快。同时,作者提出 Transformer 有望用在其它任务上,比如图像任务、视频任务以及多模态任务等。

附录


  1. 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. ↩︎