1. 权重衰减(Weight Decay)的原理
权重衰减的本质是 L2 正则化,它在损失函数中增加了一个与模型权重相关的惩罚项。具体来说:
-
原始的损失函数为 Loss(θ)Loss(θ),其中 θθ 是模型参数。
-
加入权重衰减后,损失函数变为:
Lossnew(θ)=Loss(θ)+λ2∑iθi2Lossnew(θ)=Loss(θ)+2λi∑θi2其中:
-
λλ 是权重衰减系数,控制正则化的强度。
-
∑iθi2∑iθi2 是模型权重的 L2 范数(平方和)。
-
-
在优化过程中,权重衰减会使得模型参数趋向于较小的值,从而限制模型的复杂度。
2. 为什么不对偏置和归一化层参数进行权重衰减?
-
偏置(Bias):
-
偏置参数通常对模型的复杂度影响较小,对其进行权重衰减可能会导致模型欠拟合。
-
偏置的作用是调整模型的输出,使其更灵活地拟合数据,因此不需要额外限制。
-
-
归一化层参数(Norm Layers,如 LayerNorm 或 BatchNorm):
-
归一化层的参数(如缩放因子 γγ 和偏移量 ββ)已经具有正则化效果,能够稳定训练过程。
-
对这些参数进行权重衰减可能会破坏归一化层的效果,反而影响模型性能。
-
3. 代码的作用
python
复制
decay_params = [ p.name for n, p in model.named_parameters() if not any(nd in n for nd in ["bias", "norm"]) ]
-
这段代码的作用是筛选出需要权重衰减的参数:
-
遍历模型的所有参数(
model.named_parameters()
)。 -
排除名称中包含
"bias"
或"norm"
的参数(即偏置和归一化层参数)。 -
将剩余参数的名称保存到
decay_params
中。
-
4. 抑制过拟合的原理
权重衰减通过以下机制抑制模型过拟合:
-
限制模型复杂度:
-
权重衰减会使得模型参数趋向于较小的值,从而限制模型的拟合能力,避免模型过度拟合训练数据。
-
-
提高泛化能力:
-
通过惩罚较大的权重值,模型在训练过程中会更加平滑,从而在未见过的数据上表现更好。
-
-
防止参数过大:
-
过大的参数值通常意味着模型对训练数据中的噪声或异常值过于敏感,权重衰减可以有效避免这种情况。
-
5. 权重衰减的实际效果
-
训练阶段:
-
损失函数中增加了权重衰减项,优化器在更新参数时会同时考虑原始损失和正则化项。
-
参数更新公式为:
θi←θi−η(∂Loss∂θi+λθi)θi←θi−η(∂θi∂Loss+λθi)其中 ηη 是学习率。
-
-
测试阶段:
-
由于模型参数较小且平滑,模型在测试数据上的表现更加稳定,泛化能力更强。
-
6. 总结
-
权重衰减 是一种正则化技术,通过惩罚较大的参数值来限制模型复杂度,从而抑制过拟合。
-
不对偏置和归一化层参数进行权重衰减,是因为这些参数对模型的复杂度影响较小,且额外的正则化可能会破坏其功能。
-
代码的作用是筛选出需要权重衰减的参数,通常是全连接层、卷积层等的权重参数。