外观
过拟合与正则化
一句话定义:过拟合是模型"背下了训练集"而非"学到了规律",正则化是抑制这种行为、提升泛化能力的一切手段的总称。它的反面教材如何被观测与度量,见深度学习评估与实验中的学习曲线;本文聚焦"诊断之后怎么治"。
一、过拟合机制与偏差-方差分解
为什么模型会过拟合?用统计学习的框架看,泛化误差可以分解为三部分:
泛化误差 = 偏差²(bias)+ 方差(variance)+ 不可约噪声- 偏差:模型假设与真实函数之间的系统性差距——模型太简单(欠拟合)。
- 方差:模型对训练集"换一批"有多敏感——模型太复杂,记住噪声(过拟合)。
- 噪声:数据本身固有的、谁也无法学到的随机性。
过拟合 = 方差过大:训练集换一换,学到的函数就大变样。机器学习的目标不是让训练误差最小,而是让偏差与方差之和最小——这正是深度学习评估与实验里训练/验证曲线分叉的统计本质。
深度网络有个反直觉现象:参数量远多于样本量的模型仍能泛化良好(如 GPT 系列)。对这个谜("double descent"、隐式正则等)的研究仍在进行,但工程上我们依赖一套明确的工具——下面逐个展开。
二、L1/L2 正则与权重衰减
在损失函数上加一个参数大小的惩罚项:
L_total = L_data + λ·R(θ)- L2 正则:
R = Σ θᵢ²。把权重推向 0 但不彻底——大权重被压制,解的"光滑度"提高。在梯度下降里等价于每一步权重乘以(1−ηλ)的衰减,因此也叫权重衰减(weight decay)。注意 AdamW 里"解耦权重衰减"的讨论见优化与梯度下降。 - L1 正则:
R = Σ |θᵢ|。把很多权重精确压到 0,产生稀疏解。
为什么 L1 稀疏而 L2 不稀疏? 几何直觉:L1 的等高面是菱形(在坐标轴上有尖角),L2 是圆球。损失与等高面相切时,菱形倾向于切在轴上(某些维度为 0),圆球则通常切在非轴位置(都是小值但不为 0)。L1 因此常用于特征选择、可解释模型;L2 是通用默认。
三、Dropout 与变体
Dropout(Hinton 等,2012):训练时每个神经元以概率 p 随机置零(输出乘 1/(1−p) 保持期望不变),推理时全部保留。机制解释:
- 集成效应:每步训练的是不同的"子网络",推理等价于指数多个子网络的近似平均(bagging)。
- 防共适应:神经元不能依赖特定的"搭档"存在,被迫学到更独立的特征——这就是"co-adaptation"防止的核心问题。
变体家族:
- SpatialDropout:整通道置零(不是单个像素),CNN/embedding 层常用,破坏的是"通道级"共适应。
- DropBlock(2018):连续块状置零,比逐点 Dropout 更有效地正则化卷积层。
- DropConnect:置零权重而非激活,更强但训练更重。
- Stochastic Depth:训练时随机跳过整个残差块——把"深"变成"浅的集成",效果类似 Dropout 的深度版。
PyTorch:nn.Dropout(p)、nn.Dropout2d(Spatial)。注意 model.eval() 下 Dropout 自动关闭——与 BN 一样,这是训练/推理行为差异的又一例(见初始化与归一化)。
四、早停(Early Stopping)
在验证损失停止下降(或开始回升)的点截断训练。它本质上是最小化"参数离起点太远"的隐式正则——参数停留在更接近初始化的小范数区域,对应更光滑的解。实现要点:
- 验证集上的"最佳"按连续 N 个 epoch 无改善判停(patience),防噪声假象。
- 保存最佳权重(
torch.save(model.state_dict())),训练结束恢复它。 - 早停相当于"免费的正则化",每个项目都该有。验证集会被早停反复使用,最终成绩照例以测试集为准(三集划分纪律见评估章节)。
五、数据增强
用变换制造更多、更真实的训练样本,是最有效也最"诚实"的正则化——它在教模型不变性(invariance)而不是压制它。
- 图像:随机裁剪/翻转/旋转、颜色抖动、缩放、平移、模糊。强增强(AutoAugment、RandAugment、Cutout)是 ImageNet SOTA 的标配。
- 文本:同义词替换、回译(back-translation)、随机删词/乱序、EDA 方法。注意文本增强要保语义,破坏语法会引入噪声。
- 音频:时间拉伸、音调/音量扰动、SpecAugment(沿时间/频率掩蔽),见语音与音频。
增强强度的判断:增强太弱约等于没做,太强会把"类内差异"增强成"跨类混淆"。以验证集性能为准来调节。数据管线的工程化(在线增强、多卡 shuffle)见数据与数据工程。
六、标签平滑(Label Smoothing)
把 one-hot 硬标签换成软标签:y' = (1−ε)·y + ε/K(ε≈0.1)。它的双重作用:
- 抑制过拟合:模型不再被逼着把正确类概率推到 1,logits 不至于无限大。
- 改善校准:预测概率更接近真实置信度,见损失函数与输出层。
副作用:软标签会让"蒸馏"类方法收益下降(教师模型的预测被抹平)。它是"便宜、几乎无副作用"的正则化,Transformer 家族默认使用。
七、EMA(指数移动平均)
维护参数的一个滑动平均副本:
θ_ema ← β·θ_ema + (1−β)·θ # β≈0.999推理时用 θ_ema 而不是当前 θ。为什么有效:训练中参数在高频抖动,EMA 相当于"在参数轨迹上做时间维的平均",消噪后落在更平坦、泛化更好的区域。它在 GAN、扩散模型、自监督学习里几乎必用——比如 VAE 与 GAN 里判别器/生成器训练后,用 EMA 权重生成质量明显更稳。实现上 PyTorch 可用 torch.optim.swa_utils.AveragedModel 或 torch_ema 库。
八、Mixup 与 CutMix
Mixup(2018):把两个样本及其标签线性插值:
x' = λ·xᵢ + (1−λ)·xⱼ, y' = λ·yᵢ + (1−λ)·yⱼ模型学到的是"类别之间的线性插值"——训练边界更平滑、对对抗样本更鲁棒。CutMix(2019):把一个样本的图像块剪切粘贴到另一个样本上,标签按面积比例混合——兼顾了 Mixup 的平滑与局部特征的保留。
这类"混合增强"在 CV 是免费午餐(性能稳定提升),在文本上也有 Manifold Mixup 等变体(在隐层空间插值)。注意与强增强叠加时可能过猛,需要验证集把关。
九、正则化组合策略与强度选择
正则化手段多,但总正则强度才是关键——所有手段都在往一个方向使劲:降低方差。组合经验:
- 按"破坏力"从小到大部署:早停 + 数据增强 → L2/权重衰减 → Dropout → 更激进的增强/减容量。先加便宜的先,别一上来就叠满。
- 归一化层的存在改变需求:BN 自带轻微正则(见初始化与归一化),用了 BN 的 CNN 往往 Dropout 收益很小。
- 强度以验证集为准:正则超参数(λ、p、ε)在验证集上选,别凭感觉。验证集是"可反复使用"的选择集,别拿它当测试集。
- 容量先大后收:默认先选偏大的网络 + 足够正则,比"小网络硬训"更容易调出好结果——正则化给了容量犯错的空间。
别过度正则化
正则化本质是"向简单解倾斜的偏见"。模型欠拟合时(训练损失都降不下去)再加正则只会雪上加霜——先确认是过拟合(训练好、验证差)再动手,读学习曲线是第一步。
十、权衡与取舍
权衡与取舍
偏差 vs 方差:这是所有正则化的总纲。数据量充足时正则化收益递减,甚至有害(把本该学到的都压掉了);数据稀缺时正则化是救命稻草。数据量决定正则强度。
L1 稀疏可解释 vs L2 光滑稳定:L1 适合特征选择与压缩,L2 通用且优化更顺滑;深度网络默认 L2/权重衰减,L1 多用于稀疏化(如剪枝前置)。
Dropout 的代价 vs 收益:Dropout 需要放大激活(乘 1/(1−p))会损失一些容量,对超大模型影响可忽略,对小模型可能"正则过度"。推理时记得 eval() 模式。
数据增强的收益 vs 计算成本:在线增强增加训练时长;它提升泛化的"性价比"几乎总是最高的——但强增强会扭曲分布(例如医学影像翻转不合法),必须结合任务语义。
正则化不是"花架子",它决定了一个模型能否从"背下训练集"升级为"掌握任务"。它与优化与梯度下降(优化本身也带隐式正则)、归一化层的轻微正则共同构成"泛化三角"。组合调参的完整流程见训练配方与调参,术语见术语表。
延伸阅读
- 神经网络基础——容量与过拟合的关系
- 数据与数据工程——增强的工程化与数据质量
- 损失函数与输出层——标签平滑的实现细节
- 训练配方与调参——正则强度的完整调参流程
- 常见陷阱与反模式——正则化相关的常见错误
- 调试与诊断——过拟合症状的快速定位
参考资料
- Srivastava et al. Dropout: A Simple Way to Prevent Neural Networks from Overfitting (2014)
- Zhang et al. mixup: Beyond Empirical Risk Minimization (2018)
- Yun et al. CutMix: Regularization Strategy to Train Strong Classifiers with Localizable Features (2019)
- Ghiasi et al. DropBlock: A regularization method for convolutional networks (2018)
- Szegedy et al. Rethinking the Inception Architecture for Computer Vision (2016, 标签平滑)
- Huang et al. Deep Networks with Stochastic Depth (2016)