M3-001M3: Deep Learning FoundationsBackprop & AutodiffEasy
Mastery:
Backprop & Autodiff: 解释计算图与自动微分的两种模式(前向/反向)。
📐 Mathematical Definition
⚡ Executive Summary
Core Concept: 前向模式算 JVP(输入维大时贵);反向模式算 VJP(输出维小时优,如标量损失)。
📌 Key Takeaways
- •深度学习用反向模式(损失是标量)
- •反向复杂度与前向同阶
📐 Mathematical Derivations
计算图把复合函数表示为有向无环图(节点是运算、边是张量),自动微分(AD)在图上应用链式法则。<strong>前向模式(JVP)</strong> 从输入向输出传播:对每个节点同时传播函数值与方向导数,一次得到 Jv(雅可比×向量),代价 O(n)·cost(f)(n 为输入维);<strong>反向模式(VJP)</strong> 从输出向输入传播:一次得到 vᵀJ,代价 O(m)·cost(f)(m 为输出维)。<strong>选择原则是'哪一维小'</strong>:深度学习中损失是<strong>标量</strong>(m=1),故反向模式一次前向+一次反向即得完整梯度,代价 O(1)·cost(f)——这是所有框架的默认。反之若需计算'每个输入对每个输出的影响'(n≪m,如敏感性分析),前向模式更优。<strong>与数值微分/符号微分的对比</strong>:数值微分(有限差分)需 O(n) 次前向且有截断误差;符号微分会表达式膨胀;AD 精确且高效。
🏭 Production Trade-offs
工程要点:① <strong>内存需求差异</strong>——反向模式需保存前向的中间激活(否则无法算局部雅可比),这是训练显存的主要占用;推理时只需前向故无此开销(可用 <code>torch.no_grad()</code> 禁用图的构建,节省内存与时间)。② <strong>JVP 与 VJP 的 API</strong>——JAX 提供 <code>jvp</code>/<code>vjp</code> 原语,PyTorch 用 <code>torch.autograd.functional.jvp/vjp</code>;框架的 <code>jacobian</code> 只是对它们做批处理。③ <strong>高阶导</strong>——<code>create_graph=True</code> 使反向过程本身被记录进图,从而支持二阶导(如 Hessian-向量积 HVP);这是 WGAN-GP 的梯度惩罚、MAML 二阶梯度、以及可解释性方法(IG)的基础。④ <strong>checkpoint 与图的重建</strong>——梯度检查点在反向时<strong>重算</strong>前向(重建局部图),因此需要保留随机数状态(如 dropout mask)以保证重算结果一致。⑤ <strong>图的优化</strong>——现代框架(torch.compile、JAX)会在图上做算子融合、内存复用、并行调度等优化,把'图的表达能力'转化为性能收益(这与编译器优化 IR 的思路一致)。
⚠️ Common Interview Pitfalls
- ✕认为反向传播需要 O(n) 次前向(实为 O(1) 次反向)
- ✕推理时不关闭梯度(浪费内存)
🎯 Interviewer Follow-ups
- ?什么时候用前向模式?
- ?为什么训练与推理的内存需求不同?
📚
Associated Knowledge Base Guides & Mindmaps
Explore the comprehensive technical article, exam cards, and global architecture tree.