前言
贝叶斯优化(Bayesian Optimization)是最近机器学习领域内一个比较热门的话题,它应该是在神经网络各类超参数的优化中最先引起注意的。神经网络本身的数学模型很简单,想要它表现好,需要高超的调参技巧,比如隐层数量、每个隐层的单元数、梯度下降的步长(learning rate),每次mini batch所选择的样本数量等。这些参数人工调节很繁琐,因此大家就想到了自动调参。
网格搜索与随机搜索
一般简单的参数优化方法就是网格搜索(grid search),这属于暴力搜索,没有什么技巧,强行遍历。网格搜索在1维、2维、3维的搜索空间表现相对来说不错,很容易覆盖到空间的大部分,而且耗时不大。但它有个致命缺点,在高纬度会发生维度灾难。举个例子,假设在10维空间搜索,每个维度遍历5个值,那就是5^10=9,765,625
;假设有20维,那就是 5^20 = 95,367,431,640,625
。怎么样,在计算之前可能没想到结果会这么大吧?人对线性递增的物体能够估计的很好,碰到指数递增的物体则总是会犯错误,通常都会低估这种爆炸式的增长。
随机搜索(random search)被证明是比网格搜索更好的方法,但是“随机”性增加了不确定性,而且估计人们在心理上无法忍受这种失控感,因此它在实际应用中似乎应用不那么广泛。随机搜索能比网格搜索好的一个根本原因是搜索空间的低效维度特效(low effective dimensionality)。说白了,就是不同的维度重要性不一样,我们只要能够对目标函数值影响大的那些维度尽可能的覆盖就可以了,剩下的影响小的维度不需要浪费精力去覆盖。
下面这张图很明确地说明了两种方法的不同。这是个2维的搜索空间,竖直维度变化小、对目标函数影响不大;水平维度对目标函数影响更大。可以看到,在每个维度,网格搜索都浪费了6个点的机会,而随机分布则9个点几乎都利用上了!
随机搜索和网格搜索都具有一个盲目性的缺点,无论已经搜了多少次,还是不知道未来哪些点更有可能是最值点。所以他们都是”瞎的“、”不长记性“的模型。
定义
贝叶斯优化是一种寻找目标函数最值点的优化机制。
它主要针对黑盒函数,比如系统的性能如准确率、召回率、F值等都可以看做目标函数。它的本质其实是一种回归模型,即利用回归模型预测的函数值来选择下一个搜索点。
贝叶斯优化有两个主要的要素:目标函数(objective function)和代理模型(surrogate model)。
未完待续。。。