514 Chapter 15. 神经机器翻译结构优化 肖桐 朱靖波
15.2 神经网络连接优化及深层模型
除了对 Transformer 模型中的局部组件进行改进,改进不同层之间的连接方式也
十分重要。常见的做法是融合编码器/解码器的中间层表示得到信息更丰富的编码/
码输出
[557, 559, 560, 561]
同时,可以利用稠密连接等更丰富的层间连接方式来强化或替换
残差连接。
与此同时,虽然宽网络(如 Transformer-Big在机器翻译、语言模型等任务上表
现十分出色,但伴随而来的是快速增长的参数量与更大的训练代价。并且受限于任
务的复杂度与计算设备的算力,进一步探索更宽的神经网络显然不是特别高效的手
段。因此研究人员普遍选择增加神经网络的深度来对句子进行更充分地表示。但是,
简单地堆叠很多层的 Transformer 模型并不能带来性能上的提升,反而会面临更加严
重的梯度消失/梯度爆炸的问题。这是由于伴随神经网络变深,梯度无法有效地从输
出层回传到底层神经网络,造成浅层部分的参数无法得到充分训练
[463, 558, 814, 815]
针对
这些问题,可以设计更有利于深层信息传递的神经网络连接和恰当的参数初始化方
法等。
但是,如何设计一个足够“深”的机器翻译模型仍然是业界关注的热点问题之
一。此外,伴随着神经网络的继续变深,将会面临一些新的问题,例如,如何加速深
层神经网络的训练,如何解决深层神经网络的过拟合问题等。下面将会对以上问题
展开讨论。首先对 Transformer 模型的内部信息流进行分析,之后分别从模型结构和
参数初始化两个角度求解为什么深层网络难以训练,并介绍相应的解决手段。
15.2.1 Post-Norm vs Pre-Norm
为了探究为何深 Transformer 模型很难直接训练,首先对 Transformer 模型
结构行简单的回顾,细内容可参考第十二章。 Transformer 编码为例,
在多头自注意力和前馈神经网络中间,Transformer 模型利用残差连接
[423]
和层标准化
操作
[422]
来提高信息的传递效率。Transformer 模型大致分为图15.9中的两种结构
——
后作方式(Post-Norm)的残差单元和前作方式(Pre-Norm)的残差单元。
x
l
x
l+1
表示第 l 个子层的输入和输出
4
y
l
表示中间的临时输出;LN(·)
示层标准化操作,帮助减小子层输出的方差,从而让训练变得更稳定;F (·) 表示子层
所对应的函数,比如前馈神经网络、自注意力等。下面分别对 Post-Norm Pre-Norm
进行简单的描述。
Post-Norm早期的 Transformer 遵循的是 Post-Norm 结构
[23]
。也就是层标准化
作用于每一子层的输入和输出的残差结果上,如图15.9(a) 所示。可以表示如下:
x
l+1
= LN(x
l
+ F (x
l
;θ
θ
θ
l
)) (15.24)
4
这里沿用 Transformer 中的定义,每一层Layer包含多个子层Sub-layer比如,对于 Transformer
编码器,每一层包含一个自注意力子层和一个前馈神经网络子层。所有子层都需要进行层标准化和残
差连接。
15.2 神经网络连接优化及深层模型 515
x
l
F
LN
x
l+1
x
l
LN
F
x
l+1
y
l
y
l
(a)Post-Norm 方式的残差连接
(b)Pre-Norm 方式的残差连接
15.9 Post-Norm Transformer Pre-Norm Transformer
其中,θ
θ
θ
l
是子层 l 的参数。
Pre-Norm调整置,将一子前,得
Pre-Norm
[816]
15.9(b) 所示。广
Transformer 开源系统中
[537, 694, 817]
,公式如下:
x
l+1
= x
l
+ F (LN(x
l
);θ
θ
θ
l
) (15.25)
从公式(15.24)(15.25)公式中可以发现,在前向传播过程中,Pre-Norm 结构可以
通过残差路径将底层神经网络的输出直接暴露给上层神经网络。此外,在反向传播
过程中,使 Pre-Norm 结构也可以使得顶层网络的梯度更容易地反馈到底层网络。
这里以一个含有 L 个子层的结构为例, Loss 表示整个神经网络输出上的损失,x
L
为顶层的输出。对于 Post-Norm 结构,根据链式法则,损失 Loss 相对于 x
l
的梯度可
以表示为:
Loss
x
l
=
Loss
x
L
×
L1
Y
k=l
LN( y
k
)
y
k
×
L1
Y
k=l
1 +
F (x
k
;θ
θ
θ
k
)
x
k
(15.26)
中,
Q
L1
k=l
LN(y
k
)
y
k
中,数。
Q
L1
k=l
(1 +
F (x
k
;θ
θ
θ
k
)
x
k
) 代表每个子层间残差连接的导数。
类似的,也能得到 Pre-Norm 结构的梯度计算结果,如下:
Loss
x
l
=
Loss
x
L
×
1 +
L1
X
k=l
F (LN(x
k
);θ
θ
θ
k
)
x
l
(15.27)
对比公式(15.26)和公式(15.27)可以看出,Pre-Norm 结构直接把顶层的梯度
Loss
x
L
传递给下层,并且如果将公式(15.27)侧展开,可以发现
Loss
x
l
中直接含有
Loss
x
L
516 Chapter 15. 神经机器翻译结构优化 肖桐 朱靖波
分。这个性质弱化了梯度计算对模型深度 L 的依赖;而如公式(15.26)右侧所示,Post-
Norm 结构则包含一个与 L 相关的多项导数的积,伴随着 L 的增大更容易发生梯度消
失和梯度爆炸问题。因此,Pre-Norm 结构更适于堆叠多层神经网络的情况。比如,使
Pre-Norm 结构可以很轻松地训练一个 30 60 个子层)编码器的 Transformer
络,并带来可观的 BLEU 提升。这个结果相当于标准 Transformer 编码器深度的 6 倍,
相对的, Post-Norm 结构训练深层网络的时候,训练结果很不稳定,当编码器深度
超过 12 层后很难完成有效训练
[463]
,尤其是在低精度设备环境下损失函数更容易
现发散情况。这里把使用 Pre-Norm 的深层 Transformer 模型称为 Transformer-Deep
另一个有趣的发现是,使用深层网络后,网络可以更有效地利用较大的学习率
和较大的批量训练,大幅度缩短了模型达到收敛状态的时间。相比于 Transformer-Big
宽网络,Transformer-Deep 不需的隐维度取得的翻
[463]
也就是说,Transformer-Deep 是一个更“窄”“深”的神经网络。这种结构
的参数量比 Transformer-Big 少,系统运行效率更高。
此外研究人员发现当编码器使用深层模型之后,解码器使用更浅的模型依然能
够维持很好的翻译品质。这是由于解码器也会对源语言信息进行加工和抽象,当编
码器变深之后,解码器对源语言的加工就不那么重要了,因此可以减少解码器的深
度。这样做的一个直接好处是:可以通过减少解码器的深度提高翻译速度。对于一
些翻译延时敏感的场景,这种架构是极具潜力的
[775, 776, 818]
15.2.2 高效信息传递
尽管使用 Pre-Norm 构可以很容易地训练深 Transformer 模型,但从信息传
递的角度看,Transformer 型中第 l 层的输入仅仅依赖于前一层的输出。虽然残差
连接可以跨层传递信息,但是对于很深(模型层数多)的模型,整个模型的输入和输
出之间仍需要经过很多次残差连接。
为了使上层的神经网络可以更加方便地访问下层神经网络的信息,最简单的方
法是引入更多的跨层连接。其中,引入跨层连接的一种方式是直接将所有层的输出
都连接到最上层,达到聚合多层信息的目的
[557, 558, 559]
另一种更加有效的方式是在网
络前向计算的过程中建立当前层表示与之前层表示之间的关系,例如动态线性聚合方
[463]
Dynamic Linear Combination of LayersDLCL和动态层聚合方法
[561]
这些方
法的共性在于,在每一层的输入中不仅考虑前一层的输出,同时将前面所有层的中
间结果(包括词嵌入表示)进行聚合,本质上利用稠密的层间连接提高了网络中信
息传递的效率(前向计算和反向梯度计算) DLCL 利用线性的层融合手段来保证
计算的时效性,主要应用于深层神经网络的训练,理论上等价于常微分方程中的高
阶求解方法
[463]
。此外,为了进一步增强上层神经网络对底层表示的利用,研究人员
从多尺度的角度对深层的编码器进行分块,并使 GRU 捕获不同块之间的联系,
得到更高层次的表示。该方法可以看作是对动态线性聚合网络的延伸。接下来分别
对上述几种改进方法展开讨论。
15.2 神经网络连接优化及深层模型 517
1. 使用更多的跨层连接
15.10描述了一种引入更多跨层连接的结构的方法,即层融合方法。在模型
前向计算过程中,假设编码器总层数为 L,当完成编码器 L 的逐层计算后,通过
线性平均、加权平均等机制对模型的中间层表示进行融合,得到蕴含所有层信息的
表示 g作为编码-解码注意力机制的输入,与总共有 M 层的解码器共同处理解码信
息。
编码器
X
h
1
h
2
h
3
...
h
L
权重聚合 g
解码器
y
<j
s
1
j
s
2
j
s
3
j
...
s
M
j
y
j
15.10 层融合方法
这里,令 h
i
是编码器第 i 层的输出,s
k
j
是解码器生成第 j 个单词时第 k 层的输
出。层融合机制可以大致划分为如下几种:
线性平均即平均池化,通过对各层中间表示进行累加之后取平均值,表示如
下:
g =
1
L
L
X
l=1
h
l
(15.28)
权重平均在线性平均的基础上,为每一个中间层表示赋予一个相应的权重。
重的值通常采用可学习的参数矩阵 W
l
表示。这种方法通常会略优于线性平均
方法。可以用如下方式描述:
g =
L
X
l=1
W
l
h
l
(15.29)
前馈神经网络将之前中间层的表示进行级联,之后利用前馈神经网络得到
合的表示,如下:
g = FNN([h
1
,...,h
L
]) (15.30)
518 Chapter 15. 神经机器翻译结构优化 肖桐 朱靖波
其中,[·] 表示级联操作。这种方式具有比权重平均更强的拟合能力。
基于多跳注意力Multi-hop Attention机制如图15.11所示,其做法与前馈神经
网络类似,首先将不同层的表示拼接成 2 维的句子级矩阵表示
[532]
之后利用类
似于馈神经网的思想将度为 R
d
model
×L
的矩映射到维 R
d
model
×n
hop
的矩阵,如下:
o
=
σ
([
h
1
,...,
h
L
]
T
·
W
1
)
W
2
(15.31)
其中,[h
1
,...,h
L
] 是输入矩阵,o 是输出矩阵,W
1
R
d
model
×d
a
W
2
R
d
a
×n
hop
d
a
表示前馈神经网络隐藏层大小,n
hop
表示跳数。之后使用 Softmax 函数计算
不同层沿相同维度上的归一化结果 u
l
u
l
=
exp(o
l
)
P
L
i=1
exp(o
i
)
(15.32)
通过向量积操作得到维度为 R
d
model
×n
hop
的稠密表示 v
l
v
l
= [h
1
,...,h
L
] ·u
l
(15.33)
通过单层的前馈神经网络得到最终的融合表示:
g = FNN([v
1
,...,v
L
]) (15.34)
h
3
h
2
h
1
1D
W
1
σ
o
3
5
o
2
5
o
1
5
W
2
Softmax
0.3
0.2
0.5
2D
FFN
g
d
model
d
a
d
model
d
a
d
a
n
hop
n
hop
d
model
n
hop
d
model
15.11 基于多跳注意力机制的层融合
上述工作更多应用于浅层的 Transformer 模型,这种仅在编码器顶部使用融合机
制的方法并没有在深层 Transformer 模型上得到有效的验证。主要原因是融合机制仅
作用于编码器或解码器的顶层,对中间层的信息传递效率并没有显著提升。因此当
网络深度较深时,这种方法的信息传递仍然不够高效。但这种“静态”的融合方式
也为深层 Transformer 模型的研究奠定了基础。例如,可以使用透明注意力网络
[558]
即在权重平均的基础上,引入了一个权重矩阵。其核心思想是,让解码器中每一层
15.2 神经网络连接优化及深层模型 519
的编码-解码注意力模块都接收不同比例的编码信息,而不是使用相同的融合表示。
2. 动态层融合
那如何进一步提高信息的传递效率?本节介绍的动态层融合可以更充分地利用
之前层的信息,其神经网络连接更加稠密,模型表示能力更
[463, 464, 558]
。以基于 Pre-
Norm 结构的 DLCL 模型中的编码器为例,具体做法如下:
对于每一层的输出 x
l
,对其进行层标准化,得到每一层的信息表示,如下:
h
l
= LN(x
l
) (15.35)
这里,h
0
表示词嵌入层的输出 Xh
l
l > 0代表 Transformer 模型第 l 层的隐
藏层表示。
定义一个维度 (L + 1) ×(L + 1) 的权值矩阵 W,矩阵中每一行表示之前各层
对当前层的贡献度。 W
l,i
代表权值矩阵 W l i 列的权重,则第 0 l
层的聚合结果为 h
i
的线性加权和:
g
l
=
l
X
i=0
h
i
×W
l,i
(15.36)
g
l
会作为输入的一部分送入第 l + 1 层。其网络的结构如图15.12所示。
编码端
X
x
1
x
2
...
x
l
x
l+1
层正则化
X h
1
h
2
... h
l
权重累加 g
l
聚合网络
15.12 线性层聚合网络
根据上述描述可以发现,权值矩阵 W 每个位置的值由先前层对应的位置的值计
算得到,因此该矩阵是一个下三角矩阵。开始时,对权值矩阵的每行进行平均初始
化,即初始化矩阵 W
0
的每一行各个位置的值为
1
λ
λ (1,2,...,l + 1)。伴随着神经
网络的训练,不断更新 W 中每一行不同位置权重的大小。
动态线性层聚合的一个好处是,系统可以自动学习不同层对当前层的贡献度。
实验中也发现,离当前层更近的部分的贡献度(权重)会更大,图15.13展示了对
敛的 DLCL 网络进行权重可视化的结果,在每一行中颜色越深代表对当前层的贡
520 Chapter 15. 神经机器翻译结构优化 肖桐 朱靖波
度越大。
线法,
[561]
[559]
、多尺度同框
[819]
等作为层的融合方式。然而,也有研究发进一步增
能。
深度的限制是值得关注的研究方向,类似的话题在图像处理领域也引起了广泛的讨
[820, 821, 822, 823]
4
2
0
-2
-4
x
1
x
6
x
11
x
16
x
21
x
26
x
31
y
0
y
5
y
10
y
15
y
20
y
25
y
30
15.13 对收敛的 DLCL 网络进行权重的可视化
[463]
15.2.3 面向深层模型的参数初始化策略
对于深层神经机器翻译模型,除了神经网络结构的设计,合适的模型参数初始
化策略同样十分重要。例如,Transformer 参数矩阵采用了 Xavier 始化方
[472]
该方法可以保证在训练过程中各层激活函数的输出和梯度的方差的一致性,即同时
保证每层在前向和反向传播时输入和输出的方差相同。但是,这类方法更多地被用
于初始化浅层神经网络,在训练深层 Transformer 模型时表现不佳
[472]
因此,研究人
员也针对深层网络的参数初始化问题进行了探索,分为以下几种方法。
1. 基于深度缩放的初始化策略
随着神经网络层数的加深,输入的特征要经过很多的线性及非线性变换,受神
经网络中激活函数导数值域范围和连乘操作的影响,常常会带来梯度爆炸或梯度消
失的问题。这个问题的原因是过多地堆叠网络层数时,无法保证反向传播过程中每
层梯度方差的一致性,因此在目前深层模型中采用的很多标准化方式(如层标准化、
批次标准化等)都是从方差一致性的角度来解决问题,即将各层输出的取值范围控
15.2 神经网络连接优化及深层模型 521
制在激活函数的梯度敏感区域,从而维持神经网络中梯度传递的稳定性。
为了明问题,首来看一看 Xavier 始化法如何对数矩 W 行初
[472]
。具体做法为从一个均匀分布中进行随机采样:
W R
n
i
×n
o
u(γ,γ) (15.37)
γ =
r
6
n
i
+ n
o
(15.38)
其中,u(γ,γ) 表示 γ γ 的均匀分布,n
i
n
o
分别为线性变 W 输入和
输出的维度,也就是上一层神经元的数量和下一层神经元的数量。通过使用这种初
始化方式,即可维持神经网络在前向与反向计算过程中,每一层的输入与输出方差
的一致性
[824]
令模型中某层神经元的输出表示为 Z =
P
n
i
j=1
w
j
x
j
可以看出,Z 的核心是计算
两个变量 w
j
x
j
乘积。两个变量乘积的方差的展开式为:
Var(w
j
x
j
) = E[w
j
]
2
Var(x
j
) + E[x
j
]
2
Var(w
j
) + Var(w
j
)Var(x
j
) (15.39)
其中 Var(·) 示求方差操作,由于在大多数情况下,现有模型中的各种标准化
方法可以维持 E[w
j
]
2
E[x
j
]
2
等于或者近似为 0。由于输入 x
j
(1 < j < n
i
) 独立
分布,此处可以使用 x 表示输入服从的分布,对于参数 w
j
也可以有同样的表 w
因此,模型中一层神经元输出的方差可以表示为:
Var(Z) =
n
i
X
j=1
Var(x
j
)Var(w
j
)
= n
i
Var(w)Var(x) (15.40)
通过观察公式(15.40)可以发现,在前向传播的过程中, Var(w) =
1
n
i
时,可以
保证每层的输入和输出的方差一致。类似的,通过相关计算可以得知,为了保证模
中每输入的方致,反向应有 Var(w) =
1
n
o
通过
情况取平均值,控制参数 w 方差
2
n
i
+n
o
,则可以维持神经网络在前向与反向计
算过程中,每一层的输入与输出方差的一致性。若将参数初始化为一个服从边界为
[a,b] 均匀分布,那么其方差
(b+a)
2
12
,为了达到 w 取值要求,初始化时应
a = b =
q
6
n
i
+n
o
但是随着神经网络层数的增加,上述初始化方法已经不能很好地约束基于 Post-
Norm Transformer 模型的输出方差。当神经网络堆叠很多层时,模型顶层输出的
方差较大,同时反向传播时顶层的梯度范数也要大于底层。因此,一个自然的想法
是根据网络的深度对不同层的参数矩阵采取不同的初始化方式,进而强化对各层输
522 Chapter 15. 神经机器翻译结构优化 肖桐 朱靖波
出方差的约束,可以描述为:
W R
n
i
×n
o
u(γ
α
l
,γ
α
l
) (15.41)
其中,l 为对应的神经网络的深度,α 为预先设定的超参数来控制缩放的比例。这样,
可以通过缩减顶层神经网络输出与输入之间的差异,让激活函数的输入分布保持在
一个稳定状态,以此来尽可能避免它们陷入梯度饱和区。
2. Lipschitz 初始化策略
15.2.1节已经介绍, Pre-Norm 结构中每一个子层的输入为 x
pre
l+1
= x
l
+y
l
其中
x
l
为当前子层的输入,y
l
x
l
经过自注意力或前馈神经网络计算后得到的子层输出。
Post-Norm 结构中,在残差连接之后还要进行层标准化操作,具体的计算流程为:
计算均值µ
µ
µ = mean(x
l
+ y
l
)
计算方差σ
σ
σ = std(x
l
+ y
l
)
根据均值和方差对输入进行放缩,如下:
x
post
l+1
=
x
l
+ y
l
µ
µ
µ
σ
σ
σ
·w + b (15.42)
其中,w b 为可学习参数。进一步将公式(15.42)展开后可得:
x
post
l+1
=
x
l
+ y
l
σ
σ
σ
·w
µ
µ
µ
σ
σ
σ
·w + b
=
w
σ
σ
σ
·x
pre
l+1
w
σ
σ
σ
·µ
µ
µ + b (15.43)
可以看到相比 Pre-Norm 计算方式,基 Post-Norm Transformer 子层
的输出 Pre-Norm 形式
w
σ
σ
σ
倍。当
w
σ
σ
σ
< 1 时,x
l
较小,输入与输出之间差异过大,
导致深层 Transformer 系统难以收敛。Lipschitz 初始化策略通过维持条件
w
σ
σ
σ
> 1,保
证网络输入与输出范数一致,进而缓解梯度消失的问
[825]
。一般情况下,w 以被
初始化为 1,因此 Lipschitz 初始化方法最终的约束条件则为:
0 < σ
σ
σ = std(x
l
+ y
l
) 1 (15.44)
3. T-Fixup 初始化策略
另外一种初始化方法是从神经网络结构与优化器的计算方式入手。Post-Norm
构在 Warmup 阶段难以精确地估计参数的二阶动量,这导致了训练不稳定问题
[826]
就是,层标准化是导致深层 Transformer 难以优化的主要原因之一
[463]
Post-Norm
式下 Transformer 底层网络,尤其是编码器的词嵌入层面临严重的梯度消失问题。
出现该问题的原因在于,在不改变层标准化位置的条件下,Adam 优化器利用滑动平
15.2 神经网络连接优化及深层模型 523
均的方式来估计参数的二阶矩,其方差是无界的。在训练阶段的前期,由于模型只
能看到有限数量样本,因此很难有效地估计参数的二阶矩,导致反向更新参数时参
数的梯度方差过大。
除了用 Pre-Norm 代替 Post-Norm 结构来训练深层网络,也可以采用去除 Warmup
策略并移除层标准化机制的方式,并对神经网络中不同的参数矩阵制定相应的缩放
机制来保证训练的稳定性
[826]
。具体的缩放策略如下:
类似于标准的 Transformer 初始化方式,使用 Xavier 初始化方式来初始化除了
词嵌入以外的所有参数矩阵。词嵌入矩阵服 N(0,d
1
2
) 的高斯分布,其 d
代表词嵌入的维度。
编码分自制的阵以神经参数
缩放因子为 0.67L
1
4
的缩放,L 为编码器层数。
对解码器中部分注意力机制的参数矩阵、前馈神经网络的参数矩阵以及前馈神
经网络的嵌入式输入进行缩放因子为 (9M)
1
4
的缩放,其中 M 为解码器层数。
这种初始化方法由于没 Warmup 略,学习率会直接从峰值根据参数的更新
次数进行退火,大幅度增大了模型收敛的时间。因此,如何进一步加快该初始化方
法下模型的收敛速度是比较关键的问题。
4. ADMIN 初始化策略
也有研究发现 Post-Norm 构在训练过程中过度依赖残差支路,在训练初期
容易发生参数梯度方差过大的现象
[815]
。经过分析发现,虽然底层神经网络发生梯度
消失是导致训练不稳定的重要因素,但并不是唯一因素。例如,标准 Transformer
型中梯度消失的原因在于使用了 Post-Norm 构的解码器。尽管通过调整模型结
解决了梯度消失问题,但是模型训练不稳定的问题仍然没有被很好地解决。研究人
员观测到 Post-Norm 结构在训练过程中过于依赖残差支路,而 Pre-Norm 结构在训练
过程中逐渐呈现出对残差支路的依赖性,这更易于网络的训练。进一步,从参数更新
的角度出发,Pre-Norm 由于参数的改变导致网络输出变化的方差经推导后可以表示
O(logL),而 Post-Norm 应的方差为 O(L)。因此,可以尝试减 Post-Norm
由于参数更新导致的输出的方差值,从而达到稳定训练的目的。针对该问题,可以
采用两阶段的初始化方法。这里,可以重新定义子层之间的残差连接如下:
x
l+1
= x
l
·ω
ω
ω
l+1
+ F
l+1
(x
l
) (15.45)
其两阶段的初始化方法如下所示:
Proling
阶段
ω
ω
ω
l+1
= 1
只进行前向计算,无需进行梯度计算。在训练样本上
计算 F
l+1
(x
l
) 的方差
524 Chapter 15. 神经机器翻译结构优化 肖桐 朱靖波
Initialization 阶段:通过 Profiling 阶段得到的 F
l+1
(x
l
) 的方差来初始化 ω
ω
ω
l+1
ω
ω
ω
l+1
=
s
X
j<l
Var[F
l+1
(x
l
)] (15.46)
这种动态的参数初始化方法不受限于具体的模型结构,有较好的通用性。
15.2.4 深层模型的训练加速
尽管窄而深的神经网络比宽网络有更快的收敛速度
[463]
,但伴随着训练数据的增
加,以及模型进一步的加深,训练代价成为不可忽视的问题。例如,在几千万甚至上
亿的双语平行句对上训练一 48 层的 Transformer 型需要几周的时间才能达到收
5
。因此,在保证模型性能不变的前提下,高效地完成深层模型的训练也是至关重
要的。
1. 渐进式训练
所谓渐进式训练是指从浅层神经网络开始,在训练过程中逐渐增加模型的深度。
一种比较简单的方式是将模型分为浅层部分和深层部分,之后分别进行训练,最终
达到提高模型翻译性能的目的
[827]
另一种方式是动态构建深层模型,并尽可能复用浅层部分的训练结
[464]
。假设
开始的时候模型包含 l 层神经网络,然后训练这个模型至收敛。之后,直接拷贝这 l
层神经网络(包括参数),并堆叠出一 2l 层的模型。之后继续训练,重复这个过
程。进行 n 次之后就得到了 (n + 1) ×l 层的模型。图15.14给出了在编码器上使用渐
进式训练的示意图。
×l
×l ×l
×l ×l ×l
×l ×l ×l ×l
step 1
step 2
step 3
step 4
:编码器
:解码器 :拷贝
15.14 渐进式深层模型训练过程
渐进式训练的好处在于深层模型并不是从头开始训练。每一次堆叠,都相当于
5
训练时间的估算是在单台 8 Titan V GPU 服务器上得到的
15.2 神经网络连接优化及深层模型 525
利用“浅”模型给“深”模型提供了一个很好的初始状态,这样深层模型的训练会更
加容易。
2. 分组稠密连接
很多研究工作已经发现深层模型不同层之间的稠密连接能够很明显地提高信息
传递的效率
[463, 559, 827, 828]
与此同时,对之前层信息的不断复用有助于得到更好的表示,
但也带来了计算代价过大的问题。在动态线性层聚合方法DLCL中,每一次聚合
时都需要重新计算之前每一层表示对当前层输入的贡献度,因此伴随着编码器整体
深度的增加,这部分的计算代价变得不可忽略。例如,一个基于动态层聚合的 48
Transformer 模型比不使用动态层聚合的模型在进行训练时慢近 2 倍。同时,缓存中
间结果也增加了显存的使用量。比如,即使在使用半精度计算的情况下,每 12G
显存的 GPU 上计算的词也不能超过 2048 个,这导致训练开销急剧增大。
p =
p = 1
p = 2
p = 4
···
:Layer
:Block
15.15 不同组之间的稀疏连接
缓解这个问题的一种方法是使用更稀疏的层间连接方式。其核心思想与 DLCL
是类似的,不同点在于可以通过调整层之间连接的稠密程度来降低训练代价。比如,
可以将每 p 分为一组,之后 DLCL 在不同组之间进行。这样,通过调节 p 值的
大小可以控制神经网络中连接的稠密程度,作为一种训练代价与翻译性能之间的权
衡。显然,标准的 Transformer 模型
[23]
DLCL 模型
[463]
都可以看作是该方法的一种
特例。如图15.15所示: p = 1 时,每一个单独的块被看作一个独立的组,它等价于
基于动态层聚合的 DLCL 模型; p = 时,它等价于正常的 Transformer 模型。
得注意的是,如果配合渐进式训练,则在分组稠密连接中可以设置 p 等于模型层数。
3. 学习率重置
尽管渐进式训练策略与分组稠密连接结构都可以加速深层模型的训练,但使用
传统的学习率衰减策略会导致训练深层模型时的学习率较小,因此模型无法快速地
526 Chapter 15. 神经机器翻译结构优化 肖桐 朱靖波
达到收敛状态,同时也影响最终的模型性能。
15.16对比了使用学习率重置与不使用学习率重置的学习率曲线,其中的红
曲线描绘了在 WMT 英德翻译任务上标准 Transformer 模型的学习率曲线,可以看到
当模型训练到 40k 时,学习率对比峰值有明显的差距,而此时刚开始训练最终的
深层模型,过小的学习率并不利于后期深层网络的充分训练。
1 2 3 4
0.50
1.00
1.50
2.00
更新次数(10k
学习率(10
3
原始的学习率
重置后的学习率
15.16 学习率重置 vs 不使用学习率重置的学习率曲线
针对该问题的一个解决方案是修改学习率曲线的衰减策略,如图15.16所示。
中蓝色的曲线是修改后的学习率曲线。首先在训练的初期让模型快速地达到学习率
的峰值(线性递增),之后神经网络的深度每增加 l 层时,都会将当前的学习率值重
置到峰值点。之后,根据训练的步数对其进行相应的衰减。具体的步骤如下:
在训练的初期,模型会先经历一个学习率预热的过程:
lr = d
0.5
model
·step_num ·warmup_steps
0.5
(15.47)
里,step_num 数,warmup_step 数,
d
model
表示 Transformer 模型的隐藏层大小,lr 是学习率。
在之后的训练过程中,每当增加模型深度时,学习率都会重置到峰值,之后进
行相应的衰减:
lr = d
0.5
model
·step_num
0.5
(15.48)
这里 step_num 代表学习率重置后更新的步数。
综合使用渐进式训练、分组稠密连接、学习率重置策略可以在翻译品质不变的
前提下,缩减近 40% 的训练时间
[464]
同时,伴随着模型的加深与数据集的增大,
上述方法带来的加速比也会进一步地增大。
15.2 神经网络连接优化及深层模型 527
15.2.5 深层模型的健壮性训练
伴随着网络的加深,模型的训练还会面临另外一个比较严峻的问题
——
过拟合。
由于参数量的增大,深层模型的输入与输出分布之间的差异也会越来越大,然而不
同子层之间的相互适应也会更加的明显,这将导致任意子层网络对其他子层的依赖
过大。这种现象在训练阶段是有帮助的,因为不同子层可以协同工作从而更好地拟
合训练数据。然而这种方式也降低了模型的泛化能力,即深层模型更容易陷入过拟
合问题。
通常,以使 Dropout 手段来缓过拟问题(见第三章)。不的是,
尽管目前 Transformer 模型使用了多种 Dropout 手段(如 Residual DropoutAttention
DropoutReLU Dropout 等)拟合层模然存在。15.17
WMT16 德翻译任务的校验集与训练集的困惑度,从中可以看到,图15.17(a) 所示
的深层模型相比于图15.17(b) 所示的浅层模型来说,深层模型在训练集和校验集的困
惑度上都有明显的优势,然而模型在训练一段时间后出现校验集困惑度上涨的现象,
说明模型已经过拟合于训练数据。
15 17 19 21 23 25
6
6.5
7
3.7
3.8
3.9
Epoch
训练集 校验集
15 17 19 21 23 25
5
5.5
6
3.5
3.6
3.7
Epoch
训练集 PPL
训练集 PPL
校验集 PPL
校验集 PPL
(a) 浅层模型 (b) 深层模型
15.17 模型在 WMT16 英德翻译任务上的校验集与训练集的困惑度
十三提到 Layer Dropout 法可效地解这问题。编码为例,
Layer Dropout 的过程可以被描述为:在训练过程中,对自注意力子层或前馈神经网
络子层进行随机丢弃,以减少不同子层之间的相互适应。这里选择 Pre-Norm 结构作
为基础架构,它可以被描述为:
x
l+1
= F (LN(x
l
)) + x
l
(15.49)
其中,LN(·) 表示层标准化函数,F (·) 表示自注意力机制或者前馈神经网络,x
l
表示
l 个子层的输入。之后,使用一个掩码 Mask(值 0 1)来控制每个子层是正
常计算还是丢弃。于是,该子层的计算公式可以被重写为:
x
l+1
= Mask ·F (LN(x
l
)) + x
l
(15.50)
528 Chapter 15. 神经机器翻译结构优化 肖桐 朱靖波
Mask = 0 代表该子层被丢弃, Mask = 1 代表正常进行当前子层的计算。15.18
示了这个方法与标准 Pre-Norm 结构之间的区别。
x
l
LN
F
x
l+1
LN
F
x
l+2
x
l
LN
F
Mask=1
x
l+1
LN
F
Mask=0
x
l+2
(a) 标准的 Pre-Norm
(b) 基于随机子层跳跃的 Pre-Norm
15.18 标准的 Pre-Norm 结构与基于随机子层跳跃的 Pre-Norm 结构
除此之外,在残差网络中,研究人员已经发现底层神经网络的作用是对输入进
行抽象表示,而上层神经网络会进一步修正这种表示来拟合训练目标,因此底层神
经网络对模型最终的输出有很大的影响
[804]
该结论同样适用于 Transformer 模型,
如,在训练中,残差支路以及底层的梯度范数通常比较大,这也间接表明底层神经
网络在整个优化的过程中需要更大的更新。考虑到这个因素,在设计每一个子层被
丢弃的概率时,可以采用自底向上线性增大的策略,保证底层的神经网络相比于顶
层更容易保留下来。