问题描述
我最近在一次采访中遇到了这个问题,这让我发疯了。
假设您有一系列函数,每个函数都有固定数量的参数(不同的函数可以有不同数量的参数),每个函数都具有以下属性:
然后他要求我创建一种算法来查找此函数的全局最小值。
对我来说,看这个问题就像试图回答机器学习的基础。显然,如果有某种方法可以保证找到一个函数的全局最小值,那么我们将拥有完善的机器学习算法。显然我们没有,所以这个问题似乎是不可能的。
无论如何,我给出的答案是分而治之与随机梯度下降的混合。由于所有功能都是连续的,因此您始终可以计算相对于特定尺寸的局部梯度。将每个维度分成两半,一旦达到一定的粒度,就可以应用随机梯度下降。在梯度下降中,您可以初始化一个特定的起点,并根据每个尺寸的小变化量评估该点的左侧和右侧,以获取该点的斜率。然后,您将以一定的学习率更新点,并重新计算偏导数,直到达到新点和新点之间的距离低于某个阈值的点。然后,您重新合并并返回两个部分中的最小值,直到您从所有部门中返回最小值。我希望能解决SGD可能卡在局部极小值这一事实,因此我认为划分维空间会减少这种情况的发生。
最后,他对我的算法并不满意。是否有人有更快/更准确的方法来解决此问题?
解决方法
范围为[0,1]
,因此f(x) = 0
是x
上的R^n
,是全局最小值。此外,通过了解域,范围和连续性成立,不能保证函数将是凸函数。
例如。 f(x) = sqrt(x)
,它是一个凹函数(即没有最小值),并且x - [0,1]
属于其域。