Transformer详解

B站视频讲解

Transformer是谷歌大脑在2017年底发表的论文attention is all you need中所提出的seq2seq模型。现在已经取得了大范围的应用和扩展,而BERT就是从Transformer中衍生出来的预训练语言模型

这篇文章分为以下几个部分

  1. Transformer直观认识
  2. Positional Encoding
  3. Self Attention Mechanism
  4. 残差连接和Layer Normalization
  5. Transformer Encoder整体结构
  6. Transformer Decoder整体结构
  7. 总结
  8. 参考文章

0. Transformer直观认识

Transformer和LSTM的最大区别,就是LSTM的训练是迭代的、串行的,必须要等当前字处理完,才可以处理下一个字。而Transformer的训练时并行的,即所有是同时训练的,这样就大大增加了计算效率。Transformer使用了位置嵌入(Positional Encoding)来理解语言的顺序,使用自注意力机制(Self Attention Mechanism)和全连接层进行计算,这些后面会讲到

Transformer模型主要分为两大部分,分别是EncoderDecoderEncoder负责把输入(语言序列)隐射成隐藏层(下图中第2步用九宫格代表的部分),然后解码器再把隐藏层映射为自然语言序列。例如下图机器翻译的例子(Decoder输出的时候,是通过N层Decoder Layer才输出一个token,并不是通过一层Decoder Layer就输出一个token)

本篇文章大部分内容在于解释Encoder部分,即把自然语言序列映射为隐藏层的数学表达的过程。理解了Encoder的结构,再理解Decoder就很简单了

上图为Transformer Encoder Block结构图,注意:下面的内容标题编号分别对应着图中1,2,3,4个方框的序号

1. Positional Encoding

由于Transformer模型没有循环神经网络的迭代操作, 所以我们必须提供每个字的位置信息给Transformer,这样它才能识别出语言中的顺序关系

现在定义一个位置嵌入的概念,也就是Positional Encoding,位置嵌入的维度为[max_sequence_length, embedding_dimension], 位置嵌入的维度与词向量的维度是相同的,都是embedding_dimensionmax_sequence_length属于超参数,指的是限定每个句子最长由多少个词构成

注意,我们一般以为单位训练Transformer模型。首先初始化字编码的大小为[vocab_size, embedding_dimension]vocab_size为字库中所有字的数量,embedding_dimension为字向量的维度,对应到PyTorch中,其实就是nn.Embedding(vocab_size, embedding_dimension)

论文中使用了sin和cos函数的线性变换来提供给模型位置信息:

PE(pos,2i)=sin(pos/100002i/dmodel)PE(pos,2i+1)=cos(pos/100002i/dmodel)PE{(pos,2i)} = \sin(pos / 10000^{2i/d_{\text{model}}}) \\ PE{(pos,2i+1)} = \cos(pos / 10000^{2i/d_{\text{model}}})

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享