AI前线导读:贝叶斯优化其实就是在函数方程不知的情况下根据已有的采样点预估函数最大值的一个算法。贝叶斯优化的主要目的是与大部分机器学习算法类似,学习模型的表达形式,在一定范围内求一个函数的最大(小)值。针对机器学习的高斯过程(Gaussian Processes,GP)是一个通用的监督学习方法,主要被设计用来解决回归问题。Facebook是全球最大的社交网站,如此庞大体量的在线系统要如何有效地调优呢?让我们看看贝叶斯优化在这方面是如何应用的。
Facebook依靠庞大的后端系统,每天为数十亿人提供服务。在这些后端系统中,许多都有大量的内部参数。例如,支持Facebook的Web服务器使用HipHop虚拟机(HHVM)来处理服务请求,而HHVM有几十个参数用于控制即时编译器。另一个例子是,用于各种预测任务的机器学习。这些系统通常都会涉及多层预测模型,具有大量参数,用于确定模型如何连接在一起,从而产生最终建议。这些参数必须通过使用实时随机实验仔细地进行调优,也称为A/B测试。这些实验中,每一项都可能需要一周或更长时间,因此挑战在于:用尽可能少的实验来优化一组参数。
A/B测试通常用作改进产品的一次性实验。我们的论文《Constrained Bayesian Optimization with Noisy Experiments》,现已在Bayesian Analysis期刊上发表。在这篇论文中,我们描述了如何使用一种被称为贝叶斯优化(Bayesian optimization)的人工智能技术,根据先前测试的结果自适应地设计一轮A/B测试。与网格搜索或手动调优相比,贝叶斯优化可以让我们用更少的实验共同调优更多的参数,并找到更好的值。我们已经在一系列后端系统中使用这些技术进行了数十次参数调优实验,发现它在机器学习系统调优方面特别有效。
AI前线注:论文《Constrained Bayesian Optimization with Noisy Experiments》见:https://projecteuclid.org/euclid.ba/1533866666
A/B测试的贝叶斯优化在线系统参数调优的一种典型方法是手动运行小型网格搜索,分别对每个参数进行优化。贝叶斯优化构建了参数与感兴趣的在线结果之间关系的统计模型,并使用该模型来决定运行哪些实验。这种基于模型的方法具备几个关键的优势,特别是优化在线机器学习系统的方面。
使用参数维度进行更好地扩展:考虑到可运行的在线实验数量的限制,网格搜索或手动调优不能用于同时进行多个参数调优。模型的使用允许贝叶斯优化扩展到更多的参数;我们通常会共同优化多达20个参数。这对于机器学习系统而言很重要,因为在这些系统中,参数之间的交互经常需要进行联合优化(joint optimization)。
减少实验次数:贝叶斯优化允许我们在多轮实验中借用信息:对连续空间中的参数值进行测试不仅可获得有关其结果的信息,还可以获得有关附近点的信息。这使得我们能够大大减少探索空间所需的实验数量。
更好的实验结果:该模型能够识别不太可能产生良好结果的部分空间,并避免对这些参数值进行测试。这改善了实验组内的体验。
理解参数空间:建模允许我们可视化并更好地理解参数如何影响感兴趣的结果。如下图所示,显示了8参数实验的二维切片,这张可视化的典型图是为我们更好地理解参数空间而绘制的:
我们将在本文中介绍贝叶斯优化的高级描述,然后阐述本论文的工作和一些实验结果。
贝叶斯优化贝叶斯优化是一种解决优化问题的技术,其中目标函数(即感兴趣的在线指标)没有分析表达式,而是只能通过一些耗时的操作(即随机实验)来评估。通过数量有限的实验来有效地探索多维空间的关键是建模:真正的目标函数是未知的,但我们可以将模型拟合到目前为止的观察值,并使用该模型来预测参数空间的良好部分,我们应该进行额外的实验。
高斯过程(Gaussian process,GP)是一种非参数贝叶斯模型。因为高斯过程提供了很好的不确定性估计(uncertainty estimates),并且易于分析处理,因此它在贝叶斯优化中工作得很好。它提供了在线指标如何随感兴趣的参数变化的估计值,如下图所示:
AI前线注:高斯过程可参阅https://en.wikipedia.org/wiki/Gaussian_process
上图中的每个数据标记对应于该参数值的A/B测试额度结果。通过平衡探索(高不确定性)和开发(良好的模型估计),我们可以使用GP来决定接下来要测试的参数。这是通过计算采集函数(acquisition function)来完成的,该函数使用任何给定参数值估计进行实验的值。