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

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

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

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

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

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

1. 正则化的目的

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

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

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

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

形式上,我们通常在原始损失函数 中加入一个正则项

其中:

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

2. 常见的正则化方法

2.1 L1 正则化(Lasso)

L1 正则化的形式是:

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

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

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

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

在 PyTorch 中可以直接写为:

scss 复制代码
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 正则化更常见,它的形式是:

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

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

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

2.3 Dropout

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

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

ini 复制代码
nn.Dropout(p=0.5)

这样做的效果是:

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

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

2.4 Batch Normalization / Layer Normalization

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

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

2.5 数据增强(Data Augmentation)

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

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

比如图像任务常见的:

scss 复制代码
transforms.RandomHorizontalFlip()
transforms.ColorJitter()
transforms.RandomResizedCrop()

2.6 Early Stopping

另一个非常实用的技巧。

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

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

kotlin 复制代码
if val_loss > best_val_loss:    
      patience_counter += 1    
      if patience_counter > patience:        
           break

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

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

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

📚推荐阅读

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

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

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

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

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

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

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

作者:aicoting

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

我们下次不见不散!

相关推荐
想吃火锅100533 分钟前
【leetcode】56.合并区间js
算法·leetcode·职场和发展
imuliuliang35 分钟前
可合并堆在多任务调度中的优势与实现技巧7
算法
学究天人35 分钟前
数学公理体系大全:Comprehensive Collection of Mathematical Axiom Systems(卷6)
网络·算法·数学建模·动态规划·几何学·图论·拓扑学
wabs66642 分钟前
关于动态规划【力扣72.编辑距离的思考】
算法·leetcode·动态规划
用户8524950718442 分钟前
从零搭建自定义 MCP Server:打造你的专属工具服务
面试
黄敬峰1 小时前
远程 MCP 实战:LangChain 同时接入高德地图、Chrome、文件系统,让 AI Agent 操控真实世界
面试
KaifuZeng1 小时前
通信与接口协议面试问题汇总三
单片机·嵌入式硬件·面试·通信与接口协议
用户333239768841 小时前
我做了一个 RepoMind:让 AI 写架构前,先去看看真实开源项目
算法
chh5631 小时前
C++--list
开发语言·数据结构·c++·学习·算法·list
胡萝卜术1 小时前
从聊天模型到本地执行助手:Remote MCP 多工具 Agent 实战
面试·架构·github