过拟合的应对方法——weight_decay
权重衰退是最广泛使用的正则化方法之一。
模型容量受参数个数和参数范围影响,通过L2正则项限制w的取值范围,权重w每次更新乘以小于1的数,w的数值范围不会太大,从而降低模型复杂度,减轻过拟合风险。
两种方法:
一、使用正则项权重超参数lambd。
lambd为0,w的L2范式很大,无作用。lambd趋近无穷大,w的L2范式很少,参数w趋近于0。通过增加lambd,w的取值减小,让模型不那么复杂。
# 定义l2范式惩罚
def l2_penalty(w):
return torch.sum(w.pow(2)) / 2
# 超参数lambd加入损失函数
l = loss(net(X), y) + lambd * l2_penalty(w)
二、在优化器中设置weight_decay参数。常用框架都包含该参数,在更新梯度前对w进行衰减。
总结:调大lambd,w减少,减轻过拟合
当lambd很大,欠拟合
问题:
1.为什么模型参数范围大模型复杂度高?
如下图需要模拟红色的点。如果我们让模型参数取很大的数值,可以用很复杂的模型来拟合红色的点,如果是二次或者三次函数,权重取的很大或者很小,可以造成一个非常不平滑的曲线。如果对模型取值限定在一个范围,不让学习复杂的模型,就会选择比较平滑的模型,例图中绿色的曲线。
2.实际中权重参数一般多少?
常用值:1的-3次方=0.001,1的-4次方=0.0001