第 3 步 · 变化的线性传递
导数、偏导与局部线性化Derivatives & Chain Rule
导数不是枯燥的求导表,而是极小尺度下的“线性放大倍数”。复合求导之所以是乘法,正是因为放大倍数的逐级叠加传递——而整个现代深度学习的反向传播,无非是链式法则在计算图上的高效逆向执行。
16 分钟
阅读 + 实操
3 个
交互演示
入门
难度
微积分与计算图 · 交互演示
当前 x1.00
函数值 f(x)1.00
导数 f'(x)2.00
① 动态切线与局部线性化:拖动探针 x,观察切线斜率变化及右侧「微观放大镜」如何将弯曲曲线拉直为直线
② 步长 h 与数值微分误差(浴盆曲线):调节步长指数 k (h = 10^k),观察误差为何呈现两头高、中间低的凹形
③ 计算图反向传播:点击按钮,观察损失 L 的梯度如何沿节点逆向逐级连乘回传至输入与权重
为什么学这步?
深度神经网络拥有数十亿参数,如果每个参数都靠扰动输入来数值算导数,前向推理要跑数十亿次,算力将瞬间崩溃。反向传播之所以神圣,就在于利用链式法则在计算图上反向扫描一遍,便能同时提取所有参数的精确解析导数。弄懂链式法则与计算图,你就掌握了现代深度学习训练引擎的最核心奥秘。
📌 发生了什么
- 导数 = 切线斜率 = 变化率放大倍数
- 复合求导 = 各级放大倍数依次连乘
- 计算图反向遍历共享伴随量,极大节约算力
⚠️ 常见陷阱
- 切忌把链式法则写成加法:复合是乘法,分支汇聚才是加法
- 外层导数 f'(g(x)) 必须在中间值 u=g(x) 处求导,绝不可代入 x
- 步长 h 并非越小越准:计算机有限精度会导致相消误差失真
✅ 本章小结
- 一阶线性化公式:f(x+h) ≈ f(x) + f'(x)h
- 中心差分截断误差为 O(h²),精度远高于单侧前向差分
- 反向模式自动微分复杂度与参数量完全解耦
📐 前向模式 vs 反向模式自动微分
计算导数有三条路线:符号微分(公式极度膨胀)、数值微分(差分存在精度与速度瓶颈)、以及自动微分(AD)。自动微分进一步分为前向模式与反向模式:
机器学习的损失函数永远是标量损失 L ∈ ℝ,而输入权重有百万甚至百亿个(n 极大)。前向模式需要正向运行 n 次才能得到全梯度,而反向模式仅需 1 次反向遍历即可输出全部 n 个参数梯度。这就是反向传播成为深度学习统治性算法的根本原因。
🛁 步长 h 的浴盆误差理论分析
中心差分公式展开后的总误差由两部分叠加而成:截断误差来自泰勒展开高阶项,与 h² 成正比;而浮点舍入误差(Catastrophic Cancellation)来自两个接近的浮点数相减,与 ε/h 成正比(ε 为机器精度 ~10⁻¹⁶)。两曲线叠加形成完美的 U 形“浴盆曲线”,极小值点恰好出现在 h ≈ ε^(1/3) ≈ 10⁻⁵ 附近。
💻 微型反向模式自动微分引擎
// 伴随量逆向回传逻辑
function backward(node) {
node.grad = 1.0;
for (let n of topologicalOrder.reverse()) {
if (n.op === 'mul') {
n.parents[0].grad += n.grad * n.parents[1].val;
n.parents[1].grad += n.grad * n.parents[0].val;
} else if (n.op === 'add') {
n.parents[0].grad += n.grad;
n.parents[1].grad += n.grad;
}
}
}
📚 参考文献与延伸阅读
- Baydin et al. (2018), Automatic Differentiation in Machine Learning: A Survey, JMLR — 全面梳理计算图、伴随量与前向/反向模式自动微分
- Goodfellow et al., Deep Learning, §6.5 「Back-Propagation and Other Differentiation Algorithms」 — 神经网络计算图拓扑求导规范
- Griewank & Walther (2008), Evaluating Derivatives: Principles and Techniques of Algorithmic Differentiation, SIAM — 自动微分经典专著
- 对照阅读 → ML 第 5 步 · 多层感知机:反向传播推导实战;DL 第 1 步 · 梯度消失:链式连乘衰减分析
📝 课后练习
检验你的理解——答对为止