Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python l_bfgs优化方法如何逼近梯度_Python_Numpy_Scipy_Mathematical Optimization - Fatal编程技术网

Python l_bfgs优化方法如何逼近梯度

Python l_bfgs优化方法如何逼近梯度,python,numpy,scipy,mathematical-optimization,Python,Numpy,Scipy,Mathematical Optimization,我正在使用scipy的优化方法对一个可用作黑盒的二维函数进行优化。梯度不能直接计算,因此我要求该方法通过设置approx\u grad=True来近似梯度 我想知道近似梯度是如何计算的。我的猜测是,在每个点上,对于每个维度,梯度都是通过向前差来近似的。因此,对于N维中的每个点,进行N次求值以得到偏导数。这是正确的吗 雅可比近似是用函数,: 其中ε是fmin_l_bfgs_b的参数 ε:浮点数 当近似梯度为真时使用的步长,用于数值计算梯度 我不知道scipy是如何做到这一点的。一种流行的方法是按如

我正在使用scipy的优化方法对一个可用作黑盒的二维函数进行优化。梯度不能直接计算,因此我要求该方法通过设置
approx\u grad=True
来近似梯度


我想知道近似梯度是如何计算的。我的猜测是,在每个点上,对于每个维度,梯度都是通过向前差来近似的。因此,对于N维中的每个点,进行N次求值以得到偏导数。这是正确的吗

雅可比近似是用函数,:

其中ε是fmin_l_bfgs_b的参数

ε:浮点数

近似梯度
为真时使用的步长,用于数值计算梯度


我不知道scipy是如何做到这一点的。一种流行的方法是按如下方式计算:

(f(x+e)-f(x-e)/(2*e)(显然这里不支持乳胶)


这使您可以精确到二次项(只需计算每个项的泰勒展开并减去它们)

感谢链接。我的猜测似乎是正确的。在每个点进行N次函数计算以获得梯度,其中N是维数(向量x的大小)
        f(xk[i] + epsilon[i]) - f(xk[i])
f'[i] = ---------------------------------
                   epsilon[i]