有一个计算量很大的函数f(x),甚至不一定是解析表达式,而且其导数未知。你的任务是找到全局最小值。当然,这个任务很难,比机器学习中的其他优化问题难得多。例如,梯度下降可以采用函数的导数并利用数学捷径来更快地评估表达式。此外,在某些优化场景中,函数的计算成本很低。如果一个简单的网格搜索可以在几秒钟内为输入值x获得数百个变量结果,那么它的效果会更好。此外,还可以使用大量非传统的非梯度优化方法,例如粒子群优化或模拟退火。但是,当前的任务并不是那么先进。优化水平有限,主要包括:计算成本高。理想情况下,我们能够充分查询函数以从根本上复制它,但所采用的优化必须在有限的输入样本上起作用。导数未知。梯度下降及其风格仍然是最流行的深度学习方法是有原因的,有时甚至在其他机器学习算法中也是如此。导数给优化器一种方向感,但我们没有导数。需要找到全局最小值,即使对于像梯度下降这样精细的方法也是一项艰巨的任务。模型需要一些机制来避免陷入局部最小值。我们的解决方案是贝叶斯优化,它为处理类似于场景描述的问题提供了一个简洁的框架,以最紧凑的步数找到全局最小值。构造函数c(x)的假设示例,或给定输入值x的模型成本。当然,这个函数的样子对优化器是隐藏的——这就是c(x)的真实形状,用行话来说就是“目标函数”。贝叶斯优化通过代理优化方法完成这项任务。代理函数是指根据样本点形成的目标函数的近似函数。代理函数可以帮助确定哪些点是最小可能值。我们决定从这些有前途的地区获取更多样本,并相应地更新代理函数。在每次迭代中继续查看当前的代理函数,抽样以了解有关感兴趣的相关领域的更多信息并更新函数。请注意,代理函数的计算成本要低得多。例如y=x是近似函数,计算成本较高,即在一定范围内y=arcsin((1-cosconverx)/sinx))。经过一定次数的迭代,最终会得到一个全局最小值,除非这个函数的形状很奇怪(因为它有很大且不稳定的波动),那么就会出现一个比优化更有意义的问题:你的数据哪里出了问题?让我们来欣赏贝叶斯优化之美。它不对函数做任何假设(除了首先假设它本身是可优化的),不需要关于导数的信息,并且能够巧妙地使用不断更新的近似函数来使用常识推理,而代价是原始函数的高成本目标函数评价完全不是问题。这是一种基于替换的优化方法。那么,贝叶斯理论到底是什么?贝叶斯统计和建模的本质是根据新的信息更新先前的函数(先验函数),产生更新后的函数(后验函数)。这正是代理优化在这种情况下所做的,并且可以通过贝叶斯理论、公式和含义得到最好的表达。仔细看看代理函数,它通常由一个高斯过程表示,可以被认为是一个骰子,返回一个适合给定数据点(例如sin、log)而不是数字1到6的函数。这过程返回几个函数,所有函数都带有概率。左图:由四个数据点的几个高斯过程生成的函数。右:函数聚合。|资料来源:OscarKnagg使用GP而不是其他曲线拟合方法来模拟代理函数,因为它本质上是贝叶斯。GP是一种概率分布,类似于事件最终结果的分布(例如,概率为1/2的掷硬币),但涵盖了所有可能的函数。例如定义当前数据点集合为40%可以用函数a(x)表示,10%可以用函数b(x)表示。通过将代理函数表示为概率分布,可以通过固有概率贝叶斯程序更新信息。当引入新信息时,可能只有20%的数据可以用函数a(x)表示。这些变化受贝叶斯公式支配。如果使用多项式回归来拟合新数据点,即使不是不可能,也会变得更加困难。代理函数表示为概率分布,先验函数更新为“获取函数”。此函数负责在探索和测试命题之间进行权衡,这些命题会驱动问题的新点:?“开发函数”尝试进行抽样,以便代理函数预测最佳拟合最小值,这是使用已知的可能点。然而,如果我们已经对一个区域进行了足够的探索,那么继续使用我们已经知道的东西将收效甚微。·“探索功能”尝试在不确定性高的地方进行采样。这确保了没有主要的空间区域是未知的——全球最小值可能恰好在那里。鼓励更多开发和更少探索的采集功能将导致模型仅停留在它首先找到的最小值(通常是本地-“只去有光的地方”)。相反,模型一开始不会停留在局部或全局的最小值,而是在微妙的平衡中寻求最好的结果。用a(x)表示获取函数,必须同时考虑探索和开发。常见的获取函数包括预期改进和最大改进概率,它们都衡量特定输入值在未来给定先验信息(高斯过程)时成功的概率。综上所述,贝叶斯优化的原理如下:初始化一个高斯过程“代理函数”的先验分布。选择多个数据点x以最大化在当前先验分布上运行的采集函数a(x)。评估目标成本函数c(x)中的数据点x以获得结果y。用新数据更新高斯过程的先验分布,产生后验(在下一步中将成为先验)。多次迭代重复步骤2-5。解释当前的高斯过程分布(以非常低的成本)以找到全局最小值。贝叶斯优化是在代理优化的基础上建立概率的概念。这两个概念的结合创造了一个强大的系统,其应用范围从医药产品开发到自动驾驶汽车。但是,它最常用于机器学习中的超参数优化。比如你要训练一个gradientboosting分类器,有几十个参数,从学习率到最大深度再到最小杂质分裂值。在此示例中,x表示模型的超参数,c(x)表示模型的性能,给定超参数x。使用贝叶斯优化的主要目的是处理评估输出非常昂贵的情况。首先,需要使用这些参数构建一个完整的树集合,其次,它们需要经过多次预测,这对集合来说是极其昂贵的。可以说,神经网络更快地评估一组给定参数的损失:简单地重复矩阵乘法,这是非常快的,特别是在专用硬件上。这是使用梯度下降的原因之一,梯度下降需要反复查询才能看到它的去向。图源:unsplash总而言之,我们的结论是:·代理优化使用代理函数或近似函数通过采样来估计目标函数。·贝叶斯优化通过将代理函数表示为概率分布,将代理优化置于概率框架中,概率分布根据新信息进行更新。获取函数用于评估探索空间中的一个点将产生“好”结果的概率,给定当前已知的先验知识,即平衡探索和开发的问题。主要在评估目标函数很昂贵时使用贝叶斯优化,通常用于超参数调整。有很多像HyperOpt这样的库可以做到这一点。你感受到贝叶斯优化的美妙了吗?本文转载自微信公众号“读芯”,作者读芯。转载本文请联系核心阅读公众号。
