一、摘要
- 传统的字符转换模型都是基于编码器和解码器的循环神经网络或卷积神经网络。
- 本文提出了一个完全基于注意力机制的模型。
- 在WMT 2014 English-to-German 数据集上,模型获得28.4的BLEU值,超过所有模型2个BLEU
二、介绍
- 循环神经网络的缺点主要是无法实现并行计算。(因子分解的方法在很大程度上可以缓解这一问题)。
- 注意力机制现在被广泛应用,注意力机制不需要考虑在输入和输出序列上的距离问题。
- 本文提出了transformer模型,该模型抛弃了循环网络的架构。提出了更加支持并行化的模型。
三、背景
- transformer中使用了多头注意力机制
- 自注意力机制也称为内部注意力,其主要思想就是考虑单个序列中不同位置之间的联系,从而抽取序列的特征表示。
四、模型架构
-
传统的编码器-解码器架构是分为两部分进行。首先,通过将一个序列的特征( x 1 , . . . , x n x_1,...,x_n x1,...,xn)输入到编码器中,然后经过编码器转换成编码器结果的特征表示( z 1 , . . . , z n z_1,...,z_n z1,...,zn)。再将编码器得到的z输入到解码器中,得到最终的结果y。
-
Transformer的基本架构如下:
-
Encoder部分的主要内容:
encoder是由N个encoder block组成的,每个encoder block里面包含两个小的模块。第一个模块是一个多头注意力机制,第二个模块是一个简单的位置前馈神经网络。并且每个模块配合使用残差连接和layer normalization。用公式表达如下:
L a y e r N o r m ( x + S u b l a y e r ( x ) ) LayerNorm(x+Sublayer(x)) LayerNorm(x+Sublayer(x)) -
decoder部分的主要内容:
decoder同样是由N个decoder block组成的,每个decoder block里面包含三个小的模块。第一个模块是一个遮蔽的多头注意力,第二个模块是一个多头注意力机制,第三个模块也是一个简单的位置前馈神经网络。每一个模块同样使用了残差连接和layer normalization。
其中有以下几个方面需要注意一下:
-
decoder中有一个遮蔽的多头注意力机制,这个主要是为了在训练的时候,使得注意力机制无法“偷看到答案”。当decoder用于预测的时候,就不需要进行遮蔽了,因为在预测的时候,我们也无法看到还没有预测的。
-
在进行训练的时候,我们会在原始序列中加入一个标签,作为序列的开始,从而通过标签开始对第一个的预测。在进行预测的时候,我们会不断地添加预测出来的词作为query,所以是一个不断叠加的过程。
-
-
注意力部分的主要内容:
注意力机制包括两个部分:query(查询)、key-value(键值对)。输出值是使用权重 X value得到的,权重是使用一个恰当的函数计算query和key之间的关系得到的。
我们比较常用的注意力分数计算方式主要包括下面两种:
-
Scaled Dot-Product Attention(缩放点积注意力)
其主要的思想如下图所示:
缩放点注意力要求query和key拥有相同的向量维度,然后进行点积,然后除以 d k \sqrt d_k dk,最后再经过softmax,乘以value得到最终结果。公式表达如下:
-
Additive Attention(加性注意力)
Additive Attention的具体公式表达如下:
其中,
这种注意力方式的计算需要确定一个超参数:隐藏单元数h,tanh为一个激活函数。
-
-
-
多头注意力部分的主要内容
研究发现使用多头注意力相比于单一注意力会有更好的效果,具体思想如下图所示:
多头注意力可以从数据中抽取不同维度的特征表示,主要思想就是使用多头注意力分别抽取不同的特征,然后使用concat方法进行连接,通过一个线性层进行最后的输出。公式表示如下:
-
注意力机制在模型中的应用
在解码器中的第二个注意力机制中,query是来自decoder的,而key和value是来自于encoder的输出结果的。这样使得decoder能够观察到整个输入序列。
-
基于位置的前馈神经网络
基于位置的前馈神经网络其实就是一个简单的MLP,用来学习位置信息,公式如下图所示:
-
Embedding层
在两个Embedding层中,采用了共同的权重。
-
Positional Encoding
我们的模型中,必须要包含序列中的相对和绝对位置信息。因为注意力机制会无视距离,所以通过positional encoding能够加入相对和绝对位置信息。
在本文中使用sin函数来添加位置信息,具体公式如下:
其中 p o s pos pos代表位置, i i i代表向量的维度。
-
为什么使用自注意力?
- 计算复杂度没有其他模型高,并且模型的并行度相比于其他的模型高。
- 在处理长序列的时候更有优势
五、训练
- 使用了Adam optimizer
- dropout=0.1
六、结果
- 采用束搜索去搜索最优参数
- 多头注意力也不是越多的头就一定越好