深度学习神经网络训练中学习速率的配置
神经网络的权重不能用解析法计算。取而代之的是,必须通过称为随机梯度下降的经验优化过程来发现权重。
随机梯度下降法解决神经网络的优化问题具有挑战性,解的空间(权值集)可能由许多好解(称为全局最优解)以及容易找到但技能较低的解(称为局部最优解)组成。
在此搜索过程的每个步骤中对模型的变化量,或步长,称为“学习率”,它可能为你的神经网络提供了最重要的超参数来调整,以便在你的问题上实现良好的性能。
在本教程中,你将了解在训练深度学习神经网络时使用的学习率超参数。
完成本教程后,你将了解:
- 学习率控制神经网络模型学习问题的速度或速度。
- 如何使用合理的默认值配置学习速率、诊断行为和开发敏感度分析。
- 如何通过学习速率时间表、动量和自适应学习速率进一步提高性能。
教程概述
本教程分为六个部分,它们是:
- 学习率是多少?
- 学习速度的影响。
- 如何配置学习速率。
- 为学习过程增添动力。
- 使用学习速度表。
- 适应性学习率。
学习率是多少?
深度学习神经网络采用随机梯度下降算法进行训练。
随机梯度下降是一种优化算法,它使用训练数据集中的示例估计模型当前状态的误差梯度,然后使用误差反向传播算法(简称反向传播算法)更新模型的权重。
在训练期间更新权重的量称为步长或“学习率”。
具体地说,学习率是在神经网络的训练中使用的可配置的超参数,其具有小的正值,通常在0.0和1.0之间的范围内。
…学习率,决定步长大小的正标量。
学习率通常使用小写希腊字母eta (n)表示。
在训练期间,误差的反向传播估计网络中节点的权重负责的误差量。不是用全量更新权重,而是按学习率进行缩放。
这意味着传统上常见的默认值0.1的学习率将意味着每次更新权重时,网络中的权重被更新0.1*(估计权重误差)或估计权重误差的10%。
学习速度的影响
神经网络学习或近似函数以最佳地将输入映射到来自训练数据集中的示例的输出。
学习速率超参数控制模型学习的速率或速度。具体地说,它控制模型的权重在每次更新时(例如在每批训练示例结束时)更新的分摊误差量。
在给定完美配置的学习率的情况下,模型将在给定数目的训练时段(通过训练数据)中学习最佳逼近给定可用资源(层数和每层节点数)的函数。
通常,较大的学习率允许模型更快地学习,但代价是到达次优的最终权重集。较小的学习率可以允许模型学习更优甚至全局最优的权重集合,但是训练时间可能要长得多。
在极端情况下,过大的学习率将导致权重更新过大,并且模型的性能(例如其在训练数据集上的损失)将在训练时段内振荡。振荡性能被认为是由发散(发散)的权重引起的。太小的学习率可能永远不会收敛,或者可能陷入次优解。
当学习率过大时,梯度下降会在不经意间增加而不是减少训练误差[…]。当学习率太低时,训练不仅速度较慢,而且可能会永久性地陷入高训练错误。
在最坏的情况下,过大的权重更新可能会导致权重爆炸(即导致数值溢出)。
当使用高学习率时,可能会遇到正反馈环路,在该环路中,较大的权重会导致较大的梯度,然后会导致较大的权重更新。如果这些更新不断增加权重的大小,则[权重]会迅速远离原点,直到发生数值溢出。
因此,我们不应该使用太大或太小的学习率。然而,我们必须以这样一种方式配置模型,即平均找到一组“足够好”的权重来近似训练数据集所表示的映射问题。
如何配置学习速率
在培训数据集中为你的模型找到一个好的学习率值非常重要。
事实上,学习速率可能是要为你的模型配置的最重要的超参数。
初始学习率[…]这通常是单个最重要的超参数,应始终确保已对其进行优化[…]。如果只有时间来优化一个超参数,并且其中一个使用随机梯度下降,那么这就是值得调整的超参数。
事实上,如果有资源来调优超参数,那么这些时间中的大部分时间都应该专门用于调优学习率。
学习率可能是最重要的超参数。如果你只有时间调优一个超参数,请调优学习速率。
不幸的是,我们不能分析计算给定数据集上给定模型的最佳学习率。相反,一个好的(或足够好的)学习率必须通过试错来发现。
…一般来说,不可能先验地计算最佳学习率。
学习率要考虑的值范围小于1.0,大于10^-6。
具有标准化输入(或映射到(0,1)区间的输入)的神经网络的典型值小于1且大于10^−6。
学习速率将与优化过程的许多其他方面交互,并且交互可能是非线性的。然而,一般来说,较小的学习率将需要更多的培训时间。相反,更高的学习率将需要更少的培训周期。此外,考虑到误差梯度的噪声估计,较小的批次大小更适合于较小的学习率。
学习速率的传统默认值是0.1或0.01,这可能代表你的问题有一个很好的起点。
默认值0.01通常适用于标准多层神经网络,但仅依赖此默认值将是愚蠢的。
诊断图可以用来研究学习率如何影响模型的学习率和学习动力学。一个例子是在训练期间创建训练期间损失的折线图。线状图可以显示许多特性,例如:
- 训练期间的学习速度,如快或慢。
- 模型学习过快(急剧上升和停滞)还是学习过慢(变化很小或没有变化)。
- 学习速率是否会因损耗振荡而过大。
配置学习速率既有挑战性,又耗时。
[学习率]值的选择可能相当关键,因为如果它太小,误差的减少将非常缓慢,而如果它太大,可能会导致发散振荡。
另一种方法是对所选模型的学习率进行敏感度分析,也称为网格搜索。这既有助于突出好的学习率可能存在的数量级,也有助于描述学习率和性能之间的关系。
网格搜索学习率通常在0.1到10^-5或10^-6的对数范围内。
通常,网格搜索涉及在对数标度上近似挑选值,例如,在集合{.1, .01, 10−3, 10−4 , 10−5}内取得的学习率。
当绘制时,这样的灵敏度分析的结果通常显示为“U”形,其中随着固定训练周期数的学习率的降低,损失降低(性能改善),直到由于模型无法收敛而损失再次急剧增加的点。
如果你需要帮助来试验你的模型的学习率,请参阅帖子:
为学习过程增添动力
通过将历史添加到权重更新中,可以更容易地训练神经网络。
具体地说,当更新权重时,可以包括权重的先前更新的指数加权平均。这种随机梯度下降的变化被称为“动量”,并增加了更新过程的惯性,导致过去在一个方向上的许多更新在未来继续朝该方向进行。
动量算法累积过去梯度的指数衰减移动平均值,并继续沿着它们的方向移动。
动量可以加速学习那些优化过程正在导航的高维“权重空间”具有误导梯度下降算法的结构的问题,例如平坦区域或陡峭的曲率。
动量法旨在加速学习,特别是在面对高曲率、小但一致的梯度或有噪音的梯度的情况下。
过去更新的惯性量通过添加新的超参数来控制,通常称为“动量”或“速度”,并使用希腊小写字母alpha(A)表示法。
…动量算法引入了一个起速度作用的变量v-它是参数在参数空间中移动的方向和速度。速度被设置为负梯度的指数衰减平均值。
它具有平滑优化过程、减慢更新以继续前一方向的效果,而不是陷入停滞或振荡。
处理差异很大的特征值问题的一种非常简单的技术是在梯度下降公式中增加一个动量项。这有效地增加了通过重量空间的运动的惯性,并平滑了振荡。
动量设置为大于0.0且小于1的值,其中在实践中使用0.9和0.99等常用值。
实践中常用的[动量]值包括.5、.9和.99。
动量不会使配置学习率变得更容易,因为步长与动量无关。相反,动量可以提高优化过程的速度,与步长一致,提高在更少的训练周期内发现更好的权重集的可能性。
使用学习速度表
使用固定学习率的另一种选择是在训练过程中改变学习率。
学习率随时间(训练时段)变化的方式称为学习率时间表或学习率衰减。
也许最简单的学习速率计划是将学习速率从较大的初始值线性降低到较小的值。这允许在学习过程开始时进行较大的权重改变,并在接近学习过程结束时进行小的改变或微调。
在实践中,需要随着时间的推移逐渐降低学习率,因此我们现在表示迭代的学习率[…]。这是因为SGD梯度估计器引入了噪声源(m个训练示例的随机采样),即使当我们达到最小值时,该噪声源也不会消失。
事实上,在训练神经网络时,使用学习率时间表可能是最佳实践。配置挑战涉及选择初始学习速率和学习速率时间表,而不是选择固定的学习速率超参数。考虑到学习速率时间表可能允许的更好的性能,初始学习速率的选择可能比选择固定的学习速率不那么敏感。
学习速率可以衰减到接近于零的小值。或者,学习速率可以在固定数量的训练周期上衰减,然后在剩余的训练周期内保持在一个小值不变,以便于更多的时间微调。
在实践中,学习速率线性衰减直到迭代[τ]是很常见的。迭代[tau]之后,通常会保持[学习率]不变。
适应性学习率
学习算法可以监控模型在训练数据集上的性能,并可以相应地调整学习率。
这被称为自适应学习率。
也许最简单的实现是,一旦模型的性能停滞不前,就使学习率变小,例如通过将学习率降低两倍或一个数量级。
合理选择的优化算法是具有衰减学习率的动量SGD(在不同问题上表现较好或较差的流行衰减方案包括线性衰减直到达到固定的最小学习率,指数衰减,或每次验证误差平台将学习率降低2-10倍)。
或者,如果在固定数量的训练周期内性能没有改善,则可以再次提高学习率。
自适应学习率方法通常会优于学习率配置不佳的模型。
先验选择好的学习率的困难是自适应学习率方法如此有用和流行的原因之一。一个好的自适应算法通常会比简单的固定学习速率选择不当的反向传播收敛得快得多。
虽然没有一种单一的方法在所有问题上都是最好的,但有三种自适应学习率方法已经被证明在许多类型的神经网络结构和问题类型上都是健壮的。
它们是AdaGrad、RMSProp和Adam,它们都为模型中的每个权重维护和调整学习率。
也许最受欢迎的是ADAM,因为它构建在RMSProp之上,并增加了动力。
在这一点上,一个自然的问题是:应该选择哪种算法?不幸的是,目前在这一点上没有达成共识。目前使用最广泛的优化算法有SGD、带动量的SGD、RMSProp、带动量的RMSProp、AdaDelta和ADAM。
稳健的策略可能是首先评估具有现代版本的具有自适应学习率的随机梯度下降的模型的性能,例如ADAM,并将结果用作基线。然后,如果时间允许,探索是否可以通过精心选择的学习速率或更简单的学习速率时间表来实现改进。
进一步阅读
如果你想深入了解,本节提供了更多关于该主题的资源。
文章
论文
书籍
文章
摘要
在本教程中,你了解了在训练深度学习神经网络时使用的学习率超参数。
具体地说,你了解到:
- 学习率控制神经网络模型学习问题的速度或速度。
- 如何使用合理的默认值配置学习速率、诊断行为和开发敏感度分析。
- 如何通过学习速率时间表、动量和自适应学习速率进一步提高性能。