Transformer模型通俗理解
⽬录
Transformer
1. 前⾔
正如论⽂的题⽬所说的,Transformer中抛弃了传统的CNN和RNN,整个⽹络结构完全是由Attention机制组成。更准确地讲,Transformer由且仅由self-Attenion和Feed Forward Neural Network组成。⼀个基于Transformer的可训练的神经⽹络可以通过堆叠Transformer的形式进⾏搭建,作者的实验是通过搭建编码器和解码器各6层,总共12层的Encoder-Decoder,并在机器翻译中刷新了BLEU值。
作者采⽤Attention机制的原因是考虑到RNN(或者LSTM,GRU等)的计算限制为是顺序的,也就是说RNN相关算法只能从左向右依次计算或者从右向左依次计算,这种机制带来了两个问题:
1. 时间⽚t的计算依赖t-1时刻的计算结果,这样限制了模型的并⾏能⼒;
2. 顺序计算的过程中信息会丢失,尽管LSTM等门机制的结构⼀定程度上缓解了长期依赖的问题,但是对于特别长的依赖关系,LSTM依旧⽆能为⼒。
Transformer的提出解决了上⾯两个问题,⾸先它使⽤了Attention机制,将序列中的任意两个位置之间的距离是缩⼩为⼀个常量;其次它不是类似RNN的顺序结构,因此具有更好的并⾏性,符合现有的GPU框架。
说明:该笔记总结的图⽚来源于的博客,前⾔部分来⾃知乎的总结, 谢谢两位⼤佬的分享。本篇是结合⾃⼰的理解翻译中⽂,有错误的地⽅,请在评论区中留⾔。
2. Transformer详解
2.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’的模块得到⼀个加权之后的特征向量Z,这个便Z是论⽂公式1中
的Attension(Q,K,V) :
Attension(Q,K,V)=softmax(\frac{QK^T}{d_k^{1/2}})V
第⼀次看到这个公式你可能会⼀头雾⽔,在后⾯的⽂章中我们会揭开这个公式背后的实际含义,在这⼀段暂时将其叫做Z。得到Z之后,它会被送到encoder的下⼀个模块,即Feed Forward Neural Network。这个全连接有两层,第⼀层的激活函数是ReLU,第⼆层是⼀个线性激活函数,可以表⽰为:
FFN=max(0,ZW_1+b_1)W_2+b_2
Encoder的结构如图4所⽰
图4:Transformer由self-attention和Feed Forward neural network组成
Decoder的结构如图5所⽰,它和encoder的不同之处在于Decoder多了⼀个Encoder-Decoder Attention,两个Attention分别⽤于计算输⼊和输出的权值
1. Self-Attention:当前翻译和已经翻译的前⽂之间的关系;
2. Encoder-Decoder Attention:当前翻译和编码的特征向量之间的关系。
图5:Transformer的解码器由self-attention,encoder-decoder attention以及FFNN组成
2.2 输⼊编码
1.1节介绍的就是Transformer的主要框架,下⾯我们将介绍它的输⼊数据。如图6所⽰,⾸先通过Word2Vec等词嵌⼊⽅法将输⼊语料转化成特征向量,论⽂中使⽤的词嵌⼊的维度为d_{model}=512
图6:单词的输⼊编码
在最底层的block中,x将直接作为Transformer的输⼊,⽽在其他层中,输⼊则是上⼀个block的输出。为了画图更简单,我们使⽤更简单的例⼦来表⽰接下来的过程,如图7所⽰:
图7:输⼊编码作为⼀个tensor输⼊到encoder中
2.3 Self-Attention
Self-Attention是Transformer最核⼼的内容,然⽽作者并没有详细讲解,下⾯我们来补充⼀下作者遗漏的地⽅。回想Bahdanau等⼈提出的⽤Attention,其核⼼内容是为输⼊向量的每个单词学习⼀个权重,例如在下⾯的例⼦中我们判断it代指的内容
The animal didn't cross the street because it was too tired
通过加权之后可以得到类似图8的加权情况,在讲解self-attention的时候我们也会使⽤图8类似的表⽰⽅式:
图8:经典Attention可视化⽰例图
在self-attention中,每个单词有3个不同的向量,它们分别是Query向量(Q),Key向量(K)和Value向量(V),长度均是64。它们是通过3个不同的权值矩阵由嵌⼊向量X乘以三个不同的权值矩阵W^Q, W^K, W^V得到,其中三个矩阵的尺⼨也是相同的。均是512\times 64。
图9:Q,K,V的计算⽰例图
那么Query,Key,Value是什么意思呢?它们在Attention的计算中扮演着什么⾓⾊呢?我们先看⼀下Attention的计算⽅法,整个过程可以分成7步:
1. 如上⽂,将输⼊单词转化成嵌⼊向量;
2. 根据嵌⼊向量得到q, k, v三个向量;
3. 为每个向量计算⼀个score:score=q*k;
4. 为了梯度的稳定,Transformer使⽤了score归⼀化,即除以d_k^{1/2};
5. 对score施以softmax激活函数;
6. softmax点乘Value值v,得到加权的每个输⼊向量的评分v;
7. 相加之后得到最终的输出结果z=\sum v。
上⾯步骤的可以表⽰为图10的形式。
图10:Self-Attention计算⽰例图
实际计算过程中是采⽤基于矩阵的计算⽅式,那么论⽂中的Q, V, K的计算⽅式如图11:
图11:Q,V,K的矩阵表⽰
如图12所⽰的矩阵形式,这个softmax分数决定了每个单词对编码当下位置(“Thinking”)的贡献。显然,已经在这个位置上的单词将获得最⾼的softmax分数,上述第三步和第四步是将分数除以8(8是论⽂中使⽤的键向量的维数64的平⽅根,这会让梯度更稳定。这⾥也可以使⽤其它值,8只是默认值),然后通过softmax传递结果。softmax的作⽤是使所有单词的分数归⼀化,得到的分数都是正值且和为1。
图12:Self-Attention的矩阵表⽰
这⾥也就是公式1的计算⽅式。在self-attention需要强调的最后⼀点是其采⽤了残差⽹络中的short-cut结构,⽬的当然是解决深度学习中的退化问题,得到的最终结果如图13。
图13:Self-Attention中的short-cut连接
decoder
2.4 Multi-Head Attention
Multi-Head Attention相当于h个不同的self-attention的集成(ensemble),在这⾥我们以h=8举例说明。Multi-Head Attention的输出分成3步:
1. 将数据X分别输⼊到图13所⽰的8个self-attention中,得到8个加权后的特征矩阵Z_i, i\in {1,2,...,8}。
2. 将8个Z_i按列拼成⼀个⼤的特征矩阵(512, 64\times8)。
3. 特征矩阵经过⼀层全连接后得到输出Z。
整个过程如图14所⽰:
图14:Multi-Head Attention
同self-attention⼀样,multi-head attention也加⼊了short-cut机制。现在我们已经触及了注意⼒的头,让我们重新审视我们之前的例⼦,看看不同的注意⼒头在哪⾥聚焦,因为我们在我们的例句中编码“it”这个词:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。