1.Regularization(正则化) 不是 normalization(规范化),正则化解决的问题是防止过拟合.
2.目标函数的正则化项分为L1正则和L2正则,两者都能达到防止过拟合的作用。正则化背后的思路:这些参数的值越小,通常对应于越光滑的函数,也就是更加简单的函数。因此 就不易发生过拟合的问题。
- L1正则化
- L2正则化
L1正则化不仅可以防止过拟合,还可以稀疏矩阵。正则化的思路符合常理:实际所有变量对结果都有一定贡献,只是有些变量对结果的影响很小。加入正则化可以达到这个结果,使得函数更加平滑。
3.但是在pytorch中,正则化不体现在loss中,而是具体现在optim优化器的weight_deacy中。
例如,可以给不同的层设置不同的weight_deacy,说明L2正则化在代码中应该是体现在每一层上的,本身L2只约束层。
params = [<font color=#0000ff> {"params": logits_params, "lr": config.lr}, {"params": net.backbone.parameters(), "lr": config.backbone_lr}, </font>] optimizer = torch.optim.SGD(params, momentum=config.momentum, weight_decay=config.weight_decay)
4.加了weight_deacy参数之后(例如weight_deacy经常为0.01),可以发现loss最初的值是不变的,但是loss下降的速度会变慢,观看accuracy曲线和loss曲线,发现会变得平滑稳定。
为什么l1正则相比于l2正则更容易获得稀疏解
1.首先从二维w画图的角度来看: 参考 L1正则化与L2正则化
2.从一维w画图的角度来看:参考l1 相比于 l2 为什么容易获得稀疏解?
3.L2范数 与 L1范数 相比,从二维w画图上来看,不容易交在坐标轴上,但是仍然比较靠近坐标轴。因此这也就是我们老说的,L2范数能让解比较小(靠近0),但是比较平滑(不等于0).
by fuweifu

评论列表,共 0 条评论
暂无评论