正则化

1. 欠拟合、正常情况、过拟合

模型的训练在训练集上表现很好,但是在测试集上效果不佳,这就是模型过拟合

(1)一起回顾一些知识点
  • 欠拟合:则是指模型过于简单,无法捕捉数据中的主要模式,导致训练集和测试集上的表现都很差。例如,用线性回归拟合非线性数据时,模型可能无法反映数据的复杂关系。
  • 过拟合:这通常是因为模型过于复杂,记住了训练数据中的噪声或细节,导致泛化能力不足。例如,在房价预测中,过拟合的模型可能记住了某些特定房屋的价格,而忽略了特征间的普遍关系。

        具体情况如图所示:

        (有其他博客发过的图可能更好理解这里引用一下,如下图,原博客来源:)【机器学习】一文彻底搞懂正则化(Regularization)-CSDN博客https://blog.csdn.net/Zlyzjiabjw547479/article/details/149189783

(2)面对这两种情况应对方案如下:
欠拟合

 1. 增加模型复杂度(如增加层数或神经元数量)

 2. 提供更多有意义的特征

 3. 减少正则化力度

 4. 延长训练时间或调整学习率

过拟合

 1. 增加训练数据

 2. 使用正则化(如L1或L2正则化)

 3. 减少模型复杂度(降低参数数量或深度)

 4. 使用Dropout层随机丢弃部分神经元

 5. 数据增强(如图像旋转、缩放等)

2. 正则化

因为训练时会学习到其他噪声导致过拟合,所以就要给模型加 “约束惩罚”,不让参数变得过大、不让模型太复杂,强迫模型学习通用规律,而不是死记噪声。这就是正则化

正则化公式:

(J(w,b)是拟合误差)


L1、L2对比

1. L1、L2性能对比

方面 L1(Lasso) L2(Ridge)

效果本质

产生稀疏权重(大量权重归零) 产生小而平滑的权重(权重接近零但不归零)
公式
梯度特性 在0处不可导(次梯度下降),优化更复杂 处处可导,梯度下降稳定
抗噪声能力 弱(对异常值敏感,可能错误删除重要特征) 强(对异常值鲁棒,权重均匀缩小)
计算效率 高稀疏模型推断快,但训练可能慢(需特殊优化器) 训练高效(兼容所有优化器),推断时模型无压缩
优化目标

min(J(w,b))

s.t. \sum_{1}^{n}\left |w_{_i} \right |\leqC

min(J(w,b))

s.t. \sum_{1}^{n}w_{_i}^{2}\leqC

示意图

约束域

(L1 约束是有棱角菱形:损失等高线优先卡在棱角,直接把部分权重压为 0,实现稀疏。)

(L2 约束是光滑圆:切点一般不在坐标轴,所有权重都不为 0,只变小。)

补充:结合 L1 稀疏 + L2 平滑的优点得到\RightarrowL1+L2 弹性网 Elastic Net

公式:

2.选择策略

(1)提升泛化能力,防止过拟合,且所有特征都可能有用。————————————首选L2

①案例:

  • 图像分类(ResNet)、NLP 预训练模型(BERT)的微调。
  • 数据维度不高(特征数 < 1000)的回归任务。

②收益:验证集误差降低 5%~10%,训练曲线更平滑。

③实现代码:

# PyTorch 示例(直接在优化器权重衰减项实现 L2)
optimizer = torch.optim.Adam(model.parameters(), lr=1e-3, weight_decay=1e-5)
(2)特征选择(降维)、模型压缩或可解释性要求高。———————————————首选L1

①案例:

  • 金融风控(需明确哪些特征决策)、高维基因数据筛选关键特征。
  • 移动端部署需减少模型参数量的场景。

②收益:特征数量减少 80%+,模型尺寸缩小 50% 但精度仅损失 1%~2%。

③实现代码:

# 手动添加 L1 损失(注意:优化器需支持,或自己实现近端梯度)
l1_loss = lambda * torch.norm(weight, 1)
total_loss = ce_loss + 0.01 * l1_loss
(3)兼具特征选择与稳定性的需求,且数据强相关。—————混合使用 ElasticNet(L1+L2)

①案例:广告 CTR 预估中,特征存在多重共线性(如用户年龄与收入段)。

②收益:比纯 L1 更稳定,比纯 L2 更稀疏。

③实现代码:

# sklearn 示例(线性模型)
from sklearn.linear_model import ElasticNet
model = ElasticNet(alpha=0.1, l1_ratio=0.5)  # l1_ratio 控制 L1/L2 混合比例

3.工程中的权衡经验

  • 默认起点
    优先试 L2(weight_decay 设 1e-4 到 1e-2),因其稳定且易调参,大多数深度学习任务有效。
  • 换 L1 的条件
    • 特征数 > 10,000(如文本 TF-IDF 特征),且怀疑大量特征无关。
    • 模型部署需极致压缩(如嵌入式设备)。
  • 避坑指南
    • L1 的风险:可能因噪声删错特征,需交叉验证确认稳定性。
    • L2 的风险:无法降维,推断时模型体积无变化。
  • 高级技巧
    用 L2 训练后,对权重剪枝(pruning)替代 L1——同样达到稀疏性,且训练更稳。

总结

  • L1 用于特征选择(要稀疏性),L2 用于防止过拟合(要稳定性)
  • 工程中常优先 L2,仅当特征维度高且需压缩模型时才加入 L1,最优解常用 ElasticNet(L1+L2)或直接试 L2 剪枝。

说明:该内容用于学习,部分内容来源链接:2025年-京东-算法/AI岗高频面试题 (nowcoder.com)https://www.nowcoder.com/exam/interview/96648758/test?paperId=63848762&order=0

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