学习率是个抽象又简单的概念,神经网络的学习率指的是神经网络对数据进行学习的速率。神经网络学习的过程就是权重更新的过程,权重更新公式如下,其中η表示学习率:
从公式中可以看出,更新权重的过程就是不断的修正θ参数的过程,而η可以影响θ变动的大小,也就是可以影响网络学习速率的大小。
学习率过大,在算法优化的前期会加速学习,使得模型更容易接近局部或全局最优解。但是在后期会有较大波动,甚至出现损失函数的值围绕最小值徘徊,波动很大,始终难以达到最优,如下图蓝色曲线所示。所以引入学习率衰减的概念,直白点说,就是在模型训练初期,会使用较大的学习率进行模型优化,随着迭代次数增加,学习率会逐渐进行减小,保证模型在训练后期不会有太大的波动,从而更加接近最优解,如下图中上面一条绿色曲线所示。
学习率的选取并没有成熟的理论,更多的时候是根据经验来选择。
学习率选择不当会造成神经网络:
1.学习过速度过慢
2.停止学习
3.陷入局部最优
4.无法找到最优解
在集成式机器学习类库Keras中,对优化器和学习率做了很好的封装,以至于很多人搞不清楚怎么设置学习率,怎么使用优化器,两者到底有什么区别。
不同的学习率对模型训练过程中的损失值loss影响如图所示,好的学习率可以使得模型的loss即下降的快,又能达到很低的值。
而设置不当的优化器,要么梯度下降的速度很慢,要么梯度反复震荡,或者陷入局部极值导致loss难以降低。
优化器(optimizer) 的主要功能是在梯度下降的过程中,使得梯度更快更好的下降,从而尽快找到目标函数的最小值。
学习率(LearningRate) 是优化器中会用到的一个重要的参数。
遇到这种情况通常可以通过适当降低学习率(learning rate)来实现。但是,降低学习率又会延长训练所需的时间。
学习率衰减(learning rate decay) 就是一种可以平衡这两者之间矛盾的解决方案。
学习率衰减的基本思想是:学习率随着训练的进行逐渐衰减。
学习率衰减基本有两种实现方法:
线性衰减。例如:每过5个epochs学习率减半。
指数衰减。例如:随着迭代轮数的增加学习率自动发生衰减,每过5个epochs将学习率乘以0.9998。
具体算法如下:
decayed_learning_rate=learning_rate*decay_rate^(global_step/decay_steps)
其中decayed_learning_rate为每一轮优化时使用的学习率,learning_rate为事先设定的初始学习率,decay_rate为衰减系数,decay_steps为衰减速度。