超参优化实用指南

深度学习的一个非常重要的部分是找到正确的超参数。这些是模型无法学习的。

在本文中,我将向您介绍一些最常见的(也是重要的)超级参数,此外,我还将向您展示一些强大的算法,可以帮助您明智地选择超参数。

深度学习中的超参数

超参数可以被认为是模型的调整旋钮。

如果您将AV接收机设置为立体声,那么配备超低音扬声器以产生低于人耳可听范围的低音扬声器的7.1级杜比全景声(Dolby Atmos)家庭影院系统将毫无用处。

打开立体声放大器摄影:Michael Andree / Unsplash

同样,如果您的超参数关闭,带有万亿参数的inception_v3甚至不会让您通过MNIST。

所以现在,让我们先看看旋钮,然后再进入正确设置。

学习率

可以说是最重要的超参数,粗略地说,学习率可以控制神经网络“学习”的速度。

那么,为什么我们不把它放大并在快车道上过日子?

img

资源

不那么简单。请记住,在深度学习中,我们的目标是尽量减少损失函数。如果学习率太高,我们的损失将开始在整个地方跳跃,永远不会收敛。

img资源

如果学习率太小,模型将花费太长时间来收敛,如上所述。

动量

由于本文侧重于超参数优化,我不打算解释动量的整个概念。但简而言之,动量常数可以被认为是在损失函数表面滚动的球的质量。

球越重,下落越快。但如果它太重,它可能会卡住或超过目标。

img资源

退出

如果你在这里感受到一个主题,我现在要引导你去Amar Budhiraja关于辍学的文章。

img资源

但作为一个快速复习,辍学是Geoff Hinton提出的一种正规化技术,它将神经网络中的激活随机地设置为0,概率为0 pp。这有助于防止神经网过度拟合(记忆)数据,而不是学习它。

pp是一个超参数。

架构 - 层数,每层神经元等

另一个(最近的)想法是使神经网络的架构本身成为一个超参数。

虽然我们通常不会让机器弄清楚我们模型的架构(否则AI研究人员会丢失他们的工作),但是神经架构搜索等一些新技术已经实现了这个想法并取得了不同程度的成功。

如果您听说过AutoML,那么Google基本上就是这样做的:将所有内容都设置为超参数,然后在问题上投入10亿TPU并让它自行解决

但是对于我们绝大多数只想在黑色星期五销售之后用经济型机器拼凑猫狗的人来说,现在是时候我们想出如何使这些深度学习模型真正起作用了。

超参数优化算法

网格搜索

这是获得良好超参数的最简单方法。它实际上只是蛮力。

算法:从一组给定的超参数中尝试一堆超参数,看看哪种方法效果最好。

在笔记本中试一试

优点:五年级学生很容易实施。可以轻松并行化。

缺点:正如您可能猜到的那样,它的计算成本非常高(因为所有强力方法都是如此)。

我应该使用它:可能不会。网格搜索非常低效。即使你想保持简单,你也最好使用随机搜索。

随机搜索

这就是名称 - 随机搜索搜索。随机。

算法:在一些超参数空间上从均匀分布中尝试一堆随机超参数,看看哪种方法效果最好。

在笔记本中试一试

优点:可以轻松并行化。就像网格搜索一样简单,但性能稍好一点,如下图所示:

img资源

缺点:虽然它提供了比网格搜索更好的性能,但它仍然只是计算密集型。

我应该使用它:如果琐碎的并行化和简单性是最重要的,那就去吧。但是,如果您可以节省时间和精力,那么通过使用贝叶斯优化,您将获得大量奖励。

贝叶斯优化

与我们迄今为止看到的其他方法不同,贝叶斯优化使用了算法的先前迭代的知识。使用网格搜索和随机搜索,每个超参数猜测都是独立的。但是使用贝叶斯方法,每次我们选择并尝试不同的超参数时,都要走向完美。

img资源

贝叶斯超参数调整背后的想法很长且细节丰富。所以为了避免太多的兔子洞,我会在这里给你一个要点。但是一定要仔细阅读高斯过程贝叶斯优化,如果那是你感兴趣的事情。

