详解 Transformer (Attention Is All You Need)
前言
注意力(Attention)机制[2] 由 Bengio 团队与 2014 年提出并在近年广泛的应用在深度学习中的各个领域,例如在计算机视觉方向用于捕捉图像上的感受野,或者 NLP 中用于定位关键 token 或者特征。谷歌团队近期提出的用于生成词向量的 BERT[3] 算法在 NLP 的 11 项任务中取得了效果的大幅提升,堪称 2018 年深度学习领域最振奋人心的消息。而 BERT 算法的最重要的部分便是本文中提出的 Transformer 的概念。
正如论文的题目所说的,Transformer 中抛弃了传统的 CNN 和 RNN,整个网络结构完全是由 Attention 机制组成。更准确地讲,Transformer 由且仅由 self-Attenion 和 Feed Forward Neural Network 组成。一个基于 Transformer 的可训练的神经网络可以通过堆叠 Transformer 的形式进行搭建,作者的实验是通过搭建编码器和解码器各 6 层,总共 12 层的 Encoder-Decoder,并在机器翻译中取得了 BLEU 值得新高。
作者采用 Attention 机制的原因是考虑到 RNN(或者 LSTM,GRU 等)的计算限制为是顺序的,也就是说 RNN 相关算法只能从左向右依次计算或者从右向左依次计算,这种机制带来了两个问题:
- 时间片 的计算依赖 时刻的计算结果,这样限制了模型的并行能力;
- 顺序计算的过程中信息会丢失,尽管 LSTM 等门机制的结构一定程度上缓解了长期依赖的问题,但是对于特别长期的依赖现象,LSTM 依旧无能为力。
Transformer 的提出解决了上面两个问题,首先它使用了 Attention 机制,将序列中的任意两个位置之间的距离是缩小为一个常量;其次它不是类似 RNN 的顺序结构,因此具有更好的并行性,符合现有的 GPU 框架。论文中给出 Transformer 的定义是:Transformer is the first transduction model relying entirely on self-attention to compute representations of its input and output without using sequence aligned RNNs or convolution。
遗憾的是,作者的论文比较难懂,尤其是 Transformer 的结构细节和实现方式并没有解释清楚。尤其是论文中的 , , 究竟代表什么意思作者并没有说明。通过查阅资料,发现了一篇非常优秀的讲解 Transformer 的技术博客[4]。本文中的大量插图也会从该博客中截取。首先感谢 Jay Alammer 详细的讲解,其次推荐大家去阅读原汁原味的文章。
1. Transformer 详解
1.1 高层 Transformer
论文中的验证 Transformer 的实验室基于机器翻译的,下面我们就以机器翻译为例子详细剖析 Transformer 的结构,在机器翻译中,Transformer 可概括为如图 1:
图 1:Transformer 用于机器翻译
Transformer 的本质上是一个 Encoder-Decoder 的结构,那么图 1 可以表示为图 2 的结构:
图 2:Transformer 的 Encoder-Decoder 结构
如论文中所设置的,编码器由 6 个编码 block 组成,同样解码器是 6 个解码 block 组成。与所有的生成模型相同的是,编码器的输出会作为解码器的输入,如图 3 所示:
图 3:Transformer 的 Encoder 和 Decoder 均由 6 个 block 堆叠而成
我们继续分析每个 encoder 的详细结构:在 Transformer 的 encoder 中,数据首先会经过一个叫做‘self-attention’的模块得到一个加权之后的特征向量 ,这个 便是论文公式 1 中的 :
第一次看到这个公式你可能会一头雾水,在后面的文章中我们会揭开这个公式背后的实际含义,在这一段暂时将其叫做 。
得到 之后,它会被送到 encoder 的下一个模块,即 Feed Forward Neural Network。这个全连接有两层,第一层的激活函数是 ReLU,第二层是一个线性激活函数,可以表示为:
Encoder 的结构如图 4 所示:
图 4:Transformer 由 self-attention 和 Feed Forward neural network 组成
Decoder 的结构如图 5 所示,它和 encoder 的不同之处在于 Decoder 多了一个 Encoder-Decoder Attention,两个 Attention 分别用于计算输入和输出的权值:
- Self-Attention:当前翻译和已经翻译的前文之间的关系;
- Encoder-Decnoder Attention:当前翻译和编码的特征向量之间的关系。
图 5:Transformer 的解码器由 self-attention,encoder-decoder attention 以及 FFNN 组成
1.2 输入编码
1.1 节介绍的就是 Transformer 的主要框架,下面我们将介绍它的输入数据。如图 6 所示,首先通过 Word2Vec 等词嵌入方法将输入语料转化成特征向量,论文中使用的词嵌入的维度为
图 6:单词的输入编码
在最底层的 block 中, 将直接作为 Transformer 的输入,而在其他层中,输入则是上一个 block 的输出。为了画图更简单,我们使用更简单的例子来表示接下来的过程,如图 7 所示:
图 7:输入编码作为一个 tensor 输入到 encoder 中
1.3 Self-Attention
Self-Attention 是 Transformer 最核心的内容,然而作者并没有详细讲解,下面我们来补充一下作者遗漏的地方。回想 Bahdanau 等人提出的用 Attention[2],其核心内容是为输入向量的每个单词学习一个权重,例如在下面的例子中我们判断 it 代指的内容,
The animal didn't cross the street because it was too tired
通过加权之后可以得到类似图 8 的加权情况,在讲解 self-attention 的时候我们也会使用图 8 类似的表示方式
图 8:经典 Attention 可视化示例图
在 self-attention 中,每个单词有 3 个不同的向量,它们分别是 Query 向量( ),Key 向量( )和 Value 向量( ),长度均是 64。它们是通过 3 个不同的权值矩阵由嵌入向量 乘以三个不同的权值矩阵 , , 得到,其中三个矩阵的尺寸也是相同的。均是 。
图 9:Q,K,V 的计算示例图
那么 Query,Key,Value 是什么意思呢?它们在 Attention 的计算中扮演着什么角色呢?我们先看一下 Attention 的计算方法,整个过程可以分成 7 步:
- 如上文,将输入单词转化成嵌入向量;
- 根据嵌入向量得到 , , 三个向量;
- 为每个向量计算一个 score: ;
- 为了梯度的稳定,Transformer 使用了 score 归一化,即除以 ;
- 对 score 施以 softmax 激活函数;
- softmax 点乘 Value 值 ,得到加权的每个输入向量的评分 ;
- 相加之后得到最终的输出结果 : 。
上面步骤的可以表示为图 10 的形式。
图 10:Self-Attention 计算示例图
实际计算过程中是采用基于矩阵的计算方式,那么论文中的 , , 的计算方式如图 11:
图 11:Q,V,K 的矩阵表示
图 10 总结为如图 12 所示的矩阵形式:
图 12:Self-Attention 的矩阵表示
这里也就是公式 1 的计算方式。
在 self-attention 需要强调的最后一点是其采用了残差网络 [5] 中的 short-cut 结构,目的当然是解决深度学习中的退化问题,得到的最终结果如图 13。
图 13:Self-Attention 中的 short-cut 连接
1.3 Multi-Head Attention
Multi-Head Attention 相当于 个不同的 self-attention 的集成(ensemble),在这里我们以 举例说明。Multi-Head Attention 的输出分成 3 步:
- 将数据 分别输入到图 13 所示的 8 个 self-attention 中,得到 8 个加权后的特征矩阵 。
- 将 8 个 按列拼成一个大的特征矩阵;
- 特征矩阵经过一层全连接后得到输出 。
整个过程如图 14 所示:
图 14:Multi-Head Attention
同 self-attention 一样,multi-head attention 也加入了 short-cut 机制。
1.4 Encoder-Decoder Attention
在解码器中,Transformer block 比编码器中多了个 encoder-cecoder attention。在 encoder-decoder attention 中, 来之与解码器的上一个输出, 和 则来自于与编码器的输出。其计算方式完全和图 10 的过程相同。
由于在机器翻译中,解码过程是一个顺序操作的过程,也就是当解码第 个特征向量时,我们只能看到第
及其之前的解码结果,论文中把这种情况下的 multi-head attention 叫做 masked multi-head attention。
1.5 损失层
解码器解码之后,解码的特征向量经过一层激活函数为 softmax 的全连接层之后得到反映每个单词概率的输出向量。此时我们便可以通过 CTC 等损失函数训练模型了。
而一个完整可训练的网络结构便是 encoder 和 decoder 的堆叠(各 个, ),我们可以得到图 15 中的完整的 Transformer 的结构(即论文中的图 1):
图 15:Transformer 的完整结构图
2. 位置编码
截止目前为止,我们介绍的 Transformer 模型并没有捕捉顺序序列的能力,也就是说无论句子的结构怎么打乱,Transformer 都会得到类似的结果。换句话说,Transformer 只是一个功能更强大的词袋模型而已。
为了解决这个问题,论文中在编码词向量时引入了位置编码(Position Embedding)的特征。具体地说,位置编码会在词向量中加入了单词的位置信息,这样 Transformer 就能区分不同位置的单词了。
那么怎么编码这个位置信息呢?常见的模式有:a. 根据数据学习;b. 自己设计编码规则。在这里作者采用了第二种方式。那么这个位置编码该是什么样子呢?通常位置编码是一个长度为 的特征向量,这样便于和词向量进行单位加的操作,如图 16。
图 16:Position Embedding
论文给出的编码公式如下:
在上式中, 表示单词的位置,
表示单词的维度。关于位置编码的实现可在 Google 开源的算法中get_timing_signal_1d()函数找到对应的代码。
作者这么设计的原因是考虑到在 NLP 任务重,除了单词的绝对位置,单词的相对位置也非常重要。根据公式
以及
,这表明位置
的位置向量可以表示为位置 的特征向量的线性变化,这为模型捕捉单词之间的相对位置关系提供了非常大的便利。
3. 总结
优点:(1)虽然 Transformer 最终也没有逃脱传统学习的套路,Transformer 也只是一个全连接(或者是一维卷积)加 Attention 的结合体。但是其设计已经足够有创新,因为其抛弃了在 NLP 中最根本的 RNN 或者 CNN 并且取得了非常不错的效果,算法的设计非常精彩,值得每个深度学习的相关人员仔细研究和品位。(2)Transformer 的设计最大的带来性能提升的关键是将任意两个单词的距离是 1,这对解决 NLP 中棘手的长期依赖问题是非常有效的。(3)Transformer 不仅仅可以应用在 NLP 的机器翻译领域,甚至可以不局限于 NLP 领域,是非常有科研潜力的一个方向。(4)算法的并行性非常好,符合目前的硬件(主要指 GPU)环境。
缺点:(1)粗暴的抛弃 RNN 和 CNN 虽然非常炫技,但是它也使模型丧失了捕捉局部特征的能力,RNN + CNN + Transformer 的结合可能会带来更好的效果。(2)Transformer 失去的位置信息其实在 NLP 中非常重要,而论文中在特征向量中加入 Position Embedding 也只是一个权宜之计,并没有改变 Transformer 结构上的固有缺陷。
Reference
[1] Vaswani A, Shazeer N, Parmar N, et al. Attention is all you need [C]//Advances in Neural Information Processing Systems. 2017: 5998-6008.
[2] Bahdanau D, Cho K, Bengio Y. Neural machine translation by jointly learning to align and translate[J]. arXiv preprint arXiv:1409.0473, 2014.
[3] Devlin J, Chang M W, Lee K, et al. BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding[J]. arXiv preprint arXiv:1810.04805, 2018.
[4] http://jalammar.github.io/illustrated-transformer
[5] He K, Zhang X, Ren S, et al. Deep residual learning for image recognition[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2016: 770-778.
时间:2019-05-20 13:11 来源: 转发量:次
声明:本站部分作品是由网友自主投稿和发布、编辑整理上传,对此类作品本站仅提供交流平台,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,不为其版权负责。如果您发现网站上有侵犯您的知识产权的作品,请与我们取得联系,我们会及时修改或删除。
相关文章:
- [机器学习]来自Facebook AI的多任务多模态的统一Transformer:向
- [机器学习]一文详解深度学习最常用的 10 个激活函数
- [机器学习]更深、更轻量级的Transformer!Facebook提出:DeLigh
- [机器学习]AAAI21最佳论文Informer:效果远超Transformer的长序列
- [机器学习]深度学习中的3个秘密:集成、知识蒸馏和蒸馏
- [机器学习]让研究人员绞尽脑汁的Transformer位置编码
- [机器学习]堪比当年的LSTM,Transformer引燃机器学习圈:它是
- [机器学习]深度学习三大谜团:集成、知识蒸馏和自蒸馏
- [机器学习]Transformer又又来了,生成配有音乐的丝滑3D舞蹈,
- [机器学习]Transformer为何能闯入CV界秒杀CNN?
相关推荐:
网友评论: