410 Chapter 12. 基于自注意力的模型 肖桐 朱靖波
12.2 Transformer 模型
下面对 Transformer 模型的由来以及总体架构进行介绍。
12.2.1 Transformer 的优势
首先再来回顾一下第十章介绍的循环神经网络,虽然它很强大,但是也存在一
些弊端。其中比较突出的问题是,循环神经网络每个循环单元都有向前依赖性,也
就是当前时间步的处理依赖前一时间步处理的结果。这个性质可以使序列的“历史”
信息不断被传递,但是也造成模型运行效率的下降。特别是对于自然语言处理任务,
序列往往较长,无论是传统的 RNN 结构,还是更为复杂的 LSTM 结构,都需要很多
次循环单元的处理才能够捕捉到单词之间的长距离依赖。由于需要多个循环单元的
处理,距离较远的两个单词之间的信息传递变得很复杂。
针对这些问题,研究人员提出了一种全新的模型
——
Transformer
[23]
与循环神
经网络等传统模型不同,Transformer 型仅仅使用自注意力机制和标准的前馈神
网络,完全不依赖任何循环单元或者卷积操作。自注意力机制的优点在于可以直接
对序列中任意两个单元之间的关系进行建模,这使得长距离依赖等问题可以更好地
被求解。此外,自注意力机制非常适合在
GPU
上进行并行化,因此模型训练的速度
更快。表
12.1对比了 RNNCNN Transformer 的层类型复杂度
1
12.1 RNNCNNTransformer 的层类型复杂度对比
[23]
n 表示序列长度,d 表示隐藏层大小,k
表示卷积核大小)
模型 层类型
复杂度
最小顺序
操作数
最大路径
长度
Transformer 自注意力 O(n
2
·d) O(1) O(1)
RNN 循环单元 O(n ·d
2
) O(n) O(n)
CNN 空洞卷积 O(k ·n·d
2
) O(1) O(log
k
(n))
Transformer 在被提出之后,很快就席卷了整个自然语言处理领域。实际上,
可以把 Transformer 当作一种表示模型,因此也被大量地使用在自然语言处理的其他
领域,甚至图像处
[533]
和语音处
[534, 535]
中也能看到它的影子。比如,目前非常流
行的 BERT 等预训练模型就是基于 Transformer。表12.2展示了 Transformer WMT
英德和英法机器翻译任务上的性能。它能用更少的计算量FLOPs达到比其他模型
更好的翻译品质
2
注意,Transformer 并不简单等同于自注意力机制。Transformer 模型还包含了很
多优秀的技术,比如:多头注意力、新的训练学习率调整策略等等。这些因素一起组
1
顺序操作数指模型处理一个序列所需要的操作数,由于 Transformer CNN 可以并行计算,所
以是 1;路径长度指序列中任意两个单词在网络中的距离。
2
FLOPs = Floating Point Operations,即浮点运算数。它是度量算法/模型复杂度的常用单位
12.2 Transformer 模型 411
12.2 不同翻译模型性能对比
[23]
系统
BLEU[%]
模型训练代价
(FLOPs)
EN-DE EN-FR
GNMT+RL 24.6 39.92 1.4×10
20
ConvS2S 25.16 40.46 1.5×10
20
MoE 26.03 40.56 1.2×10
20
Transformer (Base Model) 27.3 38.1 3.3×10
18
Transformer (Big Model) 28.4 41.8 2.3×10
19
成了真正的 Transformer下面就一起看一看自注意力机制和 Transformer 是如何工作
的。
12.2.2 总体结构
Self-Attention
Add & LayerNorm
Feed Forward Network
Add & LayerNorm
Embedding
+
Position
编码器输入:
编码器
Self-Attention
Add & LayerNorm
Encoder-Decoder Attention
Add & LayerNorm
Feed Forward Network
Add & LayerNorm
Output layer
Embedding
+
Position
解码器输入: <sos> I am fine
解码器
解码器输出: I am fine <eos>
6×
×6
12.4 Transformer 结构
12.4展示了 Transformer 的结构。编码器由若干层组成(绿色虚线框就代表
层)。每一层Layer)的输入是一个向量序列,输是同样大小的量序列,而
Transformer 层的作用是对输入进行进一步的抽象,得到新的表示结果。不过这里的
层并不是指单一的神经网络结构,它里面由若干不同的模块组成,包括:
自注意力子层Self-Attention Sub-layer使用自注意力机制对输入的序列进行
新的表示;
前馈神经网络子层Feed-Forward Sub-layer使用全连接的前馈神经网络对输
入向量序列进行进一步变换;
残差连接(标记为Add对于自注意力子层和前馈神经网络子层,都有一个
412 Chapter 12. 基于自注意力的模型 肖桐 朱靖波
从输入直接到输出的额外连接,也就是一个跨子层的直连。残差连接可以使深
层网络的信息传递更为有效;
标准化Layer Normalization:自注意力子层和前馈神经网络子层进行最终
输出之前,会对输出的向量进行层标准化,规范结果向量取值范围,这样易于
后面进一步的处理。
以上 Transformer 一层,行的描述为:
Self-Attention Residual Connection Layer Normalization Feed Forward Network
Residual Connection Layer Normalization编码器可以包含多个这样的层,比如,
可以构建一个六层编码器,每层都执行上面的操作。最上层的结果作为整个编码的
结果,会被传入解码器。
解码器的结构与编码器十分类似。它也是由若干层组成,每一层包含编码器中的
所有结构,即:自注意力子层、前馈神经网络子层、残差连接和层标准化模块。此外,
为了捕捉源语言的信息,解码器又引入了一个额外-解码注意力子Encoder-
Decoder Attention Sub-layer这个新的子层,可以帮助模型使用源语言句子的表示
示。-解码制,
因此它和自注意力子层的结构是相同的,只是 querykeyvalue 的定义不同。比如,
在解码器端,自注意力子层的 querykeyvalue 是相同的,它们都等于解码器每个
位置的表示。而在编码-码注意力子层中,query 是解码器每个位置的表示,此时
key value 是相同的,等于编码器每个位置的表示。12.5给出了这两种不同注意
力子层输入的区别。
Self-Attention
K
V
Q
解码器每个位置的表示
(a) Self-Attention 的输入
Encoder-Decoder Attention
K
V
Q
解码器每个
位置的表示
编码器每个
位置的表示
(b) Encoder-Decoder Attention 的输入
12.5 注意力模型的输入(自注意力子层 vs 编码-解码注意力子层)
此外,编码器和解码器都有输入的词序列。编码器的词序列输入是为了对其进
行表示,进而解码器能从编码器访问到源语言句子的全部信息。解码器的词序列输
入是为了进行目标语言的生成,本质上它和语言模型是一样的,在得到前 n 1 个单
词的情况下输出第 n 个单词。除了输入词序列的词嵌入,Transformer 中也引入了位
置嵌入,以表示每个位置信息。原因是,自注意力机制没有显性地对位置进行表示,
12.2 Transformer 模型 413
因此也无法考虑词序。在输入中引入位置信息可以让自注意力机制间接地感受到每
个词的位置,进而保证对序列表示的合理性。最终,整个模型的输出由一个 Softmax
层完成,它和循环神经网络中的输出层是完全一样的。
在进行更详细的介绍前,先利用12.4简单了解一下 Transformer 模型是如何
的。先,Transformer “我//好”
作为输入。然后,编码器对输入的源语言句子进行逐层抽象,得到包含丰富的上下
文信息的源语言表示并传递给解码器。解码器的每一层,使用自注意力子层对输入
解码器的表示进行加工,之后再使用编码-解码注意力子层融合源语言句子的表示信
息。就这样逐词生成目标语言译文单词序列。解码器每个位置的输入是当前单词(比
如,I而这个位置的输出是下一个单词(比如,am这个设计和标准的神经
语言模型是完全一样的。
当然,这里可能还有很多疑惑,比如,什么是位置编码?Transformer 的自注
力机制具体是怎么进行计算的,其结构是怎样的?层标准化又是什么?等等。下面
就一一展开介绍。