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


北京联盟_本文原题:用简单术语让你看到贝叶斯优化之美
选自 Medium
【机器之心Pro|用简单术语让你看到贝叶斯优化之美】作者:Andre Ye
机器之心编译
编辑:Panda
贝叶斯优化是机器学习超参数优化的常用技术之一 , 本文不会使用艰深的数学论证 , 而是通过简单的术语带你领略贝叶斯优化之美 。
假设有一个函数 f(x) 。 其计算成本很高 , 它不一定是分析表达式 , 而且你不知道它的导数 。
你的任务:找到全局最小值 。
当然 , 这是一个困难的任务 , 而且难度超过机器学习领域内的其它优化问题 。 梯度下降就是一种解决方案 , 它能通过函数的导数 , 利用数学捷径来实现更快的表达式评估 。
或者 , 在某些优化场景中 , 函数的评估成本较低 。 如果你能在几秒内得到输入 x 的变体的数百种结果 , 那么使用简单的网格搜索就能得到很好的结果 。
或者 , 你还可以使用一整套非常规的非梯度优化方法 , 比如粒子群或模拟退火 。
不幸的是 , 当前的任务没有这样的便利 。 我们的优化受到了多个方面的限制 , 其中最显著的包括:

  • 计算成本高 。 理想情况下 , 只要我们查询函数的次数足够多 , 我们就能在实质上将它复现出来 , 但在实际情况下 , 输入的采样很有限 , 优化方法必须在这种情况下也能有效工作 。
  • 导数未知 。 在深度学习以及其它一些机器学习算法中 , 梯度下降及其变体方法依然是最常用的方法 , 这当然是有原因的 。 知道了导数 , 能让优化器获得一定的方向感——我们没有这种方向感 。
  • 我们需要找到全局最小值 , 这个任务即使对于梯度下降这种复杂精细的方法来说也很困难 。 我们的模型有时需要某种机制来避免被困于局部最小值 。
解决方案:针对以最少的步骤寻找全局最小值的问题 , 贝叶斯优化是一个优雅的框架 。
我们来构建一个假设的示例函数 c(x) , 即一个模型在给定输入 x 下的成本 。 当然 , 这个函数的实际情况对优化器来说是未知的 。 假设 c(x) 的实际形状如下:这就是所谓的「目标函数」 。
机器之心Pro|用简单术语让你看到贝叶斯优化之美
本文插图

贝叶斯优化可通过一种名为「代理优化(surrogate optimization)」的方法解决这一问题 。 在语境中 , 代理母亲(代孕妈妈)是指同意为其他人生小孩的女人 。 基于同样的语境 , 代理函数是指目标函数的一种近似 。
代理函数可基于采样得到的数据点而构建 。
机器之心Pro|用简单术语让你看到贝叶斯优化之美
本文插图

我们可以根据代理函数来识别哪些点是有潜力的最小值 。 然后我们在这些有潜力的区域执行更多采样 , 然后据此更新代理函数 。
机器之心Pro|用简单术语让你看到贝叶斯优化之美
本文插图

在每一次迭代中 , 我们都要继续观察当前的代理函数 , 通过采样对相关区域有更多了解 , 然后更新函数 。 注意 , 代理函数可表示成评估成本低得多的数学形式(比如用 y=x 近似表示一个成本更高的函数 y=arcsin((1-cos2x)/sin x) 的某个特定范围) 。
经过一定数量的迭代之后 , 我们的目标是抵达全局最小值 , 除非该函数的形状非常古怪(比如其中有大量大起大落的部分) , 这时候你就要问自己了:是不是数据有问题?
我们先来欣赏一下这种方法的美妙之处 。 它不会对函数做出任何假设(只要它是可优化的既可)、不需要导数的相关信息、可通过巧妙地使用不断更新的近似函数来执行常识推理 。 对原本的目标函数的高成本估计也不再是问题 。
这是一种基于代理的优化方法 。 但它的贝叶斯性质体现在哪里?


推荐阅读