世界上最好的算法:贝叶斯优化(数学和直觉角度)
世界上最好的算法:贝叶斯优化。本文将尝试从数学和直觉两个角度来介绍作者对贝叶斯优化的深(粗)和深(浅)理解。
背景介绍
深度神经网络近年来开始流行,但神经网络超参数的选择一直是个问题,大多数时候都是根据形而上学的指导手动调整所有参数。和奇异博士一样,他被认为是奥术大师。为此,贝叶斯优化(Bayesian Optimization,以下简称BO)开始被很多人用来调整神经网络的超参数。在这方面,BO的主要优点是试验效率,即BO可以使用很少的步骤(每个步骤可以被认为是用一组超参数训练你的神经网络)来找到更好的超参数组合。另一个原因是BO不需要求导数(梯度),一般情况下无法求出神经网络超参数的导数。这两个原因使得BO成为当今世界上调优超参数的最佳方法(当然我可以有风扇过滤器)。
事实上,BO不仅仅用于调整超参数,因为它是一种非常通用的无梯度全局优化方法,所以它的适用场景一般有两个特点:(1)计算待优化的函数。非常耗时耗力,比如上面提到的神经网络中的超参数问题。每次训练神经网络都会烧毁大量GPU; (2)要优化的函数没有派生信息。所以,如果你遇到的问题有以上两个特点,那就闭着眼睛用BO吧。当然,这么说还是有点太激烈了,因为有一些特殊的问题结构也会影响BO的效果,比如需要调整的参数太多(类似高维BO的问题),或者参数中离散参数过多。如果这样的话,BO的效果就会受到影响。这两种场景当然也是BO当前未解决的两个问题。
贝叶斯优化算法
BO算法其实很简单理解。例如,我们要优化的函数是,其中域
通常是紧凑的。为了简单起见,还有一些论文假设
是离散的。接下来,假设我们要解决的优化问题是
。
BO是一个顺序决策问题,也就是说,我们有很多重复。在每次迭代中,我们选择一个输入
(例如,我们为神经网络选择一组超参数),然后我们使用所选的
来查看相应函数
的值
(例如,这组超参数对应的神经网络的验证精度);但大多数情况下我们只能观察到一个有噪声的值,即观察到的是
,其中
是零均值高斯分布:
,
是噪声方差。然后,我们将新观察到的一组值
添加到所有观察到的数据中,然后执行下一次迭代
。
此时,整洁的同学可能已经注意到了,BO问题的核心是如何在每次迭代中选择观察哪一个。 BO中,通过优化另一个函数:集合函数
来选择
;即
。好同学可能已经注意到了,我们把一个优化问题替换成了多个优化问题,所以这个获取函数应该是非常非常容易优化的。另外,这个采集函数的设计中最重要的一点就是它必须有一个很好的平衡,这就导致了传说中的exploration-exploitation trade-off:当我们选择下一个点
时,我们都会尝试点在我们之前没有尝试过的领域(探索),并且想要根据我们迄今为止观察到的所有点来选择预测的
值相对较大的点(探索)。为了很好地平衡这两点,对于域中的任意点
,我们不仅需要预测对应的
的值(用于开发),还需要知道对应的
的不确定性(用于探索)。此时,最佳拟合模型已准备好出现:高斯过程(GP)。
关于GP这里就不详细说了。知乎上有很多精彩的文章供你回顾。这里大家需要知道的是,如果我们假设我们已经完成了BO的次迭代,即我们现在拥有的数据是
,那么根据GP的预测,整个域中的任意点
对应的值服从一维高斯分布,对应的后验均值和后验方差可以写成闭合形式。 GP的公式这里不再重复。我们将相应的均值和方差表示为
和
。它们可以分别理解为用于开发和探索的信息。这应该不难理解,因为预测的后验均值对应于我们的预测值
,然后后验方差对应于我们的不确定性
。现在上面提到的集合函数
可以通过
和
来计算。目前常用的采集函数如下:
高斯过程-上置信界(GP-UCB):
这种形式可以说非常简单,就是后验均值和后验标准的加权和偏差;它也很简单 很容易理解。加权和中的两项可以理解为分别对应于exploitation和exploration。 GP-UCB[1]是基于多臂老虎机中的上置信界(UCB)算法提出的,所以它的一个很大的优点是其理论是完善的。这一点在下面讲BO理论的时候会再次提到。 。式中的值是根据理论分析得出的,随着时间的推移而增大;但在实际应用中,很多人为了简单起见,直接将
设置为常数,这也是可以接受的。
预期改进(EI):
EI[2]的假设是不存在观测噪声,即我们的每次迭代都可以直接观测到而不是
。首先定义
,即
是我们在前
迭代中观察到的最大值。然后,EI策略定义为
,其中和
分别是标准高斯分布的累积分布函数(CDF)和概率密度函数(PDF)。请注意,第一行的期望是针对
的后验分布。之前讲GP的时候就提到过这个。其分布是一维高斯分布:
。第二个等号可以直接导出。吃得太饱的时候,可以自己尝试一下。 Expectation中的
可以简单理解为对应函数
的值相对于当前观测到的最大值提高了多少,所以称为改进函数,EI的名字也由此而来。另请注意,前面提到的不存在观测噪声只是一个假设。实际使用时,只需插入当前位置观察到的最大值即可。 EI 被广泛使用,据说其结果往往非常好。
(预测)熵搜索:
熵搜索(ES)和预测熵搜索(PES)是两种基于信息论的策略。在这两个框架下,我们尝试通过观察输入点来增加关于
的分布(
)的信息,或者减少我们对
分布的不确定性。众所周知,信息论中使用熵来衡量分布的不确定性;也就是说,分布的熵越大,我们对该分布的不确定性就越大。熵搜索(ES)衡量的是由于观测
而引起的
的熵的预期减少:
上式中的第一项是根据当前存在的观测结果在周围计算得到的熵分布;期望中的第二项是
周围的熵,我们通过将
添加到已经观察到的结果
(更新GP后验之后)得到;该期望针对对应于
:
的噪声观测值
的后验分布。因此,当我们减去这两项时,我们得到的是通过观察
,我们可以(在预期中)减少
分布的熵。
预测熵搜索(PES)利用条件信息增益的对称性,在ES的基础上进行智能变换:
PES和ES的值是相同的,因为它只是一个变换。这样做的好处是PES的采集函数更容易计算。但实际上,你能感觉到ES和PES都很难计算,所以中间需要很多近似,比如域的离散化、蒙特卡罗采样来近似的分布等等。
Thompson Sampling (TS):
除了上面提到的 GP-UCB 之外,TS 是另一种从多臂 bandit 领域搬来的算法。该算法非常简单。第一步是从当前GP后验中的样本中得到一个函数(记住GP是函数上的分布,所以每个样本得到一个函数),可以表示为,然后观察到的是:
关于GP抽取样本的问题已经有很多研究,所以TS算法不仅看起来简单,而且使用起来也非常简单。但不知道为什么TS在BO中没有广泛使用。我个人的猜测是,很难找到合适的应用场景,因为大多数能使用TS的场景也可以使用GP-UCB,而TS的理论分析是基于GP-UCB的。分析扩展,所以很难找到可以使用TS但不能使用GP-UCB的场景。
其他采集函数
除了上述之外,还有几个稍微少用的采集函数,比如
- 改进概率(PI):这个应该算是比较经典的算法了。但我感觉现在已经很少用了。
- 知识梯度(KG):这是来自运筹学(OR)老大Peter Frazier的交叉攻击,因为KG策略是Frazier在OR领域的著名作品。这几年老板大量使用KG在BO工作。
- 最大值熵搜索:这是基于 PES 将
的分布替换为
的分布。
贝叶斯的优化理论
先生。鲁迅曾说过:无悔的BO算法是灵魂束缚的,。那么接下来就是重头戏了:BO的理论。
贝叶斯优化研究前沿
结论
参考文献
[1] Srinivas, N., et.鳗鱼。强盗设置中的高斯过程优化:无遗憾和实验设计。 ICML 2010。
[2] Jones, D. 等。等人,昂贵的黑盒函数的有效全局优化。 J.全局优化,1998。
作者:戴忠祥来源:知乎
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
code前端网