训练神经网络—学习率及batchSize
本文参考:
炼丹手册——学习率设置、
【AI不惑境】学习率和batchsize如何影响模型的性能?、
PyTorch 学习笔记(八):PyTorch的六个学习率调整方法
1、学习率(Learning Rate)
定义
学习率是梯度下降公式中的超参数,代表了在训练神经网络时,随时间推移,信息累积的速度。学习率是最影响性能的超参数之一,选择最优学习率是很重要的,因为它决定了神经网络是否可以收敛到全局最小值,不同学习率对比如下图:
从上面两个图中我们可以看出:
- 蓝线:若学习率设置的过小,训练收敛较慢,此时需要更多的epoch才能到达一个较好的局部最小值。
- 绿线:若学习率设置的较大,训练可能会在接近局部最优点附近震荡,无法达到局部最优点。
- 黄线:若学习率设置的特别大,那么会在山间“跳跃”难以下山。
- 红线:合适的学习率。
调整策略
在实际中我们可以在开始时大跨步下山,后期使用小学习率来精耕细作,我们可以在训练初期采用大学习率,后期采用小学习率。想要达到这个目的有两种策略:人工调整或策略调整。
人工调整策略
一般是根据我们的经验值来调整,通过实践我也发现,在整个神经网络的训练过程种学习率不可能一直是同一个固定的值,初期我会将学习率设置为0.1或0.01以观察训练阶段的train_loss,具体遵循以下准则:
①如果开始时train_loss出现梯度爆炸,说明初始学习率偏大,这样就缩小学习率,再次运行。
②如果开始时train_loss下降缓慢,说明初始学习率偏小,我们可以扩大学习率,再次运行。
③在训练过程中如果发现train_loss下降缓慢或者出现震荡现象,可能进入了局部最小值点或者鞍点附近。若为局部最小值附近,需要降低学习率,精耕细作。如果处于鞍点附近,需要适当增加学习率跳出鞍点。
策略调整学习率
策略调整学习率包括固定策略的学习衰减和自适应学习率衰减。由于学习率的变化,在相似训练数据下训练参数更新速度也会放慢,相当于减小了训练数据对模型训练结果的影响,编程中,我们通常是以epoch为单位衰减学习率。
固定学习率衰减
分段减缓
指定每N轮学习率发生变化(如减半)或者在不同训练阶段设置不同的学习率,便于精细的调参。
分数减缓
将学习率随着epoch的轮数以分数的形式进行衰减,具体公式如下:
α = 1 ( 1 + d e c a y _ r a t e ∗ e p o c h ) ∗ l r \alpha =\frac{1}{\left( 1+decay\_\mathrm{rate}*epoch \right)}*lr α=(1+decay_rate∗epoch)1∗