成本函数评估缓慢时的优化


59

梯度下降和许多其他方法可用于在成本函数中找到局部最小值。当可以在数字或分析上快速评估成本函数时,它们会非常有效。

我觉得这是一种不寻常的情况。我的成本函数的每次评估都很昂贵。我正在尝试找到一组参数,以将3D表面相对于地面真实表面最小化。每当我更改参数时,都需要针对整个样本队列运行算法以衡量其效果。为了计算梯度,我需要独立更改所有15个参数,这意味着我必须重新生成所有曲面并与样本同类进行比较,每个梯度的次数太多,并且在优化过程中肯定也进行了太多次。

我已经开发出一种方法来解决此问题,并且目前正在对其进行评估,但令我感到惊讶的是,我在文献中并未发现太多有关昂贵的成本函数评估的内容。这使我想知道我是否正在使问题变得更加棘手,并且可能已经有了更好的方法。

所以我的问题基本上是这样的:当评估缓慢时,有人知道优化成本函数的方法吗?或者,我是否首先通过重新运行算法并与样本组进行多次比较来做一些愚蠢的事情?


5
您是否听说过随机梯度下降?对于应用于大型训练集的深度神经网络,您会遇到类似的问题(但可以通过Eval进行梯度分析),标准解决方案是仅基于单个样本(随机)与整个队列(批次)进行梯度下降
seanv507

3
我只是模糊地熟悉该领域,因此,这只是评论而不是答案。但是,你正在讨论的声音很多喜欢不确定性量化的话题,往往面临的工程师,其中,目标函数取得需要数周的单一评价,以评估(至少在面对我的同事工程的问题)。我对处理方式的了解非常有限,是通过基于过去的评估和更简单的工程模型进行更容易评估的替代近似,然后使用这些替代模型选择下一个评估...
Cliff AB

2
...更昂贵的目标功能。我讨厌这么说,但是我现在对这个话题一无所知。与工程师讨论研究主题时,我只是简短地被告知了这一点。有趣的是,这似乎是一个非常具有挑战性的研究领域:我相信好的模型需要对物理学统计学都有很好的理解。
Cliff AB

1
@ seanv507是的,谢谢,但是出于类似的原因我避免了它。运行一个样本大约需要30秒到一分钟。如果我有15个参数,则即使只使用一个样本,每次梯度计算也要花费近8分钟。如果空间很大,则可能需要很长时间。如果您有其他想法,请纠正我。
Jared Becksfort '16

5
“在我看来这是一种不寻常的情况。对我的成本函数的每次评估都是昂贵的。” 通常,这绝不是异常情况。它显示在各处,例如,当您的成本函数来自运行模拟时(例如,本文中的white.ucc.asn.au/publications/White2015PsoTransistorSizing.pdf,我们在SPICE中模拟一个耗时10s的电路)。更重要的是,在实验科学中,评估可能需要很长时间。我的一个朋友Masters项目基本上是优化5个参数,以找到插入DNA的最佳方法。每次评估需要24小时。
Lyndon White

Answers:


59

TL; DR

我建议使用LIPO。它证明是正确的,并且比纯随机搜索(PRS)更好。它也非常容易实现,并且没有超参数。我没有进行过将LIPO与BO进行比较的分析,但是我期望LIPO的简单性和效率意味着它将胜过BO。

