1. 概述
不论从命名还是物理结构,都可以看出,Transformer是对Encoder-Decoder模型结构的继承与发展,用途上也依然以解决Seq2Seq问题为初衷。
2. 历史
2.1 Encoder-Decoder
Encoder-Decoder模型其实泛指一类用于解决Seq2Seq问题的模型结构。
编解码器都不是固定的,常用的有CNN/RNN/BiRNN/GRU/LSTM等,可以根据具体问题进行*组合。
缺点
- Encoder和Decoder仅由定长语义编码c连接。当输入序列较长时,很难保证C充分表达了语义信息。
- 使用非双向的RNN及其衍生结构生成的语义编码中,新时间步的影响总会稀释旧时间步的信息,使越长的输入序列损失越多的旧时间步信息。
- 假设序列信息在编解码过程中无信息稀释问题,编解码过程仍然不够合理,无视了输入序列的语境、句式,不同情况下,对所有时间步关注程度相同。
2.2 Attention
Attention模型结构优化了Encoder-Decoder中编解码器间语义信息传递不充分的问题。
如上图所示,当一个Attention Model将“Tom chase Jerry”翻译为“汤姆追逐杰瑞”时,attention机制通过一个对齐矩阵起作用。该对齐矩阵的形状为(|X|,|Y|),其中|X|为输入序列长度,|Y|为输出序列长度。矩阵的物理意义是输入序列与输出序列之间的对齐概率,抽象意义可以是输入序列中每一个时间步对输出序列中某个时间步的影响力权重分布。
图中的f2()表示输入序列单个时间步的编码过程,比如RNN中某个时间步对应的隐层状态值;g()表示编码器输出的多个时间步的语义编码合成过程,比如加权求和。
经过对齐矩阵或attention机制的处理,输出序列的每个时间步,都有一个对应的C,向解码器传递注意力分配情况,即预测该时间步时,对输入序列各时间步的参考程度。
缺点
- 深度不够 :编解码器比较深时,不同层次的注意力没有被很好的表达,层次越多,丢失的信息越多。
- 广度不够 :编解码器进行语义表示时被限制只能有一种注意力分布,事实上注意力的分布应该有更多视角。
2.3 Transformer
Transformer可以说将注意力机制发扬光大了。multi-headed和self-attention两个新概念,同时解决了Attention Model中注意力广度不够和深度不够的两个问题。详见下文,不赘述。
3. 抽象意义
Transformer的抽象意义体现了其主要创新点,即 multi-headed self-attention 。
图中多种颜色的注意力分布,是指用多个“head”分别表达不同视角的注意力。编码的输入和输出是同一个序列,即编解码器的每一层都可以对当前层的输入序列有独特的注意力分布,可以产生更丰富的语义编码,让模型的表达能力更强。
4. 原理介绍
如前文所述,Transformer是Encoder-Decoder结构的发展。下面分别介绍Transformer的编解码器。
4.1 Encoder
Encoder包含Self-Attention组件和前馈神经网络组件。两个组件分别构成一个残差块结构。
4.1.1 Self-Attention
从每个时间步看,Self-Attention计算过程如下:
- 输入序列的每个时间步需要被转换为特征向量x
- 每个x都有一个对应的向量q(由变换矩阵生成,对应不同的输入序列时间步)和n(输出序列长度)个向量k(由变换矩阵生成,对应不同的输出序列时间步)
- q与每个k的转置的叉乘结果除以根号d(d为q、k、v的长度,即64)并经过softmax归一化,作为向量v的元素权重
- n个v(由变换矩阵生成,对应不同的输出序列时间步)求加权和,得到z
将单个时间步的Self-Attention计算过程推广到整个输入序列,即将计算过程的输入从特征向量推广到特征矩阵,则Self-Attention计算过程如下。
特征矩阵X分别叉乘3个变换矩阵,获得矩阵Q、K、V。
Q叉乘K的转置除以根号d再做softmax,其中softmax是对前置步骤输出矩阵行方向的softmax。上述计算结果就是V的权重矩阵,可以认为它就是传统Attention Model中的对齐矩阵。权重矩阵叉乘V即可获得Self-Attention的最终输出Z。
4.1.2 Multi-headed
Multi-Headed就是指在多个(8个)分支中计算Self-Attention,不共享参数。
多个分支的Self-Attention计算结果输出矩阵做行拼接,然后与一个变换矩阵求叉乘获得多分支综合结果。
4.1.3 Multi-headed Self-attention
Multi-Headed Self-Attention的计算过程概览如下图所示。
其中,每个Encoder的输入并不都是输入序列的特征矩阵。从第二层Encoder开始,输入为上一层Encoder的输出矩阵。Transformer原版中,Encoder有 6层。
4.2 Decoder
逻辑上,Decoder是逐时间步处理解码任务的。
物理上,每一层Decoder包含3个组件,除了Encoder中同样存在的Self-Attention组件和最后的前馈神经网络组件,还在两者之间增加了一个Encoder-Decoder-Attention组件。
Decoder的Self-Attention组件中,在softmax之前增加了一个mask,用于屏蔽来自时间序列中未来时间步的信息,如下图。
此外,对输入序列的每一个时间步,顶层Encoder中获得的K和V在每层Decoder的Encoder-Decoder-Attention组件中复用,而该组件的Q来自上一个时间步的解码结果,经过了所有前序Decoder以及当前层Decoder的Self-Attention组件的处理。
解码结果的获取很简单,用一个全连接层令解码器最终输出矩阵的最低维长度与词表长度对齐,然后就可以用一个softmax获得概率分布。
5. 应用
Transformer在语义表示模型/语言模型中有出色的表现,其中,目前风头最盛的三个模型分别是BERT(谷歌)、XLNet(CMU+谷歌)和ERNIE(百度)。
此外,Transformer也可以单独作为一种比较强的语义表示组件,应用在各种标注数据充足的NLP任务中。(小数据集任务中,还是用LSTM/GRU更容易收敛)