【机器学习】PyTorch如何选择最优初始学习率

众所周知,机器学习尤其是现在的深度学习,大量的工作都集中在调参上。一个模型能否很好的解决问题,调参占了很大的比重。而学习率又是模型众多超参数中最重要和最容易调节的一个。

1.什么是学习率

目前深度学习优化的基本思想是梯度下降法,已经有很多优秀的且模块化的梯度下降算法可以直接使用,比如最常用的SGD、Adam和RMSProp等,所有这些算法都要求使用者设定学习率,因为每个特殊的问题都有一个不同的最优学习率,必须根据实际情况来调节。

学习率代表了权重参数在逆梯度方向上调节的步长。学习率越小则模型效果越好,但是会带来极慢的速度并且会陷入局部最优。所以我们需要增大学习率,但是学习率过大又会导致函数无法收敛,或者跳出最优点,是的模型训练效果变得更差。因此选取一个合适的学习率是训练深度学习模型的第一步。

吴恩达深度学习课程中的学习率介绍

​ 吴恩达深度学习课程中的学习率介绍

我们需要知道的是开始的学习率是较大的,因为初始化的权重离最优值较远。随着训练的进行,学习率是一个逐渐减小的状态。

2.如何选择最优的学习率

首先想到的就是一个笨方法,不断的测试不同数量级的学习率,如0.1、0.01等,每次减少或者增大一个到两个数量级。当学习率较大的时候,loss值不会减少。逐渐降低学习率,你会发现loss在开始的几个迭代开始下降,那这个学习率将是你能设置的上限,一般情况下会降低一到两个数量级来使用,因为训练的越多,权重的更新需求更细微。

那么怎样才能更用一个更聪明的方法来选择初始学习率,文章 “Cyclical Learning Rates for Training Neural Networks” 介绍了一种不错的方法:从0开始,每经过一个迭代就增加学习率。记录每个迭代的loss。

img

会得到上图的曲线,然后我们选择下降最快的一个区间,可以看到该图是0.01左右。

另一种方法是计算损失函数关于迭代次数的偏导数。然后以学习率为横轴,变化率为纵轴画图。

img

用简单移动平均来平滑一下,得到下图。

img

寻找最小值所在点,即0.01附近。

实现

感谢Jeremy Howard团队开发的pytorch工具包-fast.ai

理论上使用两行代码即可完成。使用的是第一种方法。(没有说明文档,不知道怎么用,日后完善)

learn.lr_find()
learn.sched.plot_lr()
  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值