深度学习计算图学习路线
1. 必须掌握(基础核心)
- 计算图的基本概念
- 什么是计算图(节点表示操作/变量,边表示数据流)
- 前向传播(Forward Propagation)和反向传播(Backward Propagation)的流程
- 链式法则(Chain Rule)
- 如何通过计算图理解反向传播的梯度计算(如标量、向量、矩阵的求导)
- 常见算子的梯度计算
- 加减乘除、矩阵乘法(MatMul)、激活函数(ReLU/Sigmoid/Tanh)、Softmax的梯度推导
- 计算图的实现方式
- 静态图(Static Graph,如TensorFlow 1.x) vs 动态图(Dynamic Graph,如PyTorch)的区别
- 自动微分(Autograd)原理
- 如何通过计算图实现自动求导(如PyTorch的
backward()
底层逻辑)
2. 掌握后加分(进阶能力)
- 计算图的优化技术
- 常见图优化:常量折叠(Constant Folding)、算子融合(Operator Fusion)、内存优化
- 框架如何通过计算图优化性能(如TensorFlow的Grappler、PyTorch的TorchScript)
- 动态图的控制流实现
- 如何处理条件分支(If-Else)和循环(While-Loop)的反向传播(如PyTorch的
torch.cond
和torch.while_loop
)
- 高阶导数(Higher-Order Derivatives)
- 如何计算二阶导数(Hessian矩阵)或在元学习(Meta-Learning)中的应用
- 分布式计算图
- 数据并行(Data Parallelism)和模型并行(Model Parallelism)在计算图中的实现(如Megatron-LM的流水线并行)
3. 深入且有难度(研究方向/框架开发)
- 符号微分(Symbolic Differentiation) vs 自动微分
- 符号微分的局限性(如表达式膨胀问题)与自动微分的优势
- 计算图的编译技术
- 如何将计算图编译为高效代码(如TVM、XLA、PyTorch的TorchDynamo)
- 内存管理与计算图
- 梯度检查点(Gradient Checkpointing)技术,权衡计算与内存
- 可微分编程(Differentiable Programming)
- 非传统算子的自定义梯度(如PyTorch的
torch.autograd.Function
) - 物理仿真、概率编程语言(如Pyro)中的计算图应用
- 计算图的调试与可视化
- 如何可视化复杂计算图(如TensorBoard、Netron)
- 梯度异常(如梯度消失/爆炸)的调试方法
学习建议
- 基础部分:先通过手推梯度(如用计算图推导LSTM的梯度)和框架实践(PyTorch/TensorFlow的自动微分)巩固。
- 进阶部分:阅读框架源码(如PyTorch的
autograd
引擎)或论文(如《AutoDiff》综述)。 - 深入部分:结合分布式训练(如Horovod)、编译器优化(TVM)等实际场景学习。