(另请参见:贝叶斯超参数优化的某些破坏性是什么?

贝叶斯优化

贝叶斯优化类型方法建立了高斯过程替代模型以探索参数空间。主要思想是,距离更近的参数元组将具有相似的函数值,因此,假设点之间具有协方差结构,算法就可以得出有根据的猜测,以找出最值得尝试的最佳参数元组。这种策略有助于减少功能评估的数量。实际上,BO方法的动机是在“使用整个水牛”对下一步要测试的点做出很好的猜测的同时,保持功能评估的次数尽可能少。有不同的优值指标(预期的改进,预期的分位数改进,改进的可能性...)用于比较下一个要访问的点。

将其与诸如网格搜索之类的东西进行对比,该搜索将永远不会使用其先前功能评估中的任何信息来告知下一步要去哪里。

顺便说一句,这也是一种强大的全局优化技术,因此不对曲面的凸度做任何假设。另外,如果函数是随机的(例如,评估具有一些固有的随机噪声),则可以在GP模型中直接考虑。

另一方面,您必须在每次迭代中至少拟合一个GP(或多次,选择“最佳”,或对替代方案求平均,或完全使用贝叶斯方法)。然后,使用该模型进行预测(可能成千上万个),通常采用多启动局部优化的形式,并观察到评估GP预测函数比优化下的函数便宜得多。但是,即使有这种计算开销,也趋向于使用相对较少的函数调用来优化甚至非凸函数。

关于该主题的一篇被广泛引用的论文是Jones等人,“昂贵的黑匣子函数的有效全局优化”。但是这个想法有很多变化。

随机搜寻

即使成本函数的评估成本很高,随机搜索仍然有用。随机搜索很容易实现。研究人员要做的唯一选择是设置希望结果位于某个分位数概率 ;其余的自动使用基本概率的结果进行。p q

假设您的分位数为并且您希望模型结果出现在所有超参数元组的前%的概率为。所有尝试的元组不在该窗口中的概率为(因为它们是从同一分布中随机随机选择的),因此,至少一个元组在该区域中的概率为。放在一起,我们有q=0.95p=0.95100×(1q)=5nqn=0.95n10.95n

1qnpnlog(1p)log(q)

在我们的特定情况下,得出。n59

此结果是为什么大多数人建议尝试元组进行随机搜索的原因。值得注意的是,当参数数量适中时,可以与使用基于高斯过程的方法获得良好结果所需的实验数量相媲美。与高斯过程不同,查询元组的数量不会随着要搜索的超参数的数量而改变;实际上,对于大量超参数,基于高斯过程的方法可能需要多次迭代才能取得进展。n=60n=60

由于您可以保证结果的好坏,因此可以说服您的老板说不必进行更多的实验,这是一种很有说服力的工具。

LIPO及其变体

这是一个激动人心的到来,如果不是新的,那对我当然是新的。它通过在函数上设置已知边界与从最佳边界采样之间进行交替,并使用二次逼近来进行。我仍在研究所有细节,但我认为这很有希望。这是一篇不错的博客文章,文章为CédricMalherbe和Nicolas Vayatis的“ Lipschitz函数的全局优化 ”。


1
这似乎是响应面方法的现代变体!
kjetil b halvorsen

1
实际上,随机搜索的效果非常好:argmin.net/2016/06/20/hypertuning
Tim

1
@Tim是的,您的观点是正确的。我不想“决定”在本文中哪个问题更好,因为BO上本质上存在无穷的排列,每个排列都声称是“最好的”黑盒优化器-无法确定。我同意随机搜索可以很好地工作,但是我实际上建议使用LIPO而不是PRS。在我所有的实验中,LIPO都是正确无误的,并且远远优于PRS(平均而言)。LIPO的估算成本也最小:如果可以最小化QP,则可以使用LIPO,并且LIPO的超参数为零(与BO相比)。
恢复莫妮卡

我很高兴我再次检查了这个问题。LIPO看起来很棒。
贾里德·贝克福特

LIPO很棒。有时间时,我将扩展答案,以更好地说明LIPO。
恢复莫妮卡

40

正如其他人所指出的那样,有关昂贵的黑盒功能评估的文献非常丰富,并且通常基于代理模型方法。黑盒表示对底层函数知之甚少,您唯一可以做的就是在选定点评估(通常不提供渐变)。xf(x)x

我想说,当前用于评估(非常)昂贵的黑盒功能的黄金标准是(全局)贝叶斯优化(BO)。Sycorax已经描述了BO的某些功能,因此我仅添加一些可能有用的信息。

首先,您可能需要阅读本概述文件 1。还有一个较新的文献 [2]。

近年来,贝叶斯优化作为一个领域一直在稳步增长,它拥有一系列专门的研讨会(例如,BayesOpt,并从BO的Sheffield研讨会中观看了这些视频),因为它在机器学习中有非常实际的应用,例如用于优化ML算法的超参数-参见例如本文 [3]和相关工具箱SpearMint。还有许多其他使用各种语言的软件包可以实现各种贝叶斯优化算法。

正如我提到的,基本要求是每个函数评估都非常昂贵,因此与BO相关的计算增加了可忽略的开销。如果您的函数在几分钟或更长时间的时间内进行评估,BO绝对可以提供帮助。您也可以将其应用于更快的计算(例如数十秒),但是根据您使用的算法,您可能必须采用各种近似值。如果您的函数以单位进行评估,那么我认为您正在达到当前研究的极限,也许其他方法可能会变得更加有用。另外,我不得不说,BO很少是真正的黑匣子,您经常需要调整算法(有时很多),以使其在特定的实际问题中发挥最大的潜力。

除了BO,对于一般的无导数优化方法的回顾,您可以看一下这篇综述 [4],并检查具有快速收敛性的算法。例如,多级坐标搜索(MCS)通常会很快收敛到最小值附近(当然,并不总是全局最小值)。MCS被认为是用于全局优化的,但是您可以通过设置适当的约束来使其局部化。

最后,您对BO既昂贵又嘈杂的目标功能感兴趣,请参阅我对这个问题的回答


参考文献:

1 Brochu等人,“昂贵的成本函数的贝叶斯优化教程,适用于主动用户建模和分层强化学习”(2010年)。

[2] Shahriari等人,“将人类带出循环:贝叶斯优化综述”(2015年)。

[3] Snoek等人,“机器学习算法的实用贝叶斯优化”,NIPS(2012年)。

[4] Rios和Sahinidis,“无导数优化:算法回顾和软件实现比较”,《全球优化杂志》(2013年)。


4
+1这是一个很好的答案。特别是,这些论文是对该主题的重要补充。实际上,我不知道我描述的一般方法称为贝叶斯优化。但是我担心这些链接可能随着时间的流逝而变坏。您是否愿意添加更完整的引用信息,以便将来的用户可以访问这些论文?
恢复莫妮卡

贝叶斯优化论文非常有帮助。感谢您的回答。
贾里德·贝克福特

1
@ user777:好点。最后添加了一个明确的参考列表,该列表应足以恢复论文。
lacerbi

6

我本人并不了解这些算法,但是我相信您正在寻找的优化算法是无导数优化当目标成本高昂或嘈杂时可以使用该算法

例如,看一下这篇论文(Björkman,M.和Holmström,K.“使用径向基函数对昂贵的非凸函数进行全局优化。”优化与工程(2000)1:373. doi:10.1023 / A:1011584207202)其摘要似乎表明这正是您想要的:

本文考虑了代价高昂的目标函数的全局优化,即在存在多个局部最小值并且每个函数值需要大量CPU时间进行计算时才能找到全局最小值的问题。在工业和金融应用中经常会出现此类问题,其中功能值可能是耗时的计算机仿真或优化的结果。导数最经常难以获得,并且给出的算法没有利用这些信息。


2
请提供完整的引文信息,以获取链接的论文和其他资源。我们想建立一个持久的信息存储库,并且随着时间的流逝,链接往往会失效。
恢复莫妮卡

Björkman,M.和Holmström,K.“使用径向基函数对昂贵的非凸函数进行全局优化”。优化与工程(2000)1:373。doi:10.1023 / A:1011584207202
jkdev

4

你不是一个人。

昂贵的评估系统在工程中非常普遍,例如有限元方法(FEM)模型和计算流体动力学(CFD)模型。这些计算昂贵的模型的优化是非常需要和挑战的,因为进化算法通常需要对问题进行数以千计的评估,而对于评估昂贵的问题则不是选择。幸运的是,有很多方法(算法)可用于解决此问题。据我所知,它们大多数是基于代理模型(元模型)的。下面列出了一些。

  • 高效全局优化(EGO)[1]。上面已经提到了EGO算法,它可能是最著名的基于代理的优化算法。它基于Kriging模型和称为预期改进函数(EI)的填充标准。包含EGO算法的R软件包是DiceOptim和DiceKriging。
  • 模式追求采样(MPS)方法[2]。MPS算法建立在RBF模型的基础上,并且采用自适应采样策略来拾取候选点。作者在http://www.sfu.ca/~gwa5/software.html上发布了MATLAB代码。从我的个人经验来看,MPS算法可能需要更多的评估才能获得最佳效果,但可以处理比EGO算法更复杂的探针。
  • 集成代理模型由JulianeMüller[3]提出。她使用多个代理来增强搜索能力。您可以在https://github.com/Piiloblondie/MATSuMoTo上找到 MATLAB工具箱MATSuMoTo 。

在夏季,这些基于代理的优化算法尝试使用尽可能少的评估来找到问题的全局最优。这是通过充分利用代理人(代理人)提供的信息来实现的。关于优化计算上昂贵的问题的评论在[4-6]中。


参考:

  1. DR Jones,M。Schonlau和WJ Welch,“昂贵的黑盒函数的高效全局优化”,《全局优化杂志》,第1卷。13,第455-492页,1998年。
  2. L. Wang,S。Shan和GG Wang,“对昂贵的黑匣子函数进行全局优化的模式追求采样方法”,《工程优化》,第1卷。36,第419-438页,2004年。
  3. J.Müller,“用于计算昂贵的黑箱全局优化问题的替代模型算法”,坦佩雷理工大学,2012年。
  4. GG Wang和S. Shan,“支持工程设计优化的元建模技术综述”,《机械设计杂志》,第1卷。129,370-380,2007。
  5. AI Forrester和AJ Keane,“基于代理的优化的最新进展”,《航空航天科学》,第1卷。45,第50-79页,2009年。
  6. FAC Viana,TW Simpson,V。Balabanov和V. Toropov,“多学科设计优化中的元建模:我们真的走了多远?”,AIAA杂志,第1卷。52,第670-690页,2014/04/01。

3

我过去成功使用的两种简单策略是:

  1. 如果可能,尝试找到一个更简单的替代函数,近似于您的全部成本函数评估-典型的分析模型代替模拟。优化此更简单的功能。然后使用精确的成本函数验证并微调最终的解决方案。
  2. 如果可能的话,尝试找到一种方法来评估精确的 “增量成本”函数-精确,而不是使用梯度的近似值。也就是说,从您评估了全部成本的初始15维点开始,找到一种方法,对当前点的15个组成部分中的一个(或几个)进行少量更改,即可得出成本的变化方式。在特定情况下,您可能需要利用扰动的本地化属性,并且在此过程中可能需要定义,缓存和更新内部状态变量。

这些策略是针对具体情况的,我不知道它们是否可以在您的情况下适用,如果不能,对不起。两者都可能适用(就像我的用例一样):将“增量成本”策略应用于更简单的分析模型-性能可能会提高几个数量级。

另一种策略是使用通常倾向于减少迭代次数的二阶方法(但每次迭代都更复杂),例如Levenberg-Marquardt算法。但是考虑到您似乎没有直接有效地评估梯度的方法,在这种情况下,这可能不是可行的选择。


3

正如其他人所提到的,替代模型(也称为响应面)是一种强大的方法。在我看来,人们忘记的一件关键事情是,如果使用多核CPU,则可以并行执行多个功能评估。

我建议您看一下这段代码,它使用简单的响应模型,但是可以在多核CPU上扩展,从而使加速比等于所使用的内核数量。本文描述了该方法背后的数学。


我假设您是该论文的第一作者-如果可能,您可能应该提到。本文缺乏与贝叶斯优化或其他替代方法等最新方法的比较(实际上,它根本没有提供任何基准)。你还能说些什么吗?
Lacerbi '16

我并不是说那里使用的模型更好。我只是说人们太在乎模型的质量,有时却忘记了并行性,当涉及到许多内核时,并行性可能会很重要
Paul

请提供完整的引文信息,以获取链接的论文和其他资源。我们想建立一个持久的信息存储库,并且随着时间的流逝,链接往往会失效。
恢复莫妮卡

2
我不确定社区中的术语会有多少不同,但是我通常在这里将响应面用作“多项式代理模型”(通常是二次方)的同义词。因此,我倾向于将代理建模视为响应表面建模的超集。(不过,这可能是不正确的。)
GeoMatt22

0

在随机梯度下降中使用了许多技巧,这些技巧也可以应用于目标函数评估。总体思路是尝试使用数据子集近似目标函数

我在这两篇文章中的答案讨论了为什么随机梯度下降有效:其直觉是使用数据子集来近似梯度。

与标准梯度下降相比,随机梯度下降如何节省时间?

如何为大数据设置以并行/分布式方式运行线性回归?

相同的技巧适用于目标函数。

Axb2AAb

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.