集成学习4-对模型超参数进行调优
什么是超参数
在对模型进行超参数调优之前我们需要明白两个基本的概念 超参数和参数
比如说岭回归中参数 λ和参数w之间有什么不一样?事实上,参数w是我们通过设定某一个具体的 λ 后使用类似于最小二乘法、梯度下降法等方式优化出来的,我们总是设定了 λ是多少后才优化出来的参数w。因此,类似于参数w一样,使用最小二乘法或者梯度下降法等最优化算法优化出来的数我们称为参数,类似于 λ一样,我们无法使用最小二乘法或者梯度下降法等最优化算法优化出来的数我们称为超参数。
模型参数是模型内部的配置变量,其值可以根据数据进行估计,是模型最终优化得到的结果,进行预测时需要参数。具体来说参数有以下几个特点。
1. 参数定义了可使用的模型。
2. 参数是从数据估计或获悉的。
3. 参数通常不由编程者手动设置。
4. 参数通常被保存为学习模型的一部分。
5. 参数是机器学习算法的关键,它们通常由过去的训练数据中总结得出
模型超参数是模型外部的配置,其值无法从数据中估计,超参数通常用于帮助估计模型参数。同样具备以下几个特点
1. 超参数通常由人工指定。
2. 超参数通常可以使用启发式设置。
3. 超参数经常被调整为给定的预测建模问题。
如何调超参
常见的自动调超参算法有Grid search(网格搜索)、Random search(随机搜索),还有Genetic algorithm(遗传算法)、Paticle Swarm Optimization(粒子群优化)、Bayesian Optimization(贝叶斯优化)、TPE、SMAC等。像遗传算法和PSO这些经典黑盒优化算法,为群体优化算法,因为需要有足够多的初始样本点,并且优化效率不是特别高,因此不是特别适合模型超参数调优场景。在这里简单的介绍下常用的调参方法Grid search(网格搜索),Random search(随机搜索)Bayesian Optimization(贝叶斯优化)。
Grid search(网格搜索)
网格搜索很容易理解和实现,例如我们的超参数A有2种选择,超参数B有3种选择,超参数C有5种选择,那么我们所有的超参数组合就有2 * 3 * 5也就是30种,然后针对每组超参数分别建立一个模型,然后选择测试误差最小的那组超参数。换句话说,我们需要从超参数空间中寻找最优的超参数,很像一个网格中找到一个最优的节点,因此叫网格搜索。
缺点: 不一定取得全局最优解,而且计算量很大很容易组合爆炸,因为随着参数类别个数的增加,需要尝试的次数呈指数级增长。,并不是一种高效的参数调优方法。
Random search(随机搜索):
有没有一种更加高效的调优方式呢?答案是有的。那就是使用随机搜索的方式,前面的场景A有2种选择、B有3种、C有5种、连续值随机采样,那么每次分别在A、B、C中随机取值组合成新的超参数组合来训练。这种方式不仅仅高校,而且实验证明,随机搜索法结果比稀疏化网格法稍好(有时候也会极差,需要权衡)。参数的随机搜索中的每个参数都是从可能的参数值的分布中采样的。与网格搜索相比,这有两个主要优点:
- 可以独立于参数数量和可能的值来选择计算成本。
- 添加不影响性能的参数不会降低效率。
前面的场景A有2种选择、B有3种、C有5种、连续值随机采样,那么每次分别在A、B、C中随机取值组合成新的超参数组合来训练。虽然有随机因素,但随机搜索可能出现效果特别差、也可能出现效果特别好,在尝试次数和Grid search相同的情况下一般最值会更大,当然variance也更大但这不影响最终结果。在实现Random search时可以优化,过滤随机可能出现过的超参数组合,不需要重复计算
参考: https://zhuanlan.zhihu.com/p/140040705。
https://github.com/datawhalechina/team-learning-data-mining/tree/master/EnsembleLearning