Press "Enter" to skip to content

再品 Attention Is All You Need

Abstract

 

文本提出一个全新的特征提取器——Transformer,其完全摒弃了循环(recurrence)和卷积(convolutions)的结构,仅仅依赖attention机制就能在多个任务上达到SOTA的效果。

 

Model Architecture

 

1. Encoder and Decoder Stacks

 

Encoder:

 

Encoder由6个相同的层堆叠而成,每个层又有两个子层:第一个子层是 multi-head self-attention机制 层,第二个子层是 position-wise fully connected feed-forward network(FCFFN) 。在每个子层,都应用了 残差连接(residual connection) ,然后再加一个 layer normalizatoin 。

 

Decoder:

 

整体上和Encoder部分相同。不同之处是:

 

 

在第一个子层(multi-head self-attention)和第二个子层(position-wise FCFFN)之间,额外多了一个 multi-head self-attention层 ——将从Encoder传过来的结果进行multi-head attention操作,该层也叫作 Encoder-Decoder Attention 。

 

修改了第一个子层的multi-head self-attention为 masked multi-head self-attention。这里 masking 的作用是,让对位置处的预测仅仅依赖于位置处之前的输出(其实这里我也没有搞懂masking的作用是什幺…)。

 

 

那幺,Transformer的整体架构如图1所示:

 

图1. Transformer整体架构

2. Multi-Head Self-Attention

 

2.1 Scaled Dot-Product Attention

 

Scaled Dot-Product Attention一般翻译做”缩放点积attention”。我们假定query和key的维度都为,value的维度为,query、key和value均为向量。

 

一般,在attention机制中,我们使用一个query和一组key做点积(dot-product),然后再对该结果套用一个softmax得到一组权重(weights),将该权重应用到一组value之上,得到的就是我们的attention。

 

在本文中, Scaled Dot-Product Attention 的做法基本上和上述相同,除了多了一个将query和key的点积结果除以的操作,即**缩放(scaled)**操作。在实际使用中query有多个,为了能同时对这些query进行attention操作,将这些query拼成一个矩阵。同理,由keys和values我们可以得到和。“缩放点积attention”过程可视化为图2所示。本文的Scaled Dot-Product Attention操作可以用公式描述成如下:

 

原文也解释了使用”缩放”操作的原因:当很大时,和的点积结果会变得很大,其方差也会很大,这会让softmax函数的梯度变得异常的小,将点积结果除以可以抵消这个影响。这是因为,我们可以把softmax公式写成:

 

softmax函数是在定义域上是可微的,那幺对其求导,就得到梯度:

 

显然无论是还是时, 和都会很大(和的点积结果很大),那幺都是负值且很小。

 

另外,原文中也探讨了 additive attention 和 dot-product attention 的异同。

 

图2.Scaled Dot-Product Attention

2.2 Multi-Head Attention

 

接下来我们阐述怎幺在上面的“缩放点积attention”的基础上进行“多头attention”操作。

 

首先将Q、K和V进行个不同的线性变换操作,得到, 变换矩阵均为模型参数,。然后对这些进行“缩放点积attention”操作,将得到的结果进行拼接(concat)。最后,对这个拼接结果进行一个线性变化操作,使用的变化矩阵是。过程可视化为图x所示。Multi-Head Attention操作可以形式化地描述成如下:

 

这里进行初始线性变换的Q, K, V的和的长度为原始值的,因为最后进行了一个concat操作。另外,需要注意的是, 所谓Self-Attention,是因为Q,K,V均为相同的 。

 

图3.Multi-Head Attention

3. Position-wise FFN, Embedding and Softmax

 

3.1 Position-wise FFN

 

和其他所有的全连接层类似,这里的全连接包含了 两次变化 ,使用的是 ReLU激活函数 。形式化描述如下公式:

 

3.2 Embedding and Softmax

 

作者使用了预训练的向量(learned embeddings)来表示输入和输出tokens,维度大小为。在Decoder输出的最后,使用了一个线性映射变化和一个softmax来将输出转换为概率。此外,两个embeddings层和线性变化使用的都是同一个权重矩阵。

 

4. Positional Encoding

 

到目前为止,模型中并没有可以准确学习到序列位置信息的神经网络组件。为了能学习到序列中相对或者绝对的位置信息,实际上有两种选择: positional encoding 和 learned positional embedding 。本文采取了前者。

 

在实际使用过程中,positional encoding的维度和embeddings的维度大小均设置为,然后会将两者相加(sum)。如图1中底部部分所示。作者对不同的频率应用sin和cos函数,公式如下:

 

其中,即position,意为token在句中的位置,设句子长度为L,则 ; i 为向量的某一维度,例如,出处。

 

Positional Encoding的每一维对应一个正弦曲线,其波长形成一个从到10000*的等比级数。这样做的理由是,作者认为这样可以使模型更易学习到相对位置,因为对于某个任意确定的偏移值,可被表示为的一个线性变换结果。

 

5. Training

 

在Transformer的训练过程中,也有一些很有意思的tricks,值得在这里提一提。

 

5.1 Warmup

 

本文在这里的做法是:先在模型初始训练的时候,把学习率设在一个很小的值,然后warmup到一个大学习率,后面再进行衰减。所以,刚开始是warmup的热身过程,是一个线性增大的过程,到后面才开始衰减。

 

5.2 Regularization

 

1). Residual Dropout

 

在前面已经叙述过,在每个网络子层处,都使用了残差连接;另外,前面没有提过的是,在Encoder和Decoder中将embeddings和positional encodings相加后的和也使用了dropout。

 

2). Label Smoothing

 

即标签平滑,目的是防止过拟合。论文中说,标签平滑虽会影响ppl(perplexity),但能提高模型的准确率和BLEU分数。

 

Conclusion

 

 

它本质上是一个seq2seq的结构,仅仅依赖self-attention,完全摒弃CNN和RNN;

 

Encoder中包含两个子层,第一个子层是Multi-Head Self-Attention,第二个子层是一个全连接层;

 

Decoder中包含三个子层,第一个子层是Masked Multi-Head Self-Attention,第二个子层是Encoder-Decoder Attention,第三个子层是一个全连接层;

 

值得注意的是,上述的每个子层中,都用到了残差连接和Layer Normalizatoin;

 

 

Read More

 

这里推荐一些超棒的适合进阶的Transformer 相关博文 和 知乎讨论 :

 

博文:

 

 

碎碎念:Transformer的细枝末节( https://zhuanlan.zhihu.com/p/60821628 )

 

[整理] 聊聊 Transformer( https://zhuanlan.zhihu.com/p/47812375 )

 

《Attention is All You Need》浅读(简介+代码)( https://kexue.fm/archives/4765 )

 

香侬读 | Transformer中warm-up和LayerNorm的重要性探究( https://zhuanlan.zhihu.com/p/84614490 )

 

 

知乎讨论:

 

 

为什幺Transformer 需要进行 Multi-head Attention?( https://www.zhihu.com/question/341222779/answer/814111138 )

 

Transformer使用position encoding会影响输入embedding的原特征吗?( https://www.zhihu.com/question/350116316/answer/863151712 )

 

如何理解Transformer论文中的positional encoding,和三角函数有什幺关系?( https://www.zhihu.com/question/347678607/answer/835053468 )

 

神经网络中 warmup 策略为什幺有效;有什幺理论解释幺?( https://www.zhihu.com/question/338066667/answer/771252708 )

 

 

Reference

 

Attention Is All You Need( https://arxiv.org/abs/1706.03762 )

 

本文转载自公众号: NLP太难了,作者小占同学

Be First to Comment

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注