正则化技术:减少过拟合,改善模型泛化能力
正则化是机器学习中用于减少泛化误差的一系列策略。大多数模型在训练后对特定的数据子集表现良好,但泛化能力较差,这也被称为过拟合。正则化策略旨在减少过拟合,并尽量降低训练误差。简而言之,正则化使模型更简单。正如奥卡姆剃刀原理所指出的:最简单的模型往往表现更好。实际上,通过引入不同的技术,我们将模型限制在一组更小的解空间中。
引言
本文将回顾训练深度神经网络时使用的最常见的正则化技术。我们将根据它们的相似性将这些技术进行分类。
你可能听说过著名的ResNet卷积神经网络架构。ResNets最初于2015年提出。最近的一篇名为《Revisiting ResNets: Improved Training and Scaling Strategies》的论文应用了现代正则化方法,在Imagenet上实现了超过83%的测试集准确率。
如果测试集包含10万张图片,这意味着有8万3千张图片被正确分类了!太棒了,不是吗?
什么是正则化?
根据Ian Goodfellow、Yoshua Bengio和Aaron Courville在《深度学习》一书中的定义:
“在深度学习的背景下,大多数正则化策略基于正则化估计器。正则化估计器的工作方式是通过增加偏差来减少方差。一个有效的正则化器是通过在显著减少方差的同时不过度增加偏差来进行有益交易。”
简单来说,正则化使模型更简单。奥卡姆剃刀原理认为最简单的模型最有可能表现更好。实际上,我们通过引入不同的技术将模型限制在一组更小的可能解中,以达到更好的泛化能力。
要更好地理解,您需要了解著名的偏差-方差权衡。
偏差-方差权衡:过拟合和欠拟合
首先,让我们澄清一下偏差-方差权衡和过拟合-欠拟合之间的关系。过拟合和欠拟合是等价的。

