机器学习:介绍高维超参数调整

机器学习:介绍高维超参数调整

如果您一直在努力调整机器学习(ML)模型,那么您正在阅读正确的文章。

超参数调整指的是为学习算法找到最佳参数值集的问题。

通常,选择这些值的过程是一项耗时的任务。

即使对于像线性回归这样的简单算法,找到超参数的最佳集合也很困难。在深度学习中,事情变得更糟。

优化神经网络(NN)时要调整的一些参数包括:

  • 学习率
  • momentum
  • 正则化
  • dropout probability
  • 批归一化

在这篇文章中,我们讨论了优化机器学习(ML)模型的最佳实践。这些实践主要出现在需要优化的参数数量超过两三个时。

Grid Search的问题

当我们有少量参数需要优化时,网格搜索通常是一个不错的选择。

对于两个甚至三个不同的参数,这可能是一种方法。

对于每个超参数,我们定义一组要研究的候选值。

然后,我们的想法是尽可能地尝试各个参数值的所有可能组合。

对于每一个组合,我们训练和评估不同的机器学习模型。

最后,我们保留了泛化误差最小的一个。

机器学习:介绍高维超参数调整

Grid Search的主要问题是它是一个指数时间算法。它的成本随着参数的数量呈指数增长。

换句话说,如果我们需要优化p参数并且每个参数最多需要v值,它将在O(vᵖ)时间内运行。

此外,Grid Search在探索超参数空间方面并不像我们想象的那样有效。

再看看上面的代码。使用此设置,我们将训练总共256种不同的机器学习模型。请注意,如果我们决定再添加一个参数,则实验数量将增加到1024。

但是,此设置仅针对每个超参数探索四个不同的值。就是这样,我们训练了256个模型,只研究了学习率,正则化等四个值。

此外,Grid Search通常需要重复试验。以上述代码的“learning_rate_search”值为例。

learning_rate_search = [0.1, 0.01, 0.001, 0.0001]

假设在第一次运行(256次模型试验)之后,我们得到学习率值为0.01的最佳模型。

在这种情况下,我们应该尝试通过在0.01左右的grid上“缩放”来优化搜索值,希望找到更好的值。

为此,我们可以设置一个新的Grid Search,重新定义学习率搜索范围,如:

learning_rate_search = [0.006, 0.008, 0.01, 0.04, 0.06]

但是如果我们得到学习率值最好的模型是0.0001呢?

由于该值位于初始搜索范围的最边缘,我们应该移动这些值,并使用不同的集合再次尝试,如:

learning_rate_search = [0.0001, 0.00006, 0.00002]

在找到一个合适的候选项后,可以尝试改进范围。

所有这些细节都只强调了多耗时的超参数搜索。

更好的方法 - 随机搜索

如何随机选择我们的超参数候选值呢?尽管看起来并不直观,但这个想法几乎总是比Grid Search更好。

一点直觉

请注意,某些超参数比其他参数更重要。

例如,学习率和momentum factor比其他所有因素更值得调整。

但是,除了上述例外,很难知道哪些在优化过程中扮演了主要角色。事实上,我认为对于不同的模型架构和数据集,每个参数的重要性可能会发生变化。

假设我们在优化两个超参数——学习率和正则化强度。同时,要考虑到只有学习率才是问题的关键。

在Grid Search的情况下,我们将运行9个不同的实验,但只尝试3个候选的学习率。

机器学习:介绍高维超参数调整

Image Credit: 随机搜索超参数优化

现在,看看如果我们对候选项进行均匀随机抽样会发生什么。在这个场景中,我们实际上为每个参数探索了9个不同的值。

如果您还没有被说服,假设我们正在对三个超参数进行优化。例如,学习率、正则化强度和momentum。

机器学习:介绍高维超参数调整

使用Grid Search优化3个超参数

对于Grid Search,我们将运行125次训练,但只能探索每个参数的五个不同值。

另一方面,使用随机搜索,我们将探索各自的125个不同值。

怎么做

如果我们想尝试学习率的值,比如在0.1到0.0001的范围内,我们会:

机器学习:介绍高维超参数调整

注意,我们是在log scale上从均匀分布中采样值。

你可以把-1和-4(学习率)看作区间[10e- 1,10e -4]的指数。

如果我们不使用log scale,采样在给定的范围内就不会是均匀的。换句话说,你不应该尝试采样值

机器学习:介绍高维超参数调整

在这种情况下,大多数值不会从“有效”区域采样。实际上,考虑到本例中的学习率样本,72%的值将落在区间[0.02,0.1]中。

此外,采样值中的88%将来自区间[0.01,0.1]。也就是说,只有12%的学习率候选者,3个值,将从区间[0.0004,0.01]中采样。不要那样做。

在下图中,我们从[0.1,0.0004]范围内抽取25个随机值。左上角的图显示了原始值。

在右上角,注意72%的采样值在[0.02,0.1]区间内。88%的值位于[0.01,0.1]范围内。

底部图显示了值的分布。只有12%的值在[0.0004,0.01]区间内。要解决此问题,请在log-scale中从均匀分布中对值进行采样。

机器学习:介绍高维超参数调整

正则化参数会发生类似的行为。

另外,请注意,与Grid Search一样,您需要考虑我们上面提到的两种情况。

如果最佳候选者非常靠近边缘,则您的范围可能会偏离,应该移动并重新采样。此外,在选择第一个好的候选者后,尝试重新采样到更精细的值范围。

总之,这些是关键的要点。

  1. 如果要调整的参数超过两个或三个,请选择随机搜索。它比网格搜索更快/更容易实现和收敛。
  2. 使用适当的比例来选择您的值。来自对数空间中的均匀分布的样本。这将允许您对在参数范围内均匀分布的值进行采样。
  3. 无论是随机搜索还是网格搜索,都要注意您选择的候选项。确保正确设置参数的范围,并尽可能优化最佳候选项。

相关推荐