请记住,我们使用这些超参数调整算法的原因是,单独实际评估多个超参数选择是不可行的。例如,假设我们想要手动找到一个好的学习率。这将涉及设置学习率,训练模型,评估它,选择不同的学习率,再次训练你从头开始模型,重新评估它,并继续循环。

问题是,“训练你的模型”可能需要几天时间(取决于问题的复杂性)才能完成。因此,在会议提交截止日期之前,您只能尝试一些学习率。而你知道什么,你甚至没有开始玩这种势头。哎呀。

穿棕色和白色手表的人照片来自Brad Neathery / Unsplash

算法:贝叶斯方法试图建立一个函数(更准确地说,在可能的函数的概率分布)来估计模型有多好,可能是超参数的必然选择。通过使用这种近似函数(在文献中称为代理函数),您不必经历设置,训练,评估循环太多时间,因为您可以优化超参数到代理函数。

例如,假设我们想要最小化此函数(将其视为模型损失函数的代理):

img

代理函数来自称为高斯过程的东西(注意:还有其他方法来模拟代理函数,但我将使用高斯过程)。就像我提到的那样,我不会做任何数学上的重要推导,但是所有关于贝叶斯和高斯的讨论归结为:

\ mathbb {P}(F_n(X)| X_n)= \ frac {e ^ { - \ frac12 F_n ^ T \ Sigma_n ^ { - 1} F_n}} {\ sqrt {(2 \ pi)^ n | \ Sigma_n |}}P(Fñ(X )| X.ñ)=(2 π )n |Σñ|Ë- 21FñŤΣñ- 1Fñ

其中,诚然是满口。但是,让我们试着打破它。

左侧告诉您涉及概率分布(假设有奇特的外观) \ mathbb {P}P)。在括号内看,我们可以看到它的概率分布F_N(X)Fñ(X ),这是一些任意函数。为什么?因为记住,我们正在定义所有可能函数的概率分布,而不仅仅是特定函数。从本质上讲,左侧表示将超参数映射到模型指标的真实函数(如验证准确性,对数似然,测试错误率等)的概率是F_N(X)Fñ(X ),给出一些样本数据X_nXñ 等于右边的任何东西。

现在我们有了优化功能,我们对其进行了优化。

以下是在开始优化过程之前高斯过程的样子:

img迭代前的高斯过程有2个点

使用您最喜欢的优化器(专业人员喜欢最大化预期的改进),但不知何故,只需按照标志(或渐变),在您知道它之前,您将最终达到您当地的最低点。

经过几次迭代后,高斯过程在近似目标函数时变得更好:

img2次迭代3次后的Gaussan过程

无论你使用哪种方法,你现在都找到 了代理函数的argmin 。Ans惊讶,惊讶,那些最小化代理函数的论点是(估计)最优超参数!好极了。

最终结果应如下所示:

img高斯过程经过7次迭代后得到2分

使用这些“最佳”超参数在您的神经网络上进行训练,您应该看到一些改进。但是,您也可以使用这些新信息重新一次又一次地重做整个贝叶斯优化过程。您可以随意多次运行贝叶斯循环,但要小心谨慎。你实际上在计算东西。你知道,这些AWS学分不是免费的。或者他们……

在笔记本中试一试

优点:贝叶斯优化比网格搜索和随机搜索提供更好的结果。

缺点:并行化并不容易。

我应该使用它:在大多数情况下,是的!唯一的例外是if

  • 你是一个深度学习专家,你不需要一个可靠的近似算法的帮助。
  • 您可以访问庞大的计算资源,并可以大规模并行化网格搜索和随机搜索。
  • 如果你是一个频繁的/反贝叶斯统计书呆子。

寻找良好学习率的替代方法

在我们到目前为止看到的所有方法中,有一个基本主题:自动化机器学习工程师的工作。这是伟大的,所有; 直到你的老板得到这个,并决定用4个RTX Titan卡取代你。呵呵。猜猜你应该坚持手动搜索。

img摄影:Rafael Pol / Unsplash

但是,不要绝望,在研究人员做得少,同时获得更多报酬的领域有积极的研究。其中一个效果非常好的想法是学习率范围测试,据我所知,这首先出现在Leslie Smith论文中

