1、动量(momentum)
简述
一,优化器中的Momentum 主要是在训练网络时,最开始会对网络进行权值初始化,但是这个初始化不可能是最合适的;因此可能就会出现损失函数在训练的过程中出现局部最小值的情况,而没有达到全局最优的状态。
momentum的出现可以在一定程度上解决这个问题。动量来源于物理学,当momentum越大时,转换为势能的能量就越大,就越有可能摆脱局部凹区域,从而进入全局凹区域。momentum主要是用于权值优化。
二,bn层中的Momentum
??这个momentum参数不同于优化器optimizer类中使用的momentum参数和momentum的传统概念。从数学上讲,这里运行统计数据的更新规则是 :
xnew?= (1-momentum) * x + momentum * xt
之前学习的用梯度更新参数w ww的公式:
其中α是学习率。现用
?来代替。即相当于原式子又减去了一个这一项。其中z 表征了上次更新的方向和大小,而? f ( w )则是梯度,所以新的式子综合考虑了梯度下降的方向和上次更新的方向,用β 来决定了惯性的大小。
?优点
(1)不仅考虑了当前的梯度下降的方向,还综合考虑了上次更新的情况,使得学习器学习过程的幅度和角度不会太尖锐,特别是遇到来回抖动的情况时大有好转。 (2)当遇到局部极小值时,因为设置了惯性,所以可能可以冲出局部最小值,这样就更可能找到一个全局最小值。
如图分别表示没有和有动量参与的梯度更新:
参考博客:
动量,学习率衰减,early stopping,Drop out,_潜鲸的博客-CSDN博客
【PyTorch学习笔记】15:动量(momentum),学习率衰减_LauZyHou的笔记-CSDN博客_momentum取值
2、Learning Rate Decay?
?在使用梯度更新参数时,学习率如果选取太小的话,学习过程会很慢;’如果学习率选取太大,那么很可能会出现来回抖动的情况,这时最终的模型可能很难收敛,而且看起来和"梯度弥散"的情况也很像(但其实不是)。
选取合适的固定的学习率是很难的, 可以在训练的一开始选取比较大的学习率加快训练过程,然后逐渐让其衰减到比较小的值,最终让模型收敛。
|