Algorithm 具有大量局部极小值的多参数优化
我正在寻找算法来找到一组“最佳”的参数值。这个函数有很多局部极小值,并且变化非常快。更糟糕的是,测试一组参数非常慢——大约1分钟——我不能直接计算梯度 这种优化有什么著名的算法吗 我在尝试随机值方面取得了一定的成功。我想知道我是否可以通过使随机参数选择器有较低的机会选择接近过去产生不良结果的参数来提高性能。这种方法是否有一个名称,以便我可以搜索特定的建议 更多信息:Algorithm 具有大量局部极小值的多参数优化,algorithm,language-agnostic,optimization,Algorithm,Language Agnostic,Optimization,我正在寻找算法来找到一组“最佳”的参数值。这个函数有很多局部极小值,并且变化非常快。更糟糕的是,测试一组参数非常慢——大约1分钟——我不能直接计算梯度 这种优化有什么著名的算法吗 我在尝试随机值方面取得了一定的成功。我想知道我是否可以通过使随机参数选择器有较低的机会选择接近过去产生不良结果的参数来提高性能。这种方法是否有一个名称,以便我可以搜索特定的建议 更多信息: 参数是连续的 有大约5-10个参数。当然不超过10个 我真的帮不了你为你的具体问题找到一个算法 然而,关于随机选择的参数,我认为
- 参数是连续的
- 有大约5-10个参数。当然不超过10个
如果函数或多或少是连续的(即好输入的小突变通常不会产生坏输入(小是一个有点通用的)),这将对您的问题相当有效。有多少个参数?例如,搜索空间中有多少维度?它们是连续的还是离散的?例如,实数、整数,还是仅仅几个可能的值 我见过的解决这类问题的方法有着相似的总体结构——取大量的样本点,并以某种方式将它们调整到有“好”答案的区域。因为你有很多点,它们的相对差异可以作为一个临时的梯度
- :经典方法。取一组点,概率地将一些点移动到随机选择的相邻点,这取决于它有多好
- :在搜索空间中取一个速度为的粒子“群”,概率地随机移动一个粒子;如果这是一个进步,让整个蜂群知道
- 字体这有点不同。不要像上面那样使用邻居的信息,你每次都会得到最好的结果,并“杂交”它们,希望得到它们各自的最佳特性
顺便说一句,功能评估非常昂贵,这一事实可以让你稍微有点用;由于上述所有方法都涉及大量独立的函数计算,因此该算法可以与OpenMP或类似的东西进行简单的并行,以利用您机器上的尽可能多的内核。您的情况似乎与,我会给你同样的建议:考虑一个类似的方法,多步行者和模拟退火的步长。 在您的案例中使用蒙特卡罗方法的困难在于对每个候选人进行昂贵的评估。与你手头的时间相比,有多贵?如果你在几分钟内需要一个好的答案,这还不够快。如果你能让它通宵运行,它会相当好地工作 考虑到复杂的搜索空间,我建议使用随机初始分布。您的最终答案可能只是整个跑步过程中记录的最佳个人成绩,或者是获得最佳成绩的助行器的平均位置
不要因为我在那里讨论了最大化而被推迟,你想最小化:价值数字可以被否定或颠倒。没有通用的方法来回答你的问题。有很多关于这个主题的书/论文,但是你必须根据你的需要选择你的道路,这里没有明确说明 然而,有些事情需要知道-1分钟/测试对于任何算法来说都太多了。我想在你的情况下,你必须真正做到以下一点:
- 让100台计算机将参数测试时间缩短到合理的时间
- 真的试着用手和头脑计算出你的参数。必须有一些冗余和至少一些健全性检查,以便您可以在中测试您的案例,我尝试了模拟退火和粒子群优化。(作为提醒,我不能使用梯度下降,因为无法计算梯度)
我还尝试了一种算法,可以实现以下功能:
- 选择一个随机点和一个随机方向
- 评估功能
- 只要结果不断改善,就继续沿着随机方向前进,每一次成功的迭代都会加速
- 当结果停止改善时,后退一步,尝试以相同的距离向正交方向移动