我正在寻找算法来查找“最佳”参数值集。有问题的功能有很多局部最小值,并且变化很快。更糟的是,测试一组参数非常慢 - 大约1分钟 - 我无法直接计算梯度。使用大量本地最小值进行多参数优化
有没有这种优化的任何众所周知的算法?
我刚刚尝试随机值时取得了中等成功。我想知道是否可以通过使随机参数选择器选择参数的机会接近过去产生不良结果的参数,从而提高性能。有没有这个方法的名称,以便我可以搜索具体的建议?
更多信息:
- 参数是连续
- 有5-10参数的顺序。当然不会超过10个。
我正在寻找算法来查找“最佳”参数值集。有问题的功能有很多局部最小值,并且变化很快。更糟的是,测试一组参数非常慢 - 大约1分钟 - 我无法直接计算梯度。使用大量本地最小值进行多参数优化
有没有这种优化的任何众所周知的算法?
我刚刚尝试随机值时取得了中等成功。我想知道是否可以通过使随机参数选择器选择参数的机会接近过去产生不良结果的参数,从而提高性能。有没有这个方法的名称,以便我可以搜索具体的建议?
更多信息:
我已经试过模拟退火和粒子群算法。 (作为提醒,我不能使用梯度下降,因为无法计算梯度)。
我也尝试了一种算法,执行以下操作:
该“正交方向”是由创建与尺寸的必要数目的随机正交矩阵(适于this code)生成。
如果沿正交方向移动改善了结果,算法只是继续该方向。如果没有方向改善结果,则跳跃距离减半,并尝试一组新的正交方向。最终算法得出结论,它必须在本地最小值,记住它并重新开始一个新的随机点。
这种方法比模拟退火和粒子群执行效果要好得多:它需要较少的(很慢)函数评估才能达到相同质量的结果。
当然,我的S.A.和P.S.O的实现。很可能有缺陷 - 这些都是棘手的算法,有很多调整参数的空间。但我只是想我会提到最适合我的东西。
我真的无法帮助您找到适合您的特定问题的算法。
但是,在随机选择参数方面,我认为你要找的是genetic algorithms。遗传算法通常基于选择一些随机输入,选择那些对于该问题来说最适合(迄今)的那些输入,并随机地对它们进行变异/组合以产生下一代,再次选择最佳。
如果函数或多或少是连续的(即良好输入的小突变通常不会产生不良输入(小是有点泛化的)),这对您的问题会非常有效。
有多少个参数 - 例如,搜索空间有多少维?它们是连续的还是离散的 - 例如,实数,整数还是只有几个可能的值?
我见过的用于这类问题的方法有一个相似的整体结构 - 取大量的采样点,并将它们全部调整到具有某种“好”答案的区域。既然你有很多的分数,他们的相对差异可以作为临时的梯度。
维基百科的链接有前两个的伪代码; GA方法有很多种,很难列出一种算法,但可以从那里跟踪链接。请注意,上述所有的实现都可以用作起点。
请注意,所有这些 - 实际上这种大规模搜索算法的任何方法 - 都是启发式算法,这意味着它们的参数必须根据您的特定问题进行调整。这可能很乏味。
顺便说一句,功能评估如此昂贵的事实可以使你为你工作一点;由于以上所有方法都涉及大量独立函数评估,因此可以使用OpenMP或类似方法对该算法进行平行并行处理,以便使用与计算机上一样多的核心。
有至少4-5和至多10参数,并且它们是连续的。感谢您的链接,将采取好看!遗传算法可能不适合,因为参数太少了,我真的怀疑在我的情况下,结合使用两套好套件会产生更好的结果。评估已经平行,每个参数集使用我所有的4个核心,时间为30-60秒。 – 2010-10-10 15:31:57
+1,我用模拟退火处理类似的问题。 – FogleBird 2010-10-11 00:32:35
你的情况似乎是相似的Software to Tune/Calibrate Properties for Heuristic Algorithms的海报,我会给你同样的忠告I gave there:考虑Metropolis-Hastings像多步行者和步长的模拟退火算法。
在您的案例中使用蒙特卡罗方法的困难是对每个候选人进行昂贵的评估。 与您手头上的时间相比,如何?如果你在几分钟内需要一个好的答案,这个速度还不够快。如果你可以让它在一夜之间运行,它会很好地工作。
给定一个复杂的搜索空间,我建议随机初始分布式。您的最终答案可能仅仅是整个运行过程中记录的最好的单个结果,或者是具有最佳结果的步行者的平均位置。
不要被推迟,我正在讨论的最大化,你想最小化:优点值可以否定或倒置。
没有通用的方法来回答你的问题。关于这个主题有很多书/论文,但你必须根据你的需要选择你的路径,这里没有清楚说出。
有些事情要知道,但是 - 1分钟/测试对于任何算法来说都太过于处理。我猜你的情况,你必须真正执行下列操作之一:
我想我必须在一个点上得到100台电脑一两天,但我必须相当肯定我在做这些之前充分利用它们...... :) – 2010-10-11 00:19:42
你可以发布你的功能模型吗?如果可能的话,请给出你想要建模的暗示... – 2010-10-10 21:43:06
@belisarius这些参数是设计用于玩特定游戏的AI中的调整因子。例如,像调整评估给定位置的“威胁级别”的函数一样。我优化中的“评估”步骤会产生AI正在开发的AI在固定的一组地图上赢得一组固定的其他AI的次数。 (我知道这确实在这些特定地图上针对这些特定对手进行了优化,但希望调整因素太少以至于没有适合的范围) – 2010-10-11 00:18:04