浅谈Transformer模型细节

参考

台大李宏毅:机器学习2021

Transformer的直观理解

浅谈Transformer模型细节_第1张图片

Transformer本质上是一个seq2seq的模型,最早由《attention is all you need》提出,实际上是由编码和解码结构共同组成。广义上来说所有应用了self-attention的模型均可以称之为transformer,狭义上来说,Transformer是指该论文中提出的模型,如下图所示。
浅谈Transformer模型细节_第2张图片
如图所示,左边部分可以看出编码器组(Encoders),右边部分可以看成解码器组(Decoders)多个编码和解码器的叠加(×N)共同构成了Transformer。

Tranformer中的细节讨论

这一部分主要探讨《attention is all you need》这篇文章中提出的Transformer结构中重要的细节,帮助读者理解。

Positional Encoding
按照从左读到右,从下往上读的方式,最先看到的是位置编码(Positional Encoding)。熟悉self-attention计算过程之后,很容易发现将有序的序列输入self-attention后会丢失位置信息。例如,在计算α12的时候会发现,α12=α21,因此向量1与2的先后顺序在计算注意力的时候没有被考虑进来。而在很多时候位置信息对于序列处理都非常重要,我们使用位置编码。位置编码的方式非常多,最简单的就是在输入的时候,对每个输入向量a加上一个一个位置向量e来实现。所以,input embeddings进入模型的第一步就是加上带有位置信息的位置编码。

Add & Norm

由于多头自注意力机制(Multi-head self-attention)在上篇文章已经提及。因此,这里我们不再赘述而是直接进入Add & Norm这一层。这一层实际上是分成两个步骤完成。第一步是Add,实际上是执行了类似残差连接(Residual Connection)的操作,即直接将attention layer的输入加到输出,借鉴了ResNet的优点。第二步是Norm,这里执行的是LN(Layer Normalization)。
浅谈Transformer模型细节_第3张图片
如图所示,LN对每一个输入向量先计算该向量的均值和标准差,再根据均值和标准差对该向量进行归一化处理。LN相较BN(Batch Normalization)更加简单,因为BN是对不同向量每个维度算均值和标准差,而非像LN是对每个向量不同维度算均值和标准差。

Cross attention
在介绍decoder结构的第一个关键步骤masked self-attention之前,我们先进入encoder与decoder的连接环节cross attention。浅谈Transformer模型细节_第4张图片
如图所示,Cross attention与self-attention不同的点在于,cross attention是用当前向量(Decoder产生的)去匹配(计算相似度)encoder的各种key。而非self-attention中,输入向量组自己的q去匹配自己的k。其他方面与self-attention是一致的,通过cross attention环节,我们就成功实现了encoder与decoder之间的交互。

Masked self-attention
接下来,我们回到decoder部分的第一个重要细节Masked self-attention。其计算机制如下图所示:
浅谈Transformer模型细节_第5张图片
由图,相比普通的self-attention,在解码的时候计算相似度时,我们只考虑之前的输入向量(这点类似RNN),相当于把后续的输入向量给遮住了。比如,在图中,计算b2的时候,我们只利用q2去查询k1与k2,而不去匹配k3与k4。只所以这样做是为了防止“穿越”。
因为在Decoder部分解码输出是串行产生输出结果的,并不像Encoder部分,我们已知输入,并且一次性全部输入Encoder。因此在考虑a2的时候并没有a3与a4,从而就无从考虑a3与a4,a3与a4也需要Decoder根据a1与a2共同预测。

后记

本篇博文旨在结合参考资料做一些整理,加入个人理解,方便初学者学习。文章中的图片来源于李宏毅老师的课件。因此如果发现有错误,或者含糊不清的地方可以直接去看李宏毅老师最新的课程或者查询其他权威资料。

你可能感兴趣的:(深度学习,笔记)