林小满第一次进山徒步,站在半山腰,面前是起伏连绵的丘陵。他手里没有整座山的等高线大图,只有一张自己画的「局部坡度卡」:朝东走一步,海拔大约上升多少;朝北走一步,海拔又下降多少。这张卡片不告诉他远方哪里是山谷、哪里是断崖,却能在脚下这一小片草甸上,预测出每一步的落点变化。 多元函数就像一座多指标的山:每个输入是一个方向,每个输出是海拔、气温、风速。雅可比矩阵就是那张把「每个方向」与「每个指标」的对应关系整整齐齐排成表格的局部坡度卡。它把复杂的非线性山体,在每一处都近似成一块平滑的滑板,告诉你:只在这一小步里,世界会被怎样拉伸、旋转、压扁。 这篇文章从偏导数出发,一步步把这张表格填满,再看它的行列式如何度量面积伸缩,用它在积分换元中校准尺子,最后让它在神经网络的梯度反传里充当传令兵。学完它,你手里就多了一张走遍多元微积分和深度学习山路的通用坡度卡。

岗位关联

对 AI 从业者而言,雅可比矩阵是理解反向传播、数值优化与机器人控制的第一块理论基石——掌握它,你看神经网络就不再是「黑盒调参」,而是「看得见坡度的登山」。

目录
  1. 可视化演示
  2. 偏导数基石
  3. 雅可比矩阵定义
  4. 局部线性化
  5. 雅可比行列式
  6. 变量替换积分
  7. 神经网络应用
  8. 计算实践
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

动态演示雅可比矩阵的核心机制,通过入门/进阶/实战/优化四种模式展示关键概念与交互流程。

本节配有交互动效(进入视口后自动加载,约 3KB)。

雅可比矩阵:雅可比矩 雅可比矩阵的定义与构造方法 雅可比矩阵作为局部线性近似 核心机制可视化 雅可比矩阵整体架构与关键组件

偏导数基石

林小满想知道再往东走一步,海拔会升高多少。他请同伴站在原地别动,自己沿东西方向挪出一小步「h」,用「海拔差 ÷ 步长」估出这条经纬线上的坡度。这种只让一个变量动、其余全部冻住的测量法,就是偏导数——它好比登山者的「单向坡度计」,一次只回答一个方向的问题。

把这种朴素想法写成数学语言:对二元函数 f(x, y),固定 y 只让 x 变化,差商的极限叫 ∂f/∂x;反过来固定 x 只让 y 变化,得到 ∂f/∂y。这两个值就像两张独立的坡度标签,一张贴在东方向上,一张贴在北方向上。

如果林小满把两张标签拼成一列向量,就得到梯度 ∇f。梯度是「指南针 + 坡度计」的合体:方向指向上升最陡的方向,模长就是最大坡度。梯度是雅可比矩阵最重要的特例——当输出只有一个指标时,雅可比退化成一行,正是梯度。

有了这把单向坡度计,林小满离那张「全方位感应卡」只差一步:把每个指标、每个方向的读数全部排成一张表。

∇f(x,y)=(∂f∂x∂f∂y),∂f∂x=lim⁡h→0f(x+h, y)−f(x, y)h\displaystyle \nabla f(x,y)=\begin{pmatrix}\displaystyle\frac{\partial f}{\partial x}\\[8pt]\displaystyle\frac{\partial f}{\partial y}\end{pmatrix},\qquad \frac{\partial f}{\partial x}=\lim_{h\to 0}\frac{f(x+h,\,y)-f(x,\,y)}{h}
梯度把「东向坡度」和「北向坡度」打包成一列,指向山体最陡的攀爬方向。
  1. 偏导数极限式冻结 y,只让 x 挪动极小量 h,用差商取极限得到东向坡度。
    ∂f∂x=lim⁡h→0f(x+h, y)−f(x, y)h\displaystyle\frac{\partial f}{\partial x}=\lim_{h\to 0}\frac{f(x+h,\,y)-f(x,\,y)}{h}
  2. 梯度拼装把各方向的偏导按顺序竖排成一列,得到梯度向量。
    ∇f(x,y)=(∂f/∂x∂f/∂y)\displaystyle\nabla f(x,y)=\begin{pmatrix}\partial f/\partial x\\[4pt]\partial f/\partial y\end{pmatrix}
  3. 模长与方向梯度模长给出最大坡度,单位化后给出最陡方向。
    ∣∇f∣=(∂f∂x)2+(∂f∂y)2\displaystyle|\nabla f|=\sqrt{\left(\frac{\partial f}{\partial x}\right)^{2}+\left(\frac{\partial f}{\partial y}\right)^{2}}

