M3-006M3: Deep Learning FoundationsBackprop & AutodiffHard
Mastery:

Backprop & Autodiff: 什么是可微编程?它改变了哪些系统设计?

📐 Mathematical Definition
differentiable programming: any program→computation graph\text{differentiable programming}:\ \text{any program}\to\text{computation graph}
⚡ Executive Summary
Core Concept: 把'可学习组件'嵌入任意程序,端到端用梯度优化;使系统从'手写规则'转向'可学习管线'。

📌 Key Takeaways

  • •
    代表:可微渲染、可微物理仿真、可微排序/检索
  • •
    关键挑战:离散操作的梯度(松弛/STE/REINFORCE)

📐 Mathematical Derivations

核心思想:传统编程是'写规则',可微编程是'写可微的计算流程,让梯度自动优化其中的可学习参数'。它把自动微分从'神经网络训练'推广到<strong>任意可微程序</strong>(渲染器、物理引擎、数据库查询、排序算法),实现<strong>端到端优化</strong>。<strong>典型应用</strong>:① <strong>可微渲染</strong>——渲染过程(光栅化)可微,使'从图像反推 3D 场景参数'成为可能(NeRF、3D Gaussian Splatting 的优化基础);② <strong>可微物理仿真</strong>——仿真器可微,可优化机器人控制策略与物理参数;③ <strong>可微排序/检索</strong>——把排序(离散)松弛为可微的 soft ranking(如 Sinkhorn、NeuralSort),使'直接优化 NDCG/Recall'成为可能;④ <strong>可微数据增强/特征工程</strong>——把预处理参数化为可学习模块;⑤ <strong>神经符号系统</strong>——把逻辑推理与神经网络结合。<strong>关键挑战是离散操作的不可微性</strong>:argmax、排序、采样、Top-K 等操作的梯度为零或不存在,需用三种手段处理。

🏭 Production Trade-offs

为离散操作提供梯度的三种手段:① <strong>松弛(Relaxation)</strong>——用可微的软替代(softmax 替代 argmax、Sinkhorn 替代最优传输、SoftSort 替代排序),在温度趋于 0 时逼近原操作;优点是简单、梯度有偏但方向可用;缺点是温度调度需调(太高则偏离原操作,太低则梯度消失)。② <strong>直通估计器(STE,Straight-Through Estimator)</strong>——前向用离散操作,反向直接用恒等梯度'穿透';简单有效但梯度有偏(量化感知训练、二值网络的标准做法)。③ <strong>强化学习/得分函数估计</strong>——把离散选择视为随机动作,用 REINFORCE 估计梯度(无偏但方差大),或 Gumbel-Softmax 做可微采样(低方差有偏)。<strong>实践建议</strong>:优先用松弛(如 Gumbel-Softmax、Sinkhorn),因为它能给出稠密梯度且实现简单;STE 适合'前向必须精确离散'的场景(如量化);REINFORCE 适合不可松弛的组合优化。此外,<strong>端到端 vs 分阶段</strong>的取舍也很关键——端到端训练能联合优化(通常更好),但可能不稳定且难调试;分阶段(先训模块再联合微调)更稳但次优。
⚠️ Common Interview Pitfalls
  • ✕
    认为所有操作都能自动可微(离散操作需特殊处理)
  • ✕
    用松弛后不调温度(偏离原操作或梯度消失)
🎯 Interviewer Follow-ups
  • ?
    离散操作为什么不可微?
  • ?
    如何为排序/检索提供梯度?
📚

Associated Knowledge Base Guides & Mindmaps

Explore the comprehensive technical article, exam cards, and global architecture tree.

← PreviousM3-005: Backprop & Autodiff: 解释高阶导数的计算成本,以及什么时候需要它。📋Back to BankNext →M3-007: Backprop & Autodiff: 解释梯度检验(gradient checking)的原理与实现细节。