雅可比矩阵:多入多出的偏导数排成一张表
从「一个输入一个输出=偏导」搭到「多个输入多个输出=雅可比」,给形状规则,再看清反向传播里梯度矩阵怎么沿层相乘
- 说清雅可比矩阵是什么:把一个多输入多输出函数的所有偏导数整齐排成一张表
- 记住形状规则:m 个输出、n 个输入时,雅可比是 m×n 矩阵
- 能手算一个 R²→R² 函数在指定点的雅可比,并用数值差分验证
- 讲清反向传播里「链式法则=矩阵相乘」,梯度矩阵沿层如何流动
一层网络同时处理一堆输入、吐出一堆输出——描述它们如何联动,靠的是雅可比矩阵
m2 里你见过偏导:一个函数 y=f(x),x 动一点、y 怎么变。但真实神经网络一层是「一次性吃进 n 个输入、同时吐出 m 个输出」。这时只问「x₁ 动一点、y₁ 怎么变」已经不够了——n 个输入每个都会影响 m 个输出的每一个。把这 n×m 个影响全部算出来、整齐排成一张表,就是雅可比矩阵(Jacobian)。它是反向传播的真正「通用语言」。
因果线:先回忆一元函数的导数就是「斜率」→ 升级到多元函数,每个输入对每个输出的影响是一个偏导 → 把所有偏导按「行=输出、列=输入」排成 m×n 的表,即雅可比 → 手算一个 R²→R² 的小例子 → 复合多层时,总变化率是各层雅可比相乘,这正是反向传播在算的事。
2.1 生活直觉与高中搭桥:从「一个旋钮一个表针」到「一排旋钮一排表针」
想象一台收音机:拧一个音量旋钮(一个输入),只有一个音量表针动(一个输出),你量一下旋钮拧 1 格表针动几格,就是一元导数。现在升级成调音台:一排 n 个旋钮(高音、低音、混响…),一排 m 个表针(左声道、右声道、总输出…)。任意拧一个旋钮,会同时牵动好几根表针。要完整描述这台机器怎么响应,你得回答 n×m 个问题:「拧第 j 个旋钮一格,第 i 根表针动多少?」把这 n×m 个答案写成一张表——行是表针(输出)、列是旋钮(输入)——就是雅可比。
从高中知识搭桥,符号读法:偏导 ∂f/∂x(读「偏 f 偏 x」):只动 x、其它输入不动时,f 的瞬时变化率,m2 已讲。雅可比 J(读「雅可比矩阵」):∂fᵢ/∂xⱼ 是它第 i 行第 j 列的元素。形状:函数吃进 n 个输入、吐出 m 个输出,则 J 是 m 行 n 列,记 m×n。关键直觉:雅可比是「这台机器在某一点附近的局部线性化」——在很小的范围里,这台弯弯曲曲的机器可以近似成一块线性变换(就是那张 J 表)。
2.2 严格表述:第 i 行第 j 列,就是「第 j 个输入对第 i 个输出的偏导」
给定 f: Rⁿ → Rᵐ,即吃 n 个输入、吐 m 个输出,写成 f(x₁,…,xₙ) = (f₁,…,fₘ)。它在某点的雅可比是 m×n 矩阵:J 的第 i 行第 j 列 = ∂fᵢ/∂xⱼ。读法:横向读,固定一个输出 fᵢ,它对所有 n 个输入的偏导排成一行;纵向读,固定一个输入 xⱼ,它对所有 m 个输出的影响排成一列。一个重要特例:若 m=1(只吐一个数,比如损失 L),雅可比就退化成一行 1×n 的矩阵——这正是 m2 讲的「梯度」(梯度向量转置成行)。所以梯度是雅可比的特例,雅可比是梯度的推广。
输出行数 = 输出个数 m,输入列数 = 输入个数 n。先数输出有几个、输入有几个,J 的 m×n 就定了。反向传播时沿着层把这些 m×n 矩阵依次相乘,形状必须像「内侧对齐」那样首尾相接,这就是 m1 的矩阵乘规则。
2.3 手算小例:f: R²→R²,在 (1,2) 处把表填出来
取一个能手算的函数 f(x₁,x₂) = (f₁, f₂),其中:f₁ = x₁² + x₂,f₂ = 3·x₁ + x₂²。逐项求偏导(每步中间值写出来):∂f₁/∂x₁ = 2x₁(对 x₁² 求导),∂f₁/∂x₂ = 1(x₂ 的系数)。∂f₂/∂x₁ = 3(x₁ 的系数),∂f₂/∂x₂ = 2x₂(对 x₂² 求导)。所以雅可比 J = [[2x₁, 1],[3, 2x₂]]。代入点 (x₁,x₂)=(1,2):J(1,2) = [[2·1, 1],[3, 2·2]] = [[2, 1],[3, 4]]。形状 2×2:2 个输出、2 个输入,完全对得上。
雅可比的「局部线性化」含义,用一个小扰动看明白:给输入一个小位移 dx=[0.01, 0.02](x₁ 加 0.01、x₂ 加 0.02),输出的变化 df 近似等于 J·dx:df = J(1,2)·[0.01, 0.02]ᵀ = [[2,1],[3,4]]·[0.01,0.02] = [2·0.01+1·0.02, 3·0.01+4·0.02] = [0.04, 0.11]。直接把 (1.01, 2.02) 代回 f 精确算:f(1.01,2.02)−f(1,2) = [0.0401, 0.1104]。线性近似 [0.04, 0.11] 与精确值非常接近——差值就是忽略掉的高阶小量,dx 越小越准。这就是「雅可比=局部线性近似」的实证。
上面 f(x1,x2)=(x1²+x2, 3x1+x2²),若把点从 (1,2) 换到 (0,0),雅可比 J(0,0) 第一行等于什么?2.4 为什么 AI / 大模型需要它:反向传播 = 雅可比沿层相乘
m2 讲过链式法则:复合函数的导数是各段导数相乘。一层网络是一次「输入→输出」的变换,有自己的雅可比;多层叠起来就是多次变换复合。总变换对输入的雅可比,等于各层雅可比按顺序相乘。梯度之所以能一层一层往回传,靠的就是这一点。
前向:输入逐层变换
x₀ →(层1)→ x₁ →(层2)→ x₂ →(层3)→ L
每层各有一个雅可比 J₁,J₂,J₃
反向:梯度从损失往回乘
∂L/∂x₂ = ∂L/∂L · J₃
先用损失对最后一层的雅可比
∂L/∂x₁ = ∂L/∂x₂ · J₂
再乘上一层雅可比
∂L/∂x₀ = ∂L/∂x₁ · J₁
一路乘到最初的输入/权重
形状必须首尾相接:上一层输出 m 维,正好是下一层输入 m 维,内侧 m 对齐(m1 的矩阵乘规则)。
用刚才的小扰动语言翻译:输出变化 = 雅可比 × 输入变化。把它倒过来——「想知道损失 L 对某层参数的梯度」,就是把从该层到 L 的每一段雅可比按链式乘起来。stage17 的神经网络/反向传播课会真的对一层 y=Wx+b 手算 ∂L/∂W、∂L/∂x,那里的每一个矩阵求导,本质就是这里说的「多入多出偏导排成表、再沿层相乘」。你现在先建立形状直觉,到 stage17 就不会觉得反向传播是魔法。
雅可比是「点相关」的,同一点不同位置数值不同,别当成固定常数表;行数是输出个数、列数是输入个数,别和「数据批次」的形状搞混(雅可比描述的是变换本身,不含 batch 轴);链式相乘顺序不能反——前向是 J₁ 然后 J₂,反向传梯度时矩阵要按逆序乘,这与 m1 的 (AB)ᵀ=BᵀAᵀ 同一个「顺序反转」道理。
一个网络层把 128 维输入映射到 64 维输出,它在某点的雅可比形状是?
本节小结
一条线:一元导数是「一个旋钮对一个表针」,多元下 n 个旋钮对 m 个表针要回答 n×m 个问题 → 把偏导 ∂fᵢ/∂xⱼ 按「行=输出、列=输入」排成 m×n 的表,即雅可比;m=1 时它退化成一行,就是 m2 的梯度 → 手算 f=(x₁²+x₂, 3x₁+x₂²) 在 (1,2) 得 J=[[2,1],[3,4]],小扰动 dx=[0.01,0.02] 时 J·dx=[0.04,0.11],与精确值 [0.0401,0.1104] 吻合,印证「局部线性化」 → 复合多层时,总梯度是各层雅可比沿链式依次相乘,这正是反向传播在做的事,stage17 会对单层手算 ∂L/∂W。下一课转到概率:怎么按状态转移反复采样来估计一个分布。
资深工程师加餐
底层原理 · 大厂视角 · 工程经验,点卡片展开
信息熵度量一个分布的不确定程度,越随机熵越大。交叉熵衡量「用模型预测的分布去编码真实分布」所需的平均代价:模型预测越接近真实标签,交叉熵越小。因此多分类任务用交叉熵做损失不是拍脑袋,而是有严格信息论依据的最大似然等价形式。