雅可比矩阵定义

山里的天气变化多端,林小满不只关心海拔,还关心气温和风速。这时他发现,自己需要的不再是一张坡度标签,而是一整面「感应墙」:墙上每一格都写着「某个指标对某个方向有多敏感」。比如第一行第二列,就是「气温对正东方向的变化率」。

把感应墙翻译成数学:设变换 f: Rⁿ → Rᵐ,输入是 x = (x₁, …, xₙ),输出是 f = (f₁, …, fₘ)。雅可比矩阵 J 的第 i 行第 j 列元素,就是第 i 个输出对第 j 个输入的偏导数。行代表指标(输出),列代表方向(输入),这一约定是整座山的「读卡规则」。

当输出只有一个(m = 1)时,雅可比矩阵退化为一行,恰好是梯度的转置;当输入只有一个(n = 1)时,它退化为一个列向量,对应普通一元导数的向量版本。这张表把「多元」的复杂性压缩成一张规整的表格,任何局部信息都能从表里查出来。

林小满把海拔、气温、风速的感应值全部装满这张表——从此他手里的局部坡度卡,升级成了一台能同时预报多项指标的「微型气象站」。

J=(∂f1∂x1∂f1∂x2⋯∂f1∂xn∂f2∂x1∂f2∂x2⋯∂f2∂xn⋮⋮⋱⋮∂fm∂x1∂fm∂x2⋯∂fm∂xn)\displaystyle J=\begin{pmatrix}\displaystyle\frac{\partial f_1}{\partial x_1} & \displaystyle\frac{\partial f_1}{\partial x_2} & \cdots & \displaystyle\frac{\partial f_1}{\partial x_n}\\[8pt]\displaystyle\frac{\partial f_2}{\partial x_1} & \displaystyle\frac{\partial f_2}{\partial x_2} & \cdots & \displaystyle\frac{\partial f_2}{\partial x_n}\\[8pt]\vdots & \vdots & \ddots & \vdots\\[4pt]\displaystyle\frac{\partial f_m}{\partial x_1} & \displaystyle\frac{\partial f_m}{\partial x_2} & \cdots & \displaystyle\frac{\partial f_m}{\partial x_n}\end{pmatrix}
雅可比矩阵是给每个输出指标、每个输入方向都配一把「局部刻度尺」的查表工具。
  1. 行列约定行号 i 对应当前查看的输出指标 fᵢ,列号 j 对应微动的输入方向 xⱼ。
    Jij=∂fi∂xj\displaystyle J_{ij}=\frac{\partial f_i}{\partial x_j}
  2. 元素含义每个元素回答「第 i 个指标对第 j 个方向的微小变化有多敏感」。
    ∂fi∂xj≈fi(x+h ej)−fi(x)h\displaystyle \frac{\partial f_i}{\partial x_j}\approx\frac{f_i(x+h\,e_j)-f_i(x)}{h}
  3. 特例退化m=1 时矩阵只有一行,正是梯度行向量 ∇fᵀ。
    J=(∂f∂x1⋯∂f∂xn)=∇fT\displaystyle J=\begin{pmatrix}\displaystyle\frac{\partial f}{\partial x_1} & \cdots & \displaystyle\frac{\partial f}{\partial x_n}\end{pmatrix}=\nabla f^{\mathsf T}

局部线性化

感应墙虽好,却只对「脚下这一小步」负责。林小满知道,坡度卡不能代替整张地形图:走远之后,山势会拐弯、会变陡,那张卡片的读数就会失真。所以卡片上真正承诺的是:在展开点附近,用一块小平板贴住坡面。

数学上,这就是一阶泰勒展开。在某个点 x₀ 处,非线性变换 f 可以用「常数项 + 线性主部」来逼近:f(x) ≈ f(x₀) + J(x₀)(x − x₀)。这里的 J(x₀) 正是雅可比矩阵在 x₀ 处算出的读数,它把「多变量版本的导数」填进了线性项的位置。

