没有合适的资源?快使用搜索试试~ 我知道了~
首页Transformer学习总结——原理篇
Transformer学习总结——原理篇
2.1k 浏览量
更新于2023-05-29
评论 1
收藏 960KB PDF 举报
首先从整体上看一下Transformer的结构:从图中可以看出,整体上Transformer由四部分组成:Inputs:Inputs=WordEmbedding(Inputs)+PositionalEmbeddingInputs=WordEmbedding(Inputs)+PositionalEmbeddingInputs=WordEmbedding(Inputs)+PositionalEmbeddingOutputs:Ouputs=WordEmbedding(Outputs)+PositionalEmbeddingOuputs=WordEmbedding(Output
资源详情
资源评论
资源推荐

Transformer学习总结学习总结——原理篇原理篇
1. 整体结构
首先从整体上看一下Transformer的结构:
从图中可以看出,整体上Transformer由四部分组成:
Inputs : Inputs=WordEmbedding(Inputs)+PositionalEmbedding Inputs = WordEmbedding(Inputs)+
PositionalEmbeddingInputs=WordEmbedding(Inputs)+PositionalEmbedding
Outputs : Ouputs=WordEmbedding(Outputs)+PositionalEmbedding Ouputs = WordEmbedding(Outputs) +
PositionalEmbeddingOuputs=WordEmbedding(Outputs)+PositionalEmbedding
Encoders stack : 由六个相同的Encoder层组成,除了第一个Encoder层的输入为Inputs,其他Encoder层的输入为上一个
Encoder层的输出
Decoders stack : 由六个相同的Decoder层组成,除了第一个Decoder层的输入为Outputs和最后一个Encoder层的输出,其他
Decoder层的输入为上一个Decoder层的输出和最后一个Encoder层的输出
如下图所示,在更高的层级上来理解Encoder和Decoder层之间的输入和输出的关系,可以更直观。

而Encoder层和Decoder层的内部组成之间的差异如下图所示。每一个Encoder层都包含了一个Self-Attention子层和一个Feed
Forward子层。每个Decoder层都包含了一个Self-Attention子层、一个Encoder-Decoder Attention子层和一个Feed Forward子
层。Encoder层和Decoder层之间的差别在于Decoder中多了一个Encoder-Decoder Attention子层,而其他两个子层的结构在
两者中是相同的。
2. Self-Attention
2.1 为什么选择Self-Attention
首先通过一个简单的例子,来简单说明一下self-Attention这种机制较之传统的序列模型的优势所在。比如我们当前要翻译的句
子为The animal didn’t cross the street because it was too tired,在翻译it时,它究竟指代的是什么呢?要确定it指代的内容,
毫无疑问我们需要同时关注到这个词的上下文语境中的所有词,在这句话中重点为animal, street, tired,然后根据常识,我们
知道只有animal才会tired,所以确定了it指代的是animal。如果将tired改为narrow,那很显然it应该指的是street,因为只有
street才能用narrow修饰。
Self-Attention机制在对一个词进行编码时,会考虑这个词上下文中的所有词和这些词对最终编码的贡献,再根据得到的信息对
当前词进行编码,这就保证了在翻译it时,在它上下文中的animal, street, tired都会被考虑进来,从而将it正确的翻译成animal
那么如果我们采用传统的像LSTM这样的序列模型来进行翻译呢?由于LSTM模型是单向的(前向或者后向),显然它无法同时考
虑到it的上下文信息,这会造成翻译的错误。以前向LSTM为例,当翻译it时,能考虑的信息只有The animal didn't cross the
street because,而无法考虑was too tired,这使得模型无法确定it到底指代的是street还是animal。当然我们可以采用多层的
LSTM结构,但这种结构并非像Self-Attention一样是真正意义上的双向,而是通过拼接前向LSTM和后向LSTM的输出实现
的,这会使得模型的复杂度会远远高于Self-Attention。
下图是模型的最上一层(下标0是第一层,5是第六层)Encoder的Attention可视化图。这是tensor2tensor这个工具输出的内容。
我们可以看到,在编码it的时候有一个Attention Head(后面会讲到)注意到了Animal,因此编码后的it有Animal的语义。
Self-Attention的优势不仅仅在于对词语进行编码时能充分考虑到词语上下文中的所有信息,还在于这种机制能够实现模型训练
过程中的并行,这使得模型的训练时间能够较传统的序列模型大大缩短。传统的序列模型由于t tt时刻的状态会受到t*1 t-1t*1时
刻状态的影响,所以在训练的过程中是无法实现并行的,只能串行。而Self-Attention模型中,整个操作可以通过矩阵运算很容
易的实现并行。

2.2 Self-Attention结构
为了能更好的理解Self-Attention的结构,首先介绍向量形式的Self-Attention的实现,再从向量形式推广到矩阵形式。
对于模型中的每一个输入向量(第一层的输入为词语对应的Embedding向量,如果有多层则其它层的输入为上一层的输出向
量),首先我们需要根据输入向量生成三个新的向量:Q(Query)、K(Key)、V(Value) Q(Query)、K(Key)、V(Value)Q(Query)、
K(Key)、V(Value),其中Query QueryQuery向量表示为了编码当前词需要去注意(attend to)的其他词(包括当前词语本
身),Key KeyKey向量表示当前词用于被检索的关键信息,而Value ValueValue向量是真正的内容。三个向量都是以当前词的
Embedding向量为输入,经过不同的线性层变换得到的。
下面以具体实例来理解Self-Attention机制。比如当我们的输入为thinking和machines时,首先我们需要对它们做Word
Embedding,得到对应的词向量表示x1,x2 x_{1},x_{2}x 1 ,x 2 ,再将对应的词向量分别通过三个不同的矩阵进行线性变换,得
到对应的向量q1,k1,v1 q_{1},k_{1},v_{1}q 1 ,k 1 ,v 1 和q2,k2,v2 q_{2},k_{2},v_{2}q 2 ,k 2 ,v 2 。为了使得Query QueryQuery和
Key KeyKey向量能够做内积,模型要求WK、WQ W^{K}、W^{Q}W K 、W Q 的大小是一样的,而对WV W^{V}W V 的大小并
没有要求。
图中给出了上述过程的可视化,在得到所有的输入对应的qi、ki、vi q_{i}、k_{i}、v_{i}q i 、k i 、v i
向量后,就可以进行Self-Attention向量的计算了。如下图所示,当我们需要计算thinking对应的attention向量时,首先将q1
q_{1}q 1 和所有输入对应的ki k_{i}k i 做点积,分别得到不同的Score ScoreScore:
剩余13页未读,继续阅读














安全验证
文档复制为VIP权益,开通VIP直接复制

评论0