|
本文约6200字,建议阅读10+分钟。
本文将贝叶斯优化拆解为易于理解的小部分。
许多现代的机器学习算法都涉及大量的超参数。为了高效地使用这些算法,我们需要选择合适的超参数值。我们将在本文中讨论贝叶斯优化,它是一种常用于调整超参数的技术。更通俗地说,贝叶斯优化可用于任何黑盒函数的优化。
挖金子!
以开采金矿为例,我们的目标是在未知的土地上开采黄金。现在假设金子围绕一条线分布,由于开采的高额成本,我们希望通过尽量少的开采次数,沿着这条线找到最大金矿的位置。假设金子的分布函数f(x)如下,该双峰曲线的最大值出现在x=5附近。让我们暂时忽略X轴和Y轴的单位。
最初我们对金子的分布一无所知,但可以通过在不同位置钻孔来了解金子的分布。 然而这种打钻的成本是非常高的。因此我们希望最大程度地减少所需的钻孔次数,同时仍能快速地找到最大的金矿位置。现在我们将讨论金矿开采问题的两个共同目标。
在这个问题中,我们要准确估算新土地上的金子分布。由于成本过高,我们无法在每个位置进行钻探。相反我们应该在能提供更多金矿分布信息的位置进行尝试。这个问题类似于主动学习。
在这个问题中,我们要找到最大金矿的位置,但同样不能在每个位置都进行钻探,而是应该重点关注金子含量高的位置。这个问题类似于贝叶斯优化。我们将很快看到这两个问题是如何关联的,但他们并不是同一问题。
主动学习
在许多机器学习问题中,我们都可以轻易获得未标记的数据。但是标记(或查询)通常要花费很多精力。例如对于语音转文本的任务,注释需要专家手动标记单词和句子。同样在我们的金矿开采问题中,钻孔(类似于标记)也非常昂贵。
主动学习可最大程度地减少标记的成本,同时尽可能提高建模精度。尽管主动学习中有多种方法,但我们要着眼于减少不确定性。该方法建议标记模型不确定性最高的点,我们通常用方差来度量不确定性。
由于我们仅知道函数在几个点上的真实值,因此我们需要一个代理模型来确定函数在其他地方的取值。该代理模型应该能足够灵活以对真实函数进行建模。使用高斯过程(GP)是一种常见的选择,这既因为它具有灵活性,又可以为我们提供不确定性估计。
我们的代理模型以f(x)的先验开始——对于黄金,我们假设先验是平稳分布。在评估点(钻探)时,我们会获取更多数据供代理模型学习,并根据贝叶斯规则进行更新。
每个新数据点都会更新我们的代理模型,从而使模型更接近于真实情况。黑线和灰色阴影区域表示钻孔前后金子分布估算中的平均值(μ)和不确定性(μ±σ)。
上例中我们从均匀分布的不确定性开始。但是在我们第一次更新之后,后验肯定在x = 0.5附近并且不确定性降低。我们可以继续添加更多的训练点,并获得更准确的f(x)的估计。但我们要尽量减少评估次数。因此我们应该使用主动学习“聪明地”选择下一个查询点。尽管有很多方法可以选择恰当的点,但我们将选择最不确定的点。
这为我们提供了以下主动学习程序:
- 选择不确定性最高的点并将其添加到训练集中(通过查询/标记该点);
- 在新的训练集上训练模型;
- 跳转回第一步,直到收敛或预算用尽。
现在让我们可视化此过程,并查看我们的后验在每次迭代(每次钻孔之后)如何变化。
可视化结果表明,我们可以在几次迭代中估算出真实的分布。此外最不确定的位置通常是距离当前评估点最远的点。 在每次迭代中,主动学习都会探索该领域,以使估算结果更好。
贝叶斯优化
在上一节中,我们选取了点以确定金矿预测的准确模型。但是如果我们的目标仅仅是找到最大金矿的位置,该怎么办?当然我们可以通过主动学习以准确估计真实函数,然后找到其最大值。但这听起来就很浪费精力——如果我们仅考虑最大值时,为什么要用评估来对函数中金子含量较低的区域进行改进?
这是贝叶斯优化的核心问题:“根据目前我们所知道的,我们接下来应该评估哪一个点?”请记住评估每个点的成本都很高,因此我们要谨慎选择!在主动学习的情况下,我们选择了最不确定的点以探索函数。但是在贝叶斯优化中,我们需要权衡探索不确定的区域(这些区域可能意外地具有较高的金子含量),而不是集中于我们已经知道具有较高金含量的区域(一种开采)。
我们通过采集函数(acquisition function)来做出此决定。采集函数是一种启发式方法,可根据我们当前的模型来评估一个点。更多有关采集函数的细节请参考该链接(https://botorch.org/docs/acquisition)我们将利用本节的大部分篇幅介绍采集函数的细节。
我们了解了贝叶斯优化的工作原理。在每个步骤中,我们都会通过优化采集函数来确定下一步要评估的最佳点。然后我们更新模型并重复此过程,以确定要评估的下一点。
如果我们只是优化这些采集函数,你可能会想贝叶斯优化的“贝叶斯”是什么。在每个步骤中我们都维护一个模型,来描述每个点的估计值和不确定性,并在每步根据贝叶斯规则对其进行更新。我们的采集函数就是基于此模型的,没有它们一切就不可能!
贝叶斯优化公式化
现在让我们正式介绍贝叶斯优化。我们的目标是找到位置(x∈Rd)对应于函数f的全局最大值(或最小值):f:RdR。 我们提出贝叶斯优化中的一般约束,并将其与我们的金矿开采实例中的约束进行对比。以下内容基于Peter Fraizer在Uber有关贝叶斯优化的PPT/演说:
为了解决这个问题,我们将遵循以下算法:
- 我们首先选择一个代理模型来对真实函数f建模并定义其先验。
- 给定一组观察值(函数评估),请使用贝叶斯规则获取后验。
- 使用采集函数α(x),它是后验的一个函数,来确定下一个采样点:
4.将新采样的数据添加到观测值集中,然后执行步骤2,直到收敛或用尽预算。
采集函数
下图显示了(x)的计算。 橙色线代表当前的最大值(加上一个)或。 紫色区域显示每个点的概率密度。灰色区域显示低于当前最大值的概率密度。 紫色区域在每个点上的“面积”表示“当前最大值提升的可能性”。通过PI标准评估的下一点(蓝色虚线所示)是x = 6。
PI使用在勘探与开发之间取得平衡。的增加会导致倾向σ较大的位置,因为它们的概率密度分布更大。
现在让我们看看实际的PI采集函数。 我们从 = 0.075开始。
从上图中,看到我们在几次迭代中达到了全局最大值。在前几次迭代中,我们的代理模型在x∈[2,4]中具有较大的不确定性。采集函数先探索具有高期望值的区域,这导致了区域x∈[2,4]具有高度不确定性。此观察结果还表明,我们无需构造黑盒函数的准确估计即可找到其最大值。
上图中的增加到了0.3,这使我们能够进行更多探索。但是似乎我们正在探索的已经超出了要求的范围。
如果再增加会怎样?
如图看到我们使情况变得更糟了!我们的模型现在使用 = 3,并且当我们接近在全局最大值附近时,我们将无法进一步探索。而且随着探索的深入,设置变得类似于主动学习。上面的快速实验可以帮助我们得出结论:控制着PI采集函数中的探索程度。
像PI采集函数一样,我们可以通过修改来缓和EI采集函数的探索量。
对于 = 0.01,我们经过几次迭代就接近了全局最大值。
现在,我们增加来探索更多。
正如我们预期的那样,将值增加到 = 0.3会使采集函数进行更多的探索。与早期的评估相比,我们看到了更少的开发。我们看到它只评估全局最大值附近的两个点。
让我们进一步增加。
这比以前好吗?结果是肯定的,也是否定的。我们看到在给定 = 3的情况下,我们在这里进行了过多的探索。我们很快达到了全局最大值,但却没有利用此方法在全局最大值附近获得更多收益。
汤普森采样
另一个常见的采集函数是汤普森采样。在每一步中,我们都会从代理的后验中抽取一个函数进行采样并对其进行优化。例如在采金的情况下,我们将根据证据对可能的金矿分布进行采样,并在可能性达到顶峰时进行评估(钻探)。
下图显示了从后验学习到的关于黄金开采问题的三个采样函数。训练数据由点x = 0.5和相应的函数值构成。
我们可以通过两个观测来理解汤普森采样背后的概念:
- 具有高不确定性(σ(x))的位置在从替代后验采样的函数值中有较大方差。因此在高度不确定的区域中,样本很有可能有很高的值。优化此类样本可以帮助探索。
例如,三个样本(样本#1,#2,#3)在接近x = 6附近的方差较高。优化样本3将通过评估x = 6来帮助探索。
- 采集的函数必须通过当前最大值,因为在评估过的位置不确定性为0。因此优化来自替代后验的样本可以确保开发行为。
作为此行为的一个示例,我们看到以上所有采样函数都通过x = 0.5处的当前最大值。如果x = 0.5接近全局最大值,那么我们能够利用并选择更好的最大值。
上图使用汤普森采样进行优化。同样我们可以在相对较少的迭代中达到全局最优。随机性
到目前为止,我们一直在使用智能采集函数。我们可以通过随机采样x来创建随机采集函数。
上图显示随机采集函数的性能还不错!但是如果我们的优化更为复杂(更多维度),那么随机采集的效果可能会很差。
采集函数总结
现在让我们总结与采集函数相关的核心思想:
- 它们是评估点效用的启发式方法;
- 它们是替代后验的函数;
- 他们将勘探与开发结合起来;
- 评估费用不高。
其他采集函数
到目前为止,我们已经看到了各种采集函数。提出采集函数的一种简单方法是进行探索/利用。
替代模型的均值和不确定性的线性组合就是一种能简单的权衡勘探/开发(exploration/exploitation)的采集函数。该模型的均值表示开发(我们模型的知识),而模型的不确定性则表示探索(由于我们的模型缺乏观测)。
UCB采集函数背后的思想是权衡代理的均值与代理的不确定性之间的重要性。上面的λ是可以控制开发和探索侧重的超参数。
我们可以通过组合现有的采集函数来进一步形成新的采集函数,尽管这种组合的现实解释性可能比较模糊。我们要结合两种方法的可能原因之一是要克服各个方法的局限性。
也可以是PI和EI的线性组合。我们知道PI着重于改善的可能性,而EI着重于预期的改善。基于λ的值,这样的组合可以帮助在两者之间进行权衡。
在谈论GP-UCB之前,让我们快速谈谈regret。想象一下,如果最大黄金为a单位,而我们的优化取而代之的是在包含b <a单位的位置取样,那么我们的regret是a-b。如果我们在n次迭代中累积regret,我们将得到所谓的累积regret。GP-UCB的公式如下:
其中t是时间步长。
Srinivas等制定了β的时间表,理论上证明了该时间表可最大程度地减少累积regret。
比较
现在我们比较不同采集函数在金矿开采问题上的表现。对于每个采集函数,我们都使用了最佳超参数。我们用不同的随机种子运行了几次随机采集函数,并绘制了每次迭代时感知到的平均金含量。
最初随机策略可与其他采集函数媲美或优于其他采集函数。但是通过随机策略感知的最大黄金增长缓慢。相比之下,其他采集函数可以在少量迭代中找到一个好的解决方案。实际上大多数采集函数仅需3次迭代就可以非常接近全局最大值。超参数调整
在讨论贝叶斯优化超参数优化之前,我们简单地区分一下超参数和参数:超参数要在学习之前设置,然而参数要从数据中学习。为了说明差异,我们以Ridge回归为例。
在Ridge回归中,权重矩阵θ是参数,正则化系数
是超参数。如果我们通过梯度下降优化来解决上述回归问题,我们将进一步引入另一个优化参数,学习率a。
贝叶斯优化最常见的用例是超参数调整:在机器学习模型上找到性能最佳的超参数。
当训练模型并不昂贵且耗时的时候,我们可以进行网格搜索以找到最佳超参数。但是如果函数评估的成本很高,则网格搜索不可行,例如大型神经网络需要花费数天的时间进行训练。此外就超参数的数量而言,网格搜索的缩放比例很差。
我们转向贝叶斯优化,以抵消评估黑盒模型(准确性)的高额成本。
案例1-支持向量机(SVM)
在此示例中,我们使用SVM对sklearn的卫星数据集进行分类,并使用贝叶斯优化来优化SVM超参数。
- γ-修改SVM内核的行为。直观地,它度量单个训练样本的影响;
- C修改分类的松弛度,C越高,SVM对噪声越敏感。
现在让我们看一下有两个类和两个特征的数据集。
让我们用贝叶斯优化找到该分类任务学习的最佳超参数。注意:下图中的真实的准确率(Ground Truth Accuracies)是针对每个可能的超参数计算的,仅用于展示目的。在实际应用中我们没有这些值。通过运行高粒度网格搜索找到了<C,γ>的最佳值。
上图中的滑块,显示了“改善概率”(PI)采集函数在寻找最佳超参数方面的工作。
上图中的滑块,显示了在寻找最佳超参数时,“预期改进”(EI)采集函数的工作。比较
下图比较了不同的采集函数。我们多次运行随机采集函数以求平均结果。
经过七次迭代,我们所有的采集都击败了随机采集函数。我们看到随机方法最初看起来似乎要好得多,但是它无法达到全局最优,而贝叶斯优化能够相当接近。贝叶斯优化最初性能不佳可能归因于初始探索。
结论与总结
在本文中,我们研究了用于优化黑盒函数的贝叶斯优化。贝叶斯优化非常适用于函数评估成本昂贵,从而使网格搜索或穷举搜索变得不切实际的情况。我们研究了贝叶斯优化的关键组成部分。
首先我们研究了使用替代函数(有目标函数空间的先验)对黑盒函数建模的过程。接下来我们学习了贝叶斯优化中的“贝叶斯”,函数评估被用作获取替代后验的数据。我们学习了采集函数,它是代理后验的函数,并按顺序进行了优化。这种新的顺序优化成本很低,因此对我们有用。我们还研究了一些采集函数,并展示了这些不同函数如何平衡勘探和开发。最后我们看了一些贝叶斯优化的实际示例,这些示例用于优化机器学习模型的超参数。我们希望您喜欢本文,并希望您已准备好利用贝叶斯优化的力量。如果您想探索更多内容,请阅读下面的“进一步阅读”部分。我们还提供了repository来复现整个文章。
附链接:
https://github.com/distillpub/post--bayesian-optimization
原文标题:
Exploring Bayesian Optimization
Breaking Bayesian Optimization into small, sizeable chunks.
原文链接:https://distill.pub/2020/bayesian-optimization/
作者:Apoorv Agnihotri,Nipun Batra
翻译:王雨桐 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|