Skip to content

第9章 正则化

第8章讨论了如何度量模型性能,并指出训练数据和测试数据之间可能存在显著的性能差距。造成这一差异的可能原因包括:(i)模型描述了训练数据中的统计特殊性,这些特殊性并不能代表从输入到输出的真实映射(过拟合),以及(ii)在没有训练样本的区域,模型不受约束,导致次优预测。

本章讨论正则化(regularization)技术。这是一类能减少训练性能和测试性能之间泛化差距的方法。严格来说,正则化是指在损失函数中添加显式项,以偏好特定的参数选择。然而,在机器学习中,这一术语通常被用来泛指任何能改善泛化能力的策略。

我们首先从最严格的意义上考虑正则化。然后展示随机梯度下降算法本身如何偏好某些解,这被称为隐式正则化。接下来,我们考虑一组能改善测试性能的启发式方法,包括早停、集成、Dropout、标签平滑和迁移学习。

9.1 显式正则化

考虑使用训练集 {xi,yi}(输入/输出对)来拟合参数为 ϕ 的模型 f[x,ϕ]。我们寻找使损失函数 L[ϕ] 最小化的参数 ϕ^

(9.1)ϕ^=argminϕ[L[ϕ]]=argminϕ[i=1Ii[xi,yi]],

其中各项 i[xi,yi] 度量网络预测 f[xi,ϕ] 与输出目标 yi 之间每个训练对的不匹配程度。为了使该最小化过程偏向某些解,我们加入一个额外项:

(9.2)ϕ^=argminϕ[i=1Ii[xi,yi]+λg[ϕ]],

其中 g[ϕ] 是一个返回标量的函数,当参数不太理想时该函数取较大值。项 λ 是一个正标量,控制原始损失函数和正则化项的相对贡献。正则化后的损失函数的极小值通常不同于原始损失函数的极小值,因此训练过程会收敛到不同的参数值(图 9.1)。

图 9.1

图 9.1 显式正则化。a)Gabor 模型的损失函数(见第 6.1.2 节)。青色圆圈表示局部极小值。灰色圆圈表示全局最小值。b)正则化项偏好靠近图中心的参数,随着我们远离该点,施加递增的惩罚。c)最终的损失函数是原始损失函数加上正则化项。该曲面具有更少的局部极小值,且全局最小值已移动到不同位置(箭头显示变化)。

9.1.1 概率解释

正则化可以从概率的角度来理解。第 5.1 节展示了损失函数如何从最大似然准则构造而来:

(9.3)ϕ^=argmaxϕ[i=1IPr(yi|xi,ϕ)].

正则化项可被视为一个先验 Pr(ϕ),它表示在观测数据之前对参数的先验知识,此时我们有了最大后验MAP 准则:

(9.4)ϕ^=argmaxϕ[Pr(ϕ)i=1IPr(yi|xi,ϕ)].

回到负对数似然损失函数,取对数并乘以负一,我们可以看到 λg[ϕ]=log[Pr(ϕ)]

9.1.2 L2 正则化

前面的讨论回避了正则化项应该惩罚(或等价地,先验应该偏好)哪些解的问题。由于神经网络用于极其广泛的应用领域,这些偏好只能是非常通用的。最常用的正则化项是 L2 范数,它惩罚参数值的平方和:

(9.5)ϕ^=argminϕ[i=1Ii[xi,yi]+λjϕj2],

其中 j 索引参数。这也被称为 Tikhonov 正则化岭回归(ridge regression),或者(当应用于矩阵时)Frobenius 范数正则化

对于神经网络,L2 正则化通常只应用于权重而不包括偏置,因此也被称为权重衰减(weight decay)项。其效果是鼓励权重取较小的值,使输出函数更加平滑。要理解这一点,考虑到输出预测是最后一个隐藏层激活值的加权和。如果权重幅度较小,输出的变化也会较小。同样的逻辑适用于最后一个隐藏层的预激活值的计算,以此类推,向网络后方传播。在极限情况下,如果我们强制所有权重为零,网络将产生由最终偏置参数决定的常数输出。

