前言
这一篇不是基础线性代数笔记。矩阵乘法、转置、逆矩阵、特征值这些基础概念默认你已经见过。我们只关心一个更具体的问题:为什么深度学习里的反向传播经常要用矩阵微积分来描述?
在标量函数里,导数告诉我们“输入变化一点,输出会怎么变”。但神经网络里大量对象都不是标量:输入是向量,权重是矩阵,中间特征是高维张量,损失函数最后才压成一个标量。因此,普通的一元导数不够用,我们需要用 Jacobian、梯度向量和链式法则来描述这些对象之间的局部关系。
从标量导数到 Jacobian
设一个函数把向量 $x \in \mathbb{R}^n$ 映射到向量 $y \in \mathbb{R}^m$:
$$ y = f(x) $$它的 Jacobian 矩阵定义为:
$$ \begin{aligned} J_f(x) &= \frac{\partial y}{\partial x} \\\\ &= \begin{bmatrix} \frac{\partial y_1}{\partial x_1} & \cdots & \frac{\partial y_1}{\partial x_n} \\\\ \vdots & \ddots & \vdots \\\\ \frac{\partial y_m}{\partial x_1} & \cdots & \frac{\partial y_m}{\partial x_n} \end{bmatrix} \end{aligned} $$Jacobian 的含义不是“又多了一个复杂矩阵”,而是:它描述了函数 $f$ 在某一点附近的局部线性近似。
$$ f(x + \Delta x) \approx f(x) + J_f(x)\Delta x $$这就是 AI 中 Jacobian 最重要的直觉:非线性网络在局部可以近似看成线性变换。
深度网络中的链式法则
深度网络可以看成一串函数复合:
$$ x \xrightarrow{f_1} h_1 \xrightarrow{f_2} h_2 \xrightarrow{f_3} \cdots \xrightarrow{f_k} L $$其中 $L$ 是最终的标量损失。普通链式法则在这里变成 Jacobian 的连乘:
$$ \begin{aligned} \frac{\partial L}{\partial x} &= \frac{\partial L}{\partial h_k} \frac{\partial h_k}{\partial h_{k-1}} \cdots \frac{\partial h_1}{\partial x} \end{aligned} $$这个式子能解释“梯度消失”和“梯度爆炸”的来源:如果每一层的 Jacobian 都在连乘,很多小于 1 的因子会让梯度越来越小,很多大于 1 的因子会让梯度越来越大。
不过,真实框架里通常不会显式构造这些巨大的 Jacobian。它们更常计算的是向量-Jacobian 乘积。
为什么框架偏爱 VJP
反向传播从损失 $L$ 开始。因为 $L$ 是标量,所以我们通常已经有了某个上游梯度:
$$ g_y = \frac{\partial L}{\partial y} $$如果 $y=f(x)$,那么传给 $x$ 的梯度是:
$$ g_x = g_y J_f(x) $$这叫 向量-Jacobian 乘积(Vector-Jacobian Product, VJP)。它的优势是:框架不必把完整 Jacobian 矩阵写出来,只需要知道“上游梯度乘过这一层之后变成什么”。
这就是 PyTorch、JAX、TensorFlow 这类自动微分系统背后的关键计算模式之一。你写的是前向函数,框架保存必要的中间值,然后在反向时按局部规则拼出 VJP。
回到 ResNet:为什么恒等项重要
ResNet 的残差块可以抽象成:
$$ y = F(x, W) + x $$如果把 $x$ 和 $y$ 都看成向量,那么它的 Jacobian 是:
$$ \begin{aligned} \frac{\partial y}{\partial x} &= \frac{\partial F(x, W)}{\partial x} + I \end{aligned} $$这里的 $I$ 是恒等矩阵,来自 shortcut 分支 $x \mapsto x$。反向传播时:
$$ \begin{aligned} \frac{\partial L}{\partial x} &= \frac{\partial L}{\partial y} \left( \frac{\partial F(x, W)}{\partial x} + I \right) \end{aligned} $$这个式子的意义是:梯度不只依赖残差分支 $F$,还可以通过 $I$ 这条恒等路径直接传回去。
这就是为什么 ResNet 的数学表达经常会提到 Jacobian 和恒等矩阵。它并不是为了炫技,而是在解释:shortcut 让深层网络的梯度传播多了一条结构性通路。
哪些矩阵知识值得继续学
如果目标是理解 AI 模型,而不是完整重修数学系课程,优先级可以这样排:
- Jacobian 与链式法则:理解反向传播、残差连接、归一化层。
- 矩阵范数与谱半径直觉:理解梯度爆炸、梯度消失、稳定性。
- SVD 与低秩近似:理解 LoRA、模型压缩、Embedding 表示。
- 二阶信息与 Hessian 直觉:理解优化地形、曲率、Sharp/Flat minima。
- 向量化与张量形状推理:减少深度学习代码中的维度错误。
这些内容会比“从零讲矩阵乘法”更适合 AI 学习路线。
总结
矩阵微积分在深度学习中的作用,是把“很多变量之间的局部变化关系”写清楚。Jacobian 描述向量函数的局部线性近似,VJP 解释自动微分如何高效做反向传播,而 ResNet 中的恒等矩阵 $I$ 则揭示了 shortcut 为什么能改善深层网络的梯度流。
理解这些概念后,再看 ResNet、Transformer、LoRA 或归一化层时,很多公式就不再是凭空出现的符号,而是在描述信息和梯度如何穿过网络。
参考
- Matrix Calculus for Machine Learning and Beyond - MIT OpenCourseWare
- The Matrix Calculus You Need For Deep Learning - Terence Parr, Jeremy Howard
- Automatic Differentiation in Machine Learning: a Survey - Baydin et al.