机器学习:介绍高维超参数调整
如果您一直在努力调整机器学习(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一样,您需要考虑我们上面提到的两种情况。
如果最佳候选者非常靠近边缘,则您的范围可能会偏离,应该移动并重新采样。此外,在选择第一个好的候选者后,尝试重新采样到更精细的值范围。
总之,这些是关键的要点。
- 如果要调整的参数超过两个或三个,请选择随机搜索。它比网格搜索更快/更容易实现和收敛。
- 使用适当的比例来选择您的值。来自对数空间中的均匀分布的样本。这将允许您对在参数范围内均匀分布的值进行采样。
- 无论是随机搜索还是网格搜索,都要注意您选择的候选项。确保正确设置参数的范围,并尽可能优化最佳候选项。