9.6 权重衰减
权重衰减(Weight Decay)是一种在模型训练过程中防止模型过拟合的技术。
9.6.1 权重衰减的原理
权重衰减的思想很简单,就是在训练的每一步用梯度更新参数时,同时缩小参数值。防止参数的绝对值过大。权重衰减的思想和L1、L2正则是类似的,都是减少参数的绝对值。不同的是L1、L2正则是在loss函数里增加额外项实现的。而权重衰减的做法更直接,直接减小参数的绝对值。
它的具体做法为:
其中是学习率,是权重衰减系数。一般取值在1-e2到1-e4。如果你的模型过拟合现象比较严重,就设置大一些。
9.6.2 PyTorch里的权重衰减
PyTorch里一般在定义优化器时,可以同步设置weight decay。并指定的值。示例代码如下:
optimizer = optim.SGD(model.parameters(), lr=0.1, weight_decay=1e-4)
9.6.3 权重衰减和L2正则的关系
对标准的梯度下降算法应用权重衰减和L2正则,效果是一样的。 标准梯度下降 loss函数加上L2正则项:
更新参数w:
权重衰减
更新参数w:
可以看到不论是改变loss函数,还是直接减小参数值,最后的公式都是一样的。
但是对于Adam优化器来说,权重衰减和L2正则就不一样了。因为添加在Loss里的L2正则,梯度经过动量和平方根调整后,已经和直接减小参数值不一样了。