AI大模型教程
一起来学习

梯度计算(MATLAB和pytorch实例)

梯度计算概述

梯度计算是数学和工程中的基础工具,梯度计算通常用于图像处理、数值分析和优化等领域。梯度可以帮助我们了解函数值的变化率。

梯度在科学与工程中广泛应用,例如:

  • 优化算法:梯度下降法(Gradient Descent)利用负梯度方向寻找函数最小值。
  • 物理场分析:电场、重力场的梯度表示场强的变化方向。
  • 图像处理:边缘检测通过梯度识别像素值的突变方向。

下面是个二维函数:

f

(

x

,

y

)

=

x

2

+

y

2

f(x,y)={{x}^{2}}+{{y}^{2}}

f(x,y)=x2+y2

使用MATLAB输出结果矩阵和三维图形:

为了计算二维函数

f

(

x

,

y

)

=

x

2

+

y

2

f(x,y)={{x}^{2}}+{{y}^{2}}

f(x,y)=x2+y2 在某一点的梯度,我们需要求出该函数在 x 和 y 方向上的偏导数,并将它们组合成一个向量。

将 y 视为常数,对 x 求导:

f

x

=

x

(

x

2

+

y

2

)

=

2

x

frac{partial f}{partial x}=frac{partial }{partial x}({{x}^{2}}+{{y}^{2}})=2x

xf=x(x2+y2)=2x

将 x 视为常数,对 y 求导:

f

y

=

y

(

x

2

+

y

2

)

=

2

y

frac{partial f}{partial y}=frac{partial }{partial y}({{x}^{2}}+{{y}^{2}})=2y

yf=y(x2+y2)=2y

组合偏导数形成梯度向量

梯度向量由上述两个偏导数组成

f

=

(

f

x

,

f

x

)

=

(

2

x

,

2

y

)

▽f=(frac{partial f}{partial x},frac{partial f}{partial x})=(2x,2y)

f=(xf,xf)=(2x,2y)

由此可得,二维函数

f

(

x

,

y

)

=

x

2

+

y

2

f(x,y)={{x}^{2}}+{{y}^{2}}

f(x,y)=x2+y2 在任意一点

(

x

,

y

)

(x,y)

(x,y) d 梯度

f

=

(

2

x

,

2

y

)

▽f=(2x,2y)

f=(2x,2y)

**总结:**对于函数

f

(

x

,

y

)

=

x

2

+

y

2

f(x,y)={{x}^{2}}+{{y}^{2}}

f(x,y)=x2+y2 来说,它的梯度标量上的含义即是各自在x轴和y轴方向上的偏导数;两者组合成一个在二维平面上的向量;从而在三维空间上表示此函数所描绘的曲平面的斜率和斜率的方向。

梯度计算的原理

数学定义

梯度是多元函数的导数推广,表示函数在某一点处所有方向上的最大变化率。对于函数

f

(

x

1

,

x

1

,

.

.

.

,

x

1

)

f({x}_{1},{x}_{1},…,{x}_{1})

f(x1,x1,,x1) ,其梯度是一个向量:

f

=

(

f

x

1

,

f

x

2

,

.

.

.

f

x

n

,

)

∇f=left ({frac{partial f}{partial {{x}_{1}}},frac{partial f}{partial {{x}_{2}}},…frac{partial f}{partial {{x}_{n}}},}right )

f=(x1f,x2f,xnf,)

方向指向函数值增长最快的方向,模长为该方向的变化率。

对于离散数据而言

一维离散数据的梯度近似

假设有一维离散数据点

f

(

x

i

)

f({x}_{i})

f(xi),步长为

h

=

x

i

+

1

x

i

h={x}_{i+1}-{x}_{i}

h=xi+1xi ,梯度(导数)的近似方法有三种:

前向差分(Forward Difference)

f

(

x

i

)

f

(

x

i

+

1

)

f

(

x

i

)

h

{{f}^{‘}}({{x}_{i}})≈frac{f({{x}_{i+1}})-f({{x}_{i}})}{h}

f(xi)hf(xi+1)f(xi)

特点:仅用右侧相邻点,计算简单,但精度较低(一阶误差

O

(

h

)

O(h)

O(h))。

后向差分(Backward Difference)

f

(

x

i

)

f

(

x

i

)

f

(

x

i

1

)

h

{{f}^{‘}}({{x}_{i}})≈frac{f({{x}_{i}})-f({{x}_{i-1}})}{h}

f(xi)hf(xi)f(xi1)

特点:仅用左侧相邻点,计算简单,但精度较低(一阶误差

O

(

h

)

O(h)

O(h))。

中心差分(Central Difference)

f

(

x

i

)

f

(

x

i

+

1

)

f

(

x

i

1

)

2

h

{{f}^{‘}}({{x}_{i}})≈frac{f({{x}_{i+1}})-f({{x}_{i-1}})}{2h}

f(xi)2hf(xi+1)f(xi1)

特点:利用左右两侧点,精度更高(二阶误差

O

(

h

2

)

O({h}^{2})

O(h2)),但需要更多数据。

二维离散数据的梯度近似

对二维网格数据

f

(

x

i

)

f({x}_{i})

f(xi),需分别计算 x 和 y 方向的偏导数,再组合成梯度向量

f

=

(

f

x

,

f

y

)

∇f=left ({frac{partial f}{partial {{x}}},frac{partial f}{partial {{y}}}}right )

f=(xf,yf)

计算 x 方向的偏导数