这块小平板在二维叫切线,在高维叫切超平面。它抓住了一阶信息:方向对了、斜率对了,但弯曲(二阶及以上的信息)被暂时忽略。被忽略的部分是距离的「高阶小量」,记作 o(‖x − x₀‖)——离得越近,丢得越少。牛顿法、优化算法和神经网络的反向传播,全都建立在这块小平板之上。

林小满把这块小平板贴在脚下,心里默念:远处的路要边走边重新测量,但眼前三步之内,坡度卡足够可靠。

f(x)≈f(x0)+J(x0) (x−x0),∥f(x)−f(x0)−J(x0)(x−x0)∥=o(∥x−x0∥)\displaystyle f(x)\approx f(x_0)+J(x_0)\,(x-x_0),\qquad \left\|f(x)-f(x_0)-J(x_0)(x-x_0)\right\|=o(\|x-x_0\|)
局部线性化就是用脚下那块小平板代替弯曲山坡,离展开点越近,越看不出差别。
  1. 常数项f(x₀) 是展开点处的输出,相当于小平板钉在山坡上的那个支点。
    f(x0)\displaystyle f(x_0)
  2. 线性主部J(x₀)(x − x₀) 是雅可比矩阵乘以位移向量,描述相对支点的线性响应。
    J(x0) (x−x0)\displaystyle J(x_0)\,(x-x_0)
  3. 余项差值被 x − x₀ 的高阶小量控制,距离越近误差衰减越快。
    o(∥x−x0∥)\displaystyle o(\|x-x_0\|)

雅可比行列式

林小满的背包里还有一张橡皮纸地图,可以随意拉扯、揉皱。他忽然想到一个问题:当我变换地图上的一个小区格时,它的面积会被放大还是压缩?如果格子的边不是正南正北,面积变化又该怎么算?

答案是雅可比行列式 det J。对线性变换来说,任意小方格的面积放大倍数恰好等于变换矩阵行列式的绝对值;对非线性变换,|det J| 就是每一点附近的「局部面积伸缩因子」——橡皮纸在这一小片是被拉松了还是挤紧了。在二维情形,det J 有简洁的交叉相乘公式;在高维,它度量的是体积元的伸缩。

行列式的正负还有额外含义:负号表示变换翻了个面(比如把手掌翻过来,镜像方向),正号表示保持朝向。若 det J = 0,说明这一小片空间被压成了一条线或一个点,映射在这个点附近不可逆——林小满的橡皮纸上出现了「对折死褶」。

林小满盯着橡皮纸上的格子,终于明白:爬山时觉得「路变松了」还是「路挤紧了」,原来都是行列式在暗中记账。

det⁡J=∣∂f1∂x1∂f1∂x2∂f2∂x1∂f2∂x2∣=∂f1∂x1∂f2∂x2−∂f1∂x2∂f2∂x1,dA′=∣det⁡J∣ dA\displaystyle \det J=\begin{vmatrix}\displaystyle\frac{\partial f_1}{\partial x_1} & \displaystyle\frac{\partial f_1}{\partial x_2}\\[8pt]\displaystyle\frac{\partial f_2}{\partial x_1} & \displaystyle\frac{\partial f_2}{\partial x_2}\end{vmatrix}=\frac{\partial f_1}{\partial x_1}\frac{\partial f_2}{\partial x_2}-\frac{\partial f_1}{\partial x_2}\frac{\partial f_2}{\partial x_1},\qquad \mathrm{d}A'=|\det J|\,\mathrm{d}A
雅可比行列式是橡皮纸地图的「放大镜读数」:看面积放缩、看方向翻面、看是否挤成死褶。
  1. 交叉相乘相减二阶行列式由主对角线乘积减去副对角线乘积得到。
    ∂f1∂x1∂f2∂x2−∂f1∂x2∂f2∂x1\displaystyle \frac{\partial f_1}{\partial x_1}\frac{\partial f_2}{\partial x_2}-\frac{\partial f_1}{\partial x_2}\frac{\partial f_2}{\partial x_1}
  2. 面积伸缩因子小面积元 dA 经变换后变成 |det J| · dA,绝对值保证面积非负。
    dA′=∣det⁡J∣ dA\displaystyle \mathrm{d}A'=|\det J|\,\mathrm{d}A
  3. 可逆性判据det J = 0 时线性主部不可逆,映射在小邻域内发生折叠。
    det⁡J=0⟺J 不可逆\displaystyle \det J=0\quad\Longleftrightarrow\quad J\text{ 不可逆}

