分享

深度学习中的超参数优化技术

 托尼虎 2020-10-25

设置超参数的过程需要专业知识和广泛的试验和错误。没有简单易行的方法来设置超参数 - 特别是学习率、批量大小、动量和权重衰减。深度学习模型充满了超参数,在如此高维空间中找到这些参数的最佳配置并不是一项微不足道的挑战。

在讨论找到最佳超参数的方法之前,让我们首先了解这些超参数:学习率、批量大小、动量权重衰减。这些超参数充当旋钮,可以在模型训练期间进行调优。为了使我们的模型能够提供最佳结果,我们需要找到这些超参数的最佳值

梯度下降

梯度下降是训练机器学习算法中常用的优化技术。训练ML算法的主要目的是调整权重w以最小化损失或成本。这个成本衡量我们的模型做得如何。因此,通过最小化成本函数 J(w),我们可以找到产生最佳模型性能的最佳参数。

回归问题的典型损失函数图是碗形,如下所示。

深度学习中的超参数优化技术

在梯度下降算法中,我们从随机模型参数开始并计算每次学习迭代的误差,不断更新模型参数以更接近导致最小成本的值。梯度下降算法将梯度(斜率)乘以称为学习速率(或步长)的标量,以确定下一个点。此参数指示在渐变方向上移动权重的距离。

如果我们表示dw和db来表示梯度,更新我们的参数W和b梯度下降算法如下:

深度学习中的超参数优化技术
  • 如果学习率很小,那么训练更可靠,但是需要花费很多时间,因为最小化损失函数的步骤很小。
  • 如果学习率很高,那么训练可能不会收敛甚至发散。权重变化可能很大,以至于发生震荡,如优化器超过(错过)最小值并使损失变得更糟。因此,我们的目标是找到可以快速找到最小损失的最佳学习率。
深度学习中的超参数优化技术

对于更通用的模型,您可以将Gradient Descent视为在山谷中滚动的球。我们希望它坐在山脉最深处,但很容易看出事情可能会出错。

深度学习中的超参数优化技术

根据球开始滚动的位置,它可能会停留在山谷的底部,但不是最低的一个,这称为局部最小值。我们初始化模型权重的方式可能会使其停留在局部最小值。为避免这种情况,我们使用随机分布的值初始化权重向量。

我们可以用2-D表示损失面如下:

深度学习中的超参数优化技术

红点是全局最小值,我们希望达到这一点。使用渐变下降,更新将如下所示:

深度学习中的超参数优化技术

随着梯度下降的每次迭代,我们向上和向下振荡移动到局部最优。如果我们使用更大的学习率,那么垂直振荡将具有更高的幅度。因此,这种垂直振荡减慢了我们的梯度下降,并阻止我们使用更大的学习率。另外,学习速率太小会使梯度下降变慢。

我们希望在垂直方向上学习更慢,在水平方向上学习更快,这将有助于我们更快地达到全局最小值。

为了帮助我们实现这一点,我们使用具有动量的梯度下降

带动量的梯度下降

我们从Gradient下降开始:

深度学习中的超参数优化技术

在动量方面,我们采用dw和db的指数加权平均值,而不是每个时期独立使用dw和db。

深度学习中的超参数优化技术

其中'β'是另一个称为动量的超参数,范围从0到1.它设置先前值的平均值与当前值之间的权重,以计算新的加权平均值。

在计算指数加权平均值后,我们将更新我们的参数。

深度学习中的超参数优化技术

通过使用dw和db的指数加权平均值,我们倾向于将垂直方向上的振荡平均化为接近零。然而,在水平方向上,所有导数都指向水平方向的右侧,因此水平方向上的平均值仍然相当大。它允许我们的算法采用更直接的路径朝向局部最优并阻尼垂直振荡。由于这个原因,算法最终会在局部最优处进行几次迭代。

深度学习中的超参数优化技术

要想知道这是如何工作的,就要考虑滚球向下滚动的例子--Vᵈʷ和Vᵈᵇ为那个球提供速度并使其移动得更快。我们不希望我们的球加速太多以至于它错过了全局最小值,因此β起摩擦作用。

有三种做梯度下降的方法:

批量梯度下降: '

  • 所有示例一次:使用所有训练实例更新每次迭代中的模型参数。
  • 通过准确估计误差梯度来缓慢收敛。

