核心要点
Autograd 动态构建计算图
前向记录 Function 节点
反向调用 backward 链式求导
理解 DAG 与叶子节点
标准回答
一、先给出结论和背景
- PyTorch Autograd:实现自动微分(AutoDiff),支撑 反向传播。
- 前向(建图):- 每个可微运算创建 Function 节点,记录 inputs → outputs
- 张量 .grad_fn 指向创建它的运算
- 叶子节点(用户输入、Parameter)grad_fn is None
二、拆开关键步骤和判断点
- 反向(求导):- loss.backward() 从 loss 启动
- 拓扑序遍历图,每个节点调用 grad_fn.backward(grad_output)
- 链式法则:grad_input = grad_output × local_jacobian
- 累加到叶子 .grad
- 特点:- 动态图:每轮前向可不同结构(if/for)
- 仅保存必要中间值 供反向(可 checkpoint 换显存)
示例代码可以这样理解:
x = torch.tensor(2.0, requires_grad=True)
y = x ** 2
y.backward()
print(x.grad) # 4.0
三、补上落地边界和取舍
- torch.no_grad():禁用建图;detach() 切断梯度。详见 反向传播原理。
面试里不要只停在公式或名词,可以补 PyTorch 的 Autograd 如何实现自动微分 对训练稳定性、泛化、收敛速度或显存/算力的影响。再说明一个常见调参或排错场景,面试官会更容易判断你真的用过这些方法。
回答思路
【定义】用一句话说清「PyTorch 的 Autograd 如何实现自动微分」
【原理】讲清关键机制或步骤(2~3 点)
【例子】举一个真实项目、论文或产品中的例子
【对比】与易混淆概念或替代方案比较(如有)
【收尾】总结适用场景 + 一个局限或风险
常见误区
⚠️ 常见踩坑
误区一:容易答偏的地方:以为 Autograd 求的是数值差分;inplace 改需梯度张量;对整数索引操作期望梯度。
🔗 相似问题
同一考点的不同问法,换着练更稳
延伸学习
按主题分类的相关资源,便于系统复习
