学习率和batchsize如何影响模型的性能?

【AI不惑境】学习率和batchsize如何影响模型的性能?

96 

你们好,这是专栏《AI不惑境》的第四篇文章,讲述学习率以及batchsize与模型性能的关系。算法

进入到不惑境界,就是向高手迈进的开始了,在这个境界须要本身独立思考。若是说学习是一个从模仿,到追随,到创造的过程,那么到这个阶段,应该跃过了模仿和追随的阶段,进入了创造的阶段。从这个境界开始,讲述的问题可能再也不有答案,更多的是激发你们一块儿来思考。函数

做者&编辑 | 言有三性能

前几期咱们讲述了数据,模型的深度,宽度对深度学习模型性能的影响,这一次咱们讲述学习率和batchsize对模型性能的影响,在实践中这两个参数每每一块儿调整。学习

 

1 为何说学习率和batchsize测试

目前深度学习模型多采用批量随机梯度降低算法进行优化,随机梯度降低算法的原理以下,优化

 

n是批量大小(batchsize),η是学习率(learning rate)。可知道除了梯度自己,这两个因子直接决定了模型的权重更新,从优化自己来看它们是影响模型性能收敛最重要的参数。rest

学习率直接影响模型的收敛状态,batchsize则影响模型的泛化性能,二者又是分子分母的直接关系,相互也可影响,所以这一次来详述它们对模型性能的影响。orm

 

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

一般咱们都须要合适的学习率才能进行学习,要达到一个强的凸函数的最小值,学习率的调整应该知足下面的条件,i表明第i次更新。get

 

第一个式子决定了无论初始状态离最优状态多远,老是能够收敛。第二个式子约束了学习率随着训练进行有效地下降,保证收敛稳定性,各类自适应学习率算法本质上就是不断在调整各个时刻的学习率。

学习率决定了权重迭代的步长,所以是一个很是敏感的参数,它对模型性能的影响体如今两个方面,第一个是初始学习率的大小,第二个是学习率的变换方案。

2.一、初始学习率大小对模型性能的影响

初始的学习率确定是有一个最优值的,过大则致使模型不收敛,太小则致使模型收敛特别慢或者没法学习,下图展现了不一样大小的学习率下模型收敛状况的可能性,图来自于cs231n。

 

那么在不考虑具体的优化方法的差别的状况下,怎样肯定最佳的初始学习率呢?

一般能够采用最简单的搜索法,即从小到大开始训练模型,而后记录损失的变化,一般会记录到这样的曲线。

 

随着学习率的增长,损失会慢慢变小,然后增长,而最佳的学习率就能够从其中损失最小的区域选择。

有经验的工程人员经常根据本身的经验进行选择,好比0.1,0.01等。

随着学习率的增长,模型也可能会从欠拟合过分到过拟合状态,在大型数据集上的表现尤为明显,笔者以前在Place365上使用DPN92层的模型进行过实验。随着学习率的加强,模型的训练精度增长,直到超过验证集。

 

2.二、学习率变换策略对模型性能的影响

学习率在模型的训练过程当中不多有不变的,一般会有两种方式对学习率进行更改,一种是预设规则学习率变化法,一种是自适应学习率变换方法。

2.2.1 预设规则学习率变化法

常见的策略包括fixed,step,exp,inv,multistep,poly,sigmoid等,集中展现以下:

 

笔者以前作过一个实验来观察在SGD算法下,各类学习率变动策略对模型性能的影响,具体的结果以下:

 

从结果来看:

step,multistep方法的收敛效果最好,这也是咱们日常用它们最多的缘由。虽然学习率的变化是最离散的,可是并不影响模型收敛到比较好的结果。

其次是exp,poly。它们能取得与step,multistep至关的结果,也是由于学习率以比较好的速率降低,虽然变化更加平滑,可是结果也未必能赛过step和multistep方法,在这不少的研究中都获得过验证,离散的学习率变动策略不影响模型的学习。

inv和fixed的收敛结果最差。这是比较好解释的,由于fixed方法始终使用了较大的学习率,而inv方法的学习率降低过程太快。

关于以上内容的完整分析结果,能够查看往期文章:

【模型训练】如何选择最适合你的学习率变动策略

从上面的结果能够看出,对于采用非自适应学习率变换的方法,学习率的绝对值对模型的性能有较大影响,研究者常使用step变化策略。

目前学术界也在探索一些最新的研究方法,好比cyclical learning rate,示意图以下:

 

实验证实经过设置上下界,让学习率在其中进行变化,能够在模型迭代的后期更有利于克服由于学习率不够而没法跳出鞍点的状况。

肯定学习率上下界的方法则可使用LR range test方法,即便用不一样的学习率获得精度曲线,而后得到精度升高和降低的两个拐点,或者将精度最高点设置为上界,下界设置为它的1/3大小。

 

SGDR方法则是比cyclical learning rate变换更加平缓的周期性变化方法,以下图,效果与cyclical learning rate相似。

 

2.2.2 自适应学习率变化法

自适应学习率策略以Adagrad,Adam等为表明,咱们在公众号已经说得很是多了,这里就再也不作原理上的讲述,能够查看往期介绍:

【AI初识境】为了围剿SGD你们这些年想过的那十几招

原理上各类改进的自适应学习率算法都比SGD算法更有利于性能的提高,但实际上精细调优过的SGD算法可能取得更好的结果,在不少的论文[3-4]中都获得过验证,咱们在实验中也屡次证实过这一点,以下图。

 

