PyTorch自动求导

求导的数学定义

定义

求导是微积分的核心概念,描述函数在某点的瞬时变化率。其数学定义为: 若函数y=f(x) 在点x0的某邻域内有定义,且极限

存在,则称f(x) 在x0处可导,f′(x0) 为导数。

几何意义

导数的几何意义是曲线在点(x 0​,f(x 0​)) 处切线的斜率。

基本求导公式

常见函数的导数公式包括:

实际应用

导数在物理(如速度、加速度)、经济学(如边际成本)等领域有广泛应用。

PyTorch自动求导

PyTorch的自动求导(Autograd)是其核心功能,能够自动计算张量的梯度,极大简化了神经网络训练中的反向传播过程。

🔧 核心机制

‌动态计算图‌:PyTorch在运行时实时构建计算图,记录所有张量操作历史,支持灵活调试和动态模型结构‌

‌requires_grad属性‌:张量的关键属性,当设置为True时,PyTorch会追踪该张量的所有操作以便后续计算梯度‌。默认情况下为False,即不计算梯度‌。‌梯度计算流程‌:

clike 复制代码
创建可求导张量:x = torch.tensor([1.0], requires_grad=True)‌
执行前向计算操作
调用backward()进行反向传播
梯度自动存储在.grad属性中‌

💡 实际应用示例

clike 复制代码
import torch
# 创建需要计算梯度的张量
x = torch.tensor(3.0, requires_grad=True)
# 前向计算
y = torch.pow(x, 2)  # y = x²
# 反向传播求导
y.backward()
# 查看梯度值
print(x.grad)  # 输出:tensor(6.)

这个例子中,当x=3时,y=x²的导数为2x=6,与计算结果一致‌

🎯 高级功能

梯度控制‌:通过设置requires_grad=False来冻结特定参数,这在多任务学习或迁移学习中非常实用‌。

‌梯度累积与清零‌:多次调用backward()时梯度会累积,需要在参数更新前手动清零:tensor.grad.zero_()^。

✨ 主要优势

  • 代码简化‌:无需手动推导复杂的梯度公式^
  • ‌开发加速‌:减少代码量和潜在错误^
  • ‌灵活性‌:动态图特性适合复杂模型如循环神经网络^

重要函数

PyTorch自动求导主要通过torch.autograd包实现,其中最重要的函数是backward()grad()

核心函数简介

  1. backward()函数
  • 标量输出:当输出为单个数值时,直接调用y.backward()即可自动计算梯度
  • 非标量输出:输出为向量或矩阵时,需传入与输出同形的梯度张量,即y.backward(gradient=torch.tensor(...))
  • 梯度累积:默认情况下,多次调用backward()梯度会累加,需要时可用retain_graph=True保留计算图
  1. grad()函数
    用于计算指定输出相对于输入的梯度总和,可精确控制梯度计算过程。

关键概念与属性

.requires_grad属性

张量的关键属性,设置为True时PyTorch会追踪所有操作以便后续梯度计算。

梯度控制方法

  • .detach():将张量从计算图中分离,不再追踪梯度
  • torch.no_grad():上下文管理器,内部所有计算都不需要梯度,常用于模型评估。

计算图机制

PyTorch通过动态构建有向无环图记录所有操作历史,每个张量都有grad_fn属性指向创建它的操作。

使用建议

现在可以尝试创建一个简单的张量,设置requires_grad=True,然后调用backward()函数来实际体验自动求导过程。

grad()函数

函数基本语法

clike 复制代码
torch.autograd.grad(
    outputs,           # 需要求导的函数输出
    inputs,            # 需要计算梯度的输入
    grad_outputs=None, # 各输出的梯度权重
    retain_graph=None, # 是否保留计算图
    create_graph=False, # 是否创建导数计算图
    only_inputs=True,   # 是否只计算指定输入的梯度
    allow_unused=False  # 是否允许输入不参与计算
)

核心参数详解

‌outputs‌:需要求导的张量,可以是标量或向量

‌inputs‌:需要计算梯度的变量列表,函数会计算 outputs 对每个 inputs 中元素的梯度

‌grad_outputs‌:当 outputs 为向量时,需提供与 outputs 同形的张量作为"向量-Jacobian乘积"中的向量相当于链式法则中的外部梯度

‌create_graph‌:设置为 True 时可以计算高阶导数

backward()函数

基本语法

clike 复制代码
tensor.backward(gradient=None, retain_graph=None, create_graph=False)

核心参数详解

‌gradient‌:

当输出为非标量时,需传入与输出同形的张量作为外部梯度

相当于链式法则中的上游梯度
‌retain_graph‌:

默认False,反向传播后释放计算图内存

设为True可保留计算图用于多次反向传播
‌create_graph‌:

默认False,设为True可创建导数计算图,用于高阶导数计算

ps: 没学懂,上面都是网上找的东西,留作存档,放在未来在看

相关推荐
OpenCSG1 小时前
AgenticOps x CSGHub:企业智能体走向规模化生产的工程底座
大数据·人工智能
weixin_437988121 小时前
范式智能获评年度科技创新新锐公司
人工智能·科技
易营宝1 小时前
高效的跨境电商广告优化系统:易营宝广告投放实操指南
大数据·开发语言·人工智能·php
HyperAI超神经1 小时前
实现高选择性底物设计,MIT联手哈佛用生成式AI发现全新蛋白酶切割模式
人工智能·深度学习·机器学习·开源·ai编程
液态不合群2 小时前
2026破除技术空转:从范式重构到产业深耕的革新路径
人工智能·低代码·重构
weixin_549808362 小时前
从 CES 2026 看未来十年的技术版图与管理重构
人工智能·重构
轻竹办公PPT2 小时前
2026 年工作计划汇报 PPT:AI 生成方案实测对比
人工智能·python·powerpoint
山土成旧客2 小时前
【Python学习打卡-Day42】打开深度学习“黑箱”:从Hook回调到Grad-CAM可视化
python·深度学习·学习
北京耐用通信2 小时前
告别通信干扰与距离限制:耐达讯自动化Profibus总线光纤中继器赋能伺服驱动器稳定连接
人工智能·科技·网络协议·自动化·信息与通信
KG_LLM图谱增强大模型2 小时前
[100页中英文PDF]全球医学大模型智能体全景图综述:从诊断工具到临床工作流变革的医疗新范式转型
人工智能·智能体