随机梯度下降(SGD):

  • 一次一个示例:在每次迭代中仅使用单个训练实例更新参数。训练实例通常是随机选择的。
  • 通过噪声梯度的噪声估计快速收敛。

小批量梯度下降:

· 'b'示例一次:Mini-batch Gradient Descent不是使用所有示例,而是将训练集划分为称为批处理的较小尺寸,由'b'表示。因此,小批量'b'用于在每次迭代中更新模型参数。

小批量梯度下降试图在随机梯度下降的稳健性和批量梯度下降的效率之间找到平衡。

小批量梯度下降是深度学习领域中最常用的梯度下降实现。Mini-batch的缺点是它为学习算法添加了额外的超参数'批量大小'

搜索最佳配置的方法:网格搜索和随机搜索

网格搜索

在网格搜索中,我们尝试每个可能的参数配置。

步骤:

  • 在n维上定义网格,其中每个都为超参数映射。例如n =(learning_rate ,batch_size)
  • 对于每个维度,定义可能值的范围:例如batch_size = [4,8,16,32],learning_rate = [0.1,0.01,0.0001]
  • 搜索所有可能的配置并等待结果找到最佳配置:例如C1 =(0.1,4) - > acc = 92%,C2 =(0.01,4) - > acc = 92.3%等...

正如我们可以看到更多维度,搜索将在时间复杂度上爆炸得越多。当尺寸小于或等于4时,通常使用这种方法。虽然它保证在最后找到最佳配置,但它仍然不是优选的。相反,最好使用随机搜索。

随机搜索

随机搜索从配置空间中随机选取一个点。关于它如何更好地工作的直觉是我们可以使用随机搜索更广泛地探索超参数空间(特别是对于更重要的变量)。这将有助于我们在更少的迭代中找到最佳配置。例如,请参见下图:

深度学习中的超参数优化技术

在网格布局中,很容易注意到,即使我们已经训练了9(n = 3)个模型,我们每个变量只使用了3个值。然而,使用随机布局,我们不太可能不止一次地选择相同的变量。最后,通过第二种方法,我们将使用9个不同的值为每个变量训练9个模型。

尽管随机搜索比网格搜索表现更好,但这两种方法在计算上仍然是昂贵且耗时的。在2018年,Leslie N. Smith在其经典论文中提出了关于识别最佳超参数的各种方法的详细报告。有人提出一个新方法:基于通过检查训练的测试/验证损失以寻找欠拟合和过拟合的线索来找到欠拟合和过度拟合之间的平衡,以便争取最佳的超参数集合。

超参数调整过程是走钢丝走路,以实现欠拟合和过拟合之间的平衡。

深度学习中的超参数优化技术

欠拟合是指机器学习模型无法减少测试或训练集的误差。欠拟合模型的特征不足以适应数据分布的底层复杂性。

过拟合当机器学习模型是如此强大,很好的适应训练数据,泛化误差增大发生。

途径

1. 通过在训练早期监控验证/测试损失,观察和理解训练期间可用的线索,通过短时间的几个时期来调整架构和超参数。

2. 在训练过程早期测试或验证损失的欠拟合过拟合的迹象对于调整超参数是有用的。

深度学习中的超参数优化技术

模型复杂性是指机器学习模型的容量。该图显示了欠拟合和过拟合之间的最佳容量。

寻找最佳超参数

学习率(LR)

如果学习率(LR)太小,则可能发生过拟合。较高的学习率有助于规范训练,但如果学习率过高,训练就会出现分歧。因此,可以进行短距离网格搜索以找到收敛或发散的学习率,但我们还有另一种方法,莱斯利提出的新方法。

莱斯利的实验表明,训练期间不同的学习率总体上是有益的,因此建议在一个价值范围内周期性地改变学习率,而不是将其设定为固定值。这种学习率政策的实质来自于观察到,提高学习率可能会产生短期的负面影响,但却会产生更长期的有益效果。

这种观察导致了这样的想法:让学习率在一定范围内变化,而不是采用逐步、固定或指数减少的值。也就是说,设置最小和最大边界,并且学习速率在这些边界之间循环变化。

深度学习中的超参数优化技术

如何估算合理的最小和最大边界值?

LR范围测试:运行您的模型几个时期,同时让学习率在低和高LR值之间线性增加。无论何时您面对新的体系结构或数据集,此测试都非常有价值。对于浅层3层架构,大的是0.01,而对于resnet,大的是3.0,您可以尝试多个最大值。

