207_深度学习调优:透彻理解权重衰退(L2 正则化)
在模型训练中如果特征过多而数据较少模型很容易为了拟合每一个样本而产生巨大的权重值导致过拟合。权重衰退的核心思想就是通过在损失函数中添加惩罚项让模型偏好更小的权重。1. 为什么“小权重”能防止过拟合模型复杂度控制如果一个特征的权重 w很大意味着输入微小的变化都会引起输出的剧烈波动模型变得非常“敏感”且不稳定。平滑性较小的权重对应更平滑的拟合曲线。通过限制我们可以强制模型变得简单。2. 数学原理L2 范数惩罚我们在原始的损失函数后面加上一个“正则项”(超参数)控制衰退的强度。时不限制越大权重被压制得越厉害。更新规则在梯度下降时权重会先乘以一个小于 1 的系数即“衰退”再减去梯度。3. 代码实战从零实现 vs 简洁实现文件演示了如何在高度过拟合的场景特征 200 个训练样本仅 20 个下应用权重衰退。① 从零开始实现手动计算惩罚项Pythondef l2_penalty(w): # L2 惩罚项即权重平方和的一半 return torch.sum(w.pow(2)) / 2 # 在训练循环中 l loss(net(X), y) lambd * l2_penalty(w) l.backward() updater.step()② 简洁实现利用优化器的 weight_decay 参数这是工业界最常用的方法。PyTorch 的优化器已经内置了这一机制。Pythondef train_concise(wd): # 通过 weight_decay 参数直接指定 λ 值 # 注意通常只对权重 w 进行衰减而不对偏置 b 进行衰减 trainer torch.optim.SGD([ {params: net[0].weight, weight_decay: wd}, {params: net[0].bias} ], lrlr) # 后续训练代码无需手动加惩罚项PyTorch 会自动处理 for epoch in range(num_epochs): for X, y in train_iter: trainer.zero_grad() l loss(net(X), y) l.backward() trainer.step()4. 关键实验结论根据文件中的训练结果对比无权重衰退 (wd0)训练误差降为 0但验证误差非常高呈现严重的过拟合。加入权重衰退 (wd3)虽然训练误差有所上升但验证误差显著下降。这说明权重衰退成功抑制了模型对噪音的“死记硬背”提升了泛化能力。5. 总结权重衰退的生存指南参数分离在高级实践中建议只衰减weight不衰减bias因为偏置不会导致模型不稳定性。调参建议如果模型过拟合严重尝试加大weight_decay的值如从 1e-4 改为 1e-2。配合使用权重衰退常与Dropout或早停法Early Stopping结合使用共同对抗过拟合。 学习小结权重衰退本质上是数学上的“拉格朗日乘子法”在深度学习中的应用。它通过一个优雅的惩罚项让模型在“拟合数据”和“保持简单”之间找到了完美的平衡。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2466116.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!