机器学习中如何进行超参数调优

243 阅读4分钟

场景描述

对于很多算法工程师来说,超参数调优是一件非常头疼的事情。除了根据经验设定所谓的“合理值”外,一般很难找到合理的方法去寻找超参数的最优取值。而与此同时,超参数对于模型效果的影响又至关重要。有没有一些可行的方法去进行超参数的调优呢?

什么是超参数?

在机器学习的上下文中,超参数是在开始学习过程之前设置值的参数,而不是通过训练得到的参数数据。通常情况下,需要对超参数进行优化,给学习机选择一组最优超参数,以提高学习的性能和效果。

相反,其他参数的值通过训练得出。

超参数:

  • 定义关于模型的更高层次的概念,如复杂性或学习能力。
  • 不能直接从标准模型培训过程中的数据中学习,需要预先定义。
  • 可以通过设置不同的值,训练不同的模型和选择更好的测试值来决定

下面是常见的超参数的一些示例:

  • 树的数量或树的深度
  • 矩阵分解中潜在因素的数量
  • 学习率(多种模式)
  • 深层神经网络隐藏层数
  • k均值聚类中的簇数

超参数有哪些调优方法

为了进行超参数调优,我们会采用网格搜索、随机搜索、贝叶斯优化等算法。在具体介绍算法之前,我们需要明确超参数的几个要素。

一是目标函数,即算法需要最大化/最小化目标; 二是搜索范围,一般通过上限和下限来确定; 三是算法的其他参数,如搜索步长。

网格搜索

网格搜索可能是最简单的,应用最广泛的搜索算法,它通过查找搜索范围内的所有的点来确定最优值。如果采用较大的搜索范围以及较小的步长,网格有很大的概率找到全局最优值。然而这种搜索算法十分消耗计算资源和时间,特别是需要调优的超参数比较多的时候。

因此,在实际应用中,网格搜索算法一般会优先使用较广的搜索范围和较大的步长,来寻找全局最优值可能的范围;然后逐步缩小搜索范围和步长,来寻找更精确的最优值。这种操作方案可以降低所需的时间和计算量,到那时目标函数一般是非凸的,所以可能会错过全局最优值。

随机搜索

随机搜索的思想和网格搜索比较相似,只不过不再测试上界和下界之间的所有值,而是在搜索范围内随机选取样本。它的理论依据是,如果选取的样本足够大,那么通过随机采样也能大概率找到全局最优值,或其近似值。随机搜索一般比网格搜索更快一些,但是和网格搜索的快速版一样,它的结果是没法保证全局最优的。

贝叶斯优化算法

贝叶斯优化算法是在寻找最优参数的时候,采用了与网格搜索、随机搜索完全不同的方法。网格搜索和随机搜索在测试一个新点的时候,会忽略前一个点的信息;而贝叶斯搜索会充分利用之前的信息。贝叶斯优化算法通过对目标函数形状的学习,找到使目标函数向全局最优提升的参数。具体来说,它学习目标函数形状的方法是,首先根据经验分布,结社一个搜索函数;然后每次使用新的采样点来测试目标函数时,利用这个信息来更新目标函数的分布;最后,函数测试由后验分布给出的全局最优值最可能出现的位置的点。对于贝叶斯优化算法,有一个需要注意的地方,一旦找到了一个全局最优值,它就会在该区域不断采样,所以很容易陷入局部最优值。为了弥补这个缺陷,贝叶斯优化算法会在搜索和利用之间找到一个平衡点,“探索”就是在还未取样的区域获取采样点;而“利用”则是根据后验分布在最可能出现全局最优值的区域进行采样。