Autograd学习

文章目录

问题1:PyTorch中的Autograd机制是如何实现的?

Autograd是PyTorch的自动求导引擎 :根据前向计算自动构建计算图 ,在backward()时按该图反向传递梯度,无需手动写倒数。

bash 复制代码
计算图:用图结构表示计算过程的数据结构。节点:Tensor/操作;边:数据流向;
动态图:计算图在运行时即使生成,边forward,边画计算图;

详细理解

(1)核心机制

PyTorch Autograd是基于动态图+计算图的自动求导系统;

  • 前向传播时:每forward一下,就在该图上构建一个新节点(Tensor + grad_fn);
  • 反向传播时:从loss出发,沿着该计算图按链式法则逐个节点回传梯度。

(2)前向生成的计算图本质

  • 节点:Tensor(包含data、grad、grad_fn);
  • 边:由函数执行后形成的Tensor之间的"数据依赖关系";
  • requires_grad=True的Tensor会被纳入图;
  • 叶子节点(输入Tensor):不由其他Tensor生成,没有.grad_fn;

(3)反向传播机制

bash 复制代码
hidden states
   ↓
lm_head(线性层)
   ↓
logits
   ↓
softmax + cross entropy
   ↓
loss
  • 从loss.backward()开始
  • 逐个调用grad_fn.backward()
  • 链式法则
  • 多分支路径:梯度累加
  • 传播到叶子节点停止;

问题2:torch.autograd.Function怎么用?(工作原理)

它是用来定义"自定义可微算子",本质就是通过它来自己手写一个算子的前向和反向。

python 复制代码
# 自定义算子继承autograd子类
class YourFunction(torch.autograd.Function):
# 重写autograd子类方法
forward(ctx, *inputs)
# 执行前向计算
# 用ctx.save_for_backward()保存反向需要用到的中间变量
backward(ctx, grad_output)
# 接收上游梯度
# 返回对每个输入的梯度(与foward输入一一对应)

调用方式:YourFunction.apply(输入) -> 自动绑定计算图 + 生成grad_fn

问题3:与nn.Module的区别?

nn.Module不参与反向传播规则定义,它是调用Function的集合体!

从上到下依次是子集关系:

组件 作用
Module 组织结构 + 参数
Function 单个算子的 forward/backward
Autograd 自动构建计算图
相关推荐
这是谁的博客?20 天前
PyTorch 深度学习框架核心机制解析:从动态图到编译优化的全面指南
人工智能·pytorch·深度学习·ai·分布式训练·autograd
伊织code10 个月前
PyTorch API 2
pytorch·api·cpu·cuda·微分·autograd