Appearance
权重衰减(L2正则化)
在深度学习和机器学习模型训练中,我们常常面临 过拟合(Overfitting) 的问题。
为了提高模型在未见数据上的泛化能力,正则化(Regularization) 技术应运而生。
其中,最常用的一种正则化方法就是——权重衰减(Weight Decay) 。权重衰减会在优化过程中不断“拉回”权重,防止它们无限制地增大,从而控制模型复杂度。
什么是权重衰减(Weight Decay)?
权重衰减,又叫作 L2正则化,本质上是在原始损失函数(Loss)中,添加一项关于模型参数(权重)大小的惩罚项。
简单来说,除了最小化预测误差之外,还希望模型的参数(即权重)本身不要太大。
具体来说,假设原始损失函数为 ,模型参数为 ,则添加了权重衰减后的损失函数为:
- 原始损失函数
- 是一个超参数,用于控制正则化的强度。正则化系数,控制惩罚项的强度
- 较大的 会导致更强的正则化效果,即模型的参数会更加平滑。
- 通常是一个很小的数,例如 0.001
- 权重向量的L2范数的平方
权重衰减会在优化过程中不断“拉回”权重,防止它们无限制地增大,从而控制模型复杂度。
权重衰减的作用
- 防止过拟合 减小权重,降低模型复杂度,使模型更好地在测试集上泛化。
- 提高数值稳定性 权重值过大容易导致梯度爆炸,权重衰减可以有效缓解这种情况。
- 提升训练速度 较小的权重可以让梯度下降法更快收敛。
- 提高模型鲁棒性 权重较小的模型通常对输入噪声更加不敏感,表现更稳健。
和其他正则化对比
| 项目 | 权重衰减(L2正则化) | L1正则化 |
|---|---|---|
| 惩罚项形式 | ||
| 权重效果 | 让权重接近0但不为0 | 让权重稀疏(部分变为0) |
| 应用场景 | 防止过拟合,控制模型复杂度 | 特征选择,提升模型可解释性 |
| 总结 | 想让参数都尽量小:用L2正则化(权重衰减) | 想让部分参数直接归零:用L1正则化 |
PyTorch 中使用权重衰减
在 PyTorch 中,只需要在优化器中设置 weight_decay 参数:
python
import torch.optim as optim
optimizer = optim.SGD(model.parameters(), lr=0.01, weight_decay=1e-4)