Python l_bfgs优化方法如何逼近梯度
我正在使用scipy的优化方法对一个可用作黑盒的二维函数进行优化。梯度不能直接计算,因此我要求该方法通过设置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是如何做到这一点的。一种流行的方法是按如
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]