有限差法(Finite Difference)求梯度和Hessian Matrix(海森矩阵)的python实现

文章介绍了如何运用有限差方法来求解向量值函数的导数,特别是针对Hessian矩阵的计算。通过提供代码示例展示了如何生成梯度函数以及计算Hessian矩阵,并强调了选择适当步长eps对精度的影响。这种方法依赖于numpy库,相比其他工具如autograd和numdifftools,具有更高的灵活性和效率。

数学参考

有限差方法求导,Finite Difference Approximations of Derivatives,是数值计算中常用的求导方法。数学上也比较简单易用。本文主要针对的是向量值函数,也就是 f ( x ) : R n → R f(x):\mathbb{R^n}\rightarrow \mathbb{R} f(x):RnR当然,普通的标量值函数是向量值函数的一种特例。

本文采用的数学参考是:有限差方法
参考的主要是Central Difference Approximations小节中的Second-order derivatives based on gradient calls的那个公式。

代码

用法

将下面代码中的Hessian矩阵一节中的Hessian函数直接复制到你的代码中,然后就可以按照用法示例使用。

特别要注意,eps的选择比较关键,直接决定了有限差方法的精度。建议大家根据函数参数的数量级动态的设置,例如某参数变化范围1-10,就可以设置为0.001;而某参数变化范围为0-0.0001,则可设置为0.000001,之类的。

用法示例

def func(x):
    x_0 = x[0]
    x_1 = x[1]
    return x_0**2 + x_1**2
hessian(func, [0,0], esp = [0.01, 0.01])

得到结果:

array([[2., 0.],
       [0., 2.]], dtype=float32)

函数主体

准备

本文的方法只需

评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值