[1. 整体概述](#1. 整体概述)
[2. Encoder](#2. Encoder)
[2.1 Embedding](#2.1 Embedding)
[2.2 位置编码](#2.2 位置编码)
[2.2.1 为什么需要位置编码](#2.2.1 为什么需要位置编码)
[2.2.2 位置编码公式](#2.2.2 位置编码公式)
[2.2.3 为什么位置编码可行](#2.2.3 为什么位置编码可行)
[2.3 注意力机制](#2.3 注意力机制)
[2.3.1 基本注意力机制](#2.3.1 基本注意力机制)
[2.3.2 在Trm中是如何操作的](#2.3.2 在Trm中是如何操作的)
[2.3.3 多头注意力机制](#2.3.3 多头注意力机制)
[2.4 残差网络](#2.4 残差网络)
[2.5 Batch Normal & Layer Narmal](#2.5 Batch Normal & Layer Narmal)
[2.5.1 Batch Normal](#2.5.1 Batch Normal)
[2.5.2 Layer Normal](#2.5.2 Layer Normal)
[3. Decoder](#3. Decoder)
[3.1 Mask](#3.1 Mask)
[3.2 交互层](#3.2 交互层)
1. 整体概述
Transformer模型首次提出是在论文Attention is All You Need中。在论文中,Transformer被用来实现机器翻译的工作。相较于RNN难以并行处理信息与CNN窗口短难以处理长序列的缺点,Transformer具有更高的效率与更加优秀的性能。
总体来看,Transformer由编码器与解码器两部分组成。
其中,Encoder与Decoder是可以堆叠N(论文中N=6)层的,这些层结构相同,参数独立。
论文中的Transformer架构如下,下文将针对各个环节进行解释。
2. Encoder
分为三个部分,输入部分、注意力机制与前馈神经网络。将输入送入(词嵌入层),与位置编码对位相加。之后进行多头注意力机制处理,进入残差网络并将结果进行。之后进入双层全连接网络,并对结果进行残差和正则化处理。
论文中的有6层堆叠网络,其中每层有2层子层网络。
2.1 Embedding
可以看作是一个查找表,用来获取每个单词的学习向量表示。神经网络通过数字进行学习,所以将每个单词映射到一个连续值的向量来表示该单词。
2.2 位置编码
2.2.1 为什么需要位置编码
不同于RNN的按时间线串行处理,Transformer是并行处理的。为了保存序列顺序,引入位置编码。
2.2.2 位置编码公式
将Embedding与位置编码相加得到的值作为下面环节的输入。
2.2.3 为什么位置编码可行
对于一个特定位置的维的位置向量,借助三角函数的性质
我们可以得到:
可以看出,位置的位置向量的某一维或,可以由位置与位置的位置向量的与为的线性组合表示。这意味着向量中蕴含了相对位置信息(但该相对位置信息会在注意力机制处消失)。
2.3 注意力机制
2.3.1 基本注意力机制
注意力即关注点。比如给你一张包含婴儿的图片,并提问婴儿在干嘛,此时你对图片中各部分的关注度是不同的,可能对婴儿的脸与手的部分关注度更高,而对图片边缘部分则关注度较低。
论文中给出的注意力公式如下:
下面以输入"我不爱你"为例解释公式。如图,阶段1中向量Q与向量K点乘,点乘得到的值可以反映两个向量之间的相似程度。阶段2对阶段1中得到的值做了类softmax的归一化处理。除以可以防止值向两端偏导致梯度消失。阶段3中将阶段2得到的值分别与对应的value值相乘,最后将这些结果相加得到了Attention Value。
以上是nlp的举例,cv中也类似,图像的分割可类比词的分割。
2.3.2 在Trm中是如何操作的
首先,我们需要由单词向量获取的值。对于词向量,将其分别与相乘(注意这里与所有的词向量相乘的都是同一套参数),可以得到。接着,计算的相似度,得到的值。 在实际代码中,通常使用矩阵表示,方便并行。
2.3.3 多头注意力机制
将词向量与不同的参数相乘,可以得到多组值。亦即将投影到低维次,做j次注意力函数,合并每个输出得到最终输出。
类似于里的多通道输出,使得Trm有可学习的参数。
2.4 残差网络
残差网络将原先的输出与输入对位相加。要求输入与输出维度相同,论文中设置维度为512。
将上图简化如下:
根据后向传播的链式法则:,
而,
所以。
连乘容易导致梯度消失,又因为连乘前有"1"在,所以偏导不易为0。因此,使用残差可以得到有效防止梯度消失,从而得到更深的网络。
2.5 Batch Normal & Layer Narmal
2.5.1 Batch Normal
针对不同样本的同一维度(特征)进行标准化处理,使得均值为0,方差为1。
缺点:
1.当较小时,效果差(此时每个里的样本的均值和方差无法替代整体)。
2.在中效果比较差,因为会出现词向量长度不一样的情况。
2.5.2 Layer Normal
针对同一样本的不同维度(特征)进行标准化处理,使得均值为0,方差为1。
3. Decoder
与的组成模块大体相似,主要的不同在于与交互层。
论文中的具有6层堆叠网络,其中每层网络有2个子层,多插入了第三个子层。
3.1 Mask
需要Mask的原因:若与Encoder一样没有Mask,则会导致预测结果偏差。因为那样子训练模型的时候后续单词是可见的,但实际预测时,未来的单词是不可知的。因此将后续的单词计入影响是不合适的。
实现Mask的方法:计算权重时,t时刻之后的值替换为很大的负数,指数变换后为0。
3.2 交互层
每个Encoder与所有的Decoder进行交互。k,v来自于Encoder本身,q来自于Decoder。这里相当于Decoder中的每个q去询问每个Encoder输出的量,并与之结合。
但是在实际代码训练中,一般Encoder生成q,k矩阵,Decoder生成v矩阵加权。
参考资料:
Vaswani, Ashish, et al. "Attention is All You Need." Advances in Neural Information Processing Systems (NIPS), 2017.
Transformer论文逐段精读【论文精读】_哔哩哔哩_bilibili
Transformer从零详细解读(可能是你见过最通俗易懂的讲解)_哔哩哔哩_bilibili
超强动画,一步一步深入浅出解释Transformer原理!_哔哩哔哩_bilibili