返回 深度学习 思维导图
中文·English
🧠 深度学习ID: autograd-engine

Autograd 动态图

Autograd Compute Graph
🎯核心定义
前向传播时框架动态构建计算图 (DAG): 每个需要梯度的张量都记录产生它的算子 grad_fn, 每次前向都按当前控制流重建图 (动态图)。反向传播时把 DAG 拓扑排序并取逆序遍历, 从标量 loss 出发, 每一步用链式法则 Lx=Lyyx\frac{\partial L}{\partial x} = \frac{\partial L}{\partial y} \cdot \frac{\partial y}{\partial x} 把梯度沿边回传并累加到上游变量 (如 z=x+yz = x + yzx=zy=1\frac{\partial z}{\partial x} = \frac{\partial z}{\partial y} = 1)。
💡使用场景
理解任何自动求导框架的 backward 实现、手写 autograd、自定义层时正确实现 forward/backward; 面试必问动态图与静态图的对比。
解决的核心痛点
免去手工/符号求导, 任意可微程序自动获得梯度。动态图 (PyTorch eager) 边执行边建图, 与 Python 控制流 (if/for) 天然兼容、易调试, 代价是每步重复建图的开销; 静态图 (TensorFlow 1 Graph mode) 先建图后执行, 可做全局算子融合优化、利于部署, 但不灵活、难调试。autograd 的坑: in-place 操作会破坏反向依赖因此需要求梯度的张量禁止原位修改; leaf 张量决定是否保留梯度。
🎯5 个高频面试考点 (Exam Points)
1
反向传播如何确定梯度计算顺序? 为什么需要拓扑逆序?
2
动态图与静态图的区别与各自优缺点?
3
grad_fn 的作用? 链式法则如何沿 DAG 逐层回传?
4
为什么 in-place 操作在需要梯度时会被禁止或报错?
5
.detach() 与 requires_grad=False 的区别? 什么是 leaf 张量?
📖 关联深度指南:📄 debugging-and-dl-comp
更新于 2026-08-12
🎯
检验攻克程度:针对「Autograd 动态图」专属刷题排雷
做单选排雷题、推导选项机制,答错自动收录进专属错题本。
🚀 开始本考点专项刷题
上一个知识点训练调试流程下一个知识点梯度检查

🔗 更多 深度学习 知识点卡片

激活函数演进Adam/AdamWBatchNorm 批归一化经典 CNN 演进