图 9.2 展示了用权重衰减拟合图 8.4 中简化网络的效果,以及正则化系数 λ 不同取值的影响。当 λ 较小时,几乎没有效果。然而,随着 λ 增大,对数据的拟合变得不那么精确,函数变得更加平滑。这可能会从两个方面改善测试性能:

  • 如果网络过拟合,那么添加正则化项意味着网络必须在对数据的严格拟合和函数平滑性之间进行权衡。一种理解方式是:方差导致的误差减少了(模型不再需要通过每个数据点),代价是偏差增加(模型只能描述平滑函数)。
  • 当网络过参数化时,一些额外的模型容量用于描述没有训练数据的区域。此时,正则化项会偏好在相邻点之间平滑插值的函数。这在缺乏对真实函数的先验知识时是合理的行为。

图 9.2

图 9.2 具有 14 个隐藏单元的简化网络中的 L2 正则化(见图 8.4)。a-f)随着我们增大正则化系数 λ,拟合的函数也随之变化。黑色曲线是真实函数,橙色圆圈是带噪声的训练数据,青色曲线是拟合的模型。对于较小的 λ(面板 a-b),拟合函数精确通过数据点。对于中等的 λ(面板 c-d),函数更加平滑且更接近真实值。对于较大的 λ(面板 e-f),正则化项压过了似然项,因此拟合函数过于平滑,整体拟合效果变差。

9.2 隐式正则化

一个有趣的近期发现是,梯度下降和随机梯度下降都不是中性地移向损失函数的最小值的;它们各自对某些解表现出偏好。这被称为隐式正则化(implicit regularization)。

9.2.1 梯度下降中的隐式正则化

考虑步长无穷小的连续版本梯度下降。参数 ϕ 的变化将由以下微分方程控制:

(9.6)dϕdt=Lϕ.

梯度下降用大小为 α 的一系列离散步骤来近似这一过程:

(9.7)ϕt+1=ϕtαL[ϕt]ϕ.

离散化导致了与连续路径的偏差(图 9.3)。

图 9.3

图 9.3 梯度下降中的隐式正则化。a)在水平线 ϕ1=0.61 上有一族全局极小值的损失函数。蓝色虚线显示从左下角开始的连续梯度下降路径。青色轨迹显示步长为 0.1 的离散梯度下降(前几步明确用箭头表示)。有限步长导致路径发散并到达不同的最终位置。b)可以通过向连续梯度下降损失函数添加一个惩罚梯度平方幅度的正则化项来近似这种偏差。c)添加该项后,连续梯度下降路径收敛到与离散版本在原始函数上相同的位置。

这种偏差可以通过推导一个修改后的损失项 L~ 来理解:它使连续情形到达与原始损失 L 的离散化版本相同的位置。可以证明(见本章末尾的注释"梯度下降中的隐式正则化"),该修改后的损失为:

(9.8)L~GD[ϕ]=L[ϕ]+α4Lϕ2.

换言之,离散轨迹被排斥在梯度范数较大(表面陡峭)的区域之外。这不会改变极小值的位置(梯度本来就为零的地方)。然而,它改变了其他位置的有效损失函数并修改了优化轨迹,从而可能收敛到不同的极小值。梯度下降中的隐式正则化可能是全批量梯度下降在较大步长下泛化更好的原因之一(图 9.5a)。

9.2.2 随机梯度下降中的隐式正则化

类似的分析可以应用于随机梯度下降。现在我们寻找一个修改后的损失函数,使得连续版本到达与所有可能随机 SGD 更新的平均值相同的位置。可以证明这是:

L~SGD[ϕ]=L~GD[ϕ]+α4Bb=1BLbϕLϕ2(9.9)=L[ϕ]+α4Lϕ2+α4Bb=1BLbϕLϕ2.

这里,Lb 是一个 epoch 中第 bth 批的损失,LLb 现在分别表示完整数据集中 I 个损失和批次中 |B| 个损失的均值:

(9.10)L=1Ii=1Ii[xi,yi]Lb=1|B|iBbi[xi,yi].

方程 9.9 揭示了一个额外的正则化项,它对应于批次损失 Lb 的梯度方差。换言之,SGD 隐式偏好梯度稳定的区域(即所有批次对梯度方向的一致性较高的地方)。同样,这改变了优化过程的轨迹(图 9.4),但不一定改变全局最小值的位置;如果模型过参数化,那么它可能完全拟合所有训练数据,使得每个梯度项都在全局最小值处为零。

