深度学习学习率对模型训练的影响


在其他笔记中我们讲述了数据, 模型的深度, 宽度对深度学习模型性能的影响, 这一次讲述一下 学习率和batchsize对模型性能的影响,在实践中这两个参数往往一起调整。

1. 学习率和batchsize的重要性

目前深度歇息模型多采用批量随机梯度下降算法进行优化, 随机梯度下降算法的原理如下:

w t + 1 = w t − η 1 n ∑ x ∈ β Δ l ( x , w t ) w_{t+1} = w_t - \eta\frac{1}{n}\sum_{x\in \beta}\Delta l (x, w_t) wt+1=wtηn1xβΔl(x,wt)

n是批处理(batchsize), η \eta η是学习率。 上式可以直到, 这两个银子直接决定模型的权重更新, 从优化本身来看, 他们是影响模型性能收敛最重要的参数.

学习率直接影响模型的收敛状态, batchsize则影响模型的泛化性能.

2. 学习率如何影响模型性能

通常我们需要选择合适的学习率才能进行学习, 要达到一个最佳值, 学习率的调整应该满足下面的条件, i代表第i次更新:

∑ i = 1 ∞ ϵ i = ∞ , ∑ i = 1 ∞ ϵ i 2 < ∞ \sum_{i=1}^{\infty}\epsilon_i=\infty,\\ \sum_{i=1}^{\infty}\epsilon_i^2<\infty i=1ϵi=,i=1ϵi2<

第一个式子决定了不管初始状态离优化状态多远, 总可以收敛. 第二个式子约束了学习率随着训练进行有效地降低, 保证收敛稳定性, 各种自适应学习率本质上就是不断在调整各个时刻的学习率.

学习率决定了权重更迭的步长, 因此是一个十分敏感的参数, 他对模型性能的影响体现在两个方面: 第一个是出是学习率的大小, 第二个是学习率的变化方案.

2.1 初始学习率大小对模型性能的影响

初始学习率肯定有一个最优值, 过大则导致模型不收敛, 过小则导致模型收敛的特别慢或者无法学习, 下图是不同大小的学习率:

找最佳学习率有个简单的方法 , 即从小到大训练模型, 然后几率损失的变化, 通常会几率到这样的曲线:
图片
随着学习率的增加, 损失会慢慢变小, 而后增加, 而最佳的学习率就可以通过从其中损失最小的区域选择.

2.2 学习率变化策略对模型性能的影响

学习率在模型的训练过程中很少不变的, 通常会有两个方式对学习率进行更改:

  1. 预设规则学习率变化法
  2. 自适应学习率变换方法
2.2.1 预设规则学习率变化法

常见的策略包括: fixed, setp, exp, inv, multistep, poly, sigmoid等
从各个学者的结果上看:

  • step,multistep方法收敛效果最好, 这也是我们常用他们的原因. 虽然学习率的变化是最离散的, 但是并不影响模型收敛到比较好的结果.
  • 其次是exp, poly. 她们能取得与step, multistep相当的结果, 也是因为学习率比较好的速率下降, 虽然变化更加平滑, 但是结果也未必能胜过step和multistep方法, 在很多研究中都得到过验证, 离散的学习率变更策略不影响模型的学习.
  • inv 和 fixed的收敛结果最差. 因为fixed 使用了较大的学连续梁, 而inv方法学习率下降过程太快.
2.2.2 自适应学习率变化法

自适应学习率策略以Adagrad, Adam等方法代表. 具体可以查看该网页: https://zhuanlan.zhihu.com/p/57860231

2.3 小结

如果经验不够, 最好考虑使用Adam系列方法.

3. batchsize如何影响模型性能

模型对batchsize虽然没有学习率那么敏感, 但是进一步提高模型性能上, batchsize会变成一个非常关键的参数

3.1 大的batchsize减少训练时间, 提高稳定性

这是肯定的, 同样的epoch数目, 大的batchsize需要的batch数目减少了, 所以可以减少训练时间. 另外, 大的batchsize梯度的计算更加稳定, 因为模型训练曲线会更加平滑. 在微调时, 大的batchsize可能会取得更好的结果.

3.2 大的batchsize泛化能力下降

在一定范围内, 增加batchsize有助于收敛的稳定性, 但是随着batchsize的增加, 模型的性能会下降.
大的batchsize收敛到sharp minimum, 而小的batchsize会收敛到flat minimum, 后者具有更好的泛化能力. 如下图, 两个的区别是变化的趋势, 一个快一个慢, 造成这个现象的主要原因是小的batchsize带来的噪声有助于逃离sharp minimum.
图片
大的batchsize性能下降是因为训练时长不够, 本质上并不少batchsize的问题.

3.3 小结

batchsize在变化很多时, 会降低模型的泛化能力. 模型的性能随着batchsize通常没有学习率敏感.

4. 学习率和batchsize的关系

通常当我们增加batchsize为原来的N倍时, 要保证经过同样的样本后更新的权重相等,按照线性随访规则, 学习率应该增加为原来的N倍. 但是如果保证权重的方差不变, 则学习率应该增加为原来的sqrt(N)倍, 目前这两种策略都被研究过, 使用前者的多.
衰减学习率可以通过增加batchsize来实现类似的效果. 从各个学者的研究中发现, 从SGD的权重更新式子看出两者是等价的.
对于一个固定的学习率, 存在一个最优的batchsize能够最大化测试精度. 这个batchsize和学习率以及训练集大小正相关.
对此实际上有两个建议:

  • 如果增加了学习率, 那么batchsize最好也跟着增加, 这样收敛更稳定.
  • 尽量使用大的学习率, 因为很多研究都表明更大的学习率有利于提高泛化能力. 如果真的要衰减, 可以尝试其他方法, 比如增加batchsize, 学习率对模型的以你选哪个真的很大, 慎重调整.

总结

学习率和batchsize是影响模型性能极其重要的两个参数, 慎重对待.
对于学习率算法, 可以选择Adam等自适应学习率策略线训练看看收敛结果, 再考虑使用SGD等算法进一步提高性能.
对于batchsize, 大部分人不会使用成千上万的batchsize, 因此不用担心模型性能的下降, 用大一点的batchsize(64, 128等), 这样需要迭代的次数更少, 结果也更稳定.

  • 11
    点赞
  • 108
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星空下0516

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值