当前位置: 首页 > 科技观察

如何在机器学习项目中选择优化器

时间:2023-03-17 17:16:49 科技观察

指导介绍了几种流行的优化器并分析了它们的优缺点,并给出了一些选择优化器的指南。本文概述了计算机视觉、自然语言处理和机器学习中常用的优化器。此外,您还会找到一个基于三个问题的指南,帮助您为下一个机器学习项目选择合适的优化器。查找相关研究论文并开始使用相同的优化器。参考表1,将数据集的属性与不同优化器的优缺点进行比较。根据可用资源调整您的选项。简介为您的机器学习项目选择一个好的优化器可能非常困难。流行的深度学习库,如PyTorch或TensorFlow,提供了广泛的优化器选择,不同的优化器各有优缺点。但是,选择错误的优化器会对机器学习模型的性能产生重大负面影响,从而使优化器成为构建、测试和部署机器学习模型过程中的关键设计选择。根据优化器的不同,模型的性能可能会有很大差异。选择优化器的问题在于,由于没有免费的午餐定理,没有任何一个优化器可以在所有情况下都优于其他优化器。事实上,优化器的性能高度依赖于设置。那么,中心问题就是:哪种优化器更适合我项目的特点?以下内容给出了回答上述问题的指南。它由两个主要部分组成:在第一部分中,我将快速介绍最常用的优化器。在第二部分中,我将为您提供一个三步计划,为您的项目选择最佳优化器。一些最常用的优化器在深度学习中,几乎所有流行的优化器都是基于梯度下降的。这意味着他们迭代地估计给定损失函数L的斜率并将参数沿相反方向移动(从而下降到假设的全局最小值)。这种优化器最简单的例子可能是随机梯度下降(或SGD),它自1950年代以来一直在使用。在2010年代,AdaGrad或Adam等自适应梯度的使用越来越流行。然而,最近的趋势表明,部分研究社区正在回归使用SGD而不是自适应梯度方法。此外,当前的深度学习挑战带来了新的SGD变体,例如LARS或LAMB。例如,GoogleResearch在其最新论文中使用LARS训练了一个强大的自我监督模型。以下部分描述了更流行的优化器。如果您已经熟悉这些概念,请转到“如何选择合适的优化器”部分。我们将使用以下符号:令w表示参数,g表示模型的梯度,α表示每个优化器的全局学习率,t表示时间步长。StochasticGradientDescent(SGD)StochasticGradientDescent(SGD)更新规则在SGD中,优化器根据小批量估计最速下降的方向,并朝这个方向向前迈出一步。由于步长是固定的,SGD会很快陷入平坦区域或陷入局部最小值。SGDwithMomentumTheupdateruleofSGDwithmomentumwhereβ<1,利用动量,SGD可以在一个连续的方向上加速(这就是为什么它也被称为“重球法”)。这种加速有助于模型摆脱高原,使其不易陷入局部最小值。AdaGradAdaGrad的更新规则AdaGrad是最早成功利用自适应学习率的方法之一(因此得名)。AdaGrad根据梯度平方和的倒数的平方根来衡量每个参数的学习率。这个过程放大了稀疏梯度方向上的梯度,允许在这些方向上进行更大的步长。结果:AdaGrad在具有稀疏特征的场景中收敛得更快。RMSpropRMSprop的更新规则RMSprop是一个未发布的优化器,在过去几年中被过度使用。这个想法类似于AdaGrad,但梯度的重新缩放不那么激进:平方梯度的总和被平方梯度的移动平均值代替。RMSprop通常与动量一起使用,可以理解为Rprop对mini-batch设置的适配。AdamAdam的更新规则Adam结合了AdaGrad、RMSprop和动量方法。步长方向由梯度的移动平均值决定,步长近似于全局步长的上限。此外,梯度的每个维度都被重新缩放,类似于RMSprop。Adam和RMSprop(或AdaGrad)之间的一个关键区别是矩估计m和v被修正为偏向于零。Adam以通过最少的超参数调整实现良好的性能而闻名。LARS的更新规则LARS是使用动量的SGD的扩展,能够为每一层调整学习率。它最近引起了研究界的注意。原因是由于可用数据量的稳步增长,机器学习模型的分布式训练变得流行起来。结果是批量大小开始增长。但是,这会导致训练不稳定。杨等。认为这些不稳定性源于某些层的梯度范数和权重范数之间的不平衡。因此,他们提出了一种优化器,可以根据“信任”参数η<1和层梯度范数的倒数来缩放每一层的学习率。如何选择合适的优化器?如上所述,为您的机器学习问题选择正确的优化器很困难。更具体地说,没有万能的解决方案,必须根据手头的特定问题仔细选择优化器。在下一节中,我将提出三个问题,您在决定使用优化器之前应该问自己。与您的数据集和任务相似的最新结果是什么?使用了哪些优化器,为什么?如果你正在使用新的机器学习方法,可能会有一篇或多篇论文涵盖类似的问题,或者一篇处理类似数据的可靠论文。通常,论文的作者已经进行了广泛的交叉验证,并且只报告最成功的配置。试着理解他们为什么选择优化器。示例:假设您要训练生成对抗网络(GAN)以对一组图像执行超分辨率。经过一些研究,您偶然发现了一篇论文:“使用生成对抗网络的逼真单图像超分辨率”,其中研究人员使用Adam优化器来解决完全相同的问题。威尔逊等人。相信训练GANs不等于解决优化问题,而Adam可能非常适合这样的场景。因此,在这种情况下,Adam是优化器的不错选择。您的数据集是否具有某些优化器的优势?如果是,是哪些优势,如何利用这些优势?表1显示了不同优化器的概述及其优缺点。尝试找到与您的数据集、训练设置和目标的特征相匹配的优化器。一些优化器在具有稀疏特征的数据上表现非常好,而其他优化器在将模型应用于以前从未见过的数据时可能表现更好。一些优化器适用于大批量,而其他优化器可以收敛到一个陡峭的最小值,但泛化能力很差。表1:流行优化器的总结,强调了它们的优点和缺点。状态内存列指示优化器所需的字节数-除了梯度所需的内存。其中,n为机器学习模型的参数个数。例如,没有动量的SGD只需要内存存储梯度,而有动量的SGD还需要存储梯度的移动平均。示例:对于您当前正在进行的项目,您必须将用户反馈分为正面反馈和负面反馈。您考虑使用词袋作为机器学习模型的输入特征。由于这些特征可能非常稀疏,您决定使用自适应梯度方法。但是你想用哪一个?考虑表1,您会发现AdaGrad在自适应梯度方法中具有最少数量的可调参数。鉴于项目的时间有限,您选择了AdaGrad作为优化器。你的项目有什么资源?项目中可用的资源也会影响选择哪个优化器。计算限制或内存限制以及项目的时间表可以缩小可行的选择范围。再次查看表1,您可以看到每个优化器的不同内存要求和可调参数数量。此信息可以帮助您评估您的设置是否支持优化器所需的资源。示例:您正在开展一个项目,您希望在家用计算机上的图像数据集上训练自监督模型(例如SimCLR)。对于像SimCLR这样的模型,性能随着批量大小的增加而提高。因此,您希望尽可能节省内存,以便进行大批量训练。您选择没有动量的简单随机梯度下降作为优化器,因为与其他优化器相比,它需要最少的额外内存来存储状态。总结尝试所有可能的优化器来找到最适合您的项目的优化器并不总是可行的。在这篇博文中,我概述了更流行的优化器的更新规则、优缺点和要求。此外,我列出了三个问题来指导您就应该为机器学习项目使用哪种优化器做出明智的决定。作为一个经验法则:如果你有资源找到一个好的学习率策略,带动量的SGD是一个不错的选择。如果您需要在不进行大量超参数调整的情况下快速获得结果,请使用自适应梯度方法。