專 欄
❈Limber,Python中文社区专栏作者,Python中文社区新Logo设计人,纯种非CS科班数据分析人,沉迷Keras。在Cambridge做了点小事,深度学习的小学生。
GitHub ID:@LimberenceCheng❈
本文由Limber于10月30日发自中国台湾
1、介绍
在整个数据科学的工作中,我们在工作的时候有各种各样的选择,比如针对一个问题我应该要选择什么算法,针对一个算法,我需要设置怎样的参数等等。一个富有经验的数据科学家通常可以基于自己对问题的理解和看法,通过分析而后对问题建立模型或者提取好特征,基于以上操作再切出一个baseline对他们来说并非难事。然而对新手而言则不然,他们可能会浪费大量的时间在这些事情上,而其中参数的确定对他们来说依然是难事。本文着重介绍Hyper-Parameter的选用方法。在deep learning中有一些optimizer比如著名的Adam以及RMSProp的方法就是通过自适应的方法来调整每一个变量的方法来简化这个问题,在此我不做deep learning的Hyper-Parameter的选用方法,仅着重于机器学习/数据科学竞赛的调参手段。
2、数据竞赛的套路
在(A Thakur etal,2015)的工作中介绍了表状数据类型(如csv等格式)的机器学习竞赛的一般套路,我们首先切出一个training set和validation set。Python的scikit-learn是一个非常有用的集成了机器学习的必备的工具的一个包,通过使用cross_validation的方法可以迅速的完成这一任务。从始至终确保validation set不被你的任何操作影响。而后选择你认为合适的算法来建立的pipeline。而其中,参数设置是一个重点。
目前选择模型还有确定参数的方法主要有以下两个: 1. Random Search 2. Grid Search
此外,有人介绍了通过使用TPOT工具快速的切出一个baseline。TPOT工具能够自动的通过遗传算法的方法,为你选择输入的数据挑选一个合适的算法和参数,其实可以理解成一种端到端的解决方案的直接输出,可以通过输出Python文件来将算法导出。但我们在比赛上,仅是通过TPOT来迅速的建立一个baseline。在此我不深入介绍TPOT的使用,如果感兴趣的话可以去TPOT 上深入详细了解。
3、如何使用Grid Search来确定Hyper-Parameter
Gird Search作为一个比较初级的方法曾经被众多人广泛使用,在Python的 Scikit-Learn 工具中含有grid search的API(GridSearchCV)可以让人快速的上手操作。
Grid Search给出搜索的空间,例如:
Grid Search显然有以下几个优势: 1. 简单容易操作,概念上几乎和瞎猜→验证差不多,实际操作上即使不使用Python的Scikit Learn也可以非常容易的就实现目标。 2. 对于一维、二维的搜索空间确实十分有效。 3. 可并行计算,GPU的加速会推进Grid Search的效率。
在使用Grid Search的时候,主要确定搜索空间以及搜索的范围,而后是评价方法,为参数或方法打分。网格搜索即是你有一组模型(它们的参数值在网格上表现不同)。而我们要做的就是完成每一个模型的训练后使用交叉验证对其进行评估选择性能最好的。
4、如何使用Random Search来确定Hyper-Parameter
2012年Yoshua Bengio et al介绍了Random Search来算出Hyper-Parameter的方法,Random Search通过独立地从同一个构形空间从均匀网格中提取均匀分布密度,作为生成试验集。通过简单的输入迭代次数、搜索空间大小后,得到我们需要的特征和Hyper-Parameter。然而即使这个方法是十分受业界欢迎的,在实际操作的时候通常也会消耗48-72小时的时间进行训练,相对Grid Search效率更高。而实际上,Random Search的方法比之前提到的 Grid Search的方法完成的更有效率,而随机搜索实际是一种更为自然基准来判断在自适应的发展进程或顺序Hyper-Parameter的优化算法。
我们知道Hyper-Parameter的选择是在
中选择一个求解
的最小值。对比于Grid Search,Random Search几乎是全方面的压倒之,拥有所有Grid Search的优势,同时在Grid Search力所不能及的高维搜索上,有着更好的效率。
而正是Random Search的Random让人为调参加上了“玄学”(指得到足够优秀的Hyper-Parameter和猜数字相似)之说,主要原因就是Random Search在搜索空间中避开某些具有价值的子区间而导致了结果的不理想。
Random Search即使不使用scikit learn中的工具依然可以十分容易的完成,仅仅就是对比运算结果,而后进行结果评估,如果较上一次效果更好,则收入其中。
5、How to choose my algorithm?
如果目标搜索空间仅是低维的,完全可以采用Grid Search的方法,Random Search更适用于高维的情况。而实际的比赛中,以高维搜索空间为主,因此我建议在日后的比赛中,优先考虑Random Search。另外Random Search与Grid Search并不是非常生硬的直接套用。然而无论是Random Search还是Grid Search或者其他的Hyper-Parameter的optimization方法本质上都是将方法本身看作是一个Black Box。给出一个可能的搜索空间,而后去试错,而后我们采用效果最好的那一个。当我们的系统足够大、足够复杂的时候,即使我们投入了大量的宝贵的计算资源以及时间,仍然有可能很巧妙的避开了我们想要的正确答案——因为Random Search直接避开了这个候选选项。学界对Hyper-Parameter的确定,主要的方向有演化策略(Evolution Strategy)、高斯方法、特征搜索、网络取样、随机取样五种方法。
如果我们统筹次优的Grid Search与“玄学”的Random Search,比如Yoshua Bengio et al 建议使用低偏差序列的方法(LDS),然而Y Bengio等人的研究中并没有深入介绍LDS方法在Hyper-Parameter的实践性的操作,仅仅是以未来趋势展望的角度来建议。当然在并行操作的实际工作中,你可以通过调用计算资源的方式加速,然而这显然是非常无趣的低级手工活儿(即使并行计算的资源控制对编程的水平有一定的要求,然而从算法理念来看,它并没有什么新意)。对于有一些特点的Hyper-Parameter如在SGD(stochastic gradient descent)的learning rate与momentum的Hyper-Parameter 的tuning的工作中,Jian Zhang et al(2017)提出的Yellow Fin的方法,在文中就指出了在求解过程中,grid search或random search在这里的求解效果并不是很理想(grid-searching momentum on very large cluster jobs becomes especially challenging),从而基于噪音与局部二次逼近的的角度来完成Hyper-Parameter的优化。
不同的算法所基于的不同的最优化方法是比Grid Search或Random Search更加有效率的方法,而Grid Search和 Random Search仅是面对选取Hyper-Parameter的一般方法而已。知道如何面对不同的model选用不同的、更加确切的方法,也是一个PhD的价值所在。
Reference