正则化与过拟合:L1/L2、Dropout 与早停
理解过拟合:当模型“背诵”而非“学习”
过拟合是机器学习中最常见的陷阱之一。当一个模型在训练数据上表现得近乎完美,却在从未见过的测试数据上表现糟糕时,它就发生了过拟合。本质上,模型没有学会数据背后的通用规律,而是把训练集中的噪声和随机波动也当成模式“背诵”了下来。
判断过拟合并不困难:如果训练损失持续下降,但验证损失在某个点后开始不降反升,这条分岔的曲线就是过拟合最清晰的信号。与之相对的是欠拟合,即模型连训练数据中的基本结构都未能捕获。我们的目标是找到那个恰好平衡的位置——偏差与方差的均衡点。
高方差模型对训练数据的细微变化极度敏感,这正是过拟合的根源;高偏差模型则过于简化,无法表达数据的复杂性,导致欠拟合。正则化技术的核心使命,就是在不显著增加偏差的前提下,有效压制方差。
L1 与 L2 正则化:在损失函数上施加约束
最经典的正则化手段直接作用于模型的损失函数:在原始损失项之外,增加一个对权重大小的惩罚项。这迫使模型在拟合数据的同时,必须保持权重本身尽可能“小”或“稀疏”,从而避免过度依赖某些极端特征值。
L2 正则化:权重衰减的力量
L2 正则化,又称权重衰减或岭回归,在损失函数后添加权重的平方和项:
[ \text{Loss}{\text{total}} = \text{Loss}{\text{original}} + \frac{\lambda}{2} \sum w_i^2 ]
这里 (\lambda) 是控制正则化强度的超参数。求导后,每一次梯度更新都相当于先将权重缩小一定比例(((1 - \eta\lambda)w)),再沿梯度方向移动。这推动所有权重都趋近于零,但极少数会精确为零。
L2 正则化会惩罚过大的权重值,让模型的决策边界更平滑。当输入特征间存在多重共线性时,它能有效稳定模型参数。从贝叶斯视角看,L2 等价于给权重施加一个均值为零的高斯先验分布。
实践中,几乎所有深度学习框架的优化器都内置了 weight_decay 参数,它正是 L2 正则化的直接实现。
L1 正则化:追求稀疏解
L1 正则化在损失函数中添加权重的绝对值之和:
[ \text{Loss}{\text{total}} = \text{Loss}{\text{original}} + \lambda \sum |w_i| ]
它的惩罚项在零点处不可导,这种特殊的几何性质使得优化过程中,许多权重被精确地推向零。最终得到的模型会只保留少数非零权重——即稀疏模型。这天然地完成了特征选择:不重要的特征对应的权重被彻底剔除。
L1 正则化对应拉普拉斯先验,当你有理由相信只有少部分特征是真正关键的时候,它比 L2 更合适。弹性网络(Elastic Net)则将两者结合,兼具稀疏性与平滑性。
如何选择?
| 特性 | L1 | L2 |
|---|---|---|
| 惩罚形式 | 绝对值之和 | 平方和 |
| 解的特性 | 稀疏,驱动权重为零 | 非稀疏,权重趋近于零但不为零 |
| 典型应用 | 特征选择,可解释性要求高的场景 | 防止过拟合,共线性问题 |
| 决策边界 | 更尖锐,轴对齐倾向 | 更平滑,圆形等高线 |
小建议:如果你拿不准,从 L2 开始几乎总是稳妥的。若特征维度极高且怀疑大量特征无用,L1 或弹性网络是更强的武器。
Dropout:随机失活的魔力
Dropout 是一种完全不同的正则化策略,它不修改损失函数,而是直接改造网络结构本身。在每一次训练迭代中,每个神经元(或连接)都以概率 (p) 被临时“丢弃”,即该神经元的输出被设为零。这迫使网络不能依赖任何单一路径或特定神经元的存在。
Dropout 的效果相当于隐式集成了指数级数量的子网络。每一次训练使用一个随机采样的子网络,预测时则使用完整网络,但所有权重需乘以 (1-p)(或等效地在训练时保存缩放后的权重)以保证期望输出一致。
关键实践细节:
- (p=0.5) 对于隐藏层通常是一个合理的起点。
- 输入层的丢弃概率通常设得更低(如 0.2),以防丢失过多原始信息。
- 训练时务必开启 Dropout,验证和测试时务必关闭。
- 卷积神经网络中,标准的随机丢弃效果有时不佳,常使用 Dropout 的变体,如 Spatial Dropout(按通道整体丢弃)或 DropBlock(丢弃连续块)。
Dropout 还可以被理解为一种对特征共适应的破坏。它防止神经元之间形成过于复杂的、仅对训练集有效的协同关系,迫使每个神经元独立学到更鲁棒的特征。
早停:最简单却最有效
早停也许是所有正则化方法中最容易实现、计算成本最低的一种。它在训练过程中持续监测验证集的性能,一旦验证误差不再改善(或在一定轮数内未创新低),便终止训练,并恢复到验证误差最小的模型状态。
这正是手动对抗过拟合训练曲线的直接方法:当你发现那条校验损失曲线开始抬头,就立刻停下。无需修改模型结构,也无需添加强惩罚项。早停的唯一代价是需要划分出独立的验证集,以及设定一个合理的“耐心”参数(patience)。
在实际操作中:
- 保存验证表现最佳的检查点。
- 如果验证损失在连续 N 个 epoch 内没有下降,则停止训练。
- 过小的 patience 可能导致训练过早停止(欠拟合),过大的 patience 则减少正则化效益。
- 早停可以与任何其他正则化方法叠加使用,几乎是免费的午餐。
早停有效的原因与参数范数约束相关:在早期训练阶段,权重尚小,网络复杂度低;随着训练推进,权重增大,模型复杂度升高。早停相当于在权重到达过大的临界点前暂停,隐式地限制了有效模型容量。
组合策略与实战建议
真实项目中的正则化从来不是单选题。最稳健的策略往往是组合拳:
- 基础防线:始终使用 L2 权重衰减(通常设为 1e-4 数量级),现代优化器如 AdamW 已将此分离为独立组件。
- 结构正则化:对大型全连接网络优先使用 Dropout(概率 0.2–0.5)。对于 CNN 和 Transformer,可探索特定位置的 Dropout 变体或 DropPath 等。
- 训练过程控制:每个训练任务都必须启用早停,耐心值设得稍大(比如验证损失 20 个 epoch 未改善即停止),并基于验证集保存最佳模型。
- 数据与增强:永远不要忘记,最根本的解决过拟合方式是获取更多真实数据或使用高质量的数据增强,正则化只是辅助。
- 超参数顺序:先调整学习率和模型容量以消除欠拟合,再逐步增加正则化强度来控制过拟合;直接从极强正则化开始常常会导致模型无法学习。
从诊断到治疗:当你看到过拟合的典型信号(训练精度远高于验证精度),首先检查是否训练数据太少或标签噪声太大。然后,依次增加 L2 权重衰减、增大 Dropout 概率、减小 patience,并观察验证曲线的变化。每一次正则化调整都应驱动模型朝更低的泛化误差迈进。