过拟合是由于学习算法中的错误假设而导致的错误。高偏差可能导致算法忽略特征和目标输出之间的相关关系,这被称为欠拟合。
方差是由于对训练集中的小波动敏感而导致的错误。高方差可能导致模型对训练数据中的随机噪声建模,这被称为过拟合。
偏差-方差权衡是一个术语,用来描述我们可以通过增加偏差来减少方差的事实。优秀的正则化技术努力同时最小化这两个错误源,从而实现更好的泛化能力。
如何在深度学习模型中引入正则化
修改损失函数:添加正则化项
在深度学习之前,在线性和逻辑回归等估计器中使用的最常见方法是参数范数惩罚。我们在损失函数J(θ;X,y)中添加参数范数惩罚Ω(θ):
J′(θ;X,y)=J(θ;X,y)+aΩ(θ)
其中θ表示可训练参数,X为输入,yy为目标标签。aa是一个超参数,权衡范数惩罚的贡献,即正则化的效果。
好的,数学看起来很好。但为什么这样做能起作用呢?让我们看一下两种最常见的方法,L2和L1。
L2正则化
L2正则化,也称为权重衰减或岭回归,以Ω(θ)=12∣∣w∣∣22的形式添加范数惩罚。损失函数转化为:
J′(w;X,y)=J(w;X,y)+a2∣∣w∣∣22
如果我们计算梯度,我们有:
∇wJ′(w;X,y)=∇wJ(w;X,y)+aw
对于单个训练步骤和学习率λ,可以写成:
w=(1−λa)w−λ∇wJ(w;X,y)
该方程表明,每个权重的权重向量都会在每个训练步骤中被一个常数因子减小。
请注意,我们用ww代替θθ的原因是通常我们只对网络的实际权重进行正则化,而不是偏差bb。
如果我们从整个训练的角度来看,下面是发生的事情:
L2正则化对于那些在损失函数中“不贡献”太多的权重向量方向有很大的影响。另一方面,它对于贡献于损失函数的方向的影响相对较小。因此,我们降低了模型的方差,使其更容易推广到未见过的数据。
L1正则化
L1正则化选择了一个范数惩罚Ω(θ)=∣∣w∣∣1=∑i∣wi∣。在这种情况下,损失函数的梯度变为:
∇wJ′(θ;X,y)=∇wJ(θ;X,y)+asign(w)
正则化项不像L2正则化那样线性地进行缩放,而是具有交替的符号。这如何影响整体训练过程呢?
L1正则化通过强制更多的权重为零而不是减少所有权重的平均幅度(与L2正则化相反)来引入稀疏性。换句话说,L1表明某些特征应在训练过程中被丢弃。
弹性网
弹性网是一种线性组合L1和L2正则化的方法,目的是兼顾二者的优点。具体而言,惩罚项如下:
Ω(θ)=λ1∣∣w∣∣1+λ2∣∣w∣∣22
弹性网正则化降低了某些特征的影响,类似于L1,但同时它不会完全消除这些特征。因此,它将L1中的特征消除与L2*特中**征系数的减小相结合。
熵正则化
熵正则化是另一种适用于概率模型的正则化方法。它也被应用于不同的强化学习技术,如A3C和策略优化技术。与之前的方法类似,我们在损失函数中添加惩罚项。
如果我们假设模型输出概率分布p(x),则惩罚项可表示为:
Ω(X)=−∑p(x)log(p(x))
“熵”一词来自于信息论,表示变量可能结果中固有的“信息”平均水平。熵的另一种定义是变量的期望值。
它有效地强制将概率分布朝向均匀分布,以减少方差。
在强化学习的环境中,可以说在损失中添加的熵项可以促进动作多样性,从而更好地探索环境。
有关策略梯度和A3C的更多信息,请查看我们以前的文章:《探索策略梯度和REINFORCE》和《理解Actor-Critic及A2C和A3C的改进方法》。
标签平滑
注入噪声是一种非常强大的正则化策略。通过添加随机性,我们可以减少模型的方差,并降低泛化误差。问题是在哪里以及如何注入噪声?
标签平滑是在输出目标(即标签)中添加噪声的一种方式。假设我们有一个分类问题。在大多数情况下,我们使用交叉熵损失函数,例如−∑c=1Myo,clog(po,c),并使用softmax输出最终的概率。
目标向量的形式是[0, 1, 0, 0]。由于softmax的计算方式:(σ(zi)=ezi∑j=1Kezj),它永远无法达到1或0的输出。它能做到的最好的情况是[0.0003, 0.999, 0.0003, 0.0003]。因此,模型将继续训练,将输出值推到尽可能高和低。模型永远不会收敛。这当然会导致过拟合。
为了解决这个问题,标签平滑用一个小的边际值替换了硬性的0和1目标。具体来说,0被替换为ϵk−1,1被替换为1−ϵ,其中kk是类的数量。这样,模型将能够继续训练,同时防止输出值变得过高或过低。标签平滑技术可以应用于任何具有隐藏单元的模型,并且是我们正则化工具箱中的一个强大工具。
其他Dropout变体
这里有很多Dropout的变体。为了让这篇文章相对易懂,我不会详细介绍每一种。但我会简要提及其中几种。如果您想了解更多细节,可以查看paperswithcode.com,了解每种变体的详细信息,原始论文和代码。
- Inverted Dropout也会随机丢弃一些单元。与传统的Dropout不同之处在于:在训练期间,它还通过保持激活的单位数的倒数来缩放激活。原因是:防止激活变得太大,从而需要在测试阶段修改网络。最终的结果与传统的Dropout类似。
- 高斯Dropout:不是在训练期间丢弃单元,而是向每个单元的权重注入噪声。噪声通常是高斯噪声。这会产生以下效果:在测试时间减少计算工作量;无需进行权重缩放;整体训练更快。
- DropConnect采用了一种稍微不同的方法。它不是在每个前向传播中将随机激活(单元)置零,而是在每个前向传播中将随机权重置零。权重丢失的概率为1−p1−p。这实质上将一个完全连接的层转换为一个稀疏连接的层。在数学上,我们可以表示DropConnect为:r=a((M∗W)v),其中r是层的输出,v是输入,W是权重,M是二进制矩阵。M是从每个训练示例派生的掩码。通常,掩码是从每个训练示例中派生的。DropConnect可以看作是将Dropout推广到完全连接结构的层。
- 变分Dropout:我们在每个时间步上使用相同的dropout掩码。这意味着我们每次都会丢弃相同的网络单元。这最初是用于递归神经网络,并且遵循变分推理的相同原理。
- 注意力Dropout:近年来非常流行,因为注意力模型(如Transformer)等基于注意力的模型迅速发展。正如您可能已经猜到的,我们会随机丢弃某些注意单元,概率为p。
- 自适应Dropout:一种将Dropout扩展的技术,允许不同单元的dropout概率不同。其背后的直觉是可能存在个别隐藏单元可以针对重要特征或特征组合做出自信的预测。
- 嵌入Dropout:一种在嵌入矩阵上进行dropout的策略,并用于完全前向和后向传播。
- DropBlock:用于卷积神经网络,它舍弃特征图中连续区域的所有单元。
随机深度
随机深度更进一步。它在训练过程中放弃整个网络块,但在测试期间保持模型不变。最流行的应用是在大型ResNet中,通过其跳连接绕过某些块。
具体而言,随机深度(Huang et al.,2016)在具有残差连接的网络中放弃每个层。它以指定的概率p_p放弃该层,该概率是层深度的函数。
数学上,我们可以表示为:
Hl=ReLU(blfl(Hl−1)+id(Hl−1))
其中Hl是层的输出,bl是伯努利随机变量,用于表示块是否活跃。如果b=0_b=0,该块将处于非活跃状态,如果b=1_b=1,该块处于活跃状态。
提前停止
提前停止是最常用的策略之一,因为它非常简单且相当有效。它指的是在训练误差不再减少而验证误差开始上升时停止训练。
这意味着我们定期存储可训练参数,并跟踪验证误差。训练停止后,我们将可训练参数返回到验证误差开始上升的确切点,而不是最后一个点。
提前停止的另一种思考方式是作为一种非常有效的超参数选择算法,它将训练次数限制在靠近初始参数的小范围内。它本质上将优化过程限制在接近初始参数的小范围内。
还可以证明,在具有简单线性模型、二次误差函数和简单梯度下降的情况下,提前停止等效于L2正则化。
参数共享
参数共享采用了不同的方法。它不是对模型参数进行惩罚,而是强制一组参数相等。可以将其视为将我们先前的领域知识应用于训练过程。多种方法多年来已经被提出,但最受欢迎的是卷积神经网络。
卷积神经网络利用图像的空间结构,通过在输入中的不同位置之间共享参数来降低模型的方差,即降低泛化误差。
批归一化
批归一化(BN)也可以用作一种正则化形式。批归一化通过将特征值带到相同范围内来修正输入的均值和方差。具体而言,我们将特征值集中在一个紧凑的类似高斯的空间中。
从直观上看,可以表示为:
μB=1m∑i=1mxi
σB2=1m∑i=1m(xi−μB)2
x^i=xi−μBσB2+ϵ
yi=γx^i+β=BNγ,β(xi)
其中γ和β是可学习参数。
批归一化可以隐式地正则化模型,在许多情况下,它比Dropout更受欢迎。
为什么?
很遗憾,这里没有明确的答案,只有经验观察。
可以将批归一化视为类似于Dropout的过程,因为它实际上注入了噪声。它不是将每个隐藏单元乘以随机值,而是将它们乘以小批量中所有隐藏单元的偏差。它还从每个隐藏单元中减去随机值(小批量的平均值)。这两种“噪音”将使模型更加稳健,减少其方差。在为正则化增加噪声方面,BN与Dropout具有类似的效果。关于为什么BN作为正则化器的一个很好的概述,可以在Luo等人2019年的论文中找到。
数据增强
数据增强是我们需要提及的最后一种策略。虽然不严格属于正则化方法,但它确实有其地位。
数据增强是指为我们的数据集生成新的训练样本。更多的训练数据意味着更低的模型方差,即更低的泛化误差。简单明了。它也可以看作是对训练数据集进行噪声注入的一种形式。
有很多不同的方式可以实现数据增强。让我们探讨其中一些。
基本数据操作:首先要做的简单事情是对数据进行几何变换。特别是,如果我们处理图像,则可以使用以下解决方案:图像翻转、裁剪、旋转、平移、图像颜色修改、图像混合等。Cutout是一种常用的想法,它删除某些图像区域。另一个名为Mixup的想法是将数据集中的两个图像混合成一个图像。
特征空间增强:与上述输入空间中的数据转换不同,我们可以在特征空间上应用转换。例如,可以使用自动编码器来提取潜在表示。然后可以在潜在表示中添加噪声,从而转换原始数据点。
基于GAN的增强:生成对抗网络已被证明在数据生成方面非常有效,因此它们是数据增强的自然选择。
元学习:在元学习中,我们使用神经网络通过调整超参数、改进布局等方式来优化其他神经网络。类似的方法也可以应用于数据增强。简单来说,我们使用分类网络来调整增强网络,使其生成更好的图像。我们将随机图像提供给增强网络(很可能是一个GAN),它将生成增强的图像。增强的图像和原始图像都被传入第二个网络,它们进行比较,并告诉我们增强的图像有多好。在重复该过程后,增强网络变得越来越擅长生成新图像。
结论
正则化是训练深度神经网络的重要组成部分。在我看来,上述所有策略都属于两个不同的高级类别。它们要么对模型参数进行惩罚,要么在训练生命周期的某个阶段注入噪声。无论是在训练数据、网络架构、可训练参数还是目标标签中注入噪声。
本文翻译自:Regularization techniques for training deep neural networks | AI Summer (theaisummer.com)