强化学习过程中的学习速率
深度学习目前使用的是非常简单的一阶收敛算法,而梯度下降法,不管有多少自适应优化算法,本质上都是梯度下降法的各种变种,所以初始学习速率对深度网络的收敛起着决定性的作用。下面是梯度下降法的公式:
w := w - \alpha \frac{\partial}损失(w).
这里吗?\阿尔法?就是学习率。如果学习率太小,网损会下降很慢。如果学习率过大,参数更新的幅度会很大,导致网络收敛到局部最优,或者直接开始损耗增大。
Leslie N. Smith论文《训练神经网络的循环学习率》2015第3.3节描述了一种求初始学习率的优秀方法,推荐你阅读这篇论文,里面有一些很有启发性的学习率设定思路。
本文用这种方法来估计网络允许的最小和最大学习速率,我们也可以用它来寻找我们的最优初始学习速率。方法很简单。首先我们设定一个很小的初始学习率,比如1e-5。然后我们每批之后更新网络,增加学习率,统计每批计算的损失。最后可以画出学习的曲线和损失的曲线,从中可以找到最佳的学习率。
随着学习率从小到大增加的过程,网络的损耗也会从比较大的位置变化到比较小的位置,同时会增加,对应的情况是学习率太小,损耗下降太慢,学习率太大,损耗反而可能增加。从上图可以找到一个相对合理的初始学习率,0.1。
可以工作,因为小学习率对参数更新的影响和大学习率相比是很小的。比如第一次迭代,学习率是1e-5,更新了参数,然后第二次迭代,学习率变成了5e-5,再次更新参数。所以这一次的参数更新可以看作是在最原始的参数上进行的,后期学习率更高,参数更新了。正是因为这个原因,学习率设置应该从小到大改变,如果学习率设置反过来,从大到小,那么损失曲线就完全没有意义。