编者注:欢迎参考2017年9月17日至20日Siddha Ganju在旧金山召开的人工智能大会上的关于嵌入式深度学习的讲座。
更多人工智能内容请关注2018年4月10-13日人工智能北京大会。
学习速率是随着时间的推移神经网络里信息积累的速度。学习速率决定了神经网络达到(以及是否能达到)所需特定输出的最佳、最有利位置的速度。在原始随机梯度下降(SGD)中,学习速率与误差梯度的形状无关,因为它使用了一个与误差梯度无关的全局学习速率。
然而可以对原始SGD的更新规则进行许多修改,这些规则会将学习速率跟误差梯度的大小和方向关联起来。
为什么要将学习速率的可视化出来?
将随着时间变化的学习速率可视化与随着道路状况变化的汽车速度可视化是类似的。在高速公路等畅通宽阔的道路上,我们可以提高速度(学习速率),但是在狭窄的丘陵或山谷道路上,我们必须放慢速度。此外,我们不想在高速公路上行驶得太慢,否则我们将花费太长时间才能到达目的地(由于参数不当而导致更长的训练时间)。同样的,我们不想在丘陵和狭窄的道路上(就像优化损失函数表面的沟谷)开车太快,因为我们很容易失去对汽车的控制(陷入局部最小值,或因产生太多的反弹而几乎没有改进)或错过目的地(最优值)。
请记住,“…一个高学习速率… [表示]系统含有太多的动能,参数向量胡乱的弹跳从而不能落入损失函数的较深但较窄的地方”(请参阅Karpathy的cs231n课程笔记)。
基于相同的数据来源,可以通过在数据集的一个子集上训练网络来获得一个良好的初始学习速率估计。理想的策略是从一个很大的学习速率开始,逐次减半直到损失不再变化。在接近训练结束时,学习速率的衰减应在100倍左右或更高。这种衰减使学习好的网络能够抵抗可能使学习失败的随机波动。在这里,我们将会先选择一个小的学习速率在一个小的数据集上测试,并选择适当的值。
学习速率衰减
非自适应学习速率可能不是最佳的。学习速率的衰减可以通过每几个周期减少某个常数因子,或通过指数衰减来实现,指数可以采用每几个周期的指数的数学形式。“衰减”通常被认为是一个消极的概念,在当前的学习速率衰减案例中也是负面的:它指的是学习速率下降的程度。然而这种衰减的结果实际上是我们非常想要的。例如我们降低一辆车的速度以适应道路和交通条件,这种减速可以被理解为汽车速度的“衰减”。同样我们也能从衰减学习速率以适应梯度中获益。
降低学习速率是必要的,因为高的学习速率在进行迭代训练时很可能会落入局部最小值。想象这个局部最小值是一张超速罚单、一个通行费、交通信号灯或是交通拥挤——某些基本上会增加到达目的地的时间的东西。完全避免所有的交通信号灯和通行费是不可能的,但是会有一个我们喜欢的最优驾驶路径。同样的在模型训练中,我们希望寻找最佳路径时避免在梯度上的反复跳跃,并希望模型训练是沿着最佳路径的。理想情况下,我们不希望加速太快因为我们会因此得到一张超速罚单(陷入局部最小值并抛锚)。同样的比喻也适用于学习速率。
动量是一种自适应学习速率方法的参数,它允许以较高速度在平缓方向上移动,而在陡峭方向上降低速度。这种动量定义被认为是“经典动量”,它会对速度进行校正然后在速度方向上大跳跃移动。动量有助于根据梯度的变化加速或减速基础学习速率,将引起净学习速率的变化而不影响其在损失函数表面上的位置。动量使学习到的网络更能抵抗输入中的噪声和随机性。
将学习速率视为超参数的其他更新规则包括:
Duchi等人在2011年提出的AdaGrad,其增加了根据每个维度的历史平方和来缩放梯度的各个元素。
Tieleman和Hinton在2012年提出的RMSProp自适应学习速率,其保留了每个权重的平方梯度的移动平均值以正规化当前梯度。RMSProp增强了抵抗波动和随机噪声的能力。
<