深度学习或者机器学习中一个老生常谈的问题就是调参,许多机器学习算法工程师经常戏称自己为“炼丹工程师”,调参过程也就变成了“炼丹”。何谓炼丹?如何调配出一副“仙药”只能靠尝试不同的配方,根据最终的效果(会不会吃死人)来进行改进。

然后大家渐渐感觉这种炼丹方法不太行。太上老君这种老头为什么能炼金丹?主要是他活得太久,尝试的错误太多,经验也就渐渐积累起来了,放到算法工程师身上情况同样适应,经验丰富的调参手往往一发入魂,新手就是摸着石头过河,难以估计深浅。所以,大家都开始渐渐地意识到自动化调参的必要性,对于个人来说,可以节省大量的时间,去做更多更加有意义的事情(学习)。对公司来说,如果能够实现自动化超参数调整的话,就不必雇佣经验丰富的算法工程师来做相关工作,大大节省了人力成本。

目前来讲,主流的自动调参算法有Grid Search(网格搜索)、Random Search(随机搜索)、Bayesian Optimization(贝叶斯优化)。随机搜索是最简单的调参算法,但是由于是随机的,往往效果不稳定,波动比较大。网格搜索需要人为定义搜索空间,并且对所有参数进行组合,仍然依赖经验,搜索的时间成本也高,甚至可能出现组合爆炸的现象。贝叶斯优化算法可以采用比较少的观测结果就能够得到一组比较好的超参数组合,因此,贝叶斯优化是目前最好的超参数调节算法(猜的)。

贝叶斯优化适应的场景

1.模型训练的时间和计算成本非常高。神经网络动辄几百MB的模型参数量。
2.优化的目标函数没有导数信息。非凸问题无法利用求导优化。

贝叶斯优化算法

首先,我们需要定义我们的优化目标。假设我们需要优化的函数f(x),我们的优化目标就是

$$x*=argmax \space f(x)$$

贝叶斯优化是一个序列优化问题。假设我们已经获得了t-1个贝叶斯优化的iteration,我们就获得了一组观察序列 $D_{t-1}$={$(x_1, y_1), (x_2, y_2), (x_3, y_3)…(x_{t-1}, y_{t-1})$} ,这里的x代表的就是我们模型的参数(可以理解为神经网络中的超参)。然后,我们需要根据高斯过程计算前t-1个点的后验分布概率选择第t组超参数$x_t$,不断迭代直到找到最优解。

那么我们是根据什么去选择这个$x_t$的呢?这也是贝叶斯优化中一个核心问题:如何在每一个iteration里面选择最佳的$x_t$。这就引出了acquisition function的概念。

acquisition function

我们用函数$\alpha(x)$表示acquisition function: $$x_t = arg max \space \alpha_t(x)$$

我们在设计acquisition function的时候最重要的一点就是要考虑exploration-exploitation tradeoff:我们在选择下一个点$x_t$的时候,既要去尝试我们之前没有尝试的点(exploration),又要使得取得的点的f(x)的值尽可能大(exploitation),我们可以分别利用高斯过程的posterior mean和posterior variance来表示exploitation和exploration。mean越大,越符合我们的优化目标,代表我们模型的效果越好,exploitation越大。variance越大,代表我们函数的uncertainty越大,我们就更加可能达到最优值。

贝叶斯优化的实例

1.在只有三个初始样本的情况下我们计算出每个点的均值和方差

图片中红色的点表示我们实际的观测值,蓝色的线表示真实数据分布,黑色虚线表示我们利用三个点和高斯过程得出的预测结果(后验概率分布)。可以看到中间的点均值和方差都相对来说比较大,也就对应了我们之前提到的exploration和exploitation之间的一个tradeoff。如何权衡exploration和exploitation取决于我们还要进行多少次iteration,如果我们只能再进行1个iteration,那就应该关注exploitation,选择均值大的点。如果我们还有1000次iteration可以进行,就可以关注exploration,去探索更多的参数,寻求全局最优的点。

2.接下来在原来的图下面添加acquisition function函数曲线,acquisiton function有很多种,最简单的就是posterior mean和posterior variance之间的一个加权和,也就是GP-UCB方法,它的acquisition function形式是:

选择使得acquisition function值最大的对应参数,利用这个点对应的参数来训练模型,得到模型对应的f(x)值,样本数变成了4个。

3.重新计算超参数之间的后验概率分布和acquisition function

4.通过不断重复上述步骤,我们能够在样本很少的情况下模拟数据的真实分布(图中的黑色虚线)

总结

本文分析了超参数优化中的贝叶斯方法,从贝叶斯方法的基本概念到具体流程进行了详细的阐述,贝叶斯优化方法中的高斯过程本文没有详细阐述,但是本文最后的链接中会有相关链接,感兴趣的可以进行延伸阅读。

思考

为什么没有一种调参方法被大规模采用?

1.最主要的原因还是时间成本太高,包括最近比较火的NAS,动辄几百个小时的训练时间,虽然实现了自动化,但是这样效率真的提高了吗?

2.即便是实现了自动化调参,调出来的参数效果也不一定比人工经验设定的参数效果好,综合成本是否真的降低了?

参考资料
1.贝叶斯优化/Bayesian Optimization
2.贝叶斯优化: 一种更好的超参数调优方式
3.Gaussian processes
4.看得见的高斯过程:这是一份直观的入门解读
5.Gaussian Process Optimization in the Bandit Setting: No Regret and Experimental Design
6.Practical Bayesian Optimization of Machine Learning Algorithms



深度学习

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!