学习率是深度学习中一个很重要的超参,通过调节学习率可以提高模型的精度,在模型训练的过程中,如果确定数据和代码都没有问题,但是loss不下降,acc也不上升或者为0,这种情况就要考虑学习率。直白来说就是通过调节不同大小的学习率对网络进行测试,这是最直接有效的方式。那么详细来说要怎么调节学习率呢?
对于一些简单的模型,我们可以通过数学推导等方式估算出最佳学习率,但是对于一些复杂模型胡总复杂大量的数据,往往不能通过推到估算学习率,最好的方式便是调节学习率进行观察和估计。
学习率就是上述公式中的a。我们都知道深度学习的模型训练其实就是一个函数fx在不断的通过求导寻找函数最优解的过程,而这个过程可以形象的比喻成人在山顶往山下走的过程,我们要找到一个斜率最高的也就是下降最快的路线作为最优路线,而学习率可以看成我们在最优路线上走的每一步的步伐,如果这个步伐过快,我们很有可能错过最低点,如果过小那么下山的速度会很慢,但是这个有更大的概率走到最低点(最优解)。
一般的训练策略是开始使用大的学习率然后随着模型的拟合不断调小学习率,使模型达到最优解。但是这不适用于所有情况。如果遇到loss,acc不变的问题,那么最好的方式还是手动去调节学习率观察模型拟合的情况。
关于学习率有一篇
Cyclical Learning Rates for Training Neural Networks
这篇文章是通过实验分析了如果调节学习率。
文章提出:首先设置一个十分小的学习率,在每个epoch之后增大学习率,并记录好每个epoch的loss或者acc,迭代的epoch越多,那被检验的学习率就越多,最后将不同学习率对应的loss或acc进行对比。
上图是论文中的实验结果,最小学习率是0,最大学习率是0.02,在大概0.01的位置,模型一开始就收敛的很好,因此可以把初始学习率选择为0.01。
要注意一点,选择学习的时候,是从小到大,因为当学习率小的时候对loss影响不会很大,并且学习率比上一轮大,可以看做是在原始数据进行更新,
在训练一定epoch之后,都会对学习率进行衰减,从而让模型收敛得更好。学习率衰减有以下三种方式:
在0.005的位置,开始出现了acc的负增长之后并趋于平缓,这个点即可作为max_lr,base_lr通常是设置为max_lr的1/3或1/4,因此0.001可以作为base_lr。