确定黑盒函数的全局最小值的算法

问题描述

我最近在一次采访中遇到了这个问题,这让我发疯了。

假设您有一系列函数,每个函数都有固定数量的参数(不同的函数可以有不同数量的参数),每个函数都具有以下属性

  1. 每个输入都在0-1之间

  2. 每个输出在0-1之间

  3. 功能是连续的

  4. 函数一个黑匣子(即您无法查看它的方程式)

然后他要求我创建一种算法来查找此函数的全局最小值。

对我来说,看这个问题就像试图回答机器学习的基础。显然,如果有某种方法可以保证找到一个函数的全局最小值,那么我们将拥有完善的机器学习算法。显然我们没有,所以这个问题似乎是不可能的。

无论如何,我给出的答案是分而治之与随机梯度下降的混合。由于所有功能都是连续的,因此您始终可以计算相对于特定尺寸的局部梯度。将每个维度分成两半,一旦达到一定的粒度,就可以应用随机梯度下降。在梯度下降中,您可以初始化一个特定的起点,并根据每个尺寸的小变化量评估该点的左侧和右侧,以获取该点的斜率。然后,您将以一定的学习率更新点,并重新计算偏导数,直到达到新点和新点之间的距离低于某个阈值的点。然后,您重新合并并返回两个部分中的最小值,直到您从所有部门中返回最小值。我希望能解决SGD可能卡在局部极小值这一事实,因此我认为划分维空间会减少这种情况的发生。

最后,他对我的算法并不满意。是否有人有更快/更准确的方法解决此问题?

解决方法

范围为[0,1],因此f(x) = 0x上的R^n,是全局最小值。此外,通过了解域,范围和连续性成立,不能保证函数将是凸函数。

例如。 f(x) = sqrt(x),它是一个凹函数(没有最小值),并且x - [0,1]属于其域。