云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

腾讯云_华为云解决方案_排行榜

小七 141 0

学习率发现技术:它有多可靠?

为了理解这篇博文中描述的评估过程,我们需要退一步了解机器学习中的超参数是什么。超参数是模型的参数,其值在学习过程开始之前设置。长期以来,寻找深部模型超参数的最优值一直被认为是"一门艺术而不是一门科学",主要依靠试错。学习速率是一个超参数,它控制我们根据损失梯度调整网络权重的程度。它衡量了一个模型可以从一个新的小批量训练数据中"学习"多少,也就是说,我们用每个新的小批量训练数据更新模型权重的程度。学习率越高,我们沿着轨迹到损失函数最小的步数就越大,在这里模型参数是最佳的。图像来源:https://www.jeremyjordan.me/nn-learning-rate/在上面的图像中,您可以看到学习率可以影响导航通过损失函数在深度神经网络优化过程中。事实上,训练深度神经网络的许多挑战之一,历史上一直是选择一个好的学习率-这就是学习率范围测试(LRRT)来的地方。LRRT于2015年提出,并由快.ai的深度学习lib库作为学习速率查找器,也称为LFrEnter。在这篇文章中,我们将评估这项技术的可靠性和有用性。学习率范围内测试LRRT最多包含一个训练迭代阶段,每一个小批量数据的学习率都会提高。在这个过程中,学习率从一个很小的值变成一个非常大的值(即从1e-7到100),导致训练损失从一个平稳开始,下降到某个最小值,最终爆炸。这种典型的行为可以显示在图上(如下图所示),并用于为学习速率选择适当的范围,特别是在损失减少的区域。推荐的最小学习率是损失减少最快的值(最小负梯度),而推荐的最大学习率是损失最小的学习率的10倍。为什么不把损失降到最低呢?为什么少10倍?因为我们实际绘制的是损失的平滑版本,取最小损失对应的学习率很可能太大,使损失在训练过程中发生偏离。让我们从复制一个实验开始快.ai发表在这本笔记本上,发表在这篇博文中。实验在批大小为512的CIFAR-10数据集上训练ResNet-56和带动量的优化器随机梯度下降(SGD)。我们用这两种方法进行同样的实验快.aiLRRT实现和Keras实现。初始化的作用使用LRFinder的第一个引人注目的观察是,当我们改变模型的初始权重时,损失可能会大不相同。我们对LRFinder进行了20次运行,通过he_统一初始化(Pythorch中称为kaiming_uniform)来改变初始权重快.ai)每次。平均平滑损失和建议范围,以及损失和范围值的10%和90%分位数如下所示快.ai.使用Keras对20次不同初始重量下的LRRT结果进行了分析。使用不同初始权重的20次运行的LRRT结果快.ai.虽然建议学习率范围(0.1,2.)的中值与快.ai(0.08,3.),如下图所示,我们发现电流下的建议学习率较低快.ai实施(5e-4,0.4)。由于LRFinder图的变化很大,可能会发生对于不同的权重初始化,我们会得出不同的结论。例如,对于两个不同的权重初始化,比如A和B,我们得到不同的非重叠建议范围,如下图所示。在这种情况下,如果我们使用初始权值A的模型的最大学习率来训练具有初始权值B的模型,那么这个学习率很可能会使损失发散。实际上这样做会导致模型过度拟合。因此,一个重要的建议是对LRFinder和随后的模型训练使用相同的初始权重。那么,lFinder真的可靠吗?虽然我们可以得出类似的结果快.ai在LRFinder的实验中,如此高的建议学习率与在最先进的环境中实际使用SGD训练类似模型的学习率有很大不同。学习率建议在lra的最大值2.0左右。更进一步的说,如果我们在下面所展示的训练中没有使用这种方法,那么我们就不会使用这种方法了。所应用的平滑处理可能掩盖了图中最右侧区域中训练损失的实际行为,在该区域由于高学习率而变得不稳定。请注意,显示验证丢失需要在每个批次运行一个完整的验证,这使得LRRT不切实际,因为它需要更长的时间来运行(在本例中,在GTX 970 GPU上为1.5分钟而不是50分钟)。另一方面,选择最小学习率作为损失下降最快的速度似乎是合理和安全的。LRFinder是一个有用的工具,可以自动为任意模型选择合理的学习速率。lFinder证实了一个常见的深度学习实践,即对于较大的批量,我们应该选择更高的学习率,如下图所示。这种做法背后的直觉是,随着一个更大的批量,我们使用更多的数据和获得更准确的梯度估计为一个单一的权重更新。因此,我们可以使用更高的学习率,这样我们就可以对损失下降的估计方向更有信心。请注意,图像中的曲线似乎表明,增加批处理大小时,损失减少得更少,但这只是平滑的效果。LRFinder是一个有用的工具,可以接收推荐的学习率,以用于特定的设置,但必须谨慎使用。在LRRT和随后的模型训练中,必须设置相同的初始权重。我们决不能假设所发现的学习率对于任何模型初始化都是最好的。此外,设定一个比建议范围更窄的范围更安全,并且可以减少由于极高的学习率而导致的偏离风险。进一步降低了学习的周期性,降低了自主学习的风险。如果您想自己尝试这个实验,那么这个存储库中提供了用不同的初始权重来重现LRRT实验的代码。