算梯度的方法

这篇博客介绍了如何利用数学上的有限差分方法来计算向量函数的梯度。通过示例展示了对于不同函数和变量,如何用代码实现梯度计算,并探讨了h值的选择对精度的影响以及浮点数精度的限制。
摘要由CSDN通过智能技术生成

算梯度

f ′ ( x ) = lim ⁡ h → 0 f ( x + h ) − f ( x ) h = lim ⁡ h → 0 f ( x ) − f ( x − h ) h f'(x)=\lim \limits _{h\rightarrow0} \frac{f(x+h)-f(x)}{h}=\lim \limits _{h\rightarrow0} \frac{f(x)-f(x-h)}{h} f(x)=h0limhf(x+h)f(x)=h0limhf(x)f(xh)为数学上的方法,那么我们对于向量 [ x 1 , x 2 , … , x n ] [x_1, x_2, \dots,x_n] [x1,x2,,xn]​计算梯度可以根据该方法实现如下代码,通过该代码实现对每一个数字进行梯度计算。

def gradient(f, x):
	h = 1e-4 或其他更小数
	f_l = f(x-h)
	f_r = f(x+h)
	return (f_r - f_l) / 2 / h

假设 f ( x ) = 0.1 x 2 + x f(x) = 0.1x^2+x f(x)=0.1x2+x​, x ⃗ = [ 2 , 1 , 4 , 3 , 7 ] \vec x=[2, 1, 4, 3, 7] x =[2,1,4,3,7]​​,假设 h = 0.0001 h=0.0001 h=0.0001则有:
g r a d i e n t ( f , x ⃗ ) = [ f ( 2 + 0.0001 ) − f ( 2 − 0.0001 ) 0.0002 , … , f ( 7 + 0.0001 ) − f ( 7 − 0.0001 ) 0.0002 ] = 1 0.0002 [ f ( 2.0001 ) − f ( 1.9999 ) , … , f ( 7.0001 ) − f ( 6.9999 ) ] = [ 1.3995 , 1.2004 , 1.8001 , 1.5974 , 2.4033 ] \begin{aligned} gradient(f,\vec x) &= [\frac{f(2+0.0001)-f(2-0.0001)}{0.0002}, \dots, \frac{f(7+0.0001)-f(7-0.0001)}{0.0002}]\\ &=\frac{1}{0.0002}[f(2.0001)-f(1.9999), \dots, f(7.0001)-f(6.9999)]\\ &=[1.3995, 1.2004, 1.8001, 1.5974, 2.4033] \end{aligned} gradi

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值