现实世界参数优化

4
我需要为我的最新研究项目进行参数优化。我有一个算法,目前有5个参数(四个0到1之间的双精度和一个带有3个值的名义量)。该算法使用这些参数来计算一些内容,然后我计算精度、召回率和FMeasure。单次运行大约需要1.8秒。目前我正在使用0.1步长遍历每个参数,以找到全局最大值的位置。但我想要找到精确的全局最大值。我已经研究了梯度下降算法,但我不知道如何将其应用到我的算法中(如果可能的话)。请问有人可以指导我一下该如何实现这样的算法吗?因为我对这种工作非常陌生。
谢谢, Daniel

2
你能为你的(双精度)参数计算梯度吗? - Thomas Jungblut
嗨,Thomas。最近看了你的库 :) 目前我的函数看起来像这样:a1 * x1 + a2 * x2 + a3 * x3 = y,其中 x4 是一个阈值参数,它过滤掉 y < x4 的答案。但是我不知道这个函数是否有任何意义。 - Daniel Gerber
1
也许你应该看一下遗传搜索算法 http://en.m.wikipedia.org/wiki/Genetic_algorithm 。还有一些Java实现框架。 - Ralph
@DanielGerber 嘿,谢谢;) 你的函数简化为一个普通的线性组合,并产生一个凸函数(受到你的双重间隔和名义值的限制)。因此,你的梯度基本上就是参数本身,所以用梯度下降来最小化这个函数应该没有问题(假设你选择了适当的alpha值)。 - Thomas Jungblut
你使用哪个算法?梯度下降并不是一个非常复杂的算法。如果你看一下逻辑回归的论文,你可能会看到梯度下降算法嵌入其中。所以你可以移植它。 - kamaci
@ThomasJungblut 嗯,我认为这并不容易。简单的函数a1x1+a2x2...可以确定给定结果的置信度。如果这个置信度低于x4,则该结果不会被使用,并且应该在任何进一步的计算中被忽略。此外,我只是按照这种方式构建了这个函数,以便我可以看到哪些参数最重要。也许有一个更好的函数。 - Daniel Gerber
1个回答

3
你肯定可以比网格搜索做得更好。
在应用像梯度下降这样的算法之前,您必须确保您的参数空间不包含局部最大值,或者至少您的起始点靠近全局最大值,并且您的步长足够适合将您带到全局最大值。
在您的情况下,我建议先绘制尽可能多的随机样本。这是探索参数空间的比网格搜索更好的方法。一旦您以这种方式收集了足够的数据,您就可以使用模式查找算法,例如均值漂移或其更快的导数之一,或直接进行优化。由于您没有参数空间的雅可比矩阵,因此您可以使用Broyden's method来迭代近似它或BFGS之类的割线方法
此外,还请参考这个相关问题: 如何以高效的方式调整图像处理算法的参数?

谢谢Don的回答。我看了相关问题并基于此实现了爬山算法。不幸的是,这个函数有很多局部最大值(我认为这是由于阈值的原因)。我尝试了很多随机起点,但目前来看,网格搜索给我带来了更好的结果。有没有特殊的方法来处理具有许多局部最大值的函数? - Daniel Gerber

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接