Python利用Gausian Process对Hyper-parameter进行调参

导语

在做模型的时候发现调参尤其是调Hyper-parameter真是惆怅T T……像Logistic Regression、SVM这类参数少的还能凭感觉手动调调,遇上Random Forest、AdaBoost这些参数多的咬着牙也能调出好结果,说到神经网络,那就真是无语泪先流了……是时候考虑如何才能高效调参了(握拳)!

1. Grid Search

顾名思义,Grid Search将所有参数划分成网格,网格中任意一个点所代表的参数组合都有可能最优参数搭配。
Grid Search一个明显的优势在于它能完全遍历(brute-force search method)所有用户所指定的参数搭配,但也因此引发了它最大的缺点:效率低,因此也无法普适地有效解决Hyper-parameter调参问题。

The number of grid points increases exponentially with the number of decision variables, which makes it computationally very costly.
Source: Parameter Tuning Using Gaussian Processes (Jinjin Ma, The university of Waikato, 2012)

Flowchart of general search algorithm for two parameters Source: Parameter Tuning Using Gaussian Processes (Jinjin Ma, The university of Waikato, 2012)

2. Randomized Search

Randomized Search为模型随机选取参数(Stochastic Search Process),选取用户指定次数后,从中选择效果最好的参数搭配。其中选取的参数点来源于通过网格划分所得到的参数点(划分过程与Grid Search同)。事实上,对于很多数据集和一些常用的算法,Random Search都表现不俗。


Grid Search vs. Randomized Search Source: Random Search for Hyper-Parameter Optimization (James Bergstra & Yoshua Bengio, 2012)

3. Gaussian Process Optimization

关于利用高斯过程调参,一个不得不提到的概念就是Expected Improvement。

The basic idea underlying EI is to estimate the improvement of possible candidate points over the current best value and to sample at the particular point next where the expected improvement is maximum.

而利用高斯过程进行优化的目标就是在尽可能少的尝试中挑选出最佳的参数组合。
不知死活的笔者发现了一个大牛运用Gaussian Process实现的Bayesian Optimization。但是不知道为什么,当笔者用这个包对几个以前已经调好参的模型进行调参时,结果并不如之前的结果好,所以在这一方面还有待于更深入的研究。

推荐阅读更多精彩内容