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

Algorithm to determine the global minima of a blackbox function

我最近在面试中遇到了这个问题,想起来有点发疯。

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

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

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

  3. 函数是连续的

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

然后他让我创建一个算法来找到这个函数的全局最小值。

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

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

最后他似乎对我的算法很不满意。有人有 faster/more 解决这个问题的准确方法吗?

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

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