R 什么数值优化器可以只使用梯度,而不使用目标的显式值?

R 什么数值优化器可以只使用梯度,而不使用目标的显式值?,r,optimization,numpy,numerical-methods,numerics,R,Optimization,Numpy,Numerical Methods,Numerics,我有一个优化问题,它涉及到最小化一个函数,我知道它的梯度,但目标函数在任何点的实际值都是未知的 我想使用BFGS优化函数,但我发现的所有BFGS实现似乎都需要了解目标的价值,尤其是在行搜索步骤中。我已经看过了Python(Spyy)和BFGS的C++实现。 显然,我可以使用梯度下降法,但我不想在这里重新发明轮子 有什么想法吗 更多细节:我想最小化h。但是我没有得到h。我得到的是h=f(g),以及g(x)的显式公式f基本上以一种复杂的几何方式变换g的梯度,这种方式不太难计算,但不可能积分。因此,计

我有一个优化问题,它涉及到最小化一个函数,我知道它的梯度,但目标函数在任何点的实际值都是未知的

我想使用BFGS优化函数,但我发现的所有BFGS实现似乎都需要了解目标的价值,尤其是在行搜索步骤中。我已经看过了Python(Spyy)和BFGS的C++实现。 显然,我可以使用梯度下降法,但我不想在这里重新发明轮子

有什么想法吗


更多细节:我想最小化h。但是我没有得到h。我得到的是h=f(g),以及g(x)的显式公式f基本上以一种复杂的几何方式变换g的梯度,这种方式不太难计算,但不可能积分。因此,计算h(x)的梯度非常简单,但是很难得到h(x)的显式值。在这种情况下,尝试将h(x)最小化为二次方。这是因为您实际上是在搜索h(x)接近于零的点。可以通过对其进行平方运算并运行参数搜索来对其进行凸化


对不起,我的意思是h(x)是梯度

也许讨论一个更简单的例子会有所帮助。取一些标量y=f(x)。y的梯度为df/dx。如果你处处都知道导数,你可以很容易地(!!)通过解析或数值积分来确定f(x)的值,但是用一个不可确定的全局常数。旧的“积分(f(x)dx)=f(x)+C”技巧。因此,除非您至少可以将
h
函数锚定到一个点,否则无法解决问题。您可以跟踪最小值
x
的位置,以便
h(x)
是min),但不能跟踪
h(x)
的值。我相信您已将问题归结为查找根的问题。你可以使用其中一个,然后你只需检查该点是最小点、最大点还是拐点。

在花了一些时间思考后,我认为答案是采用类似BFGS的拟牛顿方法。函数值进入BFGS计算的唯一位置是行搜索部分,即第一个Wolfe条件

我认为解决方案是使用一种不检查第一个Wolfe条件(Armijo规则)的行搜索方法


我用python和C++为BFGS实现了它。不过,在第二种情况下,我认为通过向BFGS例程提供一个总是递减的函数,可以得到相同的结果(例如,它包含一个计数器,跟踪它被调用的次数,并且总是返回一个比上次调用时更小的数)。减少的幅度必须足够大,以便始终通过Armijo规则()。

更多详细信息:我希望最小化$h$。但我没有得到h$。我得到的是$\del h=f(\del g)$,以及一个明确的公式$g(x)$$f$基本上以一种复杂的几何方式变换$g$的梯度,这种方式不太难计算,但不可能积分。因此,计算$h(x)$的梯度非常简单,但很难得到$h(x)$的显式值。您能提供f和g的定义吗?如果没有,你能提供更多关于h的信息吗,例如它是凸的吗?它是n次连续可微的吗?那么,对于没有h的问题,你的解决方案是求h的平方?而且,一个非凸函数的平方通常也不是凸的。例如f(x)=sin(x)。也许他是想最小化梯度的平方?我认为这个答案很好:与其最小化函数h,不如试着找到x,使梯度的某个范数为零。这可能有效,但实际上可能不太有效——例如,参见数值公式的相关章节(我认为第10章),指出寻根比最小化困难得多,条件也更差。但如果你别无选择…我以为这是答案,但再想想,我实际上认为这不完全是真的。这是一个非常特殊的寻根问题,因为通常我们知道我们想要沿着与梯度相反的方向前进。如果我们只是在寻找根,我们所知道的是,我们想要找到梯度为零的地方,我们实际上只能从逆雅可比矩阵/hessian矩阵得到搜索方向。