正则化是机器学习中用于减少泛化误差的一组策略。大多数模型在训练后能在特定数据子集上表现良好,但泛化能力较差,这种现象称为过拟合。正则化策略旨在减少过拟合,同时尽可能保持较低的训练误差。
以著名的ResNet CNN架构为例。ResNet最初于2015年提出,最近一篇题为"重新审视ResNet:改进的训练和扩展策略"的论文应用了现代正则化方法,在Imagenet上实现了超过3%的测试集准确率提升。如果测试集包含10万张图像,这意味着多正确分类了3000张图像!
根据某知名深度学习教材的定义:"在深度学习背景下,大多数正则化策略基于正则化估计器。估计器的正则化通过增加偏差来减少方差。有效的正则化器是那些进行有利交换的正则化器,显著减少方差而不过度增加偏差。"
简单来说,正则化会产生更简单的模型。正如奥卡姆剃刀原理所论证的:最简单的模型最有可能表现更好。实际上,我们通过引入不同的技术将模型约束到更小的可能解集合。
偏差误差是学习算法中错误假设导致的误差。高偏差可能导致算法错过特征与目标输出之间的相关关系,这称为欠拟合。
方差是训练集中小波动敏感度导致的误差。高方差可能导致对训练数据中随机噪声的建模,这称为过拟合。
偏差-方差权衡描述了我们可以通过增加偏差来减少方差的事实。好的正则化技术努力同时最小化这两个误差源,从而实现更好的泛化。
在深度学习时代之前,在线性回归和逻辑回归等估计器中最常用的方法是参数范数惩罚。我们在损失函数$J(\theta; X, y)$中添加参数范数惩罚$\Omega(\theta)$:
$$J^\prime(\theta; X, y) = J(\theta; X, y) + a\Omega(\theta)$$
其中$\theta$表示可训练参数,$X$表示输入,$y$表示目标标签。$a$是超参数,加权范数惩罚的贡献,从而影响正则化的效果。
L2正则化,也称为权重衰减或岭回归,以$\Omega(\theta) = \frac{1}{2}||w||^2_2$的形式添加范数惩罚。损失函数转换为:
$$J^\prime(w; X, y) = J(w; X, y) + \frac{a}{2}||w||^2_2$$
如果我们计算梯度:
$$\nabla_w J^\prime(w; X, y) = \nabla_w J(w; X, y) + aw$$
对于单个训练步骤和学习率$\lambda$,这可以写为:
$$w = (1-\lambda a)w - \lambda \nabla_w J(w; X, y)$$
该方程有效地显示权重向量的每个权重将在每个训练步骤中减少一个常数因子。
L1正则化选择范数惩罚$\Omega(\theta) = ||w||_1 = \sum_i |w_i|。在这种情况下,损失函数的梯度变为:
$$\nabla_w J^\prime(\theta; X, y) = \nabla_w J(\theta; X, y) + a sign(w)$$
与L2正则化不同,正则化项不线性缩放,而是一个带有交替符号的常数因子。
L1正则器通过迫使更多权重为零而不是减少所有权重的平均幅度(如L2正则器所做)来在权重中引入稀疏性。换句话说,L1表明某些特征应该从训练过程中完全丢弃。
弹性网络是一种线性组合L1和L2正则化的方法,目的是获得两全其美的效果。更具体地说,惩罚项如下:
$$\Omega(\theta) = \lambda_1 ||w||_1 + \lambda_2||w||^2_2$$
弹性网络正则化减少了某些特征的影响,如L1所做,但同时不会消除它们。因此它结合了L1的特征消除和L2的特征系数减少。
熵正则化是另一种适用于概率模型的范数惩罚方法。它也被用于不同的强化学习技术中,如A3C和策略优化技术。与之前的方法类似,我们在损失函数中添加惩罚项。
如果我们假设模型输出概率分布$p(x)$,则惩罚项将表示为:
$$\Omega(X) = -\sum p(x)\log (p(x))$$
"熵"一词来自信息理论,表示变量可能结果固有的"信息"的平均水平。熵的等效定义是变量信息的期望值。
噪声注入是最强大的正则化策略之一。通过添加随机性,我们可以减少模型的方差并降低泛化误差。问题是如何以及在何处注入噪声?
标签平滑是在输出目标(即标签)处添加噪声的一种方式。假设我们有一个分类问题。在大多数分类问题中,我们使用某种形式的交叉熵损失,如$-\sum{c=1}^M y{o,c}\log(p_{o,c})$和softmax来输出最终概率。
目标向量具有0, 1, 0, 0的形式。由于softmax的表述方式:$\sigma (\mathbf {z} ){i}={\frac {e^{z{i}}}{\sum {j=1}^{K}e^{z{j}}}}$,它永远无法实现1或0的输出。它能做的最好结果类似于0.0003, 0.999, 0.0003, 0.0003。因此,模型将继续被训练,推动输出值尽可能高和尽可能低。模型永远不会收敛。这当然会导致过拟合。
为了解决这个问题,标签平滑用一个小边距替换硬0和1目标。具体来说,0被替换为$\frac{\epsilon}{ k-1}$,1被替换为$1-\epsilon$,其中$k$是类数。
正则化深度神经网络的另一种策略是dropout。Dropout属于噪声注入技术,可以看作向网络的隐藏单元注入噪声。
在实践中,在训练期间,一些层输出以概率$p$随机被忽略(丢弃)。
在测试时,所有单元都存在,但它们已按$p$缩放。这是因为在dropout之后,下一层将接收较低的值。然而在测试阶段,我们保留所有单元,因此值将比预期高得多。这就是为什么我们需要将它们缩小。
通过使用dropout,同一层将改变其连接性,并将寻找替代路径将信息传递到下一层。因此,在训练期间对层的每次更新都是使用配置层的不同"视图"执行的。从概念上讲,它近似于并行训练大量具有不同架构的神经网络。
"丢弃"值意味着在当前前向传递中从网络中临时删除它们,以及所有传入和传出连接。Dropout具有使训练过程嘈杂的效果。概率$p$的选择取决于架构。
多年来提出了许多更多的Dropout变体:
随机深度更进一步。它在测试期间丢弃整个网络块,同时保持模型完整。最流行的应用是在大型ResNet中,我们通过其跳跃连接绕过某些块。
特别是,随机深度(Huang等人,2016)丢弃网络中具有残差连接的每一层。它通过指定的概率$p$这样做,该概率是层深度的函数。
数学上我们可以表示为:
$$H{l} = \text{ReLU}(b{l}f{l}(H{l-1}) + \text{id}(H_{l-1}))$$
其中$b$是伯努利随机变量,显示块是活动还是非活动。如果$b=0$,块将处于非活动状态;如果$b=1$,则处于活动状态。
早停是最常用的策略之一,因为它非常简单且相当有效。它指的是当训练误差不再减少但验证误差开始上升时停止训练的过程。
这意味着我们定期存储可训练参数并跟踪验证误差。训练停止后,我们将可训练参数返回到验证误差开始上升的确切点,而不是最后一个点。
考虑早停的另一种方式是将其视为一种非常高效的超参数选择算法,它将周期数设置为绝对最佳。它本质上将优化过程限制在靠近初始参数的可训练参数空间的小体积内。
也可以证明,在具有二次误差函数和简单梯度下降的简单线性模型的情况下,早停等效于L2正则化。
参数共享采用不同的方法。它不是惩罚模型参数,而是强制一组参数相等。这可以看作是将我们先前的领域知识应用于训练过程的一种方式。多年来已经提出了各种方法,但最流行的是卷积神经网络。
卷积神经网络通过在不同输入位置共享参数来利用图像的空间结构。由于每个内核与输入图像的不同块进行卷积,因此权重在块之间共享,而不是拥有单独的权重。
批归一化(BN)也可以用作正则化的一种形式。批归一化通过将特征带到相同范围内来修复输入的均值和方差。更具体地说,我们将特征集中在紧凑的高斯类空间中。
数学上我们有:
$$\mu{\mathcal{B}} = \frac{1}{m}\sum^{m}{i=1}x_{i}$$
$$\sigma^{2}{\mathcal{B}} = \frac{1}{m}\sum^{m}{i=1}\left(x{i}-\mu{\mathcal{B}}\right)^{2}$$
$$\hat{x}{i} = \frac{x{i} - \mu{\mathcal{B}}}{\sqrt{\sigma^{2}{\mathcal{B}}+\epsilon}}$$
$$y{i} = \gamma\hat{x}{i} + \beta = \text{BN}{\gamma, \beta}\left(x{i}\right)$$
其中$\gamma$和$\beta$是可学习参数。
批归一化可以隐式正则化模型,在许多情况下,它比Dropout更受青睐。
数据增强是我们需要提到的最终策略。虽然不严格是正则化方法,但它肯定在这里占有一席之地。
数据增强指的是为我们的数据集生成新训练示例的过程。更多的训练数据意味着更低的模型方差,也就是更低的泛化误差。就这么简单。它也可以看作训练数据集中噪声注入的一种形式。
数据增强可以通过许多不同的方式实现:
正则化是训练深度神经网络的一个组成部分。在我看来,所有上述策略属于两个不同的高级类别。它们要么惩罚可训练参数,要么在训练生命周期的某个地方注入噪声。无论这是在训练数据、网络架构、可训练参数还是目标标签上。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。