变量替换积分

登山队要计算一片不规则草甸的面积。林小满发现,用直角的方格地图算起来费劲,换一张极坐标地图反而轻松——但极坐标的格子不是均匀的正方形,越远离原点越宽。直接按格子数面积,就像拿一把刻度不匀的尺子量布,必然出错。

换元的关键就在微元。直角坐标的面积微元 dx dy 换成极坐标时,不是简单写成 dr dθ,而必须乘上变换的雅可比行列式的绝对值作校正。极坐标变换 (x, y) = (r cos θ, r sin θ) 的雅可比行列式恰为 r,所以面积微元是 r dr dθ——这正是尺子上「外圈刻度更疏」的数学来源。

多重积分的换元公式因此长得很对称:被积函数换元,微元乘 |det J|,积分域跟着改写。林小满把这把校正尺别在腰上,从此换任何地图投影,心里都先问一句:这一格的面积伸缩因子是多少?

林小满把校正尺往极坐标纸上一靠,草地面积一次算对。他暗自点头:换地图不可怕,可怕的是忘了给尺子校准。

∬Df(x,y) dx dy=∬D′f(x(u,v), y(u,v)) ∣det⁡J(u,v)∣ du dv\displaystyle \iint_{D} f(x,y)\,\mathrm{d}x\,\mathrm{d}y=\iint_{D'} f\big(x(u,v),\,y(u,v)\big)\,\big|\det J(u,v)\big|\,\mathrm{d}u\,\mathrm{d}v
变量替换积分的关键是给新坐标的微元戴上「行列式校正尺」,否则面积读数会失真。
  1. 坐标换元把旧坐标 (x, y) 写成新坐标 (u, v) 的函数,被积函数同步改写。
    f(x,y)⟶f(x(u,v), y(u,v))\displaystyle f(x,y)\longrightarrow f\big(x(u,v),\,y(u,v)\big)
  2. 微元校正面积微元换成 |det J(u,v)| du dv,校正网格不均匀造成的误差。
    dx dy=∣det⁡J(u,v)∣ du dv\displaystyle \mathrm{d}x\,\mathrm{d}y=\big|\det J(u,v)\big|\,\mathrm{d}u\,\mathrm{d}v
  3. 积分域改写积分区域从 D 映射为参数域 D',上下限随之调整。
    ∬D⟷∬D′\displaystyle \iint_D \longleftrightarrow \iint_{D'}

神经网络应用

天黑之前,林小满必须把「山顶损失值」的变化原因传回营地。山路被分成好几段——每段是一个网络层。他不能直接看到营地的海拔,只能一段一段往回传话:先告诉上一层「我这边的变化量」,上一层再算「那我这边该变多少」。这个摸黑传话的过程,就是反向传播。

每一段传话用的换算表,正是该层映射的雅可比矩阵。设层输出 z = f(x),损失 L 对 z 的梯度是 δ,那么损失对输入 x 的梯度由链式法则的矩阵形式给出:∂L/∂x = Jᵀ δ。这里的 Jᵀ 把「输出端的敏感度」翻译回「输入端的敏感度」,像把一张从营地到山顶的坡度卡倒过来用。

实际训练中,深度学习框架从不显式构造完整的 J,而是直接计算「向量与雅可比矩阵的乘积」(VJP),按层传递。参数更新的方向 ∂L/∂W 也由同类乘积给出——这正是林小满梯度下降时脚下那一步的「指南针」。

林小满沿着山路把传话一句句传回营地,每一段都用雅可比那张表完成「翻译」。他忽然明白:所谓神经网络训练,就是全队拿着各自的坡度卡,共同校准下一步该迈多远、往哪儿迈。

z=f(x),δ=∂L∂z,∂L∂x=JTδ\displaystyle z=f(x),\qquad \delta=\frac{\partial L}{\partial z},\qquad \frac{\partial L}{\partial x}=J^{\mathsf T}\delta
反向传播的每一环,都是把损失梯度乘以当前层的雅可比转置,把敏感度逐层传回。
  1. 前向层映射第 l 层把输入 x 变成输出 z,局部行为由雅可比 J 描述。
    z=f(x),J=∂z∂x\displaystyle z=f(x),\qquad J=\frac{\partial z}{\partial x}
  2. 输出端梯度损失对层输出的梯度记为 δ,是反向传播的「起点传话」。
    δ=∂L∂z\displaystyle \delta=\frac{\partial L}{\partial z}
  3. 雅可比转置传递输入梯度等于 Jᵀ 左乘 δ,这就是向量-雅可比积 VJP。
    ∂L∂x=JTδ\displaystyle \frac{\partial L}{\partial x}=J^{\mathsf T}\delta

计算实践

不是每座山都有现成的解析坡度卡。林小满有时面对一个黑盒函数——只给输入、返回输出,没有公式。这时他改用老办法:在目标点左右各踩一小步,用两边的海拔差除以步长,估出坡度。这就是数值差分。

最常用的是中心差分公式:(f(x+h) − f(x−h)) / (2h)。它比单侧差分更聪明,因为两边的截断误差恰好符号相反、相互抵消,误差阶达到 O(h²)。步长 h 不能太大(截断误差增大),也不能太小(浮点舍入误差会跳出来捣乱),工程上常取 h ≈ 10⁻⁶。

现代深度学习框架则用自动微分(AD)直接给出精确到机器精度的梯度。从业者最常见的用法,是用数值雅可比做「梯度检查」:把自动微分的结果和中心差分的结果对比,若最大误差在 10⁻⁵ 量级,说明反向传播实现正确。林小满出发前校准坡度卡,靠的正是这套双重保险。

林小满收起计量尺,把解析公式、数值差分和自动微分三个读数并排对比。误差对上了,他才放心出发——校准过的坡度卡,才配得上接下来的山路。

∂f∂xj≈f(x+h ej)−f(x−h ej)2h,截断误差=O(h2)\displaystyle \frac{\partial f}{\partial x_j}\approx\frac{f(x+h\,e_j)-f(x-h\,e_j)}{2h},\qquad \text{截断误差}=O(h^2)
中心差分是雅可比矩阵的「现场测坡法」:左右各踩一步,误差自动对消,精度升到二阶。
  1. 中心差分构造在 x 两侧对称取点 x ± h e_j,差值除以 2h 估计偏导。
    f(x+h ej)−f(x−h ej)2h\displaystyle \frac{f(x+h\,e_j)-f(x-h\,e_j)}{2h}
  2. 泰勒展开验证两侧展开后一阶项保留,二阶项相互抵消。
    f(x±hej)=f(x)±h∂f∂xj+h22∂2f∂xj2+⋯\displaystyle f(x\pm h e_j)=f(x)\pm h\frac{\partial f}{\partial x_j}+\frac{h^2}{2}\frac{\partial^{2}f}{\partial x_j^{2}}+\cdots
  3. 误差阶主误差项为二阶小量,因此步长减半误差约缩为四分之一。
    O(h2)\displaystyle O(h^2)

AI 应用场景

机械臂末端控制

阶段:决策与控制 / 仿真

解决的问题:机械臂的「手」(末端执行器)要沿指定轨迹移动,但电机只能直接控制「关节角」。传统做法靠人工标定大量位姿做查表,费时且泛化差。AI 控制框架用雅可比矩阵把末端速度与关节角速度线性联系起来,再通过求逆给出每个关节该转多快。

具体案例:六轴机械臂抓取流水线上的零件时,控制器实时计算运动学雅可比 J(θ),解出关节角速度 θ' = J⁺ v,让末端沿规划路径平滑跟踪,碰到奇异位形(det J ≈ 0)时自动切换避让策略。

神经网络梯度反传

阶段:模型训练与优化

解决的问题:深层网络的损失函数对几百万个参数的偏导无法手推。传统数值差分逐个算一遍的成本随参数数量线性爆炸,根本无法训练大模型。深度学习框架利用「每层雅可比转置 × 梯度」的向量-雅可比积(VJP),一次反向传播即可得到全部梯度。

具体案例:训练一个 7B 参数的 Transformer 时,PyTorch 在每一轮反向传播中按层执行 Jᵀδ,把损失梯度从输出层一直传回嵌入层,再用 Adam 更新权重——整个过程用户看不到任何雅可比矩阵,但它无处不在。

非线性优化与位姿估计

阶段:状态估计 / 端到端学习

解决的问题:视觉 SLAM 要从模糊图像中估计相机位姿,目标函数是非线性的,没有闭式解。传统穷举搜索不可行。高斯-牛顿法在每轮迭代用雅可比矩阵构造局部线性近似,求解增量方程,逐步逼近最优位姿。

具体案例:机器人携带双目相机建图时,重投影误差对位姿和路标点的雅可比被送入优化器,几十次迭代后得到厘米级定位;det J 退化时触发关键帧筛选,避免「走平路却翻车」的退化场景。

Python 演示

python56 行
import numpy as np  def jacobian(f, x, h=1e-6):    """用中心差分数值估计函数 f 在 x 处的雅可比矩阵"""    x = np.asarray(x, dtype=float)    y0 = np.asarray(f(x), dtype=float)    m, n = y0.size, x.size    J = np.zeros((m, n))    for j in range(n):        e = np.zeros(n)        e[j] = h        fp = np.asarray(f(x + e), dtype=float)        fm = np.asarray(f(x - e), dtype=float)        J[:, j] = (fp - fm) / (2.0 * h)    return J  def map_2d(v):    x, y = v    return np.array([x * x + y, np.sin(x * y)])  def analytic_jac(v):    x, y = v    return np.array([        [2.0 * x, 1.0],        [y * np.cos(x * y), x * np.cos(x * y)],    ])  def main():    p = np.array([0.5, 0.3])    J_num = jacobian(map_2d, p)    print("numeric Jacobian:")    print(np.round(J_num, 6))    print("analytic Jacobian:")    print(analytic_jac(p))    print("max abs error:", np.abs(J_num - analytic_jac(p)).max())    print("det(J) =", np.linalg.det(analytic_jac(p)))     # 反向传播中的核心式子: 输入梯度 = J^T 乘输出梯度    W = np.array([[1.5, -0.5], [0.3, 0.8]])     def layer(x):        return W @ x     q = np.array([0.4, 0.2])    delta = np.array([1.0, -1.0])    back = jacobian(layer, q).T @ delta    print("J^T delta  =", back)    print("W^T delta  =", W.T @ delta)  if __name__ == "__main__":    main()
目的:用中心差分数值估计任意多元函数的雅可比矩阵,并用解析解验证,最后演示反向传播中的核心式子 Jᵀδ。
  1. J[:, j] = (fp - fm) / (2.0 * h)对第 j 个输入做中心差分,一列一列填出雅可比矩阵。
  2. e[j] = h构造只在第 j 个方向上有微小偏移的单位扰动向量。
  3. J_num = jacobian(map_2d, p)对非线性映射 f(x,y) = (x²+y, sin(xy)) 数值求雅可比。
  4. np.abs(J_num - analytic_jac(p)).max()用解析解对比数值解,做「梯度检查」。
  5. back = jacobian(layer, q).T @ delta用雅可比转置乘输出梯度,复现反向传播公式。
  6. print("W^T delta =", W.T @ delta)与线性层解析结果对比,验证 Jᵀδ = Wᵀδ。

常见误区

误区雅可比矩阵我总记不住「谁对谁求导」,经常把矩阵写成输入对输出的偏导,结果形状都对不上。

正解记住「行是输出指标,列是输入方向」——像林小满的感应墙,每一行是一张指标卡(海拔、气温),每一列是一个方向挡位(东、北)。若输出 m 个、输入 n 个,矩阵必是 m × n,用这个形状自检就能立刻发现写反。

为何常见:初学时接触的多是标量函数,梯度只有一行,行列区分不明显;一旦变成多输出向量函数,沿用「一行搞定」的习惯就把行列写反了。

误区雅可比行列式是面积放大倍数,倍数当然永远是正数吧?考试遇到负的行列式,我直接判断算错了。

正解det J 可正、可负、可零。负号表示变换把局部方向翻了面(镜像),取绝对值 |det J| 才是真正的面积伸缩倍数;等于零表示这一小片被压扁,映射局部不可逆。橡皮纸地图被翻个面,面积照样是正的。

为何常见:一元换元积分里直接写 |φ'(x)|,绝对值总在公式外层,让人误以为行列式本身自带绝对值。

误区有了 `f(x) ≈ f(x₀) + J(x₀)(x − x₀)`,那不就能直接估算几公里外的海拔了吗?我还用它推算整座山的高度。

正解这个近似只在 x₀ 的小邻域内可靠,误差随距离增长且增长速度由高阶导数决定。林小满的坡度卡只在脚下三步内可信,走远必须重新测量。工程上要么小步迭代(梯度下降、牛顿法),要么引入二阶项(海森矩阵)修正。

为何常见:一维曲线的切线在图像上「贴合」得不错,让人误以为直线近似在较大范围内也成立,忽略了曲率的影响。

误区雅可比矩阵就是「把偏导数排成的矩阵」吧?那二阶偏导排成的也是它吗?我一直把海森矩阵当成雅可比的别名。

正解两者等级不同:雅可比是一阶偏导(向量对向量),海森是二阶偏导(标量对向量求两次)。可以这样记:雅可比是感应墙,海森是曲率仪——前者告诉你怎么走,后者告诉你坡面弯得有多厉害。

为何常见:两者都是「偏导数排成的矩阵」,名称又都带「矩阵」二字,初学者只记表面形式,忽略了导数阶数的本质区别。

面试题

Q1. 雅可比矩阵 J 中第 i 行第 j 列元素应写作:

单选题 · easy

  • A.∂fᵢ/∂xⱼ 第 i 个输出对第 j 个输入求偏导← 正确答案
  • B.∂fⱼ/∂xᵢ 第 j 个输出对第 i 个输入求偏导
  • C.∂fᵢ/∂xᵢ 同序号输出对输入求偏导
  • D.∂fⱼ/∂xⱼ 同序号输入对输出求偏导

答案:A。雅可比矩阵的行对应输出指标、列对应输入方向,所以第 i 行第 j 列必是「第 i 个输出对第 j 个输入求偏导」。这好比感应墙的第 i 行第 j 格记录的是指标 i 对方向 j 的敏感度。B 把行与列对调,C、D 则强行绑定同序号,都违背布局规则。

Q2. 设 f(x, y) = (2x, 3y),单位正方形经变换后面积是多少?

单选题 · easy

  • A.2 倍,长宽比按二比三拉伸
  • B.3 倍,宽度方向被放大一半
  • C.6 倍,行列式等于二乘三← 正确答案
  • D.9 倍,每个坐标都放大三倍

答案:C。该变换的雅可比矩阵是 diag(2, 3),行列式 det = 2 × 3 = 6,所以面积放大 6 倍。A、B 只看到单个方向,D 混淆了坐标缩放与面积缩放。面积伸缩因子永远是行列式的绝对值,而不只是某个坐标方向的倍数。

Q3. 函数 z = f(x, y) 在点 p 处的梯度向量表示什么?

单选题 · easy

  • A.该点上升最陡的方向和坡度大小← 正确答案
  • B.该点所有等高线的总长度和条数
  • C.该点函数值本身的近似大小层级
  • D.该点到原点的最短直线距离方向

答案:A。梯度把各个方向的偏导拼成一列,方向指向上升最陡处,模长就是最大坡度,与林小满的「指南针 + 坡度计」完全对应。B 讲的是等高线的全局统计,C 是函数值本身,D 是位置向量,都与梯度无关。

Q4. 反向传播中,损失 L 对层输入 x 的梯度应写成:

单选题 · mid

  • A.J 的转置左乘损失梯度向量 δ← 正确答案
  • B.J 直接左乘损失梯度向量 δ
  • C.损失梯度向量 δ 左乘矩阵 J
  • D.损失梯度的转置左乘 J 的转置

答案:A。链式法则的矩阵形式是 ∂L/∂x = Jᵀδ,即雅可比转置左乘损失对输出的梯度。这相当于把「输出端敏感度」翻译回「输入端敏感度」。B 少了转置方向就反了,C 矩阵乘法维度不匹配,D 多写了转置,结果形状也会错。

Q5. 以下关于雅可比行列式 det J 的说法正确的有:

多选题 · mid

  • A.表示该点附近体积元的伸缩倍数← 正确答案
  • B.等于零说明该点附近变换不可逆← 正确答案
  • C.恒为正数并且不能等于零
  • D.是单位立方体映射后的有向体积← 正确答案

答案:ABD。det J 的绝对值是体积元伸缩倍数,本身可正可负,负号表示方向翻转,所以 C 错;它等于零时映射把邻域压成低维,局部不可逆,B 对;几何上它也是单位立方体经线性主部映射后的有向体积,D 对;A 正是「橡皮纸面积放大镜」的准确描述。

Q6. 关于中心差分估计偏导数,说法正确的有:

多选题 · mid

  • A.中心差分的截断误差是二阶小量← 正确答案
  • B.单侧差分通常没有中心差分精确← 正确答案
  • C.中心差分能完全消除舍入误差
  • D.步长取得越小结果一定越精确

答案:AB。中心差分 (f(x+h)−f(x−h))/(2h) 两侧泰勒展开后二阶项对消,误差为 O(h²),A 对;单侧差分保留一阶误差,精度更低,B 对。但 h 过小时浮点舍入误差会放大,所以 C、D 是典型错觉——步长大小要在截断误差与舍入误差之间取平衡。

Q7. 局部线性化 f(x) ≈ f(x₀) + J(x₀)(x − x₀) 在什么条件下误差最小?

单选题 · mid

  • A.当 x 与 x0 的距离趋于零时误差最小← 正确答案
  • B.当输出维度和输入维度相同时误差最小
  • C.当行列式的值为一的时候误差最小
  • D.当所有偏导数都等于零的时候误差最小

答案:A。余项是 ‖x − x₀‖ 的高阶小量 o(‖x − x₀‖),所以距离越近误差越小,这正是「坡度卡只在脚下三步内可靠」的数学表达。维度相等、行列式为 1 或偏导为零都不影响误差阶,它们只改变具体数值。

Q8. 关于雅可比矩阵在神经网络训练中的角色,正确的有:

多选题 · hard

  • A.反向传播需要计算向量与雅可比之积← 正确答案
  • B.自动微分避免显式构造整个雅可比矩阵← 正确答案
  • C.雅可比行列式必须大于零才能训练
  • D.雅可比只能描述单层网络的行为

答案:AB。反向传播逐层执行 Jᵀδ,本质是向量-雅可比积(VJP),A 对;现代框架用自动微分直接算 VJP,不展开完整矩阵,B 对。训练与行列式正负无关(det 甚至可以为零),C 错;雅可比可以描述任意一层或复合层的局部行为,D 错。

Q9. 极坐标换元中面积微元是 r dr dθ,其中因子 r 来自:

单选题 · hard

  • A.坐标变换的雅可比行列式绝对值← 正确答案
  • B.被积函数在原点处的数值大小
  • C.角度微分引入的二阶修正项
  • D.积分区域边界线的曲率半径

答案:A。极坐标变换 (x, y) = (r cos θ, r sin θ) 的雅可比行列式 det J = r,取绝对值后得到面积微元校正因子。这正是「换地图要戴行列式校正尺」的实例。B、C、D 都与偏导数组成的行列式无关,属于对 r 的因果误读。

Q10. 若层输出 z = Wx + b,损失对 z 的梯度为 δ,则 ∂L/∂W 等于:

单选题 · extreme

  • A.δ 与 x 做外积得到矩阵 δ⊗x← 正确答案
  • B.x 与 δ 做内积得到标量结果
  • C.单位矩阵乘 δ 再求矩阵的迹
  • D.所有元素相加再除以批大小

答案:A。由链式法则,∂L/∂W = (∂L/∂z)·(∂z/∂W),展开后是 δ 与 x 的外积 δ⊗x,形状与 W 完全一致,这正是训练中梯度更新项的来源。B 内积得到标量,形状对不上;C 的迹、D 的全局平均都不是「对单个样本」的梯度表达式。