【问题标题】:Hill climbing in an n-dimensional space: finding the neighbor在 n 维空间中爬山:寻找邻居
【发布时间】:2017-01-21 21:49:18
【问题描述】:

在一维的爬山中,我尝试了两个邻居——我当前点左侧的一个小增量和一个右侧的小增量,然后保留目标函数值更高的那个。如何将其扩展到 n 维空间?如何为 n 维空间定义邻居?我是否必须尝试 2^n 个邻居(每个维度都应用一个增量)?

【问题讨论】:

标签: algorithm hill-climbing


【解决方案1】:

您不需要比较每对邻居,您需要计算一组邻居,例如在半径为 delta 的圆(更高维度的球体/超球体)上,然后将具有最高值的圆“爬上”。在任何情况下,您都将离散化当前解决方案的邻域并计算每个邻域的得分函数。当您可以区分您的功能时,基于梯度上升/下降的算法可能会解决您的问题: 1)计算梯度(最陡上升的方向) 2)向梯度方向迈出一小步 3)如果解决方案没有改变则停止

这些算法的一个常见问题是,您通常只能找到局部最大值/最小值。你可以在这里找到关于梯度下降/上升算法的一个很好的概述:http://sebastianruder.com/optimizing-gradient-descent/

【讨论】:

  • 这并没有解释在多维空间中什么是邻居。例如,如果在 n 个基本方向上只有 2n 个邻居,或者问题中建议的 {-delta, +delta}^n 超立方体有 2^n 个邻居,或者 {-delta, 可能有 3^n - 1 个邻居, 0, +delta}^n?
  • 处理实数时,我们有无数个邻居可供选择。在一维情况下,给定一个增量,我们只有两个邻居。在 2D 中,我们已经得到了一个圆,该圆上有无限数量的邻居。当然,我们只能进入方向(2^2 = 4)。也许离散邻域(2D 网格,3D 体素网格可能是一种解决方案)。
【解决方案2】:

如果您使用的是 IEEE-754 浮点数,那么显而易见的答案是 (2^52*(log_2(delta)+1023))^(n-1)+1 if delta>=2^(-1022)(或多或少取决于您的搜索空间...),因为这是您可以确定的唯一方法距离为delta 的相邻解不再存在。

即使假设您取而代之的是对给定 delta 距离内的所有点进行随机固定大小的样本,假设 delta=.1,您仍然会遇到这样的问题,即如果与局部最优值的距离为 0.0001,则仅在 1 维上找到改进将小于.0001/.1/2=0.05%,因此随着您接近局部最优值(您不知道其值......),您将需要获取越来越多的随机样本。

显然,爬山不适用于实数空间或具有无限度的理论图空间。您应该改为使用全局搜索算法。

【讨论】:

    【解决方案3】:

    仅需要 O(n) 个邻居而不是 O(2^n) 个邻居的多维搜索算法的一个示例是 Multidirectional search: A direct search algorithm for parallel machines (1989) 中描述的 Torczon 单纯形法。我选择了这个而不是更广为人知的 Nelder-Mead 方法,因为 Torczon 单纯形法具有收敛性证明(在某些合理条件下收敛到局部最优)。

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-24
    • 2015-01-08
    • 1970-01-01
    • 2015-08-27
    • 2010-10-13
    相关资源
    最近更新 更多