梯度计算概述
梯度计算是数学和工程中的基础工具,梯度计算通常用于图像处理、数值分析和优化等领域。梯度可以帮助我们了解函数值的变化率。
梯度在科学与工程中广泛应用,例如:
- 优化算法:梯度下降法(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
∂x∂f=∂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
∂y∂f=∂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=(∂x∂f,∂x∂f)=(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=(∂x1∂f,∂x2∂f,…∂xn∂f,)
方向指向函数值增长最快的方向,模长为该方向的变化率。
对于离散数据而言
一维离散数据的梯度近似
假设有一维离散数据点
f
(
x
i
)
f({x}_{i})
f(xi),步长为
h
=
x
i
+
1
−
x
i
h={x}_{i+1}-{x}_{i}
h=xi+1−xi ,梯度(导数)的近似方法有三种:
前向差分(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(xi−1)
特点:仅用左侧相邻点,计算简单,但精度较低(一阶误差
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(xi−1)
特点:利用左右两侧点,精度更高(二阶误差
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=(∂x∂f,∂y∂f)
计算 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}}}
∂x∂f(xi,yi)≈2hxf(xi+1,yi)−f(xi−1,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}}}
∂y∂f(xi,yi)≈2hxf(xi,yi+1)−f(xi,yi−1)
边界点的处理
边缘点(如
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}}}
∂y∂f(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}
∂x∂f
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
(18−10)/2=4;
计算
∂
f
∂
y
frac{partial f}{partial y}
∂y∂f
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
(20−8)/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=(∂x∂f,∂y∂f,∂z∂f,)
每个方向的偏导数均用中心差分近似,例如:
∂
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}}}
∂z∂f(xi,yi,zk)≈2hxf(xi,yi,zk+1)−f(xi,yi,zk−1)
误差分析与步长选择
- 截断误差:由泰勒展开的高阶项忽略导致,中心差分误差更小。
- 舍入误差:步长 h 过小时,计算机浮点运算可能放大噪声。
- 平衡策略:选择适中的 h,通常取数据采样间隔或通过试验确定。
数值差分法通过局部线性近似将连续的导数转化为离散差值运算,是处理实验数据、图像或仿真结果的实用工具。其核心在于:
- 选择差分公式(前向、后向、中心)平衡精度与数据可用性。
- 合理处理边界条件。
- 优化步长以平衡截断误差与舍入误差。
这一方法在工程、物理、计算机视觉和机器学习中广泛应用,例如图像边缘检测、流体动力学模拟和优化算法中的梯度估计。
文章来源于互联网:梯度计算(MATLAB和pytorch实例)
相关推荐: 华为云鸿蒙应用入门级开发者认证考试题库(理论题和实验题)
注意:考试链接地址:华为云鸿蒙应用入门级学习认证_华为云鸿蒙应用入门级开发者认证_华为云开发者学堂-华为云 当前认证打折之后是1元,之后原价700元,大家尽快考试!考试题库里面答案不一定全对,但是可以保证百分之九十的正确率吧!考试题目有些文字错误是正常的,因为…
5bei.cn大模型教程网










