林大厨刚盘下一家私房菜馆,客人对每道菜会从“色、香、味”三个维度打分。为了把菜做好,他得研究:盐多放一克,颜色、香气、味道各变多少?糖和辣椒一起加,效果是简单叠加还是会互相打架?他翻遍厨师学校的课本,里面的微积分只教他“一个变量变一点,结果变多少”——但现在变量是一桌子调料,结果是一串评分。这正是矩阵微积分登场的时刻:Jacobian矩阵像一张“调料→评分”的敏感度记录表,Hessian矩阵像一张“调料交互”效应表;当徒弟问他“您是怎么几分钟就调好味的”,林大厨笑答:“我是从最终得分倒着推回每一道工序的。”这句话,就是深度学习中反向传播的灵魂。在这座厨房里,神经网络是不断试菜的徒弟,损失函数是评分表,而矩阵微积分,就是让徒弟最快学会调整配料的数学引擎。
矩阵微积分是深度学习反向传播与最优化理论的数学地基。读懂Jacobian与Hessian,你就能真正看懂梯度下降、牛顿法以及PyTorch等框架的底层运作逻辑,这是从“调包侠”走向“调参大师”的关键一步。
可视化演示
展示队列的入队和出队操作,观察先进先出(FIFO)的特性及队头队尾指针的变化。
本节配有交互动效(进入视口后自动加载,约 3KB)。
队列操作 入队在队尾添加,出队从队头移除 FIFO 先进先出,front 和 rear 指针控制操作
从标量到矩阵
林大厨第一次带徒弟时,只教一件事:“咸了,就少放半勺盐。”这是标量微积分的直觉——一个输入(盐的量)对应一个输出(咸度),导数就是一个数:$\frac{dy}{dx}$。可真正掌勺后他发现,一道菜有六种调料、四项评分指标,每一味调料都会牵动所有评分。单个数字根本写不下这么多变化关系,他需要一张“表”。
这张表就是微积分从标量走向矩阵的第一步。当输入不再是单个 $x$ 而是向量 $\boldsymbol{x}=(x_1,\dots,x_n)$,输出也不再是单个 $y$ 而是向量 $\boldsymbol{f}=(f_1,\dots,f_m)$ 时,每一对“输入 $j$ → 输出 $i$”的变化率都要被记录,于是“导数”升级为一张 $m\times n$ 的表格。此外,求导时采用“行向量布局”还是“列向量布局”(即分子布局与分母布局)会影响公式形态,但本质是同一种变化率的两种记法,就像同一道菜在不同菜系里叫法不同。
林大厨把这张表贴在后厨墙上,每换一道菜就重新算一遍。他告诉徒弟:“别死记每个格子,你要理解这表格的行是评价、列是调料、格子是敏感度。有了它,你才知道手该往哪伸。”
- 行代表输出矩阵的第 $i$ 行对应第 $i$ 个输出函数 $f_i$,整行刻画“所有输入对这个输出的影响”。
- 列代表输入第 $j$ 列对应第 $j$ 个输入变量 $x_j$,整列回答“动这一味调料,会牵动哪些评分”。
- 格子的含义第 $i$ 行第 $j$ 列的元素只描述“一个输出对一个输入”的局部变化率,其余输入保持不变。
Jacobian矩阵
Jacobian矩阵的诞生让林大厨的调菜效率翻倍。以往他只能靠舌头试,现在他手里有一张完整的“敏感度记录表”:假设汤的“鲜美评分” $f_1$ 对盐量 $x_1$ 的偏导为 $2xy$,对糖量 $x_2$ 的偏导为 $x^2$,他就知道——盐多一点,鲜味提升快;糖多一点,鲜味提升慢。这种“每个输出对每个输入逐格求偏导”的操作,就是Jacobian矩阵的构建过程。
计算Jacobian并不神秘,它就是“把所有偏导数按规则排好队”:对向量值函数 $\boldsymbol{f}(\boldsymbol{x})$,先确定输出个数 $m$ 和输入个数 $n$,然后逐元素求 $\frac{\partial f_i}{\partial x_j}$,填进 $m\times n$ 的表格。当 $m=n$ 时,这一方阵的行列式叫雅可比行列式(Jacobian determinant),它刻画了“输入空间的小体积经过映射后被放大了多少倍”——判断映射是否可逆、是否保持局部拓扑结构时,它是关键信号。
林大厨的经验是:“不要看到矩阵就发怵。Jacobian不过是被整齐装订起来的偏导数清单——你只需要会求单一偏导,再负责把它们放到正确的位置上。”这份清单让他的每一次调味都有的放矢,而不是凭运气乱试。
- 对第一个输出求偏导$f_1=x^2y$ 看作关于 $x$ 的函数时,$y$ 是常数,导数为 $2xy$;看作关于 $y$ 的函数时,$x^2$ 是常数,导数为 $x^2$。
- 对第二个输出求偏导$f_2=\sin(xy)$ 用复合函数求导,先对外层 $\sin$ 求导得 $\cos(xy)$,再乘以内层 $xy$ 对各自变量的偏导。
- 按行列填表将四个结果按“第 $i$ 行、第 $j$ 列”的规则填入矩阵,第一行属于 $f_1$,第二行属于 $f_2$。
Hessian矩阵
Jacobian解决了“每味调料对每项评分的敏感度”,但林大厨很快发现新问题:盐和糖一起调整时,鲜味的变化不是两者单独作用之和——它们会“互相增强”或“互相抵消”。这种二阶效应,需要一张新的表来记录:Hessian矩阵。它是“梯度的Jacobian”:先求出标量函数 $f$ 对每个变量的偏导(梯度向量),再对这个梯度向量整体求一次Jacobian,得到的就是二阶偏导矩阵。
Hessian矩阵自带两个重要性质。第一,对“足够光滑”的函数,混合偏导可以交换次序:$\frac{\partial^2 f}{\partial x_i\partial x_j}=\frac{\partial^2 f}{\partial x_j\partial x_i}$,因此Hessian是实对称矩阵,只需算上三角部分即可;第二,它的正定性直接告诉我们地形是“碗”还是“马鞍”——正定意味着你站在局部最低点,负定意味着局部最高点,既不正定也不负定则可能是马鞍点。这正是牛顿法和很多优化算法判断收敛方向的依据。
大厨给徒弟打了个比方:“Jacobian告诉你'这把盐会把汤变咸',Hessian告诉你'如果再放点糖,盐的咸味反而会被压下去'。真正的高手,不仅要懂单味料的力度,更要懂调料之间的化学反应。”
- 先求梯度把标量函数 $f$ 对每个变量求一阶偏导,排成梯度向量 $\nabla f$。
- 再对梯度求Jacobian把梯度向量视为输出,对输入变量逐元素求一阶偏导,得到二阶偏导矩阵。
- 利用对称性光滑条件下混合偏导与求导顺序无关,因此 $H_{ij}=H_{ji}$,矩阵对称,写代码时可以只算一半。
迹技巧求导
通常我们遇到的情况是:输入是一整块“配料表”(矩阵 $X$),但输出只有一个“总评分”(标量 $f$)。比如神经网络的损失函数对权重矩阵求导就是这种情形。这时该怎么定义“矩阵导数”?林大厨的经验是:先不要直接想“除以$dX$”,而是先求$df$——把“评分变化量”写成 $\mathrm{tr}(B\,dX)$ 的形式。由于迹(矩阵对角线之和)满足 $\mathrm{tr}(AB)=\mathrm{tr}(BA)$ 和 $\mathrm{tr}(A^T B)=\sum_{ij}A_{ij}B_{ij}$,它天然地把“矩阵内积”变成了标量,于是矩阵求导就被转换成了“从$df$中读出梯度$B^T$”的机械操作,这就是迹技巧。
这套技巧的威力在经典公式中展露无遗。对可逆矩阵 $X$,对数行列式 $\ln\det X$ 对 $X$ 的导数是 $X^{-T}$——这个公式在多元高斯分布的极大似然估计中反复出现。推导的思路是:先写出矩阵微分 $d\ln\det X=\mathrm{tr}(X^{-1}dX)$,再与标准形式 $\mathrm{tr}((\partial f/\partial X)^T dX)$ 对比,读出梯度。整个过程不需要展开行列式的一堆项,仅靠几条迹运算规则就能直取结果。
大厨把这招比作“称重法”:他不去数每粒盐,而是把整袋盐往秤上一放,用总重量倒推袋子里盐的分布。迹技巧就是那个“秤”——把矩阵级别的复杂变化,浓缩成一个标量信号,干净利落地读出梯度。
- 写出矩阵微分对 $\ln\det X$ 取微分,结果是一个迹表达式,这是行列式微分的经典结论。
- 对照标准形式若 $df=\operatorname{tr}\left(B^T dX\right)$,则梯度为 $B$。这里 $B^T=X^{-1}$,于是 $B=X^{-T}$。
- 读出梯度将 $B^T=X^{-1}$ 两边转置,得到结论 $\frac{\partial \ln\det X}{\partial X}=X^{-T}$。
链式法则
味觉的传递是分步骤的:先切菜、再下锅、后调味,每一步都改变下一步的输入。当最终评分对最上游一步求导时,林大厨不会直接“跳回去”,而是一段一段地接力:先算评分对调味料的偏导,再算调味料对火候的偏导,最后乘起来。在矩阵微积分里,这套接力变成了一句漂亮的话——复合函数的Jacobian等于各段Jacobian的矩阵乘积。
具体来说,设 $\boldsymbol{y}=\boldsymbol{f}(\boldsymbol{x})$,$\boldsymbol{z}=\boldsymbol{g}(\boldsymbol{y})$,则复合函数 $\boldsymbol{z}=\boldsymbol{g}\circ\boldsymbol{f}$ 对 $\boldsymbol{x}$ 的Jacobian为:
大厨提醒徒弟:“链式法则最容易错的地方不是公式,而是顺序和维度。先看两个矩阵能不能乘起来,就像先看两道工序能不能衔接——切好的菜才能下锅,顺序反了,菜就糊了。”
- 识别中间变量把复合函数拆成两条信息流——$\boldsymbol{x}\to\boldsymbol{y}$ 由 $f$ 实现,$\boldsymbol{y}\to\boldsymbol{z}$ 由 $g$ 实现。
- Jacobian乘法连接每条信息流对应一个Jacobian矩阵,链式法则要求它们按“先内后外”的顺序相乘。
- 检验维度若 $\boldsymbol{x}\in\mathbb{R}^n,\boldsymbol{y}\in\mathbb{R}^p,\boldsymbol{z}\in\mathbb{R}^m$,则 $J_{\boldsymbol{g}}$ 是 $m\times p$,$J_{\boldsymbol{f}}$ 是 $p\times n$,乘积是 $m\times n$——维度刚好咬合。
反向传播
反向传播听起来像高大上的算法,但林大厨一句话就点破了:“它就是链式法则带着'便签'跑了一遍。”前向传播时,每道工序的中间结果(比如每层网络的输出)都被记在一张便签上;反向传播时,最终评分(损失)对最后一层的误差信号开始,沿着计算图原路返回,每经过一道工序就利用链式法则更新便签——这就是误差信号 $\delta$ 的逐层传播。
在神经网络中,第 $l$ 层的误差信号 $\delta^{(l)}$ 由下游传来:下一层的误差 $\delta^{(l+1)}$ 经权重矩阵转置 $W^{(l+1)T}$ 映射回本层,再逐元素乘以激活函数的导数 $\sigma'(z^{(l)})$,这个 $\odot$ 表示逐元素相乘。一旦拿到 $\delta^{(l)}$,本层权重的梯度就是它与上一层激活的外积:$\frac{\partial L}{\partial W^{(l)}}=\delta^{(l)}(a^{(l-1)})^T$。整个过程,矩阵代替了繁琐的循环求和。
林大厨把这套反向追溯变成了他的独门心法:“做菜时每一步都要记得自己放了多少料,出了问题就倒着算账。前向传播是'做菜',反向传播是'复盘'——而矩阵微积分让复盘从一步步口头问话,变成了一张可以批量计算的流水账。”
- 定义误差信号$\delta^{(l)}$ 代表损失 $L$ 对第 $l$ 层线性输出 $z^{(l)}$ 的敏感度,是反向传播中传递的核心“便签”。
- 跨层传递下一层误差先被权重转置“映射回来”,再与激活函数导数逐元素相乘,完成链式法则的一跳。
- 权重梯度外积第 $l$ 层权重 $W^{(l)}$ 的梯度等于本层误差与上一层激活的外积,维度自动匹配。
神经网络应用
林大厨的厨房逐渐扩张,从一桌客人变成十桌同时开席。他不可能一桌一桌试菜,而是要对十桌的反馈做一次“批量总结”——这正是深度学习批量训练(mini-batch)的直觉。在神经网络中,矩阵微积分让批量梯度计算变得极其优雅。以两层全连接网络为例:输入 $\boldsymbol{x}\in\mathbb{R}^d$,隐藏层激活 $\boldsymbol{a}=\sigma(W_1\boldsymbol{x}+\boldsymbol{b}_1)$,输出 $\hat{\boldsymbol{y}}=W_2\boldsymbol{a}+\boldsymbol{b}_2$,损失取均方误差 $L=\tfrac12\|\hat{\boldsymbol{y}}-\boldsymbol{y}\|^2$。用矩阵形式的反向传播,几行代码就能得到所有权重的梯度。
进一步看,常见损失函数的梯度计算几乎都是“误差项 × 激活”的外积:MSE损失下输出层误差恰好是 $\hat{\boldsymbol{y}}-\boldsymbol{y}$;交叉熵配合softmax时,误差项也有同样简洁的形式。这就是为什么现代深度学习框架都能自动求梯度——它们把Jacobian的计算封装成了基础算子,而用户只需要组织好前向计算图。验证梯度正确性最直接的方法是与数值梯度(有限差分)对比:对每个参数施加微小扰动,用 $(f(\theta+\epsilon)-f(\theta-\epsilon))/2\epsilon$ 近似导数,再与反向传播结果比对,误差应在 $10^{-6}$ 量级。
林大厨把神经网络调参的秘诀浓缩成一句话:“所谓训练,就是拿着Jacobian这张敏感度表,反复回答'哪个权重对损失影响最大';而所谓调参直觉,就是知道误差信号在每一层会怎样变形、怎样流动。”
- 输出层梯度MSE损失对输出层权重的梯度,等于输出误差向量与隐藏层激活向量的外积。
- 隐藏层误差输出误差经 $W_2^T$ 回传,再逐元素乘以 $\boldsymbol{a}(1-\boldsymbol{a})$(即sigmoid的导数),得到隐藏层误差。
- 输入层梯度隐藏层误差与输入向量的外积,得到 $W_1$ 的梯度——它同样是“误差×上游激活”的矩阵形式。
优化与牛顿法
最后一步,林大厨要决定“该往哪个方向走”。梯度下降的策略很朴素:顺着最陡的下坡路走,每步只依赖一阶导数(梯度/Jacobian)——这就像盲人下山,只靠手杖试探脚下的坡度。牛顿法则不同:它在每个位置不仅看坡度,还要感受地面的“弯曲程度”(Hessian),据此预测坡度还会怎么变化,然后直接朝预测的最低点迈步。更新公式是 $x_{t+1}=x_t-H^{-1}\nabla f$——对二次型损失,牛顿法一步就能到达最优点,这是可视化演示中绿色轨迹直线入底的原因。
当然,牛顿法不是免费的:每步都要计算 $n\times n$ 的Hessian并求逆,在神经网络这种动辄上百万参数的问题上代价极高。于是出现了拟牛顿法(BFGS、L-BFGS等),它们不直接算Hessian,而是利用梯度差逐渐“逼近”曲率信息,相当于大厨凭经验估算“这锅汤大概还要炖多久”,不必每步精确测量。这些算法共同构成了机器学习优化的工具箱:一阶方法稳健但可能慢,二阶方法快速但昂贵,而理解Jacobian与Hessian,正是权衡这套工具箱的钥匙。
大厨的收官教导是:“下山的智慧不在于走得快,而在于知道路会怎么变。Jacobian告诉你眼前的路通向哪,Hessian告诉你这条路会不会突然拐弯。两者齐备,你才敢大步流星地走向锅底。”深度学习与最优化,说到底就是一场精心策划的下山之旅。
- 取当前位置第 $t$ 步的参数向量 $\boldsymbol{x}_t$ 作为起点,评估该点的梯度 $\nabla f$ 与曲率信息 $H$。
- 求解校正方向用Hessian的逆左乘梯度,得到“曲率校正后”的更新方向 $H^{-1}\nabla f$,这一步相当于把倾斜的等高线“掰正”。
- 更新参数沿校正方向移动一步,得到新参数;对二次函数,这一步恰好到达最优点。
AI 应用场景
深度学习框架的自动微分引擎
阶段:模型训练 / 梯度计算
解决的问题:手推每个权重矩阵的导数既易错又耗时,尤其在深层网络中,逐层手写Jacobian几乎不可维护。PyTorch、TensorFlow等框架基于“计算图 + 反向传播”的矩阵形式,自动执行链式法则,让训练速度与正确性都得到保障。
具体案例:数据科学家在PyTorch中定义一个三层的MLP,调用 loss.backward() 后,每个参数的 .grad 属性立即获得矩阵形式的梯度。框架内部正是用误差信号 $\delta$ 的逐层回传与外积公式完成计算,与林大厨“倒着复盘每道工序”如出一辙。
牛顿法与拟牛顿法在模型优化中的应用
阶段:参数优化 / 收敛加速
解决的问题:标准梯度下降在病态曲率下收敛缓慢(如可视化演示中的红点路径),而牛顿法利用Hessian提供的曲率信息能显著加速收敛。在中小规模模型(如逻辑回归、高斯过程)上,BFGS/L-BFGS等拟牛顿法在每步只估计曲率的情况下,就能获得接近牛顿法的收敛速度。
具体案例:在Scikit-learn中训练逻辑回归时,设置 solver='lbfgs',底层通过拟牛顿法优化对数似然损失;在SLAM后端优化中,高斯-牛顿法利用近似Hessian实现相机位姿的快速估计,让机器人实时定位成为可能。
数值梯度验证保证反向传播正确性
阶段:模型调试 / 梯度检查
解决的问题:自行实现自定义神经网络层或损失函数时,反向传播代码中的矩阵维度、转置、逐元素运算极易出错。用有限差分法对比解析梯度与数值梯度,能在单元测试阶段发现Jacobian传递中的bug。
具体案例:研究员实现一个自定义的归一化层后,对每个参数施加 $\pm\epsilon$ 扰动计算数值梯度,并与反向传播梯度对比,若最大误差超过 $10^{-5}$ 则说明矩阵形式推导中的某一步转置或乘法顺序有误——这正是本文Python演示所做的事。
Python 演示
import numpy as np def sigmoid(z): return 1.0 / (1.0 + np.exp(-z)) def forward(x, W1, b1, W2, b2): a1 = sigmoid(W1 @ x + b1) out = W2 @ a1 + b2 return a1, out def loss_mse(out, y): return 0.5 * float(np.sum((out - y) ** 2)) def backprop(x, y, W1, b1, W2, b2): a1, out = forward(x, W1, b1, W2, b2) dL_dout = out - y grad_W2 = np.outer(dL_dout, a1) grad_b2 = dL_dout delta1 = W2.T @ dL_dout * a1 * (1.0 - a1) grad_W1 = np.outer(delta1, x) grad_b1 = delta1 return grad_W1, grad_b1, grad_W2, grad_b2 np.random.seed(42)d, h, n = 4, 3, 2x = np.random.randn(d)y = np.random.randn(n)W1 = np.random.randn(h, d) * 0.5b1 = np.zeros(h)W2 = np.random.randn(n, h) * 0.5b2 = np.zeros(n) def numerical_grad(func, param, i, j): p = param.copy() p[i, j] += 1e-6 fp = func(p) p[i, j] -= 2e-6 fm = func(p) return (fp - fm) / (2e-6) num_W1 = np.zeros_like(W1)for i in range(h): for j in range(d): def loss_for_W1(W): tmp = W1[i, j] W1[i, j] = W _, out = forward(x, W1, b1, W2, b2) W1[i, j] = tmp return loss_mse(out, y) num_W1[i, j] = numerical_grad(loss_for_W1, W1, i, j) num_W2 = np.zeros_like(W2)for i in range(n): for j in range(h): def loss_for_W2(W): tmp = W2[i, j] W2[i, j] = W _, out = forward(x, W1, b1, W2, b2) W2[i, j] = tmp return loss_mse(out, y) num_W2[i, j] = numerical_grad(loss_for_W2, W2, i, j) gW1, gb1, gW2, gb2 = backprop(x, y, W1, b1, W2, b2)print("W1 梯度最大误差:", np.max(np.abs(gW1 - num_W1)))print("W2 梯度最大误差:", np.max(np.abs(gW2 - num_W2)))
a1 = sigmoid(W1 @ x + b1)前向传播第一跳:输入向量经过权重矩阵线性变换,再套上sigmoid激活函数,得到隐藏层激活。dL_dout = out - yMSE损失的梯度极简:输出误差恰好等于预测与真实值的差,这就是“误差信号”的起点。grad_W2 = np.outer(dL_dout, a1)矩阵形式的链式法则:输出层误差与隐藏层激活的外积,即 $\frac{\partial L}{\partial W_2}=\delta\,\boldsymbol{a}^T$。delta1 = W2.T @ dL_dout * a1 * (1.0 - a1)误差经权重转置回传,再逐元素乘sigmoid导数,得到隐藏层的“责任”信号。grad_W1 = np.outer(delta1, x)隐藏层梯度同样是“误差×上游激活”的外积,两张权重表的梯度形式完全同构。p[i, j] += 1e-6有限差分:只扰动矩阵中一个元素,观察损失变化,属于数值层次的“单一调料试验”。
常见误区
误区“Jacobian和Hessian都是矩阵,那它们应该都是方阵吧?反正我见过的都是方阵,求行列式很方便。”
正解Jacobian的维度由输入和输出的个数共同决定。只要输入是 $n$ 维、输出是 $m$ 维,Jacobian就是 $m\times n$ 的矩形矩阵;只有当 $m=n$ 时它才是方阵,此时才谈得上雅可比行列式。神经网络中一层映射(如64维输入到128维输出)的Jacobian就是 $128\times64$ 的矩形,而非方阵。
为何常见:教科书常以 $n\times n$ 的可逆映射为例介绍雅可比行列式,导致初学者把“特例”当成了“定义”。
误区“反正最优点附近Hessian都是正定的,那Hessian应该总是可逆、总能求逆吧?”
正解Hessian的正定性只在“严格局部极小点”处成立,且要求函数二阶连续可微。在鞍点处Hessian既有正特征值也有负特征值;在平坦区域它可能是半正定的(存在零特征值),此时不可逆,牛顿法会失效。正定性是一个需要验证的条件,而不是Hessian与生俱来的属性。
为何常见:很多优化教材在讨论“收敛到局部最优”时都假设Hessian正定,读者长期处于这种理想环境中,容易把假设当成结论。
误区“$\frac{\partial y}{\partial x}$ 是除法,那 $\frac{\partial \boldsymbol{y}}{\partial X}$ 不就是矩阵除以矩阵吗?直接约掉就行。”
正解矩阵没有除法运算,矩阵微积分中“除以 $dX$”不是字面意义的除法。正确路径是:先求矩阵微分 $df$,写成 $\mathrm{tr}(B\,dX)$ 的形式,再读出梯度 $B^T$。所谓 $\frac{\partial f}{\partial X}$ 只是“梯度”的记法符号,背后的运算依赖矩阵微分规则和迹的性质,不能随意约分。
为何常见:标量微积分中 $\frac{dy}{dx}$ 确实可以当作微小量的比值,这种直觉被强行搬到矩阵上就失效了。
误区“反向传播是深度学习的专属算法,和微积分里的链式法则没什么关系,它是另一套东西。”
正解反向传播在数学上就是链式法则本身,它的工程价值在于:让梯度在前向传播的“便签”(中间结果)上依次相乘,避免了重复计算。误差信号 $\delta$ 的递推公式 $\delta^{(l)}=(W^{(l+1)})^T\delta^{(l+1)}\odot\sigma'(z^{(l)})$ 正是链式法则的矩阵写法。它没有引入新的数学,而是用动态规划让链式法则在深层网络中变得可计算。
为何常见:框架封装了 backward() 后,使用者只看见“调用即得梯度”,看不到底层逐层求导的展开过程,便误以为这是某种黑魔法。
面试题
Q1. 设 $f:\mathbb{R}^n\to\mathbb{R}^m$,其Jacobian矩阵的维度是?
- A.$n \times m$ 的矩阵
- B.$m \times n$ 的矩阵← 正确答案
- C.$n \times n$ 的方阵
- D.$m \times m$ 的方阵
答案:B。Jacobian的行数等于输出维度 $m$,列数等于输入维度 $n$,因此是 $m\times n$ 矩阵。只有 $m=n$ 时才是方阵,A选项刚好把行列弄反了。
Q2. 光滑函数 $f$ 的Hessian矩阵为什么是实对称的?
- A.因为梯度一定光滑且连续
- B.因为二阶偏导的次序可以交换← 正确答案
- C.因为Hessian一定是正定矩阵
- D.因为一阶导数都是非零数值
答案:B。对二阶连续可微的函数,混合偏导与求导顺序无关:$\partial^2f/\partial x_i\partial x_j=\partial^2f/\partial x_j\partial x_i$,这直接推出 $H_{ij}=H_{ji}$。A是光滑性的表述而非对称性原因,C是特殊情形下的性质,D与对称性无关。
Q3. 设标量函数 $f(x)=a^Tx$,则列向量形式的梯度 $\nabla f$ 等于?
- A.常数标量 $a$
- B.全零向量 $\mathbf{0}$
- C.列向量 $a$← 正确答案
- D.行向量 $a^T$
答案:C。$a^Tx=\sum_i a_ix_i$,对 $x_i$ 求偏导得 $a_i$,所以梯度就是向量 $a$ 本身。A选项混淆了标量与向量的区别;D选项是分子布局下的行向量记法,与列向量梯度约定相反。
Q4. 设 $f=\mathrm{tr}(A^TX)$,则 $\frac{\partial f}{\partial X}$ 等于?
- A.常数矩阵 $A$← 正确答案
- B.矩阵 $A^T$
- C.单位矩阵 $I$
- D.零矩阵 $O$
答案:A。由 $df=\mathrm{tr}(A^T dX)$ 与标准形式 $df=\mathrm{tr}((\partial f/\partial X)^T dX)$ 对比,可知 $(\partial f/\partial X)^T=A^T$,即 $\partial f/\partial X=A$。这是迹技巧最基础的应用,B选项少了转置对比这一步。
Q5. 在分子布局约定下,标量函数 $f:\mathbb{R}^n\to\mathbb{R}$ 的梯度与Jacobian的关系是?
- A.梯度列向量等于Jacobian矩阵
- B.梯度行向量等于Jacobian矩阵← 正确答案
- C.梯度与Jacobian没有任何关系
- D.Hessian等于梯度的逆矩阵
答案:B。分子布局下,标量函数的Jacobian定义为 $1\times n$ 的行向量,而梯度列向量是其转置。因此“梯度行向量等于Jacobian”正确。A把分母布局的梯度拿来比较,C忽视了两者本质都来自一阶偏导,D混淆了Hessian与梯度的关系。
Q6. 关于Hessian矩阵,下列说法正确的是?
- A.它等于梯度的Jacobian← 正确答案
- B.正定Hessian对应局部极小← 正确答案
- C.Hessian的逆总是低秩的
- D.负定Hessian对应局部极小
答案:AB。Hessian正是梯度向量再次求Jacobian的结果;正定意味着所有方向二阶偏导为正,局部呈碗形,对应极小值。C错误:Hessian可逆时逆矩阵是满秩的;D错误:负定对应的是局部极大值。
Q7. 相比仅使用梯度的梯度下降,牛顿法的特点有哪些?
- A.利用Hessian曲率信息加快收敛← 正确答案
- B.每步需要计算Hessian的逆← 正确答案
- C.对任何函数都能收敛到最优点
- D.完全不需要计算梯度信息
答案:AB。牛顿法用 $H^{-1}\nabla f$ 做更新方向,同时利用一阶梯度与二阶曲率,在病态条件下比梯度下降更快。代价是每步要构造并求逆Hessian。C错误:非凸函数或初始点不当时牛顿法可能发散;D错误:梯度是牛顿法更新公式的必要部分。
Q8. 反向传播中误差信号 $\delta^{(l)}=(W^{(l+1)})^T\delta^{(l+1)}\odot\sigma'(z^{(l)})$,符号 $\odot$ 表示?
- A.矩阵乘法运算
- B.逐元素乘法运算← 正确答案
- C.矩阵加法运算
- D.矩阵求逆运算
答案:B。$\odot$ 是Hadamard积,即两个同形状矩阵对应元素相乘。它用于将回传的线性误差与激活函数的逐元素导数相乘,从而完成链式法则中的“逐神经元”缩放。A选项的矩阵乘法在这里维度不匹配。
Q9. 若 $f(x,y)=x^2y$,则偏导数 $\frac{\partial f}{\partial x}$ 等于?
- A.$x^2$ 这一个式
- B.$2xy$ 这一个式← 正确答案
- C.$2y$ 这一个式
- D.$y^2$ 这一个式
答案:B。求 $\partial f/\partial x$ 时把 $y$ 当作常数,$x^2y$ 对 $x$ 求导得 $2xy$。A选项是忽略了 $\frac{d}{dx}x^2=2x$ 的链式因子;C选项是忘记保留 $y$;D选项是混淆了变量角色,实际对应 $f=x^2y$ 对 $y$ 的二阶偏导才会出现。
Q10. 关于矩阵微积分中的链式法则与反向传播,正确的有?
- A.复合函数的Jacobian是各段Jacobian之积← 正确答案
- B.反向传播本质是链式法则的复用← 正确答案
- C.链式法则要求所有矩阵必须为方阵
- D.维度匹配是推导中的关键检查手段← 正确答案
答案:ABD。$J_{g\circ f}=J_gJ_f$,这是矩阵形式的链式法则;反向传播通过记忆中间结果高效执行这条法则,故B正确;维度检验是判断矩阵乘法顺序是否写反的第一道防线,D正确。C错误:Jacobian是 $m\times n$ 矩形矩阵也可以相乘,只要中间维度匹配,不需要方阵。