ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

权重衰减和学习率衰减

2021-07-24 23:01:42  阅读:629  来源: 互联网

标签:权重 学习 正则 Adam https 衰减


概念

之前一直对“权重衰减”和“学习率衰减”存在误解,我甚至一度以为它们是同一个东西,以至于使用的时候感觉特别困惑。在优化器中使用了“权重衰减”,竟然发现模型的准确率下降了,假如它们是同一个东西,至少应该是学得慢,而不是学坏了。因此,专门查了一下资料,了解两者的区别,这篇随笔做一下记录。

  • 权重衰减

权重衰减 (weight decay),是一种正则化的方法,应用了权重衰减的神经网络,最终某些权重会变成零 [1],相当于输入在这个神经元上会被抛弃。神经网络中某些权重归零,表示模型的复杂度下降了,多了一个零,少了一个参数。

  • 学习率衰减

学习率衰减 (learning rate decay) 就是调小学习率,使到损失可以进一步减小。如果整个优化过程,学习率一直保持较大的数值,那么在损失可能在局部最小值的周围震荡,而又到不了局部最小。将学习率变小,学习的步长变小了,使到损失可以到达局部最小。

权重衰减

为什么叫做权重衰减

有的时候(因为另一些时候不叫),权重衰减又叫做 L2 正则化,意思是在损失函数上面加上一个 L2 正则项。

\[L(w) \rightarrow L(w) + \frac{\gamma}{2} w^2 \]

梯度下降的时候,权值的更新公式将变为如下:

\[w_i \rightarrow w_i - \eta g(w_i) - \eta \gamma w_i \]

如果一个权值每次梯度下降的时候,梯度都很小,甚至没有,如果我们将公式忽略掉,经过多次更新,可以看到权值将指数衰减(每次都乘以一个数),最终趋向于零。趋向于零的速度,取决于系数,如果是 0.01,那么 100 次迭代,每次更新为原来的 0.99,100 次后权值会变为原来的 0.36。

权重衰减应该设置多少

这个属于炼丹的参数,在 0 到 1 之间即可。不知道设置多少,就设置 0.01 或 0.001 吧,保守一点 [4]。如果有足够多的时间或者 GPU,那就搜索一下咯。

权重衰减和 Adam

[3] 改进了权重衰减。对于 Adam 优化器,如果我们还是像前面使用的 L2 正则化那样,在损失函数后面加正则项,梯度还是那样算,但是一顿算之后,权重衰减就变得和原来的“衰减”不太相同了。没有人保证在一顿算之后,权重更新的公式还是权重衰减的。所以 [3] 提出直接在权重更新的公式上面加上更新项,这样才符合权重衰减的名字嘛。Pytorch 中 Adam 的 weight decay 用的是 L2 正则化,AdamW 是 [3] 提出的方法。链接 [2] 对这个话题进行了一些讨论,可以看看。

学习率衰减

Pytorch 中提供了调整学习率的方法。

  • 可以使用 ExponentialLR 来使到学习率指数衰减,每次学习率乘以一个倍数。
  • 可以用 ReduceLROnPlateau,在训练几个 epoch 之后,如果仍然不提高,那么将衰减学习率,使其可以达到局部最小。

学习率

学习率衰减的本质,其实是一种调整学习率的策略,将学习率往小的方向调整。抛开学习率衰减,我在查阅资料的过程中,还发现了周期性学习率(Cyclical Learning Rate)这个东西。在整个学习的过程中不断调整学习率,学习率在周期函数上变化,时大时小,属于一种炼丹小技巧。CLR 的论文说可以避免再微调和减少训练的 epoch。[5]

学习率衰减和 Adam

Adam 自己就是会动态改变学习率的,那我们还需要学习率衰减吗?

可以用,炼丹小技巧 +1。

[6] 指出,设置了学习率的 Adam,可以保证 Adam 每个参数的更新的时候,不会超过这个上界。使用学习率衰减来减小更新的步长。

总结

查阅完资料,总结了一下之后,我发现,这 TM 就是两个东西,完全不同的两个东西。一个是为了防止过拟合,一个就是为了过拟合啊!

参考链接

[1] https://stats.stackexchange.com/questions/29130/difference-between-neural-net-weight-decay-and-learning-rate
[2] https://towardsdatascience.com/why-adamw-matters-736223f31b5d
[3] https://arxiv.org/abs/1711.05101
[4] https://machinelearningmastery.com/how-to-reduce-overfitting-in-deep-learning-with-weight-regularization/
[5] https://zhuanlan.zhihu.com/p/54745666
[6] https://stackoverflow.com/questions/39517431/should-we-do-learning-rate-decay-for-adam-optimizer
[7] https://pytorch.org/docs/stable/optim.html#:~:text=adjust learning rate-,torch.optim.lr_scheduler,-provides several methods

标签:权重,学习,正则,Adam,https,衰减
来源: https://www.cnblogs.com/zzk0/p/15056312.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有