SGD 通常比梯度下降泛化得更好,且较小的批量通常比较大的批量表现更优(图 9.5b)。一种可能的解释是,固有的随机性使得算法能够到达损失函数的不同部分。然而,这种性能提升也可能部分或全部归因于隐式正则化;它鼓励所有数据都拟合得较好(从而批次方差较小)的解,而非某些数据拟合极好、其他数据拟合较差(尽管总体损失相同,但批次方差较大)的解。前者更可能具有更好的泛化能力。

图 9.4

图 9.4 随机梯度下降的隐式正则化。a)Gabor 模型的原始损失函数(第 6.1.2 节)。蓝点表示全局最小值。b)来自梯度下降的隐式正则化项惩罚梯度平方幅度。c)来自随机梯度下降的额外隐式正则化惩罚批次梯度的方差。d)修改后的损失函数(原始损失加上两个隐式正则化分量之和)。蓝点表示全局最小值,它现在可能与面板(a)中的位置不同。

图 9.5

图 9.5 学习率(LR)和批量大小对 MNIST-1D 的 4000 个训练样本和 4000 个测试样本的影响(见图 8.1),使用具有两个隐藏层的神经网络。a)较大的学习率比中等或较小的学习率性能更好。在每种情况下,迭代次数为 6000/LR,因此每个解有机会移动相同的距离。b)较小的批量性能更优。在每种情况下,迭代次数被选择为使训练数据被记忆到大致相同的模型容量。

9.3 改善性能的启发式方法

我们已经看到显式正则化通过向损失函数添加额外项来鼓励训练算法找到好的解。这也作为随机梯度下降的一种无意但看似有益的副产品隐式地发生。本节描述其他用于改善泛化的启发式方法。

9.3.1 早停

早停(early stopping)是指在训练过程尚未完全收敛之前就停止训练。如果模型已经捕获了底层函数的大致形状但尚未来得及过拟合到噪声,这可以减少过拟合(图 9.6)。一种理解方式是:由于权重初始化为较小的值(见第 7.5 节),它们根本没有时间变大,因此早停与显式 L2 正则化具有类似的效果。另一种观点是早停减少了有效模型复杂度。因此,我们沿着偏差/方差权衡曲线回退到临界区域之前的位置,性能随之改善(见图 8.9 和图 8.10)。

早停只有一个超参数——停止学习的步数。通常,这是使用验证集(第 8.5 节)通过经验选择的。然而,对于早停,超参数可以在不需要训练多个模型的情况下选择。模型训练一次,每 T 次迭代监测在验证集上的性能,并存储相关参数。选择验证性能最佳的那组参数。

图 9.6

图 9.6 早停。a)具有 14 个线性区域的简化浅层网络模型(图 8.4),随机初始化(青色曲线)并使用 SGD 训练,批量大小为 5,学习率为 0.05。b-d)随着训练进行,函数首先捕获真实函数(黑色曲线)的大致结构。e-f)然后过拟合到带噪声的训练数据(橙色点)。虽然训练损失在整个过程中持续下降,但面板(c)和(d)中学到的模型最接近真实的底层函数,对测试数据的泛化效果更好。

9.3.2 集成

减少训练数据和测试数据之间泛化差距的另一种方法是构建多个模型并平均它们的预测。这样一组模型被称为集成(ensemble)。这种技术可以可靠地提高测试性能,代价是需要训练和存储多个模型并执行多次推理。

模型可以通过取输出的均值(对于回归问题)或 softmax 前的预激活值的均值(对于分类问题)来组合。假设模型误差是独立的并且会相互抵消。�者,我们可以取输出的中位数(对于回归问题)或最频繁预测的类别(对于分类问题),以使预测更加鲁棒。

训练不同模型的一种方式是使用不同的随机初始化。这在输入空间中远离训练数据的区域可能有帮助,在那里拟合函数相对不受约束,不同模型可能产生不同的预测,因此多个模型的平均可能比任何单个模型泛化得更好。