中心差分公式(假设网格均匀,步长

h

x

{h}_{x}

hx

f

x

(

x

i

,

y

i

)

f

(

x

i

+

1

,

y

i

)

f

(

x

i

1

,

y

i

)

2

h

x

frac{partial f}{partial x}({{x}_{i}},{{y}_{i}})≈frac{f({{x}_{i+1}},{{y}_{i}})-f({{x}_{i-1}},{{y}_{i}})}{2{{h}_{x}}}

xf(xi,yi)2hxf(xi+1,yi)f(xi1,yi)

计算 y 方向的偏导数

中心差分公式(假设网格均匀,步长

h

y

{h}_{y}

hy

f

y

(

x

i

,

y

i

)

f

(

x

i

,

y

i

+

1

)

f

(

x

i

,

y

i

1

)

2

h

x

frac{partial f}{partial y}({{x}_{i}},{{y}_{i}})≈frac{f({{x}_{i}},{{y}_{i+1}})-f({{{x}_{i}},{y}_{i-1}})}{2{{h}_{x}}}

yf(xi,yi)2hxf(xi,yi+1)f(xi,yi1)

边界点的处理

边缘点(如

x

0

{x}_{0}

x0

y

0

{y}_{0}

y0 )无法使用中心差分,需改用前向或后向差分:

f

y

(

x

0

,

y

i

)

f

(

x

1

,

y

i

)

f

(

x

0

,

y

i

)

h

x

frac{partial f}{partial y}({{x}_{0}},{{y}_{i}})≈frac{f({{x}_{1}},{{y}_{i}})-f({{{x}_{0}},{y}_{i}})}{{{h}_{x}}}

yf(x0,yi)hxf(x1,yi)f(x0,yi)

假设均匀网格数据

f

(

x

,

y

)

=

x

2

+

y

2

f(x,y)={{x}^{2}}+{{y}^{2}}

f(x,y)=x2+y2 网格步长

h

x

=

h

y

=

1

{h}_{x}={h}_{y}=1

hx=hy=1 ,计算点(2,3)的梯度:

计算

f

x

frac{partial f}{partial x}

xf

f

(

1

,

3

)

=

10

f(1,3)=10

f(1,3)=10

f

(

3

,

3

)

=

18

f(3,3)=18

f(3,3)=18

(

18

10

)

/

2

=

4

(18-10)/2=4

(1810)/2=4;

计算

f

y

frac{partial f}{partial y}

yf

f

(

2

,

2

)

=

8

f(2,2)=8

f(2,2)=8

f

(

2

,

4

)

=

20

f(2,4)=20

f(2,4)=20

(

20

8

)

/

2

=

6

(20-8)/2=6

(208)/2=6;

所以点(2,3)的梯度:

f

=

(

4

,

6

)

▽f=(4,6)

f=(4,6) ,与理论值一致。

使用pytorch进行验证

import torch

# 定义变量并启用梯度跟踪
x = torch.tensor(2.0, requires_grad=True)
y = torch.tensor(3.0, requires_grad=True)

# 计算函数值
f = x**2 + y**2

# 反向传播,计算梯度
f.backward()

# 输出梯度
print("▽f=(", x.grad.item(), y.grad.item(),")")

多维扩展(以三维为例)

对三维数据

f

(

x

i

,

y

i

,

z

k

)

f({x}_{i},{y}_{i},{z}_{k})

f(xi,yi,zk) ,梯度为:

f

=

(

f

x

,

f

y

,

f

z

,

)

∇f=left ({frac{partial f}{partial {{x}}},frac{partial f}{partial {{y}}},frac{partial f}{partial {{z}}},}right )

f=(xf,yf,zf,)

每个方向的偏导数均用中心差分近似,例如:

f

z

(

x

i

,

y

i

,

z

k

)

f

(

x

i

,

y

i

,

z

k

+

1

)

f

(

x

i

,

y

i

,

z

k

1

)

2

h

x

frac{partial f}{partial z}({{x}_{i}},{y}_{i},{{z}_{k}})≈frac{f({{x}_{i}},{y}_{i},{{z}_{k+1}})-f({{{x}_{i}},{y}_{i},{z}_{k-1}})}{2{{h}_{x}}}

zf(xi,yi,zk)2hxf(xi,yi,zk+1)f(xi,yi,zk1)

误差分析与步长选择

  • 截断误差:由泰勒展开的高阶项忽略导致,中心差分误差更小。
  • 舍入误差:步长 h 过小时,计算机浮点运算可能放大噪声。
  • 平衡策略:选择适中的 h,通常取数据采样间隔或通过试验确定。

数值差分法通过局部线性近似将连续的导数转化为离散差值运算,是处理实验数据、图像或仿真结果的实用工具。其核心在于:

  1. 选择差分公式(前向、后向、中心)平衡精度与数据可用性。
  2. 合理处理边界条件。
  3. 优化步长以平衡截断误差与舍入误差。

这一方法在工程、物理、计算机视觉和机器学习中广泛应用,例如图像边缘检测、流体动力学模拟和优化算法中的梯度估计。

文章来源于互联网:梯度计算(MATLAB和pytorch实例)

相关推荐: 华为云鸿蒙应用入门级开发者认证考试题库(理论题和实验题)

注意:考试链接地址:华为云鸿蒙应用入门级学习认证_华为云鸿蒙应用入门级开发者认证_华为云开发者学堂-华为云 当前认证打折之后是1元,之后原价700元,大家尽快考试!考试题库里面答案不一定全对,但是可以保证百分之九十的正确率吧!考试题目有些文字错误是正常的,因为…

赞(0)
未经允许不得转载:5bei.cn大模型教程网 » 梯度计算(MATLAB和pytorch实例)
分享到: 更多 (0)

AI大模型,我们的未来

小欢软考联系我们