在训练深度神经网络时,通常会随着训练的进行降低学习率。 这可以通过使用预定义的学习率计划或自适应学习率方法来完成。
学习率表
学习率时间表旨在根据预先定义的时间表降低学习率,从而在训练过程中调整学习率。 常见的学习率时间表包括基于时间的衰减,逐步衰减和指数衰减。
什么是学习率?
使用随机梯度下降算法训练深度学习神经网络。
随机梯度下降是一种优化算法,它使用训练数据集中的示例为模型的当前状态估算误差梯度,然后使用误差的反向传播算法(简称为反向传播)更新模型的权重。
训练期间权重的更新量称为步长或“学习率”。
具体而言,学习率是用于神经网络训练的可配置超参数,其具有较小的正值,通常在0.0到1.0之间。
学习率通常用小写希腊字母eta(n)的表示法表示。
在训练期间,错误的反向传播会估计网络中节点权重所负责的错误量。 而不是全部更新权重,而是根据学习率来缩放。
这意味着学习率0.1(传统上常用的默认值)意味着每次更新权重时,网络中的权重都会更新0.1 *(估计的权重误差)或估计的权重误差的10%。
学习率的影响
神经网络学习或近似一个函数,以最佳地将输入映射到训练数据集中示例的输出。
学习速率超参数控制模型学习的速率或速度。具体来说,它控制模型权重每次更新时(例如,在每批训练示例的末尾)更新的分配误差量。
给定一个完美配置的学习速率,该模型将学习在给定数量的训练时期(通过训练数据)中,在给定可用资源(层数和每层节点数)的情况下,对函数进行最佳近似。
通常,较高的学习率可使模型学习更快,但代价是要获得次优的最终权重集。较小的学习率可以使模型学习更优化的甚至是全局最优的权重集,但训练时间可能会更长。
在极端情况下,学习速率过大将导致权重更新过大,并且模型的性能(例如模型在训练数据集上的损失)将在训练时期内振荡。据说振荡性能是由发散(发散)的重量引起的。太小的学习率可能永远不会收敛或卡在次优的解决方案上。
如何配置学习率
在训练数据集上为模型找到合适的学习率非常重要。
实际上,学习率可能是为模型配置的最重要的超参数。
实际上,如果有资源可以调整超参数,那么这段时间中的大部分时间应该用于调整学习速率。
不幸的是,我们无法在给定的数据集上分析计算给定模型的最佳学习率。相反,必须通过反复试验发现一个好的(或足够好的)学习率。
学习率要考虑的值范围小于1.0且大于10 ^ -6。
学习率将与优化过程的许多其他方面相互作用,并且相互作用可能是非线性的。然而,一般而言,较低的学习率将需要更多的培训时间。相反,较高的学习率将需要较少的培训时间。此外,考虑到误差梯度的嘈杂估计,较小的批次大小更适合较小的学习率。
传统的学习率默认值是0.1或0.01,这可能是您解决问题的一个很好的起点。
诊断图可用于调查学习率如何影响模型的学习和学习动态。 一个示例是在训练过程中创建一条损失曲线图。 折线图可以显示许多属性,例如:
配置学习速率既困难又耗时。
另一种方法是对所选模型的学习率进行敏感性分析,也称为网格搜索。 这可以帮助强调一个好的学习率可能存在的数量级,以及描述学习率和性能之间的关系。
网格搜索学习率通常是从0.1到10 ^ -5或10 ^ -6的对数刻度。
为学习过程增添动量
通过将历史记录添加到体重更新中,可以使训练神经网络变得更加容易。
具体地,当权重被更新时,可以包括权重的先前更新的指数加权平均值。随机梯度下降的这种变化称为“动量”,并在更新过程中增加了惯性。
动量算法累积过去梯度的指数衰减移动平均值,并继续沿其方向移动。
动量可以加快对这些问题的学习,在这些问题上,通过优化过程导航的高维“权空间”具有误导梯度下降算法的结构,例如平坦区域或陡峭曲率。
动量法旨在加速学习,尤其是在面对高曲率,较小但一致的梯度或嘈杂的梯度时。
过去更新的惯性量通过添加新的超参数(通常称为“动量”或“速度”)进行控制,并使用希腊小写字母alpha(a)表示。
…动量算法引入了一个变量v,它起着速度的作用-它是参数在参数空间中移动的方向和速度。速度设置为负梯度的指数衰减平均值。
它具有平滑优化过程,减慢更新速度以继续前一个方向而不会卡住或振荡的作用。
解决特征值差异很大的一种非常简单的技术是在梯度下降公式中添加动量项。这有效地增加了通过重量空间的运动的惯性,并消除了振动
动量设置为大于0.0且小于1的值,在实践中通常使用0.9和0.99等常用值。
实际上,[动量]的常用值包括.5,.9和.99。
动量不能使配置学习率变得容易,因为步长与动量无关。相反,动量可以与步长一致地提高优化过程的速度,从而提高在更少的训练时期中发现更好的权重集的可能性。
人话来说就是当前梯度与之前相同就加速,不同就减速。
使用学习费率表
使用固定学习率的另一种方法是在训练过程中改变学习率。
学习率随时间(训练时期)变化的方式称为学习率时间表或学习率衰减。
也许最简单的学习率计划是将学习率从大的初始值线性减小到小值。 这允许在学习过程开始时进行较大的权重更改,并在学习过程结束时进行较小的更改或微调。
实际上,在训练神经网络时,使用学习速率表可能是最佳实践。 代替选择固定的学习速率超参数,配置挑战包括选择初始学习速率和学习速率时间表。 鉴于学习率时间表可能允许的更好性能,初始学习率的选择可能不如选择固定学习率敏感。
学习率可以衰减到接近零的较小值。 或者,学习率可以在固定数量的训练时期内衰减,然后对于其余的训练时期保持较小的恒定值,以便于进行更多的时间微调。
适应性学习率
该模型在训练数据集上的性能可以通过学习算法进行监控,并且可以相应地调整学习率。
这称为自适应学习率。
合理的优化算法选择是SGD,其动量具有学习速率下降的趋势(在不同问题上表现较好或较差的流行衰减方案包括线性衰减,直到达到固定的最小学习速率,然后呈指数衰减,或将学习速率降低一个因子)。每次2-10个验证错误稳定时间)。
或者,如果在固定数量的训练时期内性能没有提高,则可以再次提高学习率。
自适应学习率方法通常会优于配置错误的学习率的模型。
先验地选择好的学习率的困难是自适应学习率方法如此有用和流行的原因之一。一个好的自适应算法通常会比简单的反向传播收敛速度快得多,而固定学习率选择得不好。
尽管没有任何一种方法可以很好地解决所有问题,但是已经证明了三种自适应学习率方法在许多类型的神经网络体系结构和问题类型上均具有较强的鲁棒性。
它们是AdaGrad,RMSProp和Adam,并且都针对模型中的每个权重维持并调整学习率。
也许最受欢迎的是(Adam),因为它建立在RMSProp之上并增加了动力。
此时,一个自然的问题是:应该选择哪种算法?不幸的是,目前在这一点上尚无共识。当前,活跃使用的最流行的优化算法包括SGD,带动量的SGD,RMSProp,带动量的RMSProp,AdaDelta和Adam。
(关于这些算法的介绍请参考之前的文章)
一种稳健的策略可能是,首先使用具有自适应学习率的现代版本的随机梯度下降法(例如Adam)来评估模型的性能,然后将结果用作基线。然后,在时间允许的情况下,探索是否可以通过精心选择的学习率或更简单的学习率时间表来实现改进。