422 Chapter 12. 基于自注意力的模型 肖桐 朱靖波
12.5 残差网络和层标准化
Transformer 编码器、解码器分别由多层网络组成(通常为 6 层)每层网络又包
含多个子层(自注意力网络、前馈神经网络)。因此 Transformer 实际上是一个很深
的网络结构。再加上点乘注意力机制中包含很多线性和非线性变换;且注意力函数
Attention(·) 的计算也涉及多层网络,整个网络的信息传递非常复杂。从反向传播
角度来看,每次回传的梯度都会经过若干步骤,容易产生梯度爆炸或者消失。解决这
个问题的一种办法就是使用残差连接
[423]
,此部分内容已经在第九章进行了介绍,
里不再赘述。
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>
12.14 残差和层标准化在模型中的位置
Transformer 的训练过程中,由于引入了残差操作,将前面所有层的输出加到
一起,如下:
x
l+1
= F (x
l
) + x
l
(12.12)
其中 x
l
表示第 l 层网络的输入向量,F(x
l
) 是子层运算,这样会导致不同层(或子层)
的结果之间的差异性很大,造成训练过程不稳定、训练时间较长。为了避免这种情
况,在每层中加入了层标准化操作
[422]
。图12.14 中的红色方框展示了 Transformer
残差和层标准化的位置。层标准化的计算如下:
LN(x) = g ·
x µ
σ
+ b (12.13)
该公式使用均 µ 和方差 σ 样本进行平移缩放,将数据规范化为均值为 0,方差
1 的标准分布。g b 是可学习的参数。
12.5 残差网络和层标准化 423
Transformer 中经常使用的层标准化操作有两种结构,分别是后标准化Post-
norm前标准化Pre-norm结构如图12.15所示。后标准化中先进行残差连接再
进行层标准化,而前标准化则是在子层输入之前进行层标准化操作。在很多实践中
已经发现,前标准化的方式更有利于信息传递,因此适合训练深层的 Transformer
[463]
子层
层标准化 层标准化
子层
(a) 后标准化 (b) 前标准化
12.15 不同标准化方式