矩阵微积分:Jacobian 与链式法则
分类: 神经网络基础 · 难度: 进阶 · 关联讲座: L03
矩阵微积分:Jacobian 与链式法则
矩阵微积分是理解反向传播的数学基础。当我们从标量求导过渡到向量/矩阵求导时,核心工具是 Jacobian 矩阵——它把”函数在某点的斜率”这一概念从一维推广到多维。本文从 Jacobian 的定义出发,逐步推导线性变换、逐元素非线性和复合函数的梯度规则,并通过完整数值示例验证每一步的形状匹配。
📐 矩阵微积分:Jacobian、链式法则与完整推导
变量定义:
- f:Rn→Rm,Jacobian ∂x∂f∈Rm×n(第 i 行 j 列为 ∂xj∂fi)
- W∈Rm×n,x∈Rn,u∈Rm,f 为逐元素激活函数,s∈R(标量)
- h=f(Wx),s=uTh
规则 1:线性变换的 Jacobian,f(x)=Wx+b,f:Rn→Rm
第 i 个输出分量:fi=∑j=1nWijxj+bi
对 xk 求偏导:∂xk∂fi=Wik
因此 Jacobian 的 (i,k) 元素恰好是 Wik,即:
∂x∂(Wx+b)=W∈Rm×n
规则 2:逐元素非线性的 Jacobian,h=f(z),f:Rm→Rm(逐元素)
因为 hi=f(zi) 只依赖 zi(不依赖其他 zj),所以:
∂zj∂hi={f′(zi)0i=ji=j
Jacobian 是对角矩阵:
∂z∂h=diag(f′(z))=f′(z1)⋱f′(zm)∈Rm×m
规则 3:标量对向量的梯度,s=uTh,s:Rm→R
s=∑iuihi,故 ∂hi∂s=ui,即:
∂h∂s=uT∈R1×m(行向量,Jacobian 形式)
链式法则:完整推导 ∂x∂s(其中 z=Wx,h=f(z),s=uTh)
按链式法则:
∂x∂s=1×m∂h∂s⋅m×m∂z∂h⋅m×n∂x∂z=uT⋅diag(f′(z))⋅W∈R1×n
形状检查:(1×m)⋅(m×m)⋅(m×n)=(1×n) ✓
转置变为列向量(形状约定:梯度与参数同形):
∇xs=WT⋅diag(f′(z))⋅u∈Rn
形状检查:(n×m)⋅(m×m)⋅(m)=(n) ✓
🔢 数值计算示例
设定:
W=[1324]∈R2×2,x=[0.50.5],u=[1−1],f=tanh
前向计算:
-
z=Wx=[1(0.5)+2(0.5)3(0.5)+4(0.5)]=[1.53.5]
-
h=tanh(z)=[tanh(1.5)tanh(3.5)]≈[0.9050.998]
-
s=uTh=1(0.905)+(−1)(0.998)=−0.093
反向计算 ∇xs:
-
f′(z)=1−tanh2(z),计算对角矩阵:
diag(f′(z))=[1−0.9052001−0.9982]≈[0.181000.004]
-
链式法则(右到左):
δ=diag(f′(z))⋅u=[0.1810.004]⊙[1−1]=[0.181−0.004]
-
∇xs=WTδ=[1234][0.181−0.004]=[0.181−0.0120.362−0.016]≈[0.1690.346]
验证形状:∇xs∈R2,与 x∈R2 同形 ✓
💡 为什么链式法则可以矩阵形式表达?
链式法则的本质是”复合函数的局部斜率相乘”。在标量情形:dxds=dhds⋅dzdh⋅dxdz。
向量化后,每个”斜率”变成 Jacobian 矩阵,乘法变成矩阵乘法。关键洞察:只要形状能对上(矩阵乘法的维度匹配),推导就一定正确。
不需要死记公式,只要记住:每个节点贡献一个 Jacobian,从右到左(从输出到输入)连乘。
⚠️ 常见误区
- 转置陷阱:∂x∂(Wx)=W(Jacobian 形式),但梯度(列向量)是 WTδ。两者不矛盾:Jacobian 是 W,但把梯度从 h 空间”拉回”到 x 空间时需要 WT(正向是 W 把 Rn 映射到 Rm,反向自然是 WT 把 Rm 映射回 Rn)。
- 形状混淆:∂h∂s(s 是标量,h 是向量)得到行向量 uT(Jacobian 约定),不是列向量。如果你用”梯度形状与参数相同”约定,则写 u(列向量)——同一个东西,两种写法,不要混用。
- 不要记公式,记形状推导:写出左手边的形状,确保右手边矩阵乘法能得到相同形状,这是最可靠的检验。如 ∇xs∈Rn,右边 (n×m)⋅(m)=(n) 才对。