无参数全局优化新算法-转载
https://www.sohu.com/a/214687628_464065 有一个常见的问题:你想使用某个机器学习算法,但它总有一些难搞的超参数。例如权重衰减大小,高斯核宽度等等。算法不会设置这些参数,而是需要你去决定它们的值。如果不把这些参数设置为“良好”的值,这个算法就不会起作用。那么你会怎么做呢?下面我列出了我见过的人们的做法,从最常见到最不常见排序: 猜测和检查:听从你的直觉,选择感觉不错的数字,看看它们是否工作。一直持续这样做,直到厌倦。 网格搜索:让计算机尝试在一定范围内均匀分布的一组值。 随机搜索:让计算机随机挑选一组值。 贝叶斯优化:使用像MATLAB的bayesopt之类的工具来自动选择最佳参数,然后你会发现贝叶斯优化比你的机器学习算法有更多的超参数,你变得沮丧,然后回头使用猜测和检查或网格搜索。 在有一个良好的初始猜测的前提下进行局部优化:这就是MITIE的方法,它使用BOBYQA算法,并有一个精心选择的起始点。由于BOBYQA只寻找最近的局部最优解,所以这个方法是否成功很大程度上取决于是否有一个好的起点。在MITIE的情况下,我们知道一个好的起点,但这不是一个普遍的解决方案,因为通常你不会知道好的起点在哪里。从好的方面来说,这种方法非常适合寻找局部最优解。稍后我会再讨论这一点。 绝大多数人只会用猜测和检查的方法。但应该有更好的方法。我们都希望像贝叶斯优化这样的黑盒子优化策略有用,但根据我的经验,如果你没有将其超参数设置为正确的值,那么它还不如专业的猜测和检查。我认识的每个使用贝叶斯优化的人都有相同的经验。最终,如果我认为手动调参能做得更好,那么就手动呗,而且我的大多数同事也这样想。最终的结果是,我大部分时间都没有使用自动化的超参数选择工具。 我很想有一个无参数的全局优化器,可以信任地用它做超参数选择。 所以当我读到Cédric Malherbe和Nicolas Vayatis在去年的机器学习国际会议上发表的Global optimization of Lipschitz functions这篇论文时,我非常兴奋。在这篇论文中,他们提出了一个非常简单的无参数、而且经证明有效的方法来寻找使函数f(x)最大化的,即使 f(x)有多个局部极大值。论文中的关键思想是保持f(x)的分段线性上界,并用它来决定在每个优化步骤中用于评估的x。因此,如果你已经评估了点x₁,x₂,…,xt,那么您可以在 f(x)上定义一个简单的上界,如下所示: 其中k是f(x)的Lipschitz常数。因此,根据Lipschitz常数的定义, U(x)≥f(x),∀x, […]