【发布时间】:2017-01-21 21:49:18
【问题描述】:
在一维的爬山中,我尝试了两个邻居——我当前点左侧的一个小增量和一个右侧的小增量,然后保留目标函数值更高的那个。如何将其扩展到 n 维空间?如何为 n 维空间定义邻居?我是否必须尝试 2^n 个邻居(每个维度都应用一个增量)?
【问题讨论】:
在一维的爬山中,我尝试了两个邻居——我当前点左侧的一个小增量和一个右侧的小增量,然后保留目标函数值更高的那个。如何将其扩展到 n 维空间?如何为 n 维空间定义邻居?我是否必须尝试 2^n 个邻居(每个维度都应用一个增量)?
【问题讨论】:
您不需要比较每对邻居,您需要计算一组邻居,例如在半径为 delta 的圆(更高维度的球体/超球体)上,然后将具有最高值的圆“爬上”。在任何情况下,您都将离散化当前解决方案的邻域并计算每个邻域的得分函数。当您可以区分您的功能时,基于梯度上升/下降的算法可能会解决您的问题: 1)计算梯度(最陡上升的方向) 2)向梯度方向迈出一小步 3)如果解决方案没有改变则停止
这些算法的一个常见问题是,您通常只能找到局部最大值/最小值。你可以在这里找到关于梯度下降/上升算法的一个很好的概述:http://sebastianruder.com/optimizing-gradient-descent/
【讨论】:
如果您使用的是 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%,因此随着您接近局部最优值(您不知道其值......),您将需要获取越来越多的随机样本。
显然,爬山不适用于实数空间或具有无限度的理论图空间。您应该改为使用全局搜索算法。
【讨论】:
仅需要 O(n) 个邻居而不是 O(2^n) 个邻居的多维搜索算法的一个示例是 Multidirectional search: A direct search algorithm for parallel machines (1989) 中描述的 Torczon 单纯形法。我选择了这个而不是更广为人知的 Nelder-Mead 方法,因为 Torczon 单纯形法具有收敛性证明(在某些合理条件下收敛到局部最优)。