Regularization
Regularization
可以把正则化分为这几类:
- 显式正则化 (Explicit Regularization) :直接在 Loss 函数后面加一项。
- L1 / L2 (Weight Decay)
- Entropy Regularization
- 结构/计算正则化 :改变网络结构或计算方式。
- Dropout (随机让神经元罢工)
- Label Smoothing (软化目标)
- 过程正则化 :改变训练流程。
- Early Stopping (提前结束)
- Adversarial Training (对抗训练)
- 数据正则化 :
- Data Augmentation (数据增强)
- Mixup / Cutout
核心目标的对立 (The Fundamental Conflict)
Optimization (优化) :
- 目标 : 降低 Training Loss (训练误差)。
- 敌人 :欠拟合 (Underfitting)、局部最小值、鞍点、梯度消失/爆炸。
- 手段 :让模型学得 更快、更准 。
- 核心角色 :SGD, Momentum, Adam, Learning Rate Schedule。
- 心法 :“不管三七二十一,先让模型把题背下来。”
Regularization (正则化) :
- 目标 : 降低 Test Loss (测试误差/泛化误差)。
- 敌人 :过拟合 (Overfitting)。
- 手段 :阻碍模型学习,给它捣乱,不让它学得太舒服。
- 核心角色 :Dropout, L1/L2 Weight Decay, Data Augmentation, Early Stopping。
- 心法 :“别死记硬背,要学规律。”
Dropout
Srivastava et al., “Dropout: A Simple Way to Prevent Neural Networks from Overfitting”, JMLR 2014.
在训练过程中,Dropout 会以一定的概率(比如 \(p=0.5\))随机让一部分神经元的输出变为 0 (即让它们”罢工”)。对于每个神经元 \(i\),引入一个伯努利随机变量 \(r_i \sim \text{Bernoulli}(1-p)\):
推理时不使用 Dropout,但需要将输出乘以 \((1-p)\) 来补偿训练时的期望值差异(或者在训练时使用 inverted dropout,即除以 \((1-p)\))。
- 破坏协同进化(Co-adaptation): 在普通网络中,神经元之间会产生依赖,某些神经元会专门修正其他神经元的错误。Dropout 随机让神经元消失,迫使剩下的神经元必须独立学习有用的特征,而不能依赖特定的伙伴。
- 隐含的模型集成(Ensemble): 一个 \(n\) 个神经元的网络使用 Dropout 后,每次前向传播相当于从 \(2^n\) 个可能的”thinned network”(稀疏子网络)中采样一个进行训练。推理时使用完整网络(权重缩放后)等价于对所有子网络的预测做几何平均。这种指数级数量的隐式模型集成是 Dropout 强大正则化能力的核心来源。
Variational Dropout
Kingma et al., “Variational Dropout and the Local Reparameterization Trick”, NeurIPS 2015.
标准 Dropout 对每个神经元使用固定的丢弃概率 \(p\)。Variational Dropout 将 Dropout 率本身视为一个可学习的参数,通过变分推断的框架自动为每个权重或每个神经元学习最优的丢弃概率。
从贝叶斯的角度来看,Dropout 可以被解释为对权重做近似变分推断,其中 dropout 掩码对应于一种乘性噪声后验。Variational Dropout 进一步将这种联系形式化:每个权重 \(w_{ij}\) 对应一个噪声 \(\xi_{ij} \sim \mathcal{N}(1, \alpha_{ij})\),参数 \(\alpha_{ij}\) 是可学习的。当 \(\alpha \to \infty\) 时,该权重被完全丢弃;当 \(\alpha \to 0\) 时,该权重被完全保留。
Gaussian Dropout
Gaussian Dropout 是标准 Dropout 的连续化版本。不是将神经元输出设为 0 或保持不变(离散的伯努利噪声),而是将输出乘以一个高斯噪声:
其中 \(\alpha = \frac{p}{1-p}\)(\(p\) 是等效的 Dropout 率)。当 \(p = 0.5\) 时,\(\alpha = 1\)。
Gaussian Dropout 与标准 Dropout 在一阶和二阶矩上是匹配的,但由于噪声是连续的,梯度更加平滑,某些场景下训练更稳定。
DropConnect
Wan et al., “Regularization of Neural Networks using DropConnect”, ICML 2013.
DropConnect 是 Dropout 的推广版本。Dropout 随机将神经元的激活值置零,而 DropConnect 随机将权重矩阵中的个别连接(权重)置零:
其中 \(\mathbf{M}\) 是与权重矩阵同形状的伯努利掩码矩阵,\(\odot\) 表示逐元素相乘。
Dropout vs DropConnect 的区别: Dropout 对一个神经元的所有输出连接施加相同的掩码(要么全部保留,要么全部丢弃),而 DropConnect 对每个连接独立采样掩码,提供了更细粒度的正则化。DropConnect 在理论上产生更多的子网络组合(\(2^{|\mathbf{W}|}\) vs \(2^n\)),但计算开销也更大。
Weight Decay
Hanson & Pratt, “Comparing Biases for Minimal Network Construction with Back-Propagation”, NeurIPS 1988.
Weight Decay(权重衰减)的原始定义是在每次参数更新时,将权重乘以一个小于 1 的衰减因子:
其中 \(\lambda\) 是权重衰减系数,\(\eta\) 是学习率。这意味着每一步更新时,权重都会被”衰减”掉一小部分。
L2 正则化(Krogh & Hertz, 1991)则是在损失函数中加入权重的平方和:
其梯度为 \(\nabla L_{total} = \nabla L + \lambda w\),代入 SGD 更新规则:
WD 与 L2 的等价性——仅对 SGD 成立:
在标准 SGD 中,Weight Decay 和 L2 正则化是数学等价的(只要适当缩放 \(\lambda\))。但对于 Adam 等自适应优化器,两者并不等价。
在 Adam 中,L2 正则化的梯度 \(\lambda w\) 会被 Adam 的二阶矩估计所缩放,导致对不同参数施加的正则化强度不一致——梯度历史较大的参数反而受到的正则化更弱。这与 Weight Decay 的初衷相悖。
AdamW:解耦的权重衰减
Loshchilov & Hutter, “Decoupled Weight Decay Regularization”, ICLR 2019.
AdamW 将权重衰减从梯度更新中解耦(decouple)出来,直接在参数更新后施加衰减:
关键区别在于最后一行:权重衰减项 \((1-\lambda)w_t\) 直接作用于权重本身,不经过 Adam 的自适应缩放。这样每个参数受到的衰减强度是一致的。
实验表明,AdamW 在 Transformer 等模型上显著优于 Adam + L2 正则化,且超参数搜索更稳定。AdamW 已成为训练 Transformer 的标准优化器。
Weight Decay 与 Batch Normalization 的交互
van Laarhoven, “L2 Regularization versus Batch and Weight Normalization”, 2017.
当网络中使用了 Batch Normalization 时,WD/L2 对 BN 前面那层的权重有一个微妙的作用。由于 BN 的缩放不变性(\(\text{BN}(\alpha W x) = \text{BN}(Wx)\)),权重的绝对大小不影响 BN 的输出,因此 WD 不会直接影响网络的函数表达。
但 WD 会使权重的范数逐渐减小,而由于 BN 的缩放不变性,梯度会反比于权重范数(\(\|\nabla_W L\| \propto 1/\|W\|\))。因此 WD 实际上起到了增大有效学习率的作用:
权重被 WD 衰减得越小,有效学习率越大。这解释了为什么在使用 BN 的网络中,Weight Decay 的调节方式与不使用 BN 时不同。
Weight Decay 的性质
Weight Decay 的核心效果总结:
- 惩罚大权重: 每次更新参数时,权重不仅会沿着梯度下降的方向走,还会被额外”往回拉”一点点(向 0 靠拢)。
- 限制复杂度: 数学上,权重越大,模型函数在输入变化时波动就越剧烈(对噪声极其敏感)。Weight Decay 让权重保持在较小的数值,使得模型函数变得平滑。
- 提升噪声鲁棒性: L2 正则化可以理解为对权重施加高斯先验 \(p(w) \propto \exp(-\lambda w^2)\),等价于假设输入带有方差为 \(\lambda/\eta\) 的高斯噪声。小权重意味着模型对输入扰动不敏感。
- 隐式学习率调节: 在使用 BN 的网络中,WD 通过缩小权重范数来间接增大有效学习率。
L1 Regularization
L1 正则化(也称 Lasso Regularization)在损失函数中加入权重绝对值之和:
与 L2 正则化的关键区别在于,L1 倾向于产生稀疏权重(很多权重会变成恰好为 0),而 L2 只是让权重变小但不会精确为零。
为什么 L1 产生稀疏性: L1 的梯度在 \(w > 0\) 时恒为 \(+\lambda\),在 \(w < 0\) 时恒为 \(-\lambda\)(不随 \(w\) 大小变化)。这意味着无论权重多小,L1 都施加相同大小的”推力”将其推向零。而 L2 的梯度为 \(2\lambda w\),权重越小推力越弱,所以权重只能无限接近零但不会到达零。
应用场景: L1 正则化常用于特征选择(自动将无关特征对应的权重置零)。在深度学习中,L2(Weight Decay)更常用,因为稀疏性在神经网络中通常不是必需的。
Early Stopping
Early Stopping(提前停止)是最简单也最实用的正则化手段之一。
核心思想: 在训练过程中,同时监控 training loss 和 validation loss。当 validation loss 不再下降(甚至开始上升)而 training loss 仍在下降时,说明模型开始过拟合。此时提前终止训练,并恢复到 validation loss 最低时的模型参数。
实现要点:
- 设置一个
patience参数(如 10),表示允许 validation loss 连续多少个 epoch 不改善 - 每当 validation loss 达到新低时,保存当前模型参数作为 checkpoint
- 当连续
patience个 epoch validation loss 没有改善时,停止训练 - 最终使用保存的最佳 checkpoint 作为最终模型
为什么是正则化: Early Stopping 限制了模型的有效训练时间,等价于限制了模型的”有效容量”。训练时间越长,模型越能记住训练数据的噪声和细节;提前停止相当于阻止模型过度拟合训练集。
与 L2 正则化的等价性: 从数学上可以证明,Early Stopping 与 L2 正则化在一定条件下是等价的。考虑简单的二次损失函数和 SGD,训练 \(T\) 步等价于 L2 正则化中 \(\lambda \approx \frac{1}{\eta T}\)(\(\eta\) 为学习率)。训练步数越少(越早停止),等效的正则化强度 \(\lambda\) 越大,对模型复杂度的约束越强。
Data Augmentation
Data Augmentation(数据增强)通过对训练数据施加各种变换来人工扩充数据集,是一种隐式的正则化手段。
为什么是正则化: 数据增强增加了训练数据的多样性,使模型被迫学习对各种变换具有不变性的特征,而不是记忆训练样本的具体细节。这直接提升了模型的泛化能力。
常见的数据增强方法:
- 图像领域: 随机裁剪(Random Crop)、水平翻转(Horizontal Flip)、旋转、颜色抖动(Color Jitter)、随机擦除(Random Erasing)
- 文本领域: 同义词替换、随机插入/删除/交换词语、回译(Back Translation)
- 高级方法: Mixup(将两张图片按比例混合)、CutMix(将一张图的部分区域替换为另一张图)、Cutout(随机遮挡图片的一块区域)
在现代深度学习中,数据增强几乎是标配,尤其在数据量有限的场景下效果显著。
Label Smoothing
Label Smoothing(标签平滑)是一种软化训练目标的正则化方法,由 Szegedy 等人在 Inception-v2 论文中提出。
核心思想: 在标准的分类任务中,目标标签是 one-hot 编码(如 \([0, 0, 1, 0]\)),即模型被要求以 100% 的置信度预测正确类别。Label Smoothing 将这种"硬"目标替换为"软"目标:
其中 \(\alpha\) 是平滑系数(通常取 0.1),\(K\) 是类别数。例如,4 分类中 \(\alpha = 0.1\) 时,标签 \([0, 0, 1, 0]\) 变为 \([0.025, 0.025, 0.925, 0.025]\)。
为什么有效:
- 防止过度自信: 阻止模型对训练样本产生极端的 logit 值,使输出的概率分布更加"温和"
- 提升泛化: 软目标鼓励模型学习类别之间的相对关系,而非只关注正确类别
- 标签噪声容忍: 当训练数据中存在标注错误时,Label Smoothing 能降低错误标签的负面影响
应用: Label Smoothing 在 Transformer 训练(如机器翻译、语言模型)和图像分类中被广泛使用,是现代训练流程的标准组成部分。
Mixup 与 CutMix
Mixup
Mixup(Zhang et al., 2018)通过将两个训练样本及其标签进行线性插值来生成新的训练样本:
其中 \(\lambda \sim \text{Beta}(\alpha, \alpha)\),\(\alpha\) 通常取 0.2-0.4。
直觉理解: 如果 \(\lambda = 0.7\),那么新样本是"70% 的猫 + 30% 的狗",对应的标签也是 \([0.7, 0.3]\)。这迫使模型学习样本之间的线性过渡关系,而非只记忆离散的样本。
CutMix
CutMix(Yun et al., 2019)不是对整张图片做混合,而是将一张图的一个矩形区域替换为另一张图的对应区域:
- 随机选择一个矩形区域(面积比例为 \(1 - \lambda\))
- 将该区域替换为另一张图的内容
- 标签按面积比例混合:\(\tilde{y} = \lambda y_i + (1 - \lambda) y_j\)
相比 Mixup 的优势: Mixup 将两张图像叠加在一起,会产生不自然的混合纹理。CutMix 保留了图像的局部结构,让模型在面对部分遮挡的情况下依然能正确分类,同时起到类似 Cutout 的效果。
Gradient Clipping
Gradient Clipping(梯度裁剪)通过限制梯度的大小来防止梯度爆炸,是 RNN 和 Transformer 训练中的标准做法。
两种常见方式:
按范数裁剪(Clip by Norm):
如果梯度的 L2 范数超过 max_norm,就将梯度等比例缩小。这保持了梯度的方向不变,只限制其大小。
# PyTorch
torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm=1.0)
按值裁剪(Clip by Value):
将每个梯度分量裁剪到 \([-\text{clip\_value}, +\text{clip\_value}]\) 范围内。这可能改变梯度方向。
# PyTorch
torch.nn.utils.clip_grad_value_(model.parameters(), clip_value=0.5)
是否属于正则化? Gradient Clipping 严格来说更像是一种训练稳定性技巧而非正则化。但它通过限制参数更新的幅度,间接起到了约束模型复杂度的作用。在实践中,几乎所有 Transformer 模型的训练都会使用 max_norm=1.0 的梯度裁剪。
Stochastic Depth
Stochastic Depth(随机深度),由 Huang 等人在 2016 年提出,可以理解为"层级别的 Dropout"。
核心思想: 在训练过程中,随机跳过(drop)某些残差块。对于一个残差块 \(x_{l+1} = x_l + f_l(x_l)\),Stochastic Depth 以概率 \(p_l\) 将其简化为 \(x_{l+1} = x_l\)(直接跳过该层的计算)。
存活概率的设置: 通常采用线性衰减策略——浅层的存活概率高(接近 1),深层的存活概率低。这基于一个观察:浅层学习的是基础特征(更重要),深层学习的是高级特征(有一定冗余)。
其中 \(L\) 是总层数,\(p_L\) 是最后一层的存活概率(通常取 0.5-0.8)。
推理时: 所有层都保留,但每层的输出乘以其训练时的存活概率(类似 Dropout 的推理缩放)。
效果: Stochastic Depth 在 ResNet 等深层网络上显著提升了泛化性能,同时减少了训练时间(因为跳过了部分层的计算)。这个思想后来被广泛应用于 Vision Transformer(ViT/DeiT)中,成为 ViT 训练的标准组件之一(在 Transformers 中通常称为 DropPath)。
正则化方法选择建议
| 任务/模型 | 推荐正则化方法 |
|---|---|
| CNN 图像分类 | Data Augmentation + Weight Decay + Label Smoothing |
| Transformer NLP | Dropout + Label Smoothing + Weight Decay (AdamW) |
| Vision Transformer | DropPath + Mixup/CutMix + Label Smoothing + Weight Decay |
| RNN/LSTM | Dropout + Gradient Clipping + Weight Decay |
| 小数据集 | Data Augmentation + Dropout + Early Stopping + Weight Decay |
| 大规模预训练 | Weight Decay + Gradient Clipping(正则化需求较低) |
一般原则:
- Weight Decay(AdamW)几乎在所有场景下都应该使用
- Gradient Clipping 在 Transformer 和 RNN 训练中是必需的
- Data Augmentation 在数据量有限时效果最显著
- 不要同时使用过多正则化方法,否则可能导致欠拟合