链式法则、矩阵求导与反向传播入门

链式法则、矩阵求导与反向传播入门

金培晟 Jarfield

上一篇讲的是“单个矩阵表达式怎么求导”,这一篇继续往前走一步:
当表达式是多层复合时,链式法则在向量和矩阵情况下到底怎么写,以及它为什么会自然长成反向传播。

这篇只抓最常用、最值得反复记住的部分:

  • 标量链式法则如何升级为向量 / 矩阵链式法则
  • 为什么反向传播本质上是在做 Jacobian^T × 上游梯度
  • 线性层、激活层、两层网络和批量训练时的梯度公式

0. 先说结论

如果损失函数最终是标量 ,而中间变量是向量或矩阵,那么反向传播最核心的一条公式就是:

写得更标准一点:

其中 的 Jacobian。

这句话就是反向传播的骨头。后面各种公式看起来不同,本质都只是它的特例。

1. 从标量链式法则出发

1.1 单变量情况

则普通链式法则是

这是大家最熟的形式。

1.2 向量情况为什么不一样

则:

要把 维上游梯度传回 维输入,只能用

因此

这一点和标量情形唯一真正的区别是:
导数不再是一个数,而是一个线性映射。

2. 用微分法看链式法则

微分法是最稳的,因为它不依赖你背 Jacobian 的布局习惯。

2.1 向量版

代回去:

因此

2.2 矩阵版

若中间变量是矩阵 ,损失是标量 ,则可以写成

如果你能把 写成关于 的线性函数,再不断用 trace 循环性质把 单独提出来,就能得到

从而识别出

所以矩阵链式法则的实际操作不是背一个超大总公式,而是:

  1. 先写微分
  2. 把中间变量微分展开
  3. 用 trace 把 收拢出来
  4. 读出梯度

3. 最重要的局部模块

3.1 线性层:

若已知上游梯度

则反向传播的三个结果必须记住。

对输入求导

得到

所以

对偏置求导

因为

所以

对权重求导

因为

把它改写成 trace:

因此

一页记忆版

对线性层

这三个式子就是神经网络反向传播里最常见的三个局部规则。

3.2 激活层:

是逐元素作用,则

因此 Jacobian 是对角矩阵:

于是

这里 表示 Hadamard 逐元素乘法。

常见特例:

  • ReLU:
  • sigmoid:
  • tanh:

3.3 二次损失层

这也是非常值得直接记住的起点,因为很多反向传播都从输出层的这个梯度开始。

4. 两层网络的完整反传

考虑最基础的两层网络:

我们从后往前算。

4.1 输出层

于是

4.2 激活层

4.3 第一层线性层

4.4 这套结构为什么重要

这个两层网络已经暴露出反向传播的全部模式:

  1. 先在输出层求损失对输出的导数
  2. 每过一层,就把上游梯度乘上“局部导数”
  3. 线性层回传时出现转置
  4. 参数梯度通常由“当前层误差 × 上一层输入”构成外积

5. 批量输入时的矩阵形式

实际训练通常不是单样本,而是一个 batch。

设样本按列堆叠:

权重

偏置

令全 1 向量为 ,则前向为

若上游梯度为

这三个式子在工程里几乎天天出现。

为什么偏置梯度是按 batch 求和

因为同一个偏置 被复制加到了每一列样本上,
所以反向时,所有样本对这个偏置的贡献都要累加起来。

6. 为什么总是转置

很多人第一次学反传都会问:为什么老是

答案其实很简单:

6.1 维度要求

前向:

反向时,若上游梯度在 空间中,是 维向量,而你要把它传回 空间,也就是 维向量。
唯一自然的线性映射就是

6.2 线性算子的伴随

更本质地说,反向传播不是在重复前向,而是在计算该线性映射对内积的伴随算子。
在欧氏空间里,这个伴随就是转置。

所以:

  • 前向:
  • 反向:

这也是为什么反向传播看起来像“把图倒着走一遍”,但又不是机械地把前向复制一遍。

7. 用 trace 看矩阵链式法则

这一节给一个最典型的矩阵版例子。

其中 为常量矩阵, 为变量矩阵。
若已知上游梯度

那么怎样求

先写微分:

因此

循环交换:

再写成标准形式:

所以

这个公式非常值得单独记住,因为它把很多矩阵链式法则都统一起来了。

8. 一个很实用的工作流

以后看到一个复合矩阵表达式,不要直接找现成公式,按这套顺序做最稳:

  1. 先确认自变量和目标变量的形状
  2. 从最终标量损失开始往回看
  3. 给每个中间量记一个“上游梯度”
  4. 对当前层只做局部求导
  5. 用微分或 trace 把结果整理回与变量同形的梯度

这其实就是手工版反向传播。

9. 最常用反传公式清单

9.1 向量版

9.2 矩阵版

10. 我的理解

我觉得链式法则一旦到了矩阵场景,真正难的从来不是“公式推不出来”,而是:

  • 你有没有把变量形状看清楚
  • 你有没有意识到局部导数本质是线性映射
  • 你能不能把每一层的上游梯度和局部 Jacobian 对上

一旦接受“反向传播就是局部线性算子的转置不断连乘”,很多原来看起来很神秘的公式都会变得非常自然。

所以我现在更倾向于把反向传播理解成一种“结构化记账”:
前向记录了变量如何生成,反向则沿着同一张图,把误差按线性伴随关系精确地分配回去。

11. 这篇的下一步

这篇已经够支撑:

  • 理解线性层反传
  • 看懂最基础的 MLP 反向传播
  • 手推大部分常见矩阵链式法则

如果下一篇继续写,最自然的是:

  1. softmax 与 cross entropy 求导入门:为什么输出层梯度会直接化成 p-y
  2. batch norm / layer norm 的反向传播怎么推
  3. Jacobian、Hessian 和二阶优化之间是什么关系
作者

Jarfield

发布于

2026-04-14

更新于

2026-04-14

许可协议

CC BY-NC-SA 4.0