机器之心Pro|用简单术语让你看到贝叶斯优化之美( 二 )


贝叶斯统计和建模和本质是基于新信息先验(之前的)信念 , 然后得到更新后的后验(之后的)信念 。 这里的代理优化就是这样工作的 , 使得其能通过贝叶斯系统、公式和思想很好地表示 。
我们来更仔细地看看这个代理函数 , 其通常表示成高斯过程 , 这可被看作是一种掷骰子过程 , 返回的是与给定数据点拟合的函数(比如 sin 或 log) , 而不是数字 1 到 6. 这个过程会返回若干函数以及它们各自的概率 。
机器之心Pro|用简单术语让你看到贝叶斯优化之美
本文插图

左图:基于 4 个数据点生成的几个基于高斯过程的函数;右图:将这些函数聚合之后 。
Oscar Knagg 这篇文章直观地介绍了高斯过程的工作方式:https://towardsdatascience.com/an-intuitive-guide-to-gaussian-processes-ec2f0b45c71d
为什么要使用高斯过程来建模代理函数 , 而不是使用其它曲线拟合方法?这是因为高斯过程本质上就是贝叶斯模式的 。 高斯过程是一种概率分布 , 就像一个事件的最终结果分布一样(比如掷硬币的 1/2 概率) , 只不过高斯过程是在所有可能的函数上的分布 。
举个例子 , 我们也许可以定义当前的数据点集可由函数 a(x) 表示 40%、由函数 b(x) 表示 10% 等等 。 通过将代理函数表示成概率分布 , 可使用新信息 , 通过固有的概率贝叶斯过程来完成更新 。 也许当新信息被引入时 , a(x) 函数又只能表示 20% 的数据了 。 这样的变化受贝叶斯公式的约束 。
这会使得类似于新数据点的多项式回归拟合这样的目标难以完成甚至不可能完成 。
表示成先验概率分布的代理函数会通过一个「获取函数(acquisition function)」而更新 。 这个函数负责在探索与利用权衡的基础上 , 对提议的新点进行测试 。

  • 利用的目标是采样代理模型能很好地预测目标函数的地方 。 这会用到已知的有潜力的位置 。 但是 , 如果我们已经充分探索了某个特定的区域 , 再继续利用已知信息也收益不大了 。
  • 探索的目标是采样不确定度较高的位置 。 这能确保空间中不留下未探索的主要区域——全局最小值可能就藏在此处 。
太过重视利用而不太重视探索的获取函数会让模型驻留于其发现的第一个最小值(通常是局部最小值) 。 反过来 , 重探索而轻利用的获取函数则一开始就不会留在某个最小值 , 不管是局部最小值还是全局最小值 。 因此 , 为了得到很好的结果 , 需要达到微妙精巧的平衡 。
获取函数 a(x) 必须兼顾探索和利用 。 常见的获取函数包括预期提升和提升的最大可能性 , 所有这些衡量的都是给定有关先验(高斯过程)的信息下 , 一个特定输入在未来产生回报的概率 。
我们归总一下这些知识点 。 贝叶斯优化的执行方式为:
  1. 初始化一个高斯过程「代理函数」先验分布 。
  2. 选择几个数据点 x 使得获取函数 a(x) 在当前先验分布上的结果是最大的 。
  3. 在目标成本函数 c(x) 中评估数据点 x 并获取其结果 y 。
  4. 使用新数据更新高斯过程先验分布 , 得到一个后验分布(这将作为下一步的先验分布) 。
  5. 重复第 2-5 步并多次迭代 。
  6. 解读当前的高斯过程分布(成本很低) , 找到全局最小值 。
贝叶斯优化的核心是将概率思想融入到代理优化思想之中 。 这两种思想组合到一起 , 能创造出一种强大的系统 。 该系统具有很多应用场景 , 从医药产品开发到自动驾驶汽车 。
不过 , 贝叶斯优化最常见的应用领域还是机器学习 , 尤其是超参数优化任务 。 举个例子 , 如果我们要训练一个梯度上升分类器 , 则会遇到几十个超参数 , 从学习率到最大深度再到最小不纯度拆分值 。 在这里 , x 表示模型的超参数 , c(x) 表示模型在给定超参数 x 下的表现 。


推荐阅读