深度学习中的超参数优化技术

进行LR测试

使用具有从LR范围测试确定的最大学习速率的1周期LR策略,作为最大值的十分之一的最小学习率似乎运行良好。

批量大小

与学习率超参数不同,其值不影响计算时间,必须结合训练的执行时间检查批量大小。批量大小受硬件内存的限制,而学习率则不然。莱斯利建议使用适合您硬件内存的批量大小,并使用更大的学习速率。

如果您的服务器有多个GPU,则总批量大小是GPU上的批量大小乘以GPU的数量。如果体系结构很小或者您的硬件允许非常大的批量大小,那么您可以比较不同批量大小的性能。此外,回想一下,小批量添加正则化,而大批量添加更少,因此同时平衡适当的正则化量。使用更大的批量通常更好,因此可以使用更大的学习率。

周期性动量

动量和学习率密切相关。最佳学习率取决于动量,动量取决于学习率。由于学习率被认为是调整最重要的超参数,因此动量也很重要。与学习率一样,在不引起训练不稳定的情况下设置尽可能大的动量是很有价值的。

查找学习率和动量组合的程序

  • 使用循环学习率:最佳训练程序是增加的循环学习率的组合,其中初始小学习率允许开始收敛,以及减少的周期动量,其中减小的动量允许学习率在早期变大到训练的中间部分。当学习速率增加时使用递减的循环动量提供更快的初始收敛并且稳定训练以允许更大的学习速率。

在学习速度提高的同时,循环动量对于以大动量和减小动量开始是有用的,因为它提高了测试精度并使训练对于大学习率更加稳健。

我的下面的情节通常显示了在一个周期(一个时期)的训练中学习率和动量如何变化。

深度学习中的超参数优化技术

左:一个周期的学习率;右:一个周期的动量

  • 使用恒定学习率:如果使用循环学习率,相反方向的周期性动量是有意义的,但学习率恒定时的最佳动量是什么?在这里,周期性动量并不比一个好的恒定值好。如果使用恒定的学习率,那么大的恒定动量(即0.9-0.99)将起到伪增加学习率的作用并且将加速训练。但是,使用过大的动量值会导致培训结果很差,训练结果很早就可以看到,这可以快速测试。

无论是循环学习速率还是恒定学习速率,一个好的程序是测试0.9到0.99范围内的动量值,并选择一个表现最佳的值。

权重衰减

权重衰减是正规化的一种形式,它在训练中起着重要作用,因此其值需要适当设定。权重衰减被定义为将每个时期的梯度下降中的每个权重乘以因子λ[0 <λ<1]。

莱斯利的实验表明,权重衰减不像学习率或动量,最佳值应该通过训练保持不变(即周期性体重衰减没有用)。

如果您不知道合理的权重衰减值,请测试1 /10³,1 /10⁴,1 /10⁵和0.较小的数据集和体系结构似乎需要较大的权量衰减值,而较大的数据集和更深的体系结构似乎需要较小的值。我们的假设是复杂数据提供了自己的正则化,其他正则化应该减少。

如果您使用恒定的学习率而不是使用学习率范围进行搜索,则最佳权重衰减会有所不同。这符合我们的直觉,因为较大的学习率提供正则化,因此较小的权重衰减值是最佳的。

总结

学习率(LR):

· 执行学习率范围测试以确定'大'学习率。

· 使用具有根据LR范围测试确定的最大学习速率的1周期LR策略,将最小学习速率设置为最大学习速率的十分之一。

动量:

· 用短期动量值0.99,0.97,0.95和0.9进行测试,以获得动量的最佳值。

· 如果使用1周期学习率计划,最好使用从该最大动量值开始的循环动量(CM),并随着学习率的增加而减小到0.8或0.85的值。

批量大小:

· 使用尽可能大的批量大小来适合您的内存,然后比较不同批量大小的性能。

· 小批量添加正规化,而大批量添加更少,因此在平衡适当的正规化量的同时利用它。

· 使用更大的批量通常更好,因此可以使用更大的学习率。

权重衰减:

· 网格搜索以确定适当的幅度,但通常不需要超过一个有效数字精度。

· 更复杂的数据集需要较少的正则化,因此测试较小的权重衰减值,例如10-4,10-5,10-6,0。

· 浅层结构需要更多的正则化,因此测试更大的权重衰减值,例如10-2,10-3,10-4。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多