2.三、小结

不考虑其余任何因素,学习率的大小和迭代方法自己就是一个很是敏感的参数。若是经验不够,仍是考虑从Adam系列方法的默认参数开始,若是经验丰富,能够尝试更多的实验配置。

 

3 Batchsize如何影响模型性能?

模型性能对batchsize虽然没有学习率那么敏感,可是在进一步提高模型性能时,batchsize就会成为一个很是关键的参数。

3.1 大的batchsize减小训练时间,提升稳定性

这是确定的,一样的epoch数目,大的batchsize须要的batch数目减小了,因此能够减小训练时间,目前已经有多篇公开论文在1小时内训练完ImageNet数据集。另外一方面,大的batch size梯度的计算更加稳定,由于模型训练曲线会更加平滑。在微调的时候,大的batch size可能会取得更好的结果。

3.2 大的batchsize泛化能力降低

在必定范围内,增长batchsize有助于收敛的稳定性,可是随着batchsize的增长,模型的性能会降低,以下图,来自于文[5]。

 

这是研究者们广泛观测到的规律,虽然能够经过一些技术缓解。这个致使性能降低的batch size在上图就是8000左右。

那么这是为何呢?

研究[6]代表大的batchsize收敛到sharp miminum,而小的batchsize收敛到flat mimimum,后者具备更好的泛化能力。二者的区别就在于变化的趋势,一个快一个慢,以下图,形成这个现象的主要缘由是大小的batchsize带来的噪声有助于逃离sharp mininum。

 

Hoffer[7]等人的研究代表,大的batchsize性能降低是由于训练时间不够长,本质上并很多batchsize的问题,在一样的epochs下的参数更新变少了,所以须要更长的迭代次数。

3.3 小结

batchsize在变得不少时,会下降模型的泛化能力。在此之下,模型的性能变换随batch size一般没有学习率敏感。

 

4 学习率和batchsize的关系

一般当咱们增长batchsize为原来的N倍时,要保证通过一样的样本后更新的权重相等,按照线性缩放规则,学习率应该增长为原来的N倍[5]。可是若是要保证权重的方差不变,则学习率应该增长为原来的sqrt(N)倍[7],目前这两种策略都被研究过,使用前者的明显居多。

从两种常见的调整策略来看,学习率和batchsize都是同时增长的。学习率是一个很是敏感的因子,不可能太大,不然模型会不收敛。一样batchsize也会影响模型性能,那实际使用中都如何调整这两个参数呢?

研究[8]代表,衰减学习率能够经过增长batchsize来实现相似的效果,这实际上从SGD的权重更新式子就能够看出来二者确实是等价的,文中经过充分的实验验证了这一点。

研究[9]代表,对于一个固定的学习率,存在一个最优的batchsize可以最大化测试精度,这个batchsize和学习率以及训练集的大小正相关。

对此其实是有两个建议:

若是增长了学习率,那么batch size最好也跟着增长,这样收敛更稳定。

尽可能使用大的学习率,由于不少研究都代表更大的学习率有利于提升泛化能力。若是真的要衰减,能够尝试其余办法,好比增长batch size,学习率对模型的收敛影响真的很大,慎重调整。

关于学习率和batch size此次就说这么多,感兴趣能够自行拓展阅读。

参考文献

[1] Smith L N. Cyclical learning rates for training neural networks[C]//2017 IEEE Winter Conference on Applications of Computer Vision (WACV). IEEE, 2017: 464-472.

[2] Loshchilov I, Hutter F. Sgdr: Stochastic gradient descent with warm restarts[J]. arXiv preprint arXiv:1608.03983, 2016.

[3] Reddi S J, Kale S, Kumar S. On the convergence of adam and beyond[J]. 2018.

[4] Keskar N S, Socher R. Improving generalization performance by switching from adam to sgd[J]. arXiv preprint arXiv:1712.07628, 2017.

[5] Goyal P, Dollar P, Girshick R B, et al. Accurate, Large Minibatch SGD: Training ImageNet in 1 Hour.[J]. arXiv: Computer Vision and Pattern Recognition, 2017.

[6] Keskar N S, Mudigere D, Nocedal J, et al. On large-batch training for deep learning: Generalization gap and sharp minima[J]. arXiv preprint arXiv:1609.04836, 2016.

[7] Hoffer E, Hubara I, Soudry D. Train longer, generalize better: closing the generalization gap in large batch training of neural networks[C]//Advances in Neural Information Processing Systems. 2017: 1731-1741.

[8] Smith S L, Kindermans P J, Ying C, et al. Don't decay the learning rate, increase the batch size[J]. arXiv preprint arXiv:1711.00489, 2017.

[9] Smith S L, Le Q V. A bayesian perspective on generalization and stochastic gradient descent[J]. arXiv preprint arXiv:1710.06451, 2017.

 

总结:

学习率和batchsize是影响模型性能极其重要的两个参数,咱们应该很是谨慎地对待。

对于学习率算法,能够选择Adam等自适应学习率策略先训练模型看看收敛结果,再考虑使用SGD等算法进一步提高性能。对于Batchsize,大部分人并不会使用几千上万的batchsize,所以也不用担忧模型性能的降低,用大一点(好比128)的batchsize吧,这样须要的迭代次数更少,结果也更加稳定。

相关文章
相关标签/搜索