为什么要调整学习速率?
随着时间的推移,调整学习速率与根据道路条件对汽车的速度进行调整相似。在高速公路等平稳宽阔的道路上,我们可以提高速度(学习速率),但是在狭窄的丘陵或山谷道路上,我们必须放慢速度。此外,我们不希望在高速公路上行驶得太慢,否则我们需要太长时间才能到达目的地(由于参数不正确而导致更长的训练时间)。同样,我们也不想在丘陵和狭窄的道路上(如优化损失函数曲面的沟壑)驾驶太快,因为我们很容易失去对汽车的控制(陷入抖动或产生太多的反弹,我们几乎不能做任何改进)或跳过目的地(最佳值)。
从相同的来源,可以通过在数据的子集上训练网络来获得一个不错的初始学习速率。理想的策略是从一个很大的学习速率开始,除以一半,直到损失值不再分歧(发散)。接近训练结束时,学习速率的衰减应该在100倍以上。这种衰减使学习到的网络模型可以抵抗随机波动,这中随机波动可能会扭转学习(陷入发散状态)。我们将从一个小的LR开始,测试一小组数据,并选择适当的值。
衰减学习速率
非自适应学习速率可能不是最佳的。学习速率衰减可以通过每几个时间周期做一些较小的常数因子的衰减,或通过指数衰减来实现,指数衰减采用几个时间周期的指数的数学形式来实现。“衰减”通常被认为是一个消极的概念,同时,目前情况下,学习速率的衰减也是消极的:它指的是学习速率下降的程度。然而,这种衰减的结果实际上是我们非常想要的。例如在一辆车上,我们降低速度以适应道路和交通状况;这种减速可以被理解为汽车速度的“衰减”。同样,我们从衰减学习速率得到好处,以适应梯度。
降低学习速率是必要的,因为在训练过程中,较高学习速率很可能陷入局部最小值。以交通情况为例,将局部最优值视为高速票,通行费或交通灯,或交通拥堵,这些情况会增加到达目的地所需的时间。不可能完全避免所有的交通信号灯和通行费,但是在驾驶时我们更喜欢一条最佳的路线。同样,在训练中,我们希望避免梯度的曲折反弹,同时寻找最优路线,并且喜欢在该路径上的训练。理想情况下,我们不希望加速得太多,因为我们会得到一张超快的车票(跳进一个局部最优值并卡住)。同样的比喻也适用于学习速率。
动量是一种自适应学习速率方法的参数,允许沿浅方向使用较高的速度,同时沿陡峭方向降低速度前进。这种动量被定义为“经典动量”,其对速度进行校正,然后在速度方向上进行大跳跃。动量有助于加速或减速学习速率以适应梯度的变化,最终导致网络学习速率的变化而不是其在损失函数表面上的位置的变化。动量使学习到的网络更能抵抗输入数中的噪声和随机性。
将学习速率视为超参数的其他更新规则包括:
· AdaGrad更新规则,Duchi等人,2011年。基于每个维度历史的均方误差的和,为每一个维度的梯度增加了一个初度变换的规则。
· RMSProp自适应学习速率法,Tieleman和Hinton,2012年。保持每个权重的平方梯度的移动平均值以规范化(normalize)当前梯度。RMSProp增加了对波动和随机噪声的更强的抵抗能力。
· Adam,Kingma和Ba,2014年,引入了偏差矫正策略以补偿零初始化带来影响。
· rprop,只使用梯度的符号来对每个权重的步长自适应调整。这不适用于mini-batch训练。
除了这些规则以外,还有基于牛顿的更新规则的二阶方法,二阶的方法计算量非常大。然而,二阶方法不将学习速率视为超参数;由于它们的计算需求很高,所以很少用于大规模的深度学习系统。
图1显示了在类似超参数设置条件下,不同优化技术的对比:
从本质上讲,我们的目的不是衰减,而是要通过衰减跳入一个正确的地方。必须选择性地增加或减少学习速率,为了达到一个全局最优值或者是期望的目标值。不要害怕这个,因为我们经常要做一遍又一遍。