深度学习100问-11:什么是学习率衰减?

深度学习100问

Author:louwill

Machine Learning Lab

     

     在深度学习炼丹过程中,一项关键的工作就是调参。比如说参数初始化策略、batch size的选择、使用哪种激活函数和优化器等等。其中优化器的学习率的设置是一个重要调参步骤。

这里咱们单独把优化器中的学习率拎出来,因为学习率是一个神经网络优化的关键参数。学习率即步长,它控制着算法优化的速度。

对于一个有经验的炼丹师而言,很少会在训练过程中使用一成不变的学习率。使用的学习率过大,虽然在算法优化前期会加速学习,使得损失能够较快的下降,但在优化后期会出现波动现象以至于不能收敛。如果使用的学习率偏小,那么极有可能训练时loss下降得很慢,算法也很难寻优。

     所以,一个很自然的策略就是在训练过程中使用动态的学习率机制。在算法优化的前期,我们使用较大的学习率,使得算法能够以较快的速度下降,而在优化的后期,逐步减小学习率的值,这样算法更容易收敛,得到一个较优的解。

     我们在keras中使用常数学习率:

keras.optimizers.SGD(lr=0.1, momentum=0.0, decay=0.0, nesterov=False)

     使用常数学习率的SGD优化器基于cifar-10训练过程如图1所示。可以看到整个过程出现了较大的波动。

640?wx_fmt=png

     所谓动态的学习率策略也就是我们所说学习率衰减,常见的衰减策略包括基于时间的衰减、指数衰减、多项式衰减、余弦衰减等方法。

     基于时间的衰减如下式所示。衰减的学习率等于初始化的学习率除以衰减率与迭代次数的乘积。

640?wx_fmt=png

     同样我们可以在keras中直接设置基于时间的衰减策略:

learning_rate = 0.1	
decay_rate = learning_rate / epochs	
momentum = 0.8	
sgd = SGD(lr=learning_rate, momentum=momentum, decay=decay_rate, nesterov=False)

     对比图1效果如图2所示:

640?wx_fmt=png

     相较于图1的常数学习率,基于时间调整的动态学习率机制的训练曲线明显要平缓了许多,不会有太大的波动。

     再来看看指数衰减。指数衰减的更新规则如下式所示:

640?wx_fmt=png

    我们可以先定义一个指数衰减函数,然后将这个函数传入到keras的LearningRateScheduler回调函数中。使用LearningRateScheduler函数,我们可以自定义指数衰减函数。

def exp_decay(epoch):	
   initial_lrate = 0.1	
   k = 0.1	
   lrate = initial_lrate * exp(-k*t)	
   return lrate	
   	
lrate = LearningRateScheduler(exp_decay)

     基于指数衰减策略的训练过程如图3所示:

640?wx_fmt=png

     训练过程中学习率的指数衰减过程:

640?wx_fmt=png

参考资料:

https://towardsdatascience.com/learning-rate-schedules-and-adaptive-learning-rate-methods-for-deep-learning-2c8f433990d1

往期精彩:

640?wx_fmt=png


一个算法工程师的成长之路

640?wx_fmt=jpeg

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值