常用调参方法

468 阅读3分钟

ML工作流中最困难的部分之一是为模型找到最好的超参数。ML模型的性能与超参数直接相关。

四种常用调参方法

  • 传统的手工调参
  • 网格搜索
  • 随机搜索
  • 贝叶斯搜索

传统手工搜索

在传统的调参过程中,我们通过训练算法手动检查随机超参数集,并选择符合我们目标的最佳参数集。

缺点:

  • 没办法确保得到最佳的参数组合。
  • 这是一个不断试错的过程,所以,非常的耗时。

网格搜索

网格搜索是一种基本的超参数调优技术。它类似于手动调优,为网格中指定的所有给定超参数值的每个排列构建模型,评估并选择最佳模型,例如下面其中两个超参数k_value =[2,3,4,5,6,7,8,9,10] & algorithm =[' auto ', ' ball_tree ', ' kd_tree ', ' brute '],在这个例子中,它总共构建了9*4 = 36不同的模型。

缺点

  • 由于它尝试了超参数的每一个组合,并根据交叉验证得分选择了最佳组合,这使得GridsearchCV非常慢。

随机搜索

使用随机搜索代替网格搜索的动机是,在许多情况下,所有的超参数可能不是同等重要的。随机搜索从超参数空间中随机选择参数组合,参数由n_iter给定的固定迭代次数的情况下选择。实验证明,随机搜索的结果优于网格搜索。

缺点:

  • 随机搜索的问题是它不能保证给出最好的参数组合。

贝叶斯搜索

网格搜索和随机搜索在测试一个新的点时,会忽略前一个点的信息。而贝叶斯优化充分利用了这个信息。贝叶斯优化的工作方式是通过对目标函数形状的学习,找到使结果向全局最大值提升的参数。它学习目标函数形状的方法是,根据先验分布,假设一个搜集函数。在每一次使用新的采样点来测试目标函数时,它使用这个信息来更新目标函数的先验分布。然后,算法测试由后验分布给出的,全局最值最可能出现的位置的点。 贝叶斯优化属于一类优化算法,称为基于序列模型的优化(SMBO)算法。这些算法使用先前对损失f的观察结果,以确定下一个(最优)点来抽样f。该算法大致可以概括如下。

  • 使用先前评估的点X1*:n*,计算损失f的后验期望。
  • 在新的点X的抽样损失f,从而最大化f的期望的某些方法。该方法指定f域的哪些区域最适于抽样。
  • 重复这些步骤,直到满足某些收敛准则。

对于贝叶斯优化,一个主要需要注意的地方,是一旦它找到了一个局部最大值或最小值,它会在这个区域不断采样,所以它很容易陷入局部最值。为了减轻这个问题,贝叶斯优化算法会在勘探和开采(exploration and exploitation)中找到一个平衡点。

  • 勘探(exploration),就是在还未取样的区域获取采样点
  • 开采(exploitation),就是根据后验分布,在最可能出现全局最值的区域进行采样。

实现库:

  • scikit-optimize
  • bayesian-optimization