首先要了解Momentum概念:
借用了物理中的动量概念,它模拟的是物体运动时的惯性,即更新的时候在一定程度上保留之前更新的方向,同时利用当前batch的梯度微调最终的更新方向。这样一来,可以在一定程度上增加稳定性,从而学习地更快,并且还有一定摆脱局部最优的能力。
BGD(Batch Gradient Descent):会陷入minibatch-loss的奇点
SGD(随机梯度下降):不会陷入minibatch-loss的奇点,但走的路径比较曲折(震荡),尤其是batch比较小的情况下。
SGDM(SGD with Momentum)
RMSProp:在Adagrad基础上借鉴Momentum。Adagrad会累加之前所有的梯度平方,而RMSprop仅仅是计算对应的平均值,因此可缓解Adagrad算法学习率下降较快的问题。
Adam(训练出很多经典模型,一直未被新的超越):SGDM+RMASProp
Adam下降的比较快SGDM后期比较稳:前期用Adam后期用SGDM:SWATS
AMSGrad,AdaBound:改进Adam,用一些方法是学习率不会一会儿太大或太小,使其比较稳一些。
Cyclical LR,SGDR:改进SGDM,将学习率设为一大一小周期性变化(原本为越来越小)
神经网络的Warm up机制
warm up的意义在于,在模型训练的初始阶段:该模型对数据还很陌生,需要使用较小的学习率慢慢学习,不断的修正权重分布,如果一开始就使用很大的学习率,方向正确了影响还不大,但是一旦训偏了,可能后续需要很多个epoch才能拉回来,甚至拉不回来,直接导致过拟合。
中间阶段,当使用较小的学习率学习了一段时间后,模型已经把每批数据都看个几遍了,形成了一些先验知识,这时候就可以使用较大的学习率加速学习,前面学习到的先验知识可以使模型的方向正确。
decay阶段:模型训练到一定阶段后,该模型学习到的分布已经大体固定,需要学习的“新知识”较少,这时候如果继续沿用很大的学习率,可能会破坏模型权重分布的稳定性。
Adam need warm up
RAdam:SGDM to RAdam(当vt〈4时不可用,所以先用SGDM)
SWATS:Adam to SGDM(Adam前期的快和SGDM后期的稳)
Lookahead:k step forward, 1 step back