深度学习从0到1
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

3.4 学习率

学习率是人为设定的一个超参数,主要是在训练阶段用来控制模型参数调整的快慢。关于学习率,主要有3个要点需要注意:

(1)学习率η的取值范围一般为0~1;

(2)学习率太大,容易造成权值调整不稳定;

(3)学习率太小,模型参数调整太慢,迭代次数太多。

你可以想象一下在洗热水澡的时候:如果每次调节的幅度很大,那水温不是太热,就是太冷,很难得到一个合适的水温;如果一开始的时候水很冷,每次调节的幅度都非常小,那么需要调节很多次,花很长时间才能得到一个合适的水温。学习率的调整也是这样一个道理。图3.6表示不同大小的学习率对模型训练的影响。

图3.6 不同大小的学习率对模型训练的影响

图3.6中的纵坐标loss代表代价函数(Loss Function),在后面的章节中有更详细的介绍,这里我们可以把它近似理解为模型的预测值与真实值之间的误差。我们训练模型的主要目的就是为了降低loss值,减少模型的预测值与真实值之间的误差。横坐标epoch代表模型的迭代周期,把所有的训练数据都训练一遍可以称为迭代了一个周期。

从图3.6中我们可以看到,如果使用非常大的学习率(very high lr)来训练模型,loss会一直处于一个比较大的位置,模型不能收敛,这肯定不是我们想要的结果。如果使用比较大的学习率(high lr)来训练模型,loss会下降很快,但是最终不能得到比较小的loss,所以结果也不理想。如果使用比较小的学习率(low lr)来训练模型,模型收敛的速度会很慢,模型需要等待很长时间才能收敛。最理想的结果是使用合适的学习率(good lr)来训练模型,使用合适的学习率,模型的loss会下降得比较快,并且最后的loss也能够下降到一个比较小的位置,结果最理想。

看到这里大家可能会有一个疑问,学习率的值到底取多少比较合适?这个问题其实是没有明确答案的,需要根据建模的经验和测试才能找到合适的学习率。但学习率的选择也有一些小的技巧(Trick)可以使用,比如说最开始我们设置一个学习率为0.01,经过测试,我们发现学习率太小了,需要调大一点,那么我们可以改成0.03。如果0.03还需要调大,我们可以调到0.1。同理,如果0.01太大了,需要调小,那么我们可以调到0.003。如果0.003还需要调小,我们可以调到0.001。所以常用的学习率可以选择:

1,0.3,0.1,0.03,0.01,0.003,0.001,0.0003,0.0001...

当然,这也不是绝对的,其他的学习率的取值你也可以去尝试。