13.2 正则化 439
13.2 正则化
正则化是机器学习中的经典技术,通常用于缓解过拟合问题。正则化的概念源
自线性代数和代数几何。在实践中,它更多的是指对反问题The Inverse Problem
一种求解方式。假设输入 x 和输出 y 之间存在一种映射 f
y = f(x) (13.1)
反问题是指:当观测到 y 时,能否求出 x反问题对应了很多实际问题,比如,可以
y 看作经过美化的图片,x 看作原始的图片,反问题就对应了图片还原。机器翻译
的训练也是一种反问题,因为可以把 y 看作是正确的译文,x 看作是输入句子或者模
型参数
2
理想的情况下,研究人员希望反问题的解是适定的Well-posed所谓适定解,
需要满足三个条件:解是存在的、解是唯一的、解是稳定的(即 y 微小的变化会导
x 微小的变化,也被称作解连续)。所有不存在唯一稳定解的问题都被称作不适定
问题Ill-posed Problem对于机器学习问题,解的存在性比较容易理解。解的唯一
性大多由问题决定。比如,如果把描述问题的函数 f(·) 看作一个 n ×n 矩阵 Ax
y 都看作是 n 维向量。那么 x 不唯一的原因在于 A 不满秩(非奇异矩阵)不过,
在性和唯一性并不会对机器学习方法造成太大困扰,因为在实践中往往会找到近似
的解。但是,解的稳定性却给神经机器翻译带来了很大的挑战。因为神经机器翻译
模型非常复杂,里面存在大量的矩阵乘法和非线性变换。这导致
f
(
·
)
往往是不稳定
的,也就是说,神经机器翻译中输出 y 的微小变化会导致输入 x 的巨大变化。比如,
在系统研发中经常会发现,即使训练样本发生很小的变化,模型训练得到的参数都
会有非常明显的区别。不仅如此,在神经机器翻译模型中,稳定性训练还面临两方
面问题:
观测数据不充分语言达的样性,练样能覆非常限的
现象。从样本的表示空间上看,对于没有观测样本的区域,根本无法知道真实
解的样子,因此也很难描述这些样本的性质,更不用说稳定性训练了。
数据中存在噪声噪声问题是稳定性训练最大的挑战之一。因为,即使是很小的
噪声,也可能会导致解的巨大变化。
以上问题带来的现象就是过拟合。因为训练数据有限且存在噪声,因此模型参数
会过分拟合噪声数据。而且,这样的模型参数又与真实(理想)的模型参数相差很远。
正则化正是一种解决过拟合现象的方法。有时候,正则化也被称作Denoising
虽然它的出发点并不只是去除噪声的影响。13.4对比了不同函数对二维空间中一
些数据点的拟合情况。在过拟合现象中,函数可以完美的拟合所有的数据点,即使
有些数据点是噪声。
2
在训练中,如果把源语言句子看作是不变的量,这时函数 f(·) 的输入只有模型参数。
440 Chapter 13. 神经机器翻译模型训练 肖桐 朱靖波
欠拟合 拟合合适
过拟合
13.4 欠拟合 vs 过拟合
正则化的一种实现是在训练目标中引入一个正则项。在神经机器翻译中,引入
正则项的训练目标为:
b
w = argmin
w
Loss(w) + λR(w) (13.2)
其中,w 是模型参数,Loss(w) 是损失函数,R(w) 是正则项,λ 是正则项的系数,用于
控制正则化对训练影响的程度。R(w) 通常也可以被看作是一种先验,因为在数据不
充分且存在噪声的情况下,可以根据一些先验知识让模型偏向正确的方向一些,而
不是一味地根据受噪声影响的 Loss(w) 进行优化。相应的,引入正则化后的模型可以
获得更好的泛化Generalization)能力,即模型在新的未见数据上表现会更好。
实践中已经证明,正则化方法有助于使得像神经机器翻译模型这样复杂模型获
得稳定的模型参数。甚至有些情况下,如果不引入正则化,训练得到的翻译模型根
本无法使用。此外,正则化方法不仅可以用于提高模型的泛化能力,也可以作为干
预模型学习的一种手段,比如,可以将一些先验知识作为正则项约束机器翻译模型
的学习。类似的手段在本书后续的内容中也会被使用。
13.2.1 L1/L2 正则化
L1/L2
化是法,型。
L1/L2 正则化分别对应正则项是 l
1
l
2
范数的情况。具体来说,L1 正则化是指:
R(w) = w
1
(13.3)
=
X
w
i
|w
i
|
L2 正则化是指
R(w) = (w
2
)
2
(13.4)
=
X
w
i
w
i
2
第九章已经介绍了 L1 L2 正则化方法,这里做一些展开。从几何的角度看,L1
13.2 正则化 441
L2 正则项都是有物理意义的。二者都可以被看作是空间上的一个区域,比如,
二维平面上,l
1
范数表示一个以 0 点为中心的菱形,l
2
范数表示一个以 0 点为中心
的圆。此时,L(w) R(w) 叠加在一起构成了一个新的区域,优化问题可以被看作
是在这个新的区域上进行优化。由于 L1 L2 则项在解空间中形成的区域都 0
点(坐标原点)附近,因此优化的过程可以确保参数不会偏离 0 点太多。也就是说,
L1 L2 正则项引入了一个先验:模型的解不应该离 0 点太远。而 L1 L2 正则
实际上是在度量这个距离。
那为什么要用 L1 L2 正则项惩罚离 0 点远的解呢?这还要从模型复杂度谈起。
实际上,对于神经机器翻译这样的模型来说,模型的容量是足够的。所谓容量可以
被简单的理解为独立参数的个数
3
也就是说,理论上存在一种模型可以完美的描述
问题。但是,从目标函数拟合的角度来看,如果一个模型可以拟合很复杂的目标函
数,那模型所表示的函数形态也会很复杂。这往往体现在模型中参数的值“偏大”
比如,用一个多项式函数拟合一些空间中的点,如果希望拟合得很好,各个项的系
数往往是非零的。而且为了对每个点进行拟合,通常需要多项式中的某些项具有较
大的系数,以期望函数在局部有较大的斜率。显然,这样的模型是很复杂的。模型的
复杂度可以用函数中参数(比如多项式中各项的系数)“值”进行度量,这也体现
在模型参数的范数上。
因此,L1 L2 正则项的目的是防止模型为了匹配少数(噪声)样本而导致
型参数的值过大。反过来说,L1 L2 正则项会鼓励那些参数值在 0 点附近的情况。
从实践的角度看,这种方法可以很好的对统计模型的训练进行校正,得到泛化能力
更强的模型。
13.2.2 标签平滑
神经机器翻译在每个目标语言位置 j 输出一个分布
ˆ
y
j
,这个分布描述了每
目标语言单词出现的可能性。在训练时,每个目标语言位置上的答案是一个单词,
就对应了 One-hot 分布 y
j
,它仅仅在正确答案那一维为 1,其它维均为 0。模型训练
可以被看作是一个调整模型参数让
ˆ
y
j
逼近 y
j
的过程。但是,y
j
的每一个维度是一个
0 1 的目标,这样也就无法考虑类别之间的相关性。具体来说,除非模型在
案那一维输出 1否则都会得到惩罚。即使模型把一部分概率分配给与答案相近的单
词(比如同义词),这个相近的单词仍被视为完全错误的预测。
标签平滑的思想很简单
[536]
:答案所对应的单词不应该“独享”所有的概率,其
它单词应该有机会作为答案。这个观点与第二章中语言模型的平滑非常类似。在复
杂模型的参数估计中,往往需要给未见或者低频事件分配一些概率,以保证模型具
有更好的泛化能力。具体实现时,标签平滑使用了一个额外的分布 q它是在词汇表
V 上的一个均匀分布,即 q
k
=
1
|V |
,其中 q
k
表示分布的第 k 维。然后,标准答案的
3
另一种定义是把容量看作神经网络所能表示的假设空间大小
[571]
,也就是神经网络能表示的不同函
数所构成的空间。
442 Chapter 13. 神经机器翻译模型训练 肖桐 朱靖波
分布被重新定义为 y
j
q 的线性插值:
y
ls
j
= (1 α) ·y
j
+ α ·q (13.5)
这里,α 示一个系数,用于控制分布 q 的重要性,y
ls
j
表示使用标签平滑后的学习
目标。
标签平滑实际上定义了一种“软”标签,使得所有标签都可以分到一些概率。
方面可以缓解数据中噪声的影响,另一方面目标分布会更合理(显然,真实的分布
不应该是 One-hot 分布)。图13.5展示了标签平滑前后的损失函数计算结果的对比。
模型输出:
学习目标:
(使用标
签平滑)
标准答案:
(未使用
标签平滑)
p
1
p
2
p
3
p
4
p
5
p
6
p
7
0 0
1
0 0 0 0
0.1 0.1
0.4
0.1 0.1 0.1 0.1
Loss = 0.3 log p
3
P
7
i=1
0.1log p
i
Loss = log p
3
13.5 不使用标签平滑 vs 使用标签平滑
标签平滑也可以被看作是对损失函数的一种调整,并引入了额外的先验知识(即
q 相关的部分)。只不过这种先验知识并不是通过公(13.2)所示的线性插值方式
与原始损失函数进行融合。
13.2.3 Dropout
神经机器翻译模型是一种典型的多层神经网络模型。每一层都包含若干神经元,
负责接收前一层所有神经元的输出,之后进行诸如乘法、加法等变换操作,并有选择
地使用非线性的激活函数,最终得到当前层每个神经元的输出。从模型最终预测的
角度看,每个神经元都在参与最终的预测。理想的情况下,研究人员希望每个神经
元都能相互独立的做出“贡献”这样的模型会更加健壮,因为即使一部分神经元不
能正常工作,其它神经元仍然可以独立做出合理的预测。但是,随着每一层神经元
数量的增加以及网络结构的复杂化,神经元之间会出现相互适应Co-adaptation)的
现象。所谓相互适应是指,一个神经元对输出的贡献与同一层其它神经元的行为是
相关的,也就是说这个神经元已经适应到它周围的“环境”中。
一方面来说,相互适应的好处在于神经网络可以处理更加复杂的问题,因为联
合使用两个神经元要比单独使用每个神经元的表示能力强。这也类似于传统机器学
习任务中往往会设计一些高阶特征,比如自然语言序列标注中对 2-gram 3-gram
使用。不过另一方面,相互适应会导致模型变得更加“脆弱”。因为相互适应的神经
元可以更好的描述训练数据中的现象,但是在测试数据上,由于很多现象是未见的,
13.2 正则化 443
细微的扰动会导致神经元无法适应。具体体现出来就是过拟合问题。
Dropout 也是解决过拟合问题的一种常用方法
[572]
该方法很简单,在训练时随机
让一部分神经元停止工作,这样在每次进行参数更新时,神经网络中每个神经元周
围的环境都在变化,因此它就不会过分适应到环境中。13.6中给出了某一次参数更
新中使用 Dropout 之前和之后神经网络的状态对比。
13.6 使用 Dropout 之前(左)和之后(右)神经网络状态的对比
具体实现时,可以设置一个参 p (0, 1)在每次参数更新所使用的前向和
向计算中,每个神经元都以概率 p 停止工作。相当于每层神经网络会有 p 为概率
的神经元被“屏蔽”掉,每一次参数更新中会随机屏蔽不同的神经元。13.7展示了
使用 Dropout 方法之前使用方法后的层神经网在计方式的不同。
中,x
l
i
代表第 l 层神经网络的第 i 个输入,w
l
i
为输入所对应的权重,b
l
表示第 l
神经网络输入的偏置,z
l+1
i
表示第 l 层神经网络的线性运算的结果,f(·) 表示激活函
数,r
l
i
的值服从于参数为 1 p 的伯努利分布。
b
l
x
l
3
x
l
2
x
l
1
z
l+1
i
x
l+1
i
使用 Dropout 前的
一层神经网络
w
l
i
f
b
l
˜x
l
3
˜x
l
2
˜x
l
1
z
l+1
i
x
l+1
i
x
l
3
x
l
2
x
l
1
r
l
3
r
l
2
r
l
1
使用 Dropout 后的
一层神经网络
w
l
i
f
未应用 Dropout
z
l+1
i
= w
l
x
l
+ b
l
x
l+1
i
= f
z
l+1
i
应用 Dropout
r
l
i
Bernoulli (1 p)
˜
x = rx
z
l+1
i
= w
l
e
x
l
+ b
l
x
l+1
i
= f
z
l+1
i
13.7 使用 Dropout 之前(左)和之后(右)一层神经网络
对于新的样本,可以使用 Dropout 训练之后的模型对其进行推断,但是每个神经
元的输出要乘以 1 p,以保证每层神经元输出的期望和训练时是一样的。另一种
用的做法是,在训练时对每个神经元的输出乘以
1
1p
然后在推断时神经网络可以不
经过任何调整就直接使用。
Dropout 方法的另一种解释是,在训练中屏蔽掉一些神经元相当于从原始的神经
444 Chapter 13. 神经机器翻译模型训练 肖桐 朱靖波
网络中抽取出了一个子网络。这样,每次训练都在一个随机生成的子网络上进行,
不同子网络之间的参数是共享的。在推断时,则把所有的子网络集成到一起。这种
思想也有一些集成学习Ensemble Learning)的味道,只不过 Dropout 中子模型(或
子网络)是在数级间中样出的。由 Dropout 可以很好缓解杂神
络模型的过拟合问题,因此也成为了大多数神经机器翻译系统的标配。
随着网络层数的增多,相互适应也会出现在不同层之间,甚至会出现在多头注
意力机制的不同头之间。因此,Dropout 方法也可以用于对模型局部结构的屏蔽,
如,对多层神经网络中的层进行屏蔽, Layer Dropout。特别是对于深层神经网络,
Layer Dropout 也是一种有效的防止过拟合的方法。关于 Layer Dropout 的内容在第十
五章还会有详细讨论。