数十亿用户的Facebook如何进行贝叶斯系统调优?(2)

假设我们要尝试决定是否应该使用参数配置x进行实验。在x处的观察值是多少?这个问题的答案取决于效用函数(utility function)。假设我们计划在观察x之后结束优化,优化的效用就是它找到的最佳点的值。在这种情况下,观察x的效用就是它的f(x)值比当前最佳值提高了多少,我们称之为x*(假设我们正在最大化):

I(x) = max(0, f(x) – f(x*)).

I(x)是一个随机变量,因为f(x)是一个随机变量,但f(x)的后验由GP模型解析可知。期望增量(expected improvement,EI)获取函数选择在GP后验下使I(x)的期望值最大化的点x。EI是一种常用的采集函数,因为这种期望具有易于计算的解析形式,在实践中表现良好。如下图所示,图上为模型拟合的EI值:

贝叶斯优化

将EI最大化的参数(红色虚线)在下次实验中进行测试。然后根据该实验结果更新模型,并重新计算EI以选择新的候选项。循环重复执行上述操作,直到搜索完成,如上面的动画中多次迭代所示。

高斯过程假设响应面是平滑的,这使我们能够从参数空间中的附近观测中借用信息。它使我们确信已彻底探索了这个空间,而无需实际测试每个可能的参数值。

在线实验中我们采用的贝叶斯优化方法

使用贝叶斯优化对在线系统进行调优有几个挑战,这些在线系统优化催生了本文中描述的工作。

噪声:通过随机实验观察到的噪声水平通常相当高,特别是与典型的贝叶斯优化(如超参数调优)的机器学习应用相比。

约束:除了要优化的指标之外,还必须始终满足约束条件。这些约束通常是噪声指标本身,因此我们必须考虑他们的可行性的后验分布。

批量实验:因为在线实验非常耗时,所以它们通常不以线性顺序运行,而是在大批量的并行测试中运行,如上面的动画所示。在我们的实验中,我们经常一次评估多达50种配置,因此需要贝叶斯优化过程,它可以返回大批待评估的点。

对EI的扩展可以处理这些问题,但是噪声通常是通过启发式方法处理的,当噪声水平达到典型的A/B测试时,我们发现这种方法的性能很差。对于观测噪声,我们现在不仅在f(x)的值上存在不确定性,而且我们也有其他不确定性:其中观测是当前最好的,x*及它的值f(x*)。处理观测噪声的一种常见方法是忽略它,并使用嵌入式估计量(plug-in estimator),通过替换GP的均值估计f(x*)。

在本文中,我们阐述了一种处理观测噪声的贝叶斯方法,其中包含了EI所期望的由噪声引起的后验不确定性。也就是说,我们不计算I(x)在f(x)后端的期望,而是计算在f(x)和f(x*)的联合后验下计算它。这种期望不再具有EI这样的封闭形式,但我们可以很容易地从GP后验中得到过去观测值f(x_1),...,f(x_n)绘制样本,并且条件分布f(x)|f(x_1),...,f(x_n)具有封闭形式。因此,期望值服从蒙特-卡洛近似值(Monte Carlo approximation),其中我们对f(x_1),...,f(x_n)进行采样,然后采用条件期望E[I(x) | f(x_1), …, f(x_n)]的封闭性是的f(x_1),...,f(x_n)]。我们在论文中证明了拟蒙特卡洛积分(quasi-Monte Carlo integration)能够很好地估计这种期望并能有效地进行优化。

Facebook的贝叶斯优化结果

我们使用了本文中描述的方法来优化Facebook上的多个系统,并在文中描述了两个这样的优化。首先是优化Facebook排名系统之一中的6个参数。索引器中涉及到这些特定的参数,这些参数将聚集要发送到预测模型的内容。第二个示例是优化HHVM的7个数字编译器标志。此优化的目标是降低Web服务器上的CPU使用率,同时限制不增加峰值内存使用率。下图显示了测试的每个配置的CPU使用率(总计100),以及每个点满足内存约束的概率:

贝叶斯优化

前30次迭代是随机生成的配置(直到绿线),然后使用贝叶斯优化来确定要评估的参数配置。在这个实验以及我们运行过的其他实验中,我们发现贝叶斯优化能够找到更好的配置,更有可能满足约束条件。在此优化中发现的编译器标志设置是在开源HHVM中设置的新默认值。

我们发现,利用本文描述的方法,贝叶斯优化是一种通过噪声实验进行优化的有效且强大的工具。它取代了手动探索多维空间的方式,让工程师的生活变得更加轻松,并改善了后端系统和机器学习基础设施的在线性能。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/12403.html