412 Chapter 12. 基于自注意力的模型 肖桐 朱靖波
从输入直接到输出的额外连接,也就是一个跨子层的直连。残差连接可以使深
层网络的信息传递更为有效;
• 层标准化(Layer Normalization):自注意力子层和前馈神经网络子层进行最终
输出之前,会对输出的向量进行层标准化,规范结果向量取值范围,这样易于
后面进一步的处理。
以上操作就构成了 Transformer 的一层,各个模块执行的顺序可以简单描述为:
Self-Attention → Residual Connection → Layer Normalization → Feed Forward Network
→ Residual Connection → Layer Normalization。编码器可以包含多个这样的层,比如,
可以构建一个六层编码器,每层都执行上面的操作。最上层的结果作为整个编码的
结果,会被传入解码器。
解码器的结构与编码器十分类似。它也是由若干层组成,每一层包含编码器中的
所有结构,即:自注意力子层、前馈神经网络子层、残差连接和层标准化模块。此外,
为了捕捉源语言的信息,解码器又引入了一个额外的编码-解码注意力子层(Encoder-
Decoder Attention Sub-layer)。这个新的子层,可以帮助模型使用源语言句子的表示
信息生成目标语言不同位置的表示。编码-解码注意力子层仍然基于自注意力机制,
因此它和自注意力子层的结构是相同的,只是 query、key、value 的定义不同。比如,
在解码器端,自注意力子层的 query、key、value 是相同的,它们都等于解码器每个
位置的表示。而在编码-解码注意力子层中,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 中也引入了位
置嵌入,以表示每个位置信息。原因是,自注意力机制没有显性地对位置进行表示,