Answers:
最陡峭的爬坡算法非常适合凸优化。但是,现实世界中的问题通常是非凸优化类型的问题:存在多个峰。在这种情况下,当此算法从随机解开始时,达到局部峰之一而不是全局峰的可能性很高。诸如“模拟退火”之类的改进措施通过允许算法远离局部峰移动,从而提高了找到全局峰的可能性,从而改善了此问题。
显然,对于只有一个峰的简单问题,最陡峭的爬坡总是更好。如果发现全局峰值,它也可以使用提前停止。相比之下,模拟退火算法实际上会从全局峰值跳开,返回并再次跳开。这将重复进行,直到其冷却到足够程度或完成一定的预设迭代次数为止。
现实世界中的问题涉及嘈杂和丢失的数据。随机爬山方法虽然速度较慢,但对这些问题更健壮,并且与最陡峭的爬山算法相比,优化例程具有更高的达到全局峰值的可能性。
结束语:这是一个很好的问题,在设计解决方案或在各种算法之间进行选择时会引起一个持续的问题:性能计算成本的权衡。正如您可能已经怀疑的那样,答案始终是:它取决于算法的优先级。如果它是某些在线学习系统的一部分,并且正在处理一批数据,那么将有很强的时间约束,但性能约束很弱(下一批数据将纠正第一批数据引入的错误偏差)。另一方面,如果这是一项具有全部可用数据的离线学习任务,则性能是主要限制因素,建议采用随机方法。
让我们先从一些定义开始。
爬山是一种搜索算法,它仅运行一个循环并朝着价值增加的方向(即上坡)连续移动。循环在达到峰值并且没有邻居具有更高的值时终止。
随机爬山是爬山的一种变体,它从上坡运动中随机选择。选择的概率会随上坡的陡峭程度而变化。两种众所周知的方法是:
首选爬坡:随机生成后继,直到生成一个比当前状态更好的后继。*如果州有许多继任者(例如数千或数百万),则认为是好的。
随机重启爬坡:按照“如果没有成功,请尝试,再试一次”的理念工作。
现在您的答案。实际上,在许多情况下,随机爬山都可以做得更好。考虑以下情况。该图显示了状态空间景观。图片中的示例摘自《人工智能:现代方法》一书。
假设您处于当前状态所显示的位置。如果实施简单的爬坡算法,则将达到局部最大值,并且算法将终止。即使存在具有最佳目标函数值的状态,但是由于陷入局部最大值,该算法仍无法到达该状态。算法也可能卡在平坦的局部最大值处。
随机重启爬坡从随机生成的初始状态进行一系列爬坡搜索,直到找到目标状态。
爬坡的成功取决于状态空间景观的形状。如果只有几个局部最大值,则平台平坦;随机重启爬坡将很快找到很好的解决方案。大多数现实生活中的问题都有非常粗糙的状态空间景观,这使其不适合使用爬山算法或其任何变体。
注意: Hill Climb Algorithm 也可以用于查找最小值,而不仅仅是最大值。我在回答中使用了“最大”一词。如果您正在寻找最小值,包括图表在内的所有事物都将是相反的。
TLDR:如果您试图找到,在哪里 是具有多个局部最优值的得分函数,因此并非所有局部最优值都具有相等的值。