第二种方法是通过有放回地重新采样训练数据来生成多个不同的数据集,并从每个数据集训练不同的模型。这被称为自助聚合(bootstrap aggregating)或简称 bagging(图 9.7)。它具有平滑数据的效果;如果一个数据点不在某个训练集中,模型将从附近的点进行插值。因此,如果该点是异常值,拟合函数在该区域将更加温和。其他方法还包括使用不同超参数训练模型或训练完全不同种类的模型。

图 9.7

图 9.7 集成方法。a)将单个模型(灰色曲线)拟合到整个数据集(橙色点)。b-e)通过有放回地重新采样数据四次创建的四个模型(bagging)(橙色点的大小表示数据点被重新采样的次数)。f)当我们平均这个集成的预测时,结果(青色曲线)比面板(a)中对全部数据集的结果(灰色曲线)更加平滑,可能会有更好的泛化效果。

9.3.3 Dropout

Dropout 在 SGD 的每次迭代中将一个随机子集(通常为 50%)的隐藏单元钳制为零(图 9.8)。这使得网络对任何给定隐藏单元的依赖减少,并鼓励权重具有较小的幅度,从而使函数因任何特定隐藏单元的存在或缺失而产生的变化减小。

这种技术有一个积极的好处,即它可以消除函数中不理想的"扭折",这些扭折远离训练数据且不影响损失。例如,考虑三个沿曲线依次激活的隐藏单元(图 9.9a)。第一个隐藏单元导致斜率大幅增加,第二个隐藏单元减小斜率,使函数回落。最后,第三个单元取消了这个减小并使曲线回到原来的轨迹。这三个单元合谋在函数中制造了一个不良的局部变化。这不会改变训练损失,但不太可能有好的泛化效果。

图 9.8

图 9.8 Dropout。a)原始网络。b-d)在每次训练迭代中,随机子集的隐藏单元被钳制为零(灰色节点)。结果是这些单元的入权重和出权重没有效果,因此我们每次都用一个略有不同的网络进行训练。

当几个单元以这种方式合谋时,消除其中一个(就像在 dropout 中发生的那样)会导致该单元活跃的半空间中输出函数发生相当大的变化(图 9.9b)。后续的梯度下降步骤将试图补偿这一变化,随着时间的推移,这种依赖关系将被消除。总体效果是,训练数据点之间不必要的大变化被逐渐移除,即使它们对损失没有贡献(图 9.9)。

图 9.9

图 9.9 Dropout 机制。a)曲线中一个不良的扭折是由斜率依次增加、在斜率处减小(在圈出的关节处),然后再次增加以回到原始轨迹造成的。这里我们使用全批量梯度下降,模型(来自图 8.4)尽可能地拟合数据,因此进一步的训练不会消除扭折。b)考虑如果我们移除产生圈出关节的第八个隐藏单元会发生什么(就像在 dropout 中可能发生的那样)。没有了斜率的减小,函数右侧呈向上轨迹,后续的梯度下降步骤将致力于补偿这一变化。c)进行 2000 次迭代后的曲线——每次迭代(i)随机移除造成扭折的三个隐藏单元之一,然后(ii)执行一步梯度下降。扭折不影响损失,但仍然被这种 dropout 机制的近似所消除。

在测试时,我们可以照常运行网络,让所有隐藏单元都处于活跃状态;然而,与训练时相比,网络现在有更多的活跃隐藏单元,因此我们将权重乘以一减去 dropout 概率来进行补偿。这被称为权重缩放推理规则。另一种推理方法是使用 Monte Carlo dropout,其中我们运行网络多次,每次将不同的随机子集的单元钳制为零(如同训练时),然后组合结果。这与集成密切相关,因为网络的每个随机版本都是不同的模型;然而,这里我们不需要训练或存储多个网络。

9.3.4 添加噪声

Dropout 可以被解释为对网络激活施加乘性伯努利噪声。这引出了在训练期间对网络其他部分添加噪声以使最终模型更加鲁棒的想法。

一种选择是向输入数据添加噪声;这会使学到的函数更加平滑(图 9.10)。对于回归问题,可以证明这等价于添加一个惩罚网络输出对其输入的导数的正则化项。一种极端的变体是对抗训练(adversarial training),其中优化算法主动搜索输入的小扰动,这些扰动会导致输出的大变化。可以将它们视为最坏情况的加性噪声向量。

图 9.10

