优化超参数的基本方法

数据挖掘 超参数 超参数调整
2022-02-05 15:37:22

我最近在 dlib 博客上阅读了 LIPO 博客文章: http ://blog.dlib.net/2017/12/a-global-optimization-algorithm-worth.html

它提到它可以用于优化超参数,例如模拟退火或遗传算法等元启发式算法。

我查找了有关优化超参数一般如何工作的信息,维基百科页面是我发现的信息量最大的页面,但它没有回答我的基本问题: https ://en.m.wikipedia.org/wiki/Hyperparameter_optimization

我的问题只是:优化超参数的基本思想是什么?

如果我有一些我试图通过模拟退火解决的问题,我知道起始温度和冷却速率对于确定算法在找到解决方案方面的表现非常重要。

我知道我可以用一组参数完全运行算法,修改其中一个参数,再次完全运行,然后重置参数并修改另一个参数并再次运行。这可以给我一个数值梯度,我可以用它通过梯度下降来修改参数。

然而......此时我不得不运行整个算法 3 次,只是为了对超参数进行一次修改。

我觉得我必须遗漏一些明显的东西,因为优化超参数将花费数百或数千倍或更多的成本运行整个事情一次,这似乎根本没有用。有人可以给我线索吗?

1个回答

超参数优化遵循与模型选择相同的规则。每组超参数有效地代表了您正在考虑的不同模型,因此您用于使用某些超参数集拟合模型的数据需要与您用于评估您最终要使用的超参数集的数据不同。评估超参数的常用方法是嵌套交叉验证。这基本上意味着您需要将超参数选择视为模型训练过程的一部分,并且当您评估模型时,您会从前到后评估整个过程,即将超参数调整作为模型训练的一个组成部分,以进行交叉验证你的训练过程。对此有很好的讨论统计学习要素的第 7.10.2 节(“进行交叉验证的错误和正确方法”),您可以在线阅读和/或免费下载。一般的想法是,如果您不小心,您实际上可能会过度拟合您的评估数据这个演示,亲眼看看。

但是,是的,你的直觉是正确的。超参数调整通常在计算上非常昂贵。人们有时试图最小化这种成本的一种方法是将可行参数的搜索空间限制为一个小的离散集,例如网格搜索另一种方法是使用高斯过程或 KDE 来近似参数空间中的成本面您甚至可以使用多臂老虎机方法。

坦率地说,只要遵循适当的交叉验证规则,您实际上可以使用几乎任何非线性优化技术进行超参数调整。诀窍是根据您愿意花费多少时间/精力/计算来探索参数与模型的潜在改进来计算出物有所值。此外,还有人担心重复交叉验证/保留评估的限制,但这是另一个兔子洞。