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

如何选择优化器?一篇文章教你为不同的ML项目选择优化器

时间:2023-03-16 14:08:12 科技观察

为机器学习项目选择合适的优化器并不是一件简单的事情。优化器是深度学习领域的重要组成部分之一。在执行深度学习任务时使用不同的优化器会产生完全不同的效果。这也是研究人员不遗余力“炼金术”的原因之一。常见的优化算法有梯度下降(变体BGD、SGD、MBGD)、Adagrad、Adam、Momentum等,这么多优化器该如何取舍呢?不久前,Lightly-ai的机器学习工程师PhilippWirth写了一篇指南,总结了计算机视觉、自然语言处理和机器学习中常用的流行优化器,并给出了如何选择合适的优化器的建议。具体来说,本文提出基于以下三个问题来选择优化器:找到相关的研究论文,一开始就使用相同的优化器;看表1,将你使用的数据集的属性和不同的优化器一一比较优劣;根据可用资源调整优化器。简介为机器学习项目选择一个好的优化器并不是一件容易的事。PyTorch或TensorFLow等流行的深度学习库提供了多种优化器选择,每种都各有利弊。此外,选择不合适的优化器会对机器学习项目产生很大的负面影响。这使得选择优化器成为构建、测试和部署机器学习模型过程的关键部分。上图显示模型性能可能因不同的优化器而有很大差异。选择优化器的问题在于没有一个优化器可以解决所有问题。事实上,优化器的性能高度依赖于设置。所以根本问题是:“哪种优化器最适合自己项目的特点?”下面围绕这个问题分为两部分。第一部分简要介绍常用的优化器,第二部分介绍“三步选型法”,帮助用户为自己的机器学习项目挑选出最佳优化器。常见的优化器几乎所有深度学习中流行的优化器都是基于梯度下降的。这意味着他们迭代地估计给定损失函数L的斜率,并沿相反方向移动参数(从而向下移动到假定的全局最小值)。这种优化器的最简单示例是自1950年代以来一直使用的随机梯度下降(SGD)算法。在2000年代,AdaGrad或Adam等自适应梯度方法变得越来越流行。但最近的趋势表明,一些研究已经转向以前的SGD而不是自适应梯度法。此外,当前深度学习中的挑战导致了新的SGD变体,如LARS、LAMB[6][7]。例如,GoogleResearch在他们最近的论文[8]中使用LARS训练了一个强大的自我监督模型。本文中w代表参数,g代表梯度,α是每个优化器的全局学习率,t代表时间步长。随机梯度下降(SGD)算法在随机梯度下降(SGD)中,优化器根据小批量估计最快梯度下降的方向,并朝该方向迈出一步。由于步长固定,SGD可能会很快停滞在平台或局部最小值。具有动量的SGD,其中β<1。当有动量时,SGD会在一个连续下降的方向上加速(这就是为什么该方法被称为“重球法”)。这种加速有助于模型摆脱高原,使其不易陷入局部最小值。AdaGradAdaGrad是最早成功利用自适应学习率的方法之一。AdaGrad根据梯度平方和的倒数的平方根来缩放每个参数的学习率。此过程按比例放大稀疏梯度方向,以允许在这些方向上进行更大的调整。结果是AdaGrad能够在具有稀疏特征的场景中更快地收敛。RMSpropRMSprop是一个未发布的优化器,但近年来已被过度使用。这个想法与AdaGrad类似,但梯度的重新缩放不那么激进:平方梯度之和被平方梯度的移动均值代替。RMSprop通常与动量一起使用,可以理解为Rprop对mini-batch设置的适应。AdamAdam结合了AdaGrad、RMSprop和动量方法。下一步的方向由梯度的移动平均决定,步长受全局步长的限制。此外,与RMSprop类似,Adam重新调整梯度的每个维度。Adam和RMSprop(或AdaGrad)之间的一个主要区别是对m和v的瞬时估计中的零偏差的校正。Adam以通过少量超参数微调实现良好性能而闻名。AdamWLoshchilov和Hutter确定了自适应梯度方法中L2正则化和权重下降的不等式,并假设这种不等式限制了Adam的性能。然后,他们建议将权重衰减与学习率脱钩。实验结果表明,AdamW比Adam具有更好的泛化性能(利用动量缩小与SGD的差距),并且对于AdamW而言,最优超参数的范围更广。LARSLARS是SGD的基于动量的扩展,它适应每层的学习率。LARS最近引起了研究界的关注。这是由于可用数据的稳步增长和机器学习分布式训练的日益普及。这使得批量大小开始增长,进而导致训练变得不稳定。一些研究人员(Yang等人)认为,这些不稳定性源于某些层的梯度准则和权重准则之间的不平衡。因此,他们提出了一种优化器,可以根据“信任”参数η<1和层梯度的逆范数重新调整每一层的学习率。如何选择合适的优化器?如上所述,为机器学习问题选择合适的优化器可能非常困难。更具体地说,没有一刀切的解决方案,只能根据具体问题选择合适的优化器。但在选择优化之前,你应该问自己以下3个问题:类似数据集和任务的SOTA结果是什么?使用了哪些优化器?为什么要使用这些优化器?如果你正在使用一种新的机器学习方法,可能会有一篇或多篇涵盖类似问题或处理类似数据的好论文。通常,论文作者会执行广泛的交叉验证并展示最成功的配置。读者可以尝试理解他们为什么选择那些优化器。例如:假设你想训练一个生成对抗网络(GAN)来对一组图像执行超分辨率。经过一些研究,您偶然发现了一篇论文[12],其中研究人员使用Adam优化器解决了完全相同的问题。威尔逊等人。[2]认为训练GAN不应该关注优化问题,而Adam可能非常适合这种情况。所以在这种情况下,Adam是一个很好的优化器选择。此外,您的数据集中是否有任何可以利用某些优化器的功能?如果是这样,则需要考虑优化器的选择。下面的表1总结了几种优化器的优点和缺点。读者可以通过实验找到与数据集特征、训练设置和项目目标相匹配的优化器。一些优化器在具有稀疏特征的数据上表现良好,而其他优化器在将模型应用于以前未见过的数据时可能表现更好。一些优化器适用于大批量大小,而其他优化器收敛到泛化能力差的微小最小值。例如:如果需要将用户给出的反馈分为正面反馈和负面反馈,可以考虑使用词袋模型(bag-of-words)作为机器学习模型的输入特征。由于这些特征可能非常稀疏,因此决定使用自适应梯度法。但是选择哪个优化器呢?参考上面的表1,你会发现AdaGrad在自适应梯度方法中可调参数最少。当项目时间有限时,可以选择AdaGrad作为优化器。最后一个要考虑的问题:项目有哪些可用资源?项目可用的资源也会影响优化器的选择。计算或内存限制以及项目时间框架会影响优化器的选择。如上表1所示,您可以看到每个优化器都有不同的内存要求和可调参数的数量。此信息可以帮助您估计您的项目设置是否可以支持优化器所需的资源。示例:您在业余时间从事一个项目,并希望在家用计算机的图像数据集上训练自监督模型(如SimCLR)。对于SimCLR等模型,性能会随着批处理大小的增加而提高。所以你想为大批量训练节省尽可能多的内存。选择没有动量的简单随机梯度下降作为优化器,因为与其他优化器相比,它需要最少的额外内存来存储状态。