图 9.10 向输入添加噪声。在 SGD 的每一步中,方差为 σx2 的随机噪声被添加到批次数据中。a-c)使用三种不同噪声水平拟合的模型(小点表示十个样本)。添加更多噪声会使拟合函数(青色线)更加平滑。

第二种可能是向权重添加噪声。这鼓励网络即使在权重的小扰动下也能做出合理的预测。结果是训练收敛到宽而平坦区域中间的局部极小值,在那里改变个别权重的确切值影响不大。

最后,我们可以扰动标签。多类分类的最大似然准则旨在以绝对确定性预测正确的类别(方程 5.24)。为此,最终的网络激活值(即 softmax 函数之前的值)被推向对正确类别取非常大的值,而对错误类别取非常小的值。

我们可以通过假设一定比例 ρ 的训练标签是不正确的、且等概率地属于其他类别来抑制这种过度自信的行为。这可以通过在每次训练迭代中随机改变标签来实现。然而,同样的效果也可以通过改变损失函数来实现——最小化预测分布和一个真实标签概率为 1ρ、其他类别等概率的分布之间的交叉熵。这被称为标签平滑(label smoothing),在多种场景下都能改善泛化。

9.3.5 贝叶斯推理

最大似然方法通常过度自信;它在训练期间选择最可能的参数并用这些参数进行预测。然而,许多参数值可能与数据广泛兼容,只是可能性略低。贝叶斯方法将参数视为未知变量,并使用贝叶斯规则计算参数 ϕ 在训练数据 {xi,yi} 条件下的分布 Pr(ϕ|{xi,yi})

(9.11)Pr(ϕ|{xi,yi})=i=1IPr(yi|xi,ϕ)Pr(ϕ)i=1IPr(yi|xi,ϕ)Pr(ϕ)dϕ,

其中 Pr(ϕ) 是参数的先验概率,分母是归一化项。因此,每个参数选择都被赋予一个概率(图 9.11)。

对新输入 x 的预测 y 是所有参数集预测的无穷加权和(即积分),其中权重是相关概率:

(9.12)Pr(y|x,{xi,yi})=Pr(y|x,ϕ)Pr(ϕ|{xi,yi})dϕ.

这实际上是一个无穷加权集成,其中权重取决于(i)参数的先验概率和(ii)它们与数据的一致程度。

图 9.11

图 9.11 简化网络模型的贝叶斯方法(见图 8.4)。参数被视为不确定的。参数集的后验概率 Pr(ϕ|{xi,yi}) 由其与数据 {xi,yi} 的兼容性和先验分布 Pr(ϕ) 决定。a-c)使用均值为零、三种方差的正态分布先验从后验中采样的两组参数(青色和灰色曲线)。当先验方差 σϕ2 较小时,参数往往也较小,函数更加平滑。d-f)推理通过对所有可能的参数值取加权和来进行,其中权重是后验概率。这同时产生了均值预测(青色曲线)和相关的不确定性(灰色区域为两个标准差)。

贝叶斯方法很优雅,可以提供比最大似然更鲁棒的预测。不幸的是,对于像神经网络这样复杂的模型,没有实际可行的方法来表示参数上的完整概率分布,或在推理阶段对其积分。因此,这类方法目前都在做某种近似,且通常会为学习和推理增加相当大的复杂性。

9.3.6 迁移学习与多任务学习

当训练数据有限时,可以利用其他数据集来改善性能。在迁移学习(transfer learning)中(图 9.12a),网络先在一个数据更充足的相关辅助任务上进行预训练。然后将得到的模型适配到原始任务。通常的做法是移除最后一层,添加一个或多个产生适当输出的新层。主模型可以保持固定,只训练新层用于原始任务,或者我们也可以微调(fine-tune)整个模型。

其原理是网络将从辅助任务的数据中构建良好的内部表示,这些表示随后可以被原始任务利用。等价地,迁移学习可以被看作是将最终网络的大部分参数初始化到空间中一个合理的部分,从而很可能产生好的解。

多任务学习(multi-task learning,图 9.12b)是一种相关技术,其中网络被训练来同时解决多个问题。例如,网络可能接收一张图像,同时学习分割场景、估计逐像素深度,以及预测描述图像的标题。所有这些任务都需要对图像有一定程度的理解,当同时学习时,每个任务的模型性能都可能得到改善。

