【论文阅读】Attention Is All You Need

1 论文链接

https://arxiv.org/abs/1706.03762

2 简介

早期普遍使用RNN来处理翻译任务,它是把输入和输出序列化为token,然后对每个token逐步计算。输入为上一轮计算的状态和当前的输入token,输出为下一轮的状态和输出token。所谓token就是一个单词或一个分词,起始符,终止符等组成,然后映射到一个具体的数值表中。这个结构的输入和输出也被称为编码器-解码器架构。

RNN的主要问题在于编码器和解码器中间通过一个状态传递信息,在处理长序列问题中计算效率和表现不太行,而且必须串行执行,效率低。于是,作者提出了基于注意力机制Transformer架构。它能够并行化训练,在8块P100训练12小时就能取得不错的效果。

3 模型结构

编码器由6个相同的层组成,图中仅展示了一个子层,每个子层中第一个是多头注意力机制捕捉不同位置之间的全局依赖关,第二个是全连接前馈神经网络主要用于非线性变换和特征提取。两个子层都使用了 层归一化和残差连接来保持梯度稳定并提升训练效率,可能是为了在深层网络中保持有效梯度传递和加速收敛。全连接层的作用是为了低维数据(512)扩展到高维(2048)输出。

图一

3.1 嵌入层

图中的embedding layer来源过程如下,句子->token化->token ID->嵌入层(d=512),这样一个词就由一个512维的稠密向量,例如[1.212, 3.234, 5.111, …]所对应的表示“我”。这样一段句子本质上就是一个嵌入矩阵作为输入。Positional Encoding是为了捕捉单词之间的顺序关系,计算公式如下,pos是位置,i是嵌入向量的索引,d=512。 \begin{align} PE_{(pos, 2i)} &= \sin \left( \frac{pos}{10000^{\frac{2i}{d}}} \right) \ PE_{(pos, 2i+1)} &= \cos \left( \frac{pos}{10000^{\frac{2i}{d}}} \right) \end{align}

3.2 多头注意力

文中的多头注意力是由8个缩放点乘积注意力合并得到的,先说缩放点积注意力。Q,K,V是一组抽象的概念,Q直观说就是生成的方向,K用于输入信息匹配,QK内积得到当前位置哪个输出信息最相关,一轮计算得到两个内容,注意力输出表示全局上下文重要信息,权重表示查询位置Q对K的重要程度。 \begin{align} \text{Attention}(Q, K, V) &= \text{softmax} \left( \frac{Q K^T}{\sqrt{d_k}} \right) V \end{align}

3.3 前馈神经网络

扩大维度至2048,捕捉更复杂的特征。Relu将函数变为非线形运算是精髓,是产生智能学习质变的关键之一。

\begin{align} FFN(x) &= \max(0, x W_1 + b_1) W_2 + b_2 \end{align}

3.4 注意力在模型中的应用

文中用自注意力层和循环层,卷积层做比较,都是把一个向量映射到另一个向量,比如隐藏层在编码器和解码器之间的作用。通过对计算复杂度,并行化,最长路径网络的比较,自注意力的时间复杂度明显是比其余两者更低的。

Tranformer运用多头注意力在下面三个方面

  • 在编码器-解码器层中,Q来自于上一个解码层的输出,而K,V来源于上一个解码层输出。这样使得解码器的每个位置都能获取输入序列的所有位置。
  • 编码器中的自注意力层,所有的Q,K,V来自于相同的来源。编码器中,它们来源于前一层的输出,第一层来源于嵌入层。这样做生成某个位置的单词时可以考虑输入序列的任意位置单词,捕捉长距离依赖关系。
  • 解码器的自注意力层同样能能关注到第一个位置到当前输出位置的信息,为了保证自回归,训练中不能提前知道未来的词,将未来位置的注意力权重设置负无穷,softmax就会输出0的概率。

4 训练

使用了Adam优化器,β1 = 0.9, β2 = 0.98 and ϵ= 10−9和动态学习率算法。

正则化方法,残差连接+每个子层dropout概率0.1+标签平滑处理

5 评价

相比于RNN和CNN最显著的优点就是能够并行化,缩短计算时间,并且能够合适地处理长序列,捕捉上下序列重要信息。我认为他的缺点是必须要提供大量的数据集才能有较理想的效果,个人设备训练时很容易因数据集不足或模型参数少造成过拟合。

0%