本文实际上是关于一种随时间调度(改变)学习率的方法。LR(学习率)范围测试是一个金块,作者只是随便掉了一边。

当您使用将学习速率从最小值变为最大值的学习速率计划时,例如循环学习速率具有暖启动的随机梯度下降,作者建议在每次迭代之后将学习速率从小到小地线性增加到大值(例如,1e-7to 1e-1),评估每次迭代时的损失,并在对数刻度上绘制损失(或测试误差或准确度)与学习率的关系。你的情节应该是这样的:

img

资源

在笔记本中试一试

如图所示,您可以使用设置学习率计划在最小和最大学习率之间反弹,这可以通过查看绘图并尝试用最陡的梯度来观察区域来找到。

以下是我们的Colab 笔记本上的LR范围测试图(Cense上训练的DenseNet):

img来自在CIFAR10上训练的DenseNet 201的LR范围测试

根据经验,如果你没有做任何花哨的学习率计划,只需将你的恒定学习率设置为低于绘图上最小值的数量级。在这种情况下,这将是粗略的1e-2

关于这种方法最酷的部分,除了它能够很好地工作并且让您节省时间,心理努力和用其他算法找到好的超参数所需的计算之外,它几乎不需要额外的计算。

而其他算法,即网格搜索,随机搜索和贝叶斯优化,要求您运行与训练良好神经网络目标相关的整个项目,LR范围测试只是执行简单,定期的训练循环,并保持跟踪一些变量。

以下是使用最佳学习速率时可以获得的收敛速度类型(来自笔记本中的示例):

img模型的损失与批次匹配最佳学习率

LR范围测试已经由fast.ai团队实施,你一定要看看他们的库来实现LR范围测试(他们称之为学习速率查找器)以及许多其他算法。

对于更复杂的深度学习实践者

如果您有兴趣,还有一个用纯pytorch编写的笔记本实现了上述功能。这可能会让您更好地了解幕后培训流程。检查它在这里

拯救自己的努力

img

当然,所有这些算法,尽管它们都很好,并不总是在实践中起作用。在训练神经网络时还有许多其他因素需要考虑,例如您将如何预处理数据,定义模型,以及实际上使计算机足够强大以运行虚拟网络。

Nanonets提供易于使用的API来训练和部署自定义深度学习模型。它负责所有繁重的工作,包括数据增加,转移学习和是,超参数优化!

Nanonets在其庞大的GPU集群上使用贝叶斯搜索来找到正确的超参数集,而无需担心在最新的显卡和现金上吹钱out of bounds for axis 0

一旦找到最佳模型,Nanonets就会在云端为您提供服务,以便您使用其Web界面测试模型,或使用2行代码将其集成到您的程序中。

告别不完美的模特。

结论

在本文中,我们讨论了超参数和一些优化它们的方法。但这一切意味着什么?

随着我们越来越努力地使AI技术民主化,自动超参数调整可能是朝着正确方向迈出的一步。它允许像你我这样的普通人在没有数学博士的情况下构建令人惊叹的深度学习应用程序。

虽然您可能会认为让计算能力匮乏的模型让那些能够承受上述计算能力的人获得最好的模型,但像AWS和Nanonets这样的云服务有助于实现对强大机器的访问,使深度学习更容易获得。

但更重要的,就是我们真正在这里做什么用数学来解决更多的数学。这很有意思,不仅因为听起来有多元,还因为它有多么容易被误解。

img资源

从打孔卡和跟踪表时代到我们优化功能优化功能以优化功能的时代,我们肯定已经走过了漫长的道路。但是,我们无法建造能够自己“思考”的机器。


这并不是令人沮丧的,至少不是,因为如果人类可以用这么少的东西做这么多,想象一下未来会怎样,当我们的愿景变成我们实际可以看到的东西时。

所以我们坐在一张带衬垫的网椅上,盯着一个空白的终端屏幕,每次按键都给我们一个sudo可以擦干净磁盘的超级大国。

所以我们坐下来,我们整天坐在那里,因为下一个重大突破可能只有一个pip install

以上为机翻结果,请参照原文链接

来了,老弟
-------------    本文结束  感谢您的阅读    -------------
0%