问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

导数和微分

创作时间:
作者:
@小白创作中心

导数和微分

引用
CSDN
1.
https://blog.csdn.net/flyfish1986/article/details/139566437

本文主要介绍了导数和微分的概念、区别以及在PyTorch中的应用。文章内容较为专业,主要面向数学和机器学习领域的读者。

导数和微分

导数是描述函数变化率的量,它表示函数在某点的瞬时变化速度和切线斜率。微分是导数的一个线性近似,表示函数在某点处随着自变量变化的增量。导数和微分在本质上都是研究函数变化的工具,但导数更侧重于变化率,而微分更侧重于线性近似和变化量。

导数和微分是微积分中的两个重要概念,它们虽然紧密相关,但有不同的含义和应用。以下是它们的区别:

导数(Derivative)

  1. 定义
  • 导数是描述函数变化率的一个量。具体来说,函数f(x)在某点x=a处的导数,表示当x在a附近变化时,函数f(x)的变化速度。
  • 数学上,导数定义为:
    f′(a)=limh→0f(a+h)−f(a)h
  1. 几何意义
  • 导数在几何上表示曲线y=f(x)在点(a,f(a))处的切线的斜率。
  1. 表示方法
  • 常见的表示法有f′(x)、dfdx、Df(x)等。
  1. 应用
  • 导数用于研究函数的单调性、极值、凹凸性等性质,广泛应用于物理学、工程学、经济学等领域。

微分(Differential)

  1. 定义
  • 微分是导数的一个线性近似。它描述了函数f(x)在某点x=a处的增量与自变量x的增量之间的线性关系。
  • 如果f在a处可导,且导数为f′(a),那么函数在a处的微分df可以表示为:
    df=f′(a)⋅dx
  • 其中dx是自变量x的一个增量。
  1. 几何意义
  • 微分表示的是切线的变化量,它是导数的一个线性近似,适用于小范围内的函数变化。
  1. 表示方法
  • 微分常表示为dy或df,其中dy=f′(x)⋅dx。

导数描述函数变化率

例子:位置函数和速度

假设有一辆车在直线上行驶,其位置s(单位:米)随时间t(单位:秒)的变化用函数s(t)=t2表示。这意味着在时间t秒时,车的位置是s(t)米。我们想要了解这辆车在某一时刻的速度。速度就是位置随时间变化的速率,也就是位置函数的导数。

  1. 计算导数
  • 首先,计算位置函数s(t)的导数s′(t):
    s′(t)=dtd(t2)=2t
  • 这个导数s′(t)就是车在时间t秒时的瞬时速度。
  1. 解释变化率
  • 导数s′(t)描述了车的位置s(t)随时间t变化的速率。例如,在t=3秒时,导数s′(3)=2×3=6米/秒。这意味着在第3秒时,车的速度是每秒6米。
  • 更具体地说,导数s′(t)告诉我们,当时间t变化一个非常小的量Δt时,位置s(t)将变化约s′(t)⋅Δt。

具体的变化率例子

假设我们想知道在t=3秒时,车的位置是如何随时间变化的。我们可以计算导数在这个点的值并解释它的含义。

  • 在t=3秒时,车的位置是:
    s(3)=32=9米

  • 在t=3秒时,车的瞬时速度是:
    s′(3)=2×3=6米/秒
    如果时间从3秒增加到3.1秒,即Δt=0.1秒,我们可以使用导数来近似计算这段时间内车位置的变化量:

  • 近似变化量Δs:
    Δs≈s′(3)⋅Δt=6米/秒×0.1秒=0.6米

  • 实际位置的变化量:
    计算实际位置在3.1秒时的位置:
    s(3.1)=(3.1)2=9.61米
    实际位置的变化量:
    Δs=s(3.1)−s(3)=9.61−9=0.61米
    通过这个例子,我们可以看到,导数s′(t)提供了车在某一时刻的位置变化率,近似地描述了车位置随时间变化的情况。这就是导数描述函数变化率的一个具体实例。

微分作为导数的线性近似

例子:函数f(x)=x2

假设我们有一个函数f(x)=x2,我们想要研究这个函数在某个点x=2处的导数和微分。

  1. 计算导数
  • 首先,计算f(x)的导数f′(x):
    f′(x)=dxd(x2)=2x
  • 在x=2处的导数f′(2)为:
    f′(2)=2×2=4

  1. 微分的线性近似
  • 在x=2处,函数f(x)的微分df表示为:
    df=f′(2)⋅dx=4⋅dx
  • 这里,dx是自变量x的一个小增量。
  1. 具体例子:估算函数值的变化
  • 现在假设x从2增加到2.1,即dx=0.1。
  • 通过微分来近似计算f(x)的变化量df:
    df=4⋅0.1=0.4
  • 这意味着,当x从2增加到2.1时,函数值f(x)的变化量大约为0.4。
  • 现在我们来计算精确的变化量,即f(2.1)−f(2):
    f(2.1)=(2.1)2=4.41
    f(2)=22=4
    f(2.1)−f(2)=4.41−4=0.41
  • 由此可见,通过微分得到的近似值0.4与精确变化量0.41非常接近。

在这个例子中,导数f′(2)=4表示函数f(x)=x2在x=2处的瞬时变化率。而微分df=4⋅dx提供了一个线性近似,用于估算当x发生小变化时,函数值f(x)的变化量。这种线性近似在dx很小时非常有效,可以用于快速估算和简化计算。

PyTorch 中的求导(autograd)功能

基本用法

  1. 计算标量函数的导数
    假设我们有一个标量函数f(x)=x2,我们希望计算它的导数。
import torch
# 创建一个张量并启用梯度计算
x = torch.tensor(2.0, requires_grad=True)
# 定义函数
y = x**2
# 计算导数
y.backward()
# 打印导数
print(x.grad)  # 输出: tensor(4.0)

在这个例子中:

  • 我们创建了一个标量张量 x 并启用了梯度计算(requires_grad=True)。
  • 定义了一个函数y = x2。
  • 使用 y.backward() 计算导数,这会计算dydx并将其结果存储在 x.grad 中。
  1. 计算向量函数的导数
    对于向量函数,我们可以计算每个分量对输入的梯度。
import torch
# 创建一个张量并启用梯度计算
x = torch.tensor([1.0, 2.0, 3.0], requires_grad=True)
# 定义函数
y = x**2
# 计算导数,y 是一个向量,因此需要提供梯度的初始值
y.backward(torch.tensor([1.0, 1.0, 1.0]))
# 打印导数
print(x.grad)  # 输出: tensor([2.0, 4.0, 6.0])

在这个例子中:

  • y 是一个向量函数y=[x12,x22,x32]。
  • y.backward() 需要一个与 y 形状相同的张量作为参数,表示每个分量的梯度初始值。
  • 结果是 x.grad,它包含了每个分量的导数。
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号