深度学习之weight_decay和L2正则的区别

Adam有很多的优点,但是在很多数据集上的最好效果还是用SGD with Momentum细调出来的。可见Adam的泛化性并不如SGD with Momentum。论文 中提出其中一个重要原因就是Adam中L2正则化项并不像在SGD中那么有效。

  • L2正则和Weight Decay在Adam这种自适应学习率算法中并不等价,只有在标准SGD的情况下,可以将L2正则和Weight Decay看做一样。特别是,当与自适应梯度相结合时,L2正则化导致具有较大历史参数和/或梯度幅度的权重比使用权重衰减时更小。

  • 使用Adam优化带L2正则的损失并不有效,如果引入L2正则化项,在计算梯度的时候会加上正则项求梯度的结果。正常的权重衰减是对所有的权重都采用相同的系数进行更新,本身比较大的一些权重对应的梯度也会比较大,惩罚也越大。但由于Adam计算步骤中减去项会有除以梯度平方的累积,使得梯度大的减去项偏小,从而具有大梯度的权重不会像解耦权重衰减那样得到正则化。 这导致自适应梯度算法的L2和解耦权重衰减正则化的不等价。

而在常见的深度学习库中只提供了L2正则,并没有提供权重衰减的实现。这可能就是导致Adam跑出来的很多效果相对SGD with Momentum有偏差的一个原因。

Adam with L2 regularization和AdamW的代码:
深度学习之weight_decay和L2正则的区别_第1张图片
如果是SGD,L2正则化项和梯度衰减是等同的。但是由于Adam加入了一阶动量和二阶动量,基于包含L2正则化项的梯度来计算一阶动量和二阶动量,使得参数的更新系数就会变化,与单纯的权重衰减就会变得不同。图中红色的为原始的Adam+L2 regularization的方法.
深度学习之weight_decay和L2正则的区别_第2张图片
L2 regularization和weight decay都应该是各向同性的。作者提出以绿色的方式来在Adam中正确的引入weight decay的方式,称作AdamW

大部分的模型都会有L2 regularization约束项,因此很有可能出现Adam的最终效果没有sgd的好。
深度学习之weight_decay和L2正则的区别_第3张图片

权重衰减(L2正则化项)为什么能够避免模型过拟合的问题?

  • 奥卡姆剃刀法则;
  • 过拟合模型的系数往往非常大,因为过拟合就是需要顾忌每一个点,最终形成的拟合函数波动很大,这就意味在某些小区间里的导数值非常大,也就是系数很大,而通过正则化约束参数的范数使其不要太大,可以在一定程度上减少过拟合情况。

学习率衰减基本有两种实现方法:

  • 线性衰减。例如:每过5个epochs学习率减半。
  • 指数衰减。例如:随着迭代轮数的增加学习率自动发生衰减,每过5个epochs将学习率乘以0.9998。具体算法如下:
    decayed_learning_rate=learning_rate*decay_rate^(global_step/decay_steps)
    其中decayed_learning_rate为每一轮优化时使用的学习率,learning_rate为事先设定的初始学习率,decay_rate为衰减系数,decay_steps为衰减速度。

参考
知乎

你可能感兴趣的:(深度学习,深度学习)