2.11 超参数有哪些调优方法?
场景描述
对于很多算法工程师来说,超参数调优是件非常头疼的事。除了根据经验设定所谓的“合理值”之外,一般很难找到合理的方法去寻找超参数的最优取值。而与此同时,超参数对于模型效果的影响又至关重要。有没有一些可行的办法去进行超参数的调优呢?
分析与解答
为了进行超参数调优,我们一般会采用网格搜索、随机搜索、贝叶斯优化等算法。
在具体介绍算法之前,需要明确超参数搜索算法一般包括哪几个要素。
一是目标函数,即算法需要最大化/最小化的目标
二是搜索范围,一般通过上限和下限来确定;
三是算法的其他参数,如搜索步长。
1.网格搜索(最简单、应用最广泛)
网格搜索可能是最简单、应用最广泛的超参数搜索算法,它通过查找搜索范围内的所有的点来确定最优值。如果采用较大的搜索范围以及较小的步长,网格搜索有很大概率找到全局最优值。
-
缺点:然而,这种搜索方案十分消耗计算资源和时间,特别是需要调优的超参数比较多的时候。
-
解决:因此,在实际应用中,网格搜索法一般会先使用较广的搜索范围和较大的步长,来寻找全局最优值可能的位置;然后会逐渐缩小搜索范围和步长,来寻找更精确的最优值。
这种操作方案可以降低所需的时间和计算量,但由于目标函数一般是非凸的,所以很可能会错过全局最优值。
2.随机搜索
随机搜索的思想与网格搜索比较相似,只是不再测试上界和下界之间的所有值,而是在搜索范围中随机选取样本点。
- 理论依据:如果样本点集足够大,那么通过随机采样也能大概率地找到全局最优值,或其近似值。随机搜索一般会比网格搜索要快一些,但是和网格搜索的快速版一样,它的结果也是没法保证的。
3.贝叶斯优化算法
贝叶斯优化算法在寻找最优最值参数时,采用了与网格搜索、随机搜索完全不同的方法。网格搜索和随机搜索在测试一个新点时,会忽略前一个点的信息;而贝叶斯优化算法则充分利用了之前的信息。
- 方法:贝叶斯优化算法通过对目标函数形状进行学习,找到使目标函数向全局最优值提升的参数。
- 具体来说,它学习目标函数形状的方法是,首先根据先验分布,假设一个搜集函数;
- 然后,每一次使用新的采样点来测试目标函数时,利用这个信息来更新目标函数的先验分布;
- 最后,算法测试由后验分布给出的全局最值最可能出现的位置的点。
-
问题:对于贝叶斯优化算法,有一个需要注意的地方,一旦找到了一个局部最优值,它会在该区域不断采样,所以很容易陷入局部最优值。
-
解决:为了弥补这个缺陷,贝叶斯优化算法会在探索和利用之间找到一个平衡点,“探索”就是在还未取样的区域获取采样点;而“利用”则是根据后验分布在最可能出现全局最值的区域进行采样。
逸闻趣事
Google使用一套超参数调优算法来烘焙更美味的饼干
“超参数调优”和“烘焙饼干”这两件事情,乍一听感觉风马牛不相及,但细想一下,似乎又有一定的相似之处——“黑盒优化”。结构复杂的深度学习模型某种程度上就是一个黑盒,为实现更好的优化目标,我们不断进行“超参数调优”来优化这个黑盒。烘焙饼干似乎也是类似的过程,为了烘焙出更好吃的饼干,厨师们往往需要调节诸如醒面时间、烘焙温度、烘焙时长等超参数,而最后到底是哪些因素让饼干更好吃谁也说不清楚,这不也是“黑盒优化”嘛。
之前大公司解决超参数调优问题的最好方法被戏称为“博士生下降法”(即让博士生人工调整梯度下降法的参数)。后来,Google为了解决公司内部大量机器学习模型的调优问题,开发了一套超参数调优系统,被称作Google Vizier. Google Vizier采用迁移学习的思想,主要是从之前调参的经验中学习,为新算法提出最佳超参数。在搭建好GoogleVizier后,Google的工程师们为了测试他们的算法,向Google食堂制作饼干的承包商提供了饼干食谱和烘焙方法,并不断对结果进行了口味测试。在经过几轮测试和烘焙方法调优之后,饼干确实更好吃了……继AlphaGo击败了围棋选手之后,全世界的厨师们也许已经在GoogleVizier面前瑟瑟发抖。
参考文献:
《百面机器学习》 诸葛越主编
出版社:人民邮电出版社(北京)
ISBN:978-7-115-48736-0
2022年8月第1版(2022年1月北京第19次印刷)