将权重衰减加在损失上: 通常我们会看到这种形式,它在损失函数中直接增加一个与权重的 L2 范数相关的惩罚项。这个惩罚项在训练期间被添加到原始损失上:
$$ L_{new} = L_{original} + \lambda \cdot \frac{1}{2} ||w||^2 $$
这里:
将惩罚加在权重更新上: 在实现中,权重更新时直接在更新公式中添加了一个与当前权重成比例的惩罚项,如下所示:
$$ w_{new} = w_{old} - \eta \cdot \nabla L(w_{old}) - \eta \cdot \lambda \cdot w_{old} $$
这种方式是通过将惩罚项直接加在权重上来实现的,实际上是通过梯度的方式影响了权重的更新。
这两种方式在效果上是等价的,原因如下:
在 PyTorch 等深度学习框架中,选择哪种实现方式取决于个人或团队的编码风格以及具体实现的需求。直接在更新中添加权重衰减有时可以让代码更加清晰,减少在计算损失时的额外开销。