学习率调度器

当我们使用诸如梯度下降法等方式来训练模型时,一般会兼顾训练速度和损失(loss)来选择相对合适的学习率。但若在训练过程中一直使用一个学习率,训练集的损失下降到一定程度后便不再继续下降,而是在一定范围内震荡。其震荡原理如下图所示,即当损失函数收敛到局部极小值附近时,会由于学习率过大导致更新步幅过大,每步参数更新会反复越过极小值而出现震荡。

../../../_images/learning_rate_scheduler.png

学习率调度器定义了常用的学习率衰减策略来动态生成学习率,学习率衰减函数以epoch或step为参数,返回一个随训练逐渐减小的学习率,从而兼顾降低训练时间和在局部极小值能更好寻优两个方面。

下面介绍学习率调度器中相关的Api:


  • NoamDecay: 诺姆衰减,相关算法请参考 《Attention Is All You Need》 。 相关API Reference请参考 cn_api_paddle_optimizer_lr_NoamDecay

  • ExponentialDecay: 指数衰减,即每次将当前学习率乘以给定的衰减率得到下一个学习率。 相关API Reference请参考 cn_api_paddle_optimizer_lr_ExponentialDecay

  • NaturalExpDecay: 自然指数衰减,即每次将当前学习率乘以给定的衰减率的自然指数得到下一个学习率。 相关API Reference请参考 cn_api_paddle_optimizer_lr_NaturalExpDecay

  • InverseTimeDecay: 逆时间衰减,即得到的学习率与当前衰减次数成反比。 相关API Reference请参考 cn_api_paddle_optimizer_lr_InverseTimeDecay

  • PolynomialDecay: 多项式衰减,即得到的学习率为初始学习率和给定最终学习之间由多项式计算权重定比分点的插值。 相关API Reference请参考 cn_api_paddle_optimizer_lr_PolynomialDecay

  • PiecewiseDecay: 分段衰减,即由给定step数分段呈阶梯状衰减,每段内学习率相同。 相关API Reference请参考 cn_api_paddle_optimizer_lr_PiecewiseDecay

  • CosineAnnealingDecay: 余弦式衰减,即学习率随step数变化呈余弦函数周期变化。 相关API Reference请参考 cn_api_paddle_optimizer_lr_CosineAnnealingDecay

  • LinearWarmup: 学习率随step数线性增加到指定学习率。 相关API Reference请参考 cn_api_paddle_optimizer_lr_LinearWarmup

  • StepDecay: 学习率每隔一定的step数进行衰减,需要指定step_size。 相关API Reference请参考 cn_api_paddle_optimizer_lr_StepDecay

  • MultiStepDecay: 学习率在指定的step数时进行衰减,需要指定衰减的节点位置。 相关API Reference请参考 cn_api_paddle_optimizer_lr_MultiStepDecay

  • LambdaDecay: 学习率根据自定义的lambda函数进行衰减。 相关API Reference请参考 cn_api_paddle_optimizer_lr_LambdaDecay

  • ReduceOnPlateau: 学习率根据当前监控指标(一般为loss)来进行自适应调整,当loss趋于稳定时衰减学习率。 相关API Reference请参考 cn_api_paddle_optimizer_lr_ReduceOnPlateau