目录

  • 背景
  • 自注意力机制
  • Multi-head Self-attention(多头自注意力机制)
  • Positional Encoding
  • 详细结构
  • 参考文献

主要内容基于李宏毅老师的网课

讲的不太详细和没听明白的部分自己又去学习,加了些参考注解

简单总结:

Transformer是带有“Self-attention”机制的seq2seq模型

背景

在处理序列问题时 RNN及其变种LSTM,GRU等难以并行 CNN可以并行,使用膨胀卷积,可以扩大 CNN 的感受野,使网络有能力捕获更长的上下文 但是要堆很多层(才能让高层的网络处理序列的输入)

transform属于机器学习模型_编码器

自注意力机制

transform属于机器学习模型_transform属于机器学习模型_02

注意力机制全面替代了RNN,输出序列基于整个输入序列。

注意力机制在机器翻译领域的应用最早来自于2014年的论文“Neural Machine Translation by Jointly Learning to Align and Translate”,其核心内容是为输入向量的每个单词学习一个权重。通过给定一个任务相关的查询向量Query 向量,计算Query和各个Key的相似性或者相关性得到注意力分布,即得到每个Key对应Value的权重系数,然后对Value进行加权求和得到最终的Attention数值。

以信息检索系统举例,用户在搜索引擎上输入的内容便是Query,然后搜索引擎根据Query匹配Key(例如商品的种类,价格,描述等),然后根据Query和Key的相似度得到匹配的内容(Value)。

transform属于机器学习模型_神经网络_03

简单示意的计算步骤如下:

x是输入的词向量,经过不同矩阵运算得到q,k,v

transform属于机器学习模型_神经网络_04

每个query要和每个key做点积运算,计算相似度。

transform属于机器学习模型_编码器_05

为什么要除根号d?

答:缩放因子的作用是归一化

transform属于机器学习模型_自然语言处理_06

计算出来的点积结果要经过一个Softmax函数,使其和为1,得到符合概率分布的注意力分配概率分布数值。

transform属于机器学习模型_transform属于机器学习模型_07

这些权值用于给不同的value做权值,进行线性加权求和。

transform属于机器学习模型_深度学习_08

第二个query也是相同的计算步骤。

transform属于机器学习模型_自然语言处理_09

从上面的计算步骤可知,Self-attention Layer的输出是可以并行得到的。

transform属于机器学习模型_深度学习_10

通过矩阵运算,可以进行并行操作(一次运算多个词的q,k,v)

transform属于机器学习模型_神经网络_11

transform属于机器学习模型_编码器_12

transform属于机器学习模型_自然语言处理_13

用GPU可以加速这些矩阵乘法。

这也是原论文中的矩阵形式运算公式的由来。

自己写的总结如下:

transform属于机器学习模型_自然语言处理_14

Multi-head Self-attention(多头自注意力机制)

多头注意力相当于多个不同的自注意力的集成。

通过矩阵运算,原本的q,k,v实际进行了降维。

多头注意力机制允许模型在不同的表示子空间里学习到相关的信息。

每个head关注的地方不同,各司其职。

transform属于机器学习模型_自然语言处理_15

多头计算的结果可以拼接起来,经过矩阵运算,保持和单头的运算结果维度相同。

transform属于机器学习模型_深度学习_16

总结来说,多头注意力机制在保持参数总量不变的情况下,将同样的query, key和value映射到原来的高维空间(Q,K,V)的不同子空间(transform属于机器学习模型_编码器_17,transform属于机器学习模型_深度学习_18,transform属于机器学习模型_transform属于机器学习模型_19等)中进行自注意力的计算,最后再合并不同子空间中的注意力信息。

Positional Encoding

在注意力机制中,词的顺序是不重要的。例如,对“张三打了李四。”和“李四打了张三。”这两句话进行中文分词,嵌入词向量空间,并行送入编码器后,其输出很可能是相同的,但两者的中文语义恰恰相反。 因此在每个位置都有一个位置编码transform属于机器学习模型_神经网络_20,增加位置的信息。 具体公式可去阅读原论文。 图中是用one-hot编码解释加上transform属于机器学习模型_神经网络_20的这个操作的合理性。

transform属于机器学习模型_编码器_22

transform属于机器学习模型_深度学习_23

详细结构

原论文做的是机器翻译任务。

李老师用中英翻译举例

Transformer采用了Encoder-Decoder框架。在机器翻译任务中,编码器(Encoder)对输入句子进行编码,将输入句子通过非线性变换转化为中间语义表示。解码器(Decoder)的任务是根据中间语义表示和之前已经生成的历史信息来预测未来时刻要生成的单词。最终,解码的特征向量经过一层激活函数为Softmax的全连接层之后得到表示每个单词概率的输出向量。

编码器主要分为三个部分,输入部分进行词嵌入和位置编码,后续连接六个相同结构的块进行多头注意力机制的计算。

解码器和编码器的不同之处在于其使用了两种注意力机制,分别为Self-Attention和Encoder-Decoder Attention。解码器中的自注意力计算方式和编码器中相同,只是query, key, value都对应目标端序列。而Encoder-Decoder Attention中的query对应目标端序列,key和value对应源端序列,每一层中的Encoder-Decoder Attention都使用编码器最后一层的输出结果。

transform属于机器学习模型_transform属于机器学习模型_24

Encoder和Decoder的结构详解

主要关注的点有几个:

  • Add&Norm环节,使用了残差网络和Layer Normalization
  • 解码器中第一处注意力机制叫Masked 多头注意力,因为在机器翻译中,解码过程是一个顺序操作的过程,当解码第k个特征向量时,我们只能看到第k-1及其之前的解码结果。Decoder端的Masked是为了保证训练阶段和推理阶段的一致性。
  • 解码器中第二处注意力机制计算是Encoder-Decoder Attention,是用编码器的最终输出和解码器自注意力输出作attention 多头注意力机制的可视化 不同的头捕捉到了不同的句法

参考文献

【经典精读】Transformer模型深度解读一份很棒的transformer可视化计算过程讲解