面试官:正则化都有哪些经典的方法?

0 阅读4分钟

推荐直接网站在线阅读:aicoting.cn

在训练神经网络的过程中,我们经常遇到一个让人头疼的问题:训练集上精度高得离谱,测试集却一塌糊涂。

这就是过拟合(Overfitting)。模型在训练集上死记硬背了样本,却没有真正学到可泛化的规律。

要解决这个问题,除了多加数据、做数据增强之外,另一个关键武器就是——正则化(Regularization)。

所有相关文档、源码示例、流程图与面试八股,我也将持续更新在AIHub,欢迎关注收藏!

1. 正则化的目的

一句话总结就是正则化的目标是让模型学得简单一点。

在深度学习中,模型通常拥有成千上万个参数,如果不加约束,它会努力去拟合训练集中的每一个小细节,甚至连噪声都不放过。

正则化通过在损失函数中增加一个惩罚项(Penalty Term),让模型在追求拟合能力的同时,也要为复杂性付出代价。

这种代价的形式可以是参数的大小、变化的平滑程度、网络的稀疏性,甚至结构本身的约束。

形式上,我们通常在原始损失函数 L(\theta)中加入一个正则项 R(\theta)

L'(\theta) = L(\theta) + \lambda R(\theta)

其中:

  • L(\theta) :原始损失(比如交叉熵)
  • R(\theta):正则项(约束模型复杂度)
  • \lambda:权衡系数,决定惩罚强度

2. 常见的正则化方法

2.1 L1 正则化(Lasso)

L1 正则化的形式是:R(\theta) = |\theta|_1 = \sum_i |\theta_i|

它鼓励参数接近 0,从而让模型变得稀疏。

它鼓励参数接近 0,从而让模型变得稀疏。

也就是说,很多不重要的权重会被压成 0,达到特征选择的效果。

L1 正则化适用于希望模型自动筛选特征的场景,比如高维线性回归。

在 PyTorch 中可以直接写为:

loss = loss_fn(output, target)
l1_reg = torch.tensor(0.)
for param in model.parameters():
    l1_reg += torch.sum(torch.abs(param))
loss += 1e-5 * l1_reg

2.2 L2 正则化(Ridge)

L2 正则化更常见,它的形式是:

R(\theta) = |\theta|_2^2 = \sum_i \theta_i^2

L2 会惩罚大的权重值,让所有参数都趋向于较小的范围。它不会让参数直接变成 0,而是整体缩小参数分布。

这有助于提高模型的稳定性;防止梯度爆炸;让模型更平滑。

几乎所有优化器(如 AdamW)都内置了 L2 权重衰减机制(weight decay)。

2.3 Dropout

Dropout 可以看作是一种结构上的正则化。

在训练过程中,它会随机地把部分神经元丢弃(设为 0),相当于让网络在每次迭代中训练不同的子网络:

nn.Dropout(p=0.5)

这样做的效果是:

  • 防止神经元之间过度协同;
  • 提升模型的泛化能力;
  • 类似于集成学习思想(每次都是不同子模型)。

在推理阶段(eval 模式)会自动关闭 Dropout,使用所有神经元参与预测。

2.4 Batch Normalization / Layer Normalization

BN(批归一化)和 LN(层归一化)虽然本质是标准化操作,但它们也具备一定的正则化效果。

原因是它们在训练中引入了随机性(比如 mini-batch 的统计波动),相当于一种轻量的扰动,能抑制模型过拟合。

2.5 数据增强(Data Augmentation)

严格来说,这不是对参数的正则化,而是对数据的隐式正则化。

通过对输入样本进行随机变换(旋转、裁剪、翻转、加噪声等),模型被迫学习对多样化样本的鲁棒表示,从而降低过拟合风险。

比如图像任务常见的:

transforms.RandomHorizontalFlip()
transforms.ColorJitter()
transforms.RandomResizedCrop()

2.6 Early Stopping

另一个非常实用的技巧。

如果你发现训练集 loss 还在下降,而验证集 loss 开始上升,说明模型开始过拟合 —— 此时应该立刻停止训练。

在 PyTorch 中可以通过手动监控验证集损失实现,也可以封装在训练循环中:

if val_loss > best_val_loss:    
      patience_counter += 1    
      if patience_counter > patience:        
           break

从优化角度看正则化的话,正则化其实就是给优化器加上约束。它让梯度下降不再单纯追求损失最小,而是同时考虑模型的简洁性。

没有正则化时,优化器只管快速到达最低点;有了正则化后,优化器会更倾向于平滑而稳健的谷底,而不是陡峭的深坑。

这就解释了为什么加了正则化的模型,在验证集上表现更好。

📚推荐阅读

一文搞懂深度学习中的通用逼近定理!

一文搞懂深度学习中的表征学习理论!

一文搞懂深度学习中的信息论!

一文搞懂深度学习的反向传播与优化理论!

一文搞懂深度学习中的张量与自动微分!

一文彻底搞懂深度学习和机器学习的区别!

最新的文章都在公众号aicoting更新,别忘记关注哦!!!

作者:aicoting

分享是一种信仰,连接让成长更有温度。

我们下次不见不散!