图 9.12

图 9.12 迁移学习、多任务学习和自监督学习。a)迁移学习用于我们对主要任务(这里是深度估计)只有有限标注数据,但对辅助任务(这里是语义分割)有充足数据的情况。我们训练辅助任务的模型,移除最后几层,替换为适合主要任务的新层。然后只训练新层或微调整个网络用于主要任务。网络从辅助任务中学到良好的内部表示,被主要任务所利用。b)在多任务学习中,我们训练模型同时执行多个任务,期望每个任务的性能都能提高。c)在生成式自监督学习中,我们移除数据的一部分并训练网络补全缺失信息。这里的任务是填补(修复)图像中被遮蔽的部分。这使得在没有标签的情况下也能进行迁移学习。

9.3.7 自监督学习

上述讨论假设我们有充足的数据用于辅助任务或有多个任务的数据可以并行学习。如果没有,我们可以使用自监督学习(self-supervised learning)创建大量"免费"的标注数据,并将其用于迁移学习。自监督学习有两大类方法:生成式对比式

生成式自监督学习中,每个数据样本的一部分被遮蔽,辅助任务是预测缺失的部分(图 9.12c)。例如,我们可以使用未标注图像语料库和一个旨在修复图像缺失部分的辅助任务。类似地,我们可以使用大量文本语料库并遮蔽一些词语。我们训练网络预测缺失的词语,然后将其微调用于我们感兴趣的实际语言任务(见第 12 章)。

对比式自监督学习中,具有共同点的样本对与无关的样本对进行比较。对于图像,辅助任务可能是识别一对图像是否是彼此的变换版本或毫无关联。对于文本,辅助任务可能是确定两个句子在原始文档中是否前后相连。有时,必须识别连接对之间的精确关系(例如,找到来自同一图像的两个补丁的相对位置)。

9.3.8 数据增强

迁移学习通过利用不同的数据集来改善性能。多任务学习通过使用额外的标签来改善性能。第三种选择是扩展数据集。我们通常可以对每个输入数据样本进行变换,使得标签保持不变。例如,我们可能想要判断图像中是否有一只鸟(图 9.13)。这里,我们可以旋转、翻转、模糊或操纵图像的色彩平衡,而标签"鸟"仍然有效。类似地,对于文本输入的任务,我们可以替换同义词或翻译成另一种语言再翻译回来。对于音频输入的任务,我们可以放大或衰减不同的频段。

图 9.13

图 9.13 数据增强。对于某些问题,每个数据样本可以通过变换来扩充数据集。a)原始图像。b-h)该图像的各种几何和光度变换。对于图像分类,所有这些图像仍然具有相同的标签"鸟"。

以这种方式生成额外的训练数据被称为数据增强(data augmentation)。其目的是教导模型对这些无关的数据变换保持不变。

9.4 总结

显式正则化涉及向损失函数添加额外项,从而改变最小值的位置。该项可以被解释为对参数的先验概率。有限步长的随机梯度下降并非中性地下降到损失函数的最小值。这种偏差可以被解释为向损失函数添加额外项,这被称为隐式正则化。

还有许多改善泛化的启发式方法,包括早停、Dropout、集成、贝叶斯方法、添加噪声、迁移学习、多任务学习和数据增强。这些方法背后有四个主要原则(图 9.14)。我们可以(i)鼓励函数更加平滑(例如 L2 正则化),(ii)增加数据量(例如数据增强),(iii)组合多个模型(例如集成),或者(iv)搜索更宽的极小值(例如向权重添加噪声)。

图 9.14

图 9.14 正则化方法。本章讨论的正则化方法旨在通过四种机制之一来改善泛化。一些方法旨在使建模的函数更加平滑。其他方法增加有效数据量。第三组方法组合多个模型,从而对拟合过程中的不确定性进行缓解。最后,第四组方法鼓励训练过程收敛到宽的极小值,在那里估计参数中的小误差不太重要。

改善泛化的另一种方式是选择适合任务的模型架构。例如,在图像分割中,我们可以在模型内部共享参数,这样就不需要在每个图像位置独立学习树的外观。第 10-13 章考虑为不同任务设计的架构变体。

基于 CC-BY-NC-ND 许可协议