优化具有计算偏导数的函数
我需要优化一个函数,也就是找到它的最小值。这个函数是用一个向量 w
来表示的。基本上,我做的就是计算这个函数对每个参数的偏导数。然后我就用梯度下降法来进行优化。不过我知道,除了梯度下降法,还有一些更高级的优化方法,它们不需要调整参数或者特别关注这些参数。我想在 numpy
或 scipy
中尝试这些方法,但我不知道怎么做。我需要的是一种可以接受计算出来的偏导数值作为输入,然后优化这个函数的方法。在 numpy
或 scipy
中有没有这样的东西呢?
1 个回答
scipy.optimize.minimize
这个函数让你可以输入目标函数的雅可比矩阵和海森矩阵:
jac : bool or callable, optional
雅可比矩阵(梯度)是目标函数的一个部分。这个选项只适用于 CG、BFGS、Newton-CG、L-BFGS-B、TNC、SLSQP、dogleg 和 trust-ncg 方法。如果 jac 是一个布尔值并且为真,函数 fun 会被认为返回目标函数的同时,也返回梯度。如果为假,梯度会通过数值方法来估算。jac 也可以是一个可调用的函数,用来返回目标函数的梯度。在这种情况下,它必须接受与 fun 相同的参数。
hessp : callable, optional
海森矩阵(第二阶导数的矩阵)是目标函数的一个部分,或者是目标函数的海森矩阵与一个任意向量 p 的乘积。这个选项只适用于 Newton-CG、dogleg 和 trust-ncg 方法。你只需要提供 hessp 或 hess 中的一个。如果提供了 hess,那么 hessp 会被忽略。如果两个都没有提供,那么海森矩阵的乘积会通过对 jac 进行有限差分来近似计算。hessp 必须计算海森矩阵与一个任意向量的乘积。
正如 @ffriend 在评论中提到的,你可以在 这里 找到一些有和没有梯度的示例。