想象你是一名野外勘探专家,带队走进一片从未绘制过地图的丘陵。任务只有一个:找到这片区域的谷底。你不能飞,只能靠脚一步一步测量。第一件装备是一枚坡度仪——把它放在脚边,指针会指向最陡的下坡方向,这就是梯度。接着你发现,想同时弄清海拔、温度和湿度随位置的变化关系,光有单根指针不够,你需要一张联动表——每个旋钮对应的读数变化都列在上面,这就是雅可比矩阵。最后,你还想预判前方地形是凹下去的小碗还是凸起来的山包,决定该大步冲还是小步探,于是你需要第二件探测器来感知凹凸与曲率——这就是海森矩阵。这三件装备看似独立,其实是同一套“变化测量学”从一阶到二阶、从标量到向量的层层升级。读完这篇文章,你就能把三者装进一张清晰的关系地图里。

岗位关联

这是深度学习优化、机器人控制等 AI 岗位的数学地基。面试时把梯度、雅可比、海森的关系讲清楚,往往比背十个模型结构更能证明你的理论功底。

目录
  1. 可视化演示
  2. 梯度向量
  3. 雅可比矩阵
  4. 海森矩阵
  5. 三者关系
  6. 几何直觉
  7. 优化应用
  8. 场景选择
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

分步演示梯度(一阶标量导数向量)、雅可比(向量函数一阶导数矩阵)、海森(二阶偏导矩阵)三者的定义、结构差异与层级关系。

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

梯度:一阶导数向量 箭头指向函数值增长最快方向 采样点处梯度向量指向远离最小值 ∇f=[∂f/∂x₁,...,∂f/∂xₙ] 梯度是标量函数的一阶偏导数组成的向量

梯度向量

探险队到达第一个测点。你掏出坡度仪,把它平放在草地上,指针立刻指向某个方向——那是海拔抬升最快的方向。稍微转动仪器,指针会跟着改变;放在不同的位置,指向也不一样。这支“会指路的箭头”,就是梯度给我们的第一印象:它是一个向量,带着方向和大小。

在数学里,我们面对的不一定是山丘,而是一个多元标量函数 f(x₁, x₂, …, xₙ),比如海拔高度随经纬度变化的函数。想要知道某个点往哪个方向走变化最快,就要分别问:单独动 x₁ 时,f 变化多快?单独动 x₂ 呢?这些“单独变化率”就是偏导数。把它们按变量顺序排成一个向量,就得到了梯度。

梯度的定义式如下:

回到探险队的场景:坡度仪不但告诉你要往哪走,还会用指针偏转的幅度告诉你这坡有多陡。梯度也是一样——方向对应指针朝向,模长对应刻度摆动大小。有了它,你就有了下山的第一步策略:沿着负梯度方向走,一定能最快降低海拔。

∇f(x)=(∂f∂x1, ∂f∂x2, ⋯ , ∂f∂xn)\nabla f(\mathbf{x}) = \left( \frac{\partial f}{\partial x_1},\ \frac{\partial f}{\partial x_2},\ \cdots,\ \frac{\partial f}{\partial x_n} \right)
梯度是一个由 n 个一阶偏导组成的向量,它指向 f 增长最快的方向;它的模长表示这个方向上的变化率。
  1. Nabla 符号∇ 读作 nabla(纳布拉),它像一个“矢量求导操作符”,专门作用于多元函数。
    ∇f\nabla f
  2. 偏导数$\displaystyle\frac{\partial f}{\partial x_i}$ 表示保持其他变量不变,只让 xᵢ 变化时 f 的变化快慢。它是梯度的第 i 个零件。
    ∂f∂xi\frac{\partial f}{\partial x_i}
  3. 拼接成向量把 n 个偏导按变量顺序用逗号连接,组成 n 维向量,这就是梯度的完整形态。
    (∂f∂x1, ∂f∂x2, ⋯ , ∂f∂xn)\left( \frac{\partial f}{\partial x_1},\ \frac{\partial f}{\partial x_2},\ \cdots,\ \frac{\partial f}{\partial x_n} \right)

雅可比矩阵

探险继续进行。你发现单纯一个海拔读数不够用:营地的选择还要考虑温度、湿度、坡度三个指标。而且你移动时,脚往前迈一步,三个读数会同时变化。这时单根的指针就忙不过来了,你需要一块“联动仪表盘”:表格的每一行对应一个输出读数,每一列对应一个输入方向的脚步变化,格子里填的就是“动这个输入,那个输出会变多少”。

这块表格在数学上有严格定义。当输入是 n 个变量,输出是 m 个函数时,我们把每个输出函数对每个输入变量求偏导,得到一个 m 行 n 列的矩阵,这就是雅可比矩阵。它是“向量函数的导数”——如果说普通导数是“标量对标量”的变化率,雅可比就是“向量对向量”的全套变化率。

回到营地选址:雅可比矩阵就是那张“多旋钮 × 多仪表”的对照表。往后你在机器人控制里会看到,关节转动速度和机械臂末端移动速度之间的换算,靠的正是这张表。它是梯度的自然推广——当输出只有一个时,雅可比就退化成一行,也就是梯度的转置。

J=[∂f1∂x1⋯∂f1∂xn⋮⋱⋮∂fm∂x1⋯∂fm∂xn]\mathbf{J} = \begin{bmatrix} \displaystyle\frac{\partial f_1}{\partial x_1} & \cdots & \displaystyle\frac{\partial f_1}{\partial x_n} \\ \vdots & \ddots & \vdots \\ \displaystyle\frac{\partial f_m}{\partial x_1} & \cdots & \displaystyle\frac{\partial f_m}{\partial x_n} \end{bmatrix}
雅可比矩阵的每个元素都是某个输出函数对某个输入变量的偏导数;第 i 行第 j 列表示第 i 个输出对第 j 个输入的敏感度。
  1. 向量函数F(x) = (f₁(x), f₂(x), …, fₘ(x)) 表示同时输出 m 个结果,通常 x 有 n 个分量。
    F(x)=(f1, f2, ⋯ , fm)\mathbf{F}(\mathbf{x}) = (f_1,\ f_2,\ \cdots,\ f_m)
  2. 逐元素求偏导把每个输出 fᵢ 对每个输入 xⱼ 求偏导,得到 \(\dfrac{\partial f_i}{\partial x_j}\),它是矩阵第 i 行第 j 列的元素。
    ∂fi∂xj\frac{\partial f_i}{\partial x_j}
  3. 排成矩形阵列m 个输出、n 个输入,所以矩阵维度是 m×n;当 m = n 时它是方阵,可以讨论行列式、特征值等性质。
    J∈Rm×n\mathbf{J} \in \mathbb{R}^{m \times n}

海森矩阵

坡度仪能告诉你“现在有多陡”,却没法告诉你“再往前走一步会不会更陡”。探险队需要弯腰蹲下,用手摸一摸地面:如果掌心感到地面向上顶,这是凸的;如果向下凹,这是凹的。这种“对坡度的再感知”,就是二阶导数的直觉——曲率。

把这种想法数学化:我们已经有梯度这个一阶向量,那如果把梯度的每个分量再对每个变量求一次偏导呢?你会得到一个 n×n 的矩阵,每个元素都是二阶偏导,这就是海森矩阵。它描述的是“梯度的变化率”,也就是曲面的弯曲程度。

探险队靠“摸地面”预判前方地形:如果手指扫过感到处处向上顶,说明这里是个碗状凹地,朝任何方向走都会先上升再回来,这正是我们要找的谷底标志。海森矩阵做的,就是把这个“手感”量化成一张曲率分布表。

H=[∂2f∂x12⋯∂2f∂x1∂xn⋮⋱⋮∂2f∂xn∂x1⋯∂2f∂xn2]\mathbf{H} = \begin{bmatrix} \displaystyle\frac{\partial^2 f}{\partial x_1^2} & \cdots & \displaystyle\frac{\partial^2 f}{\partial x_1 \partial x_n} \\ \vdots & \ddots & \vdots \\ \displaystyle\frac{\partial^2 f}{\partial x_n \partial x_1} & \cdots & \displaystyle\frac{\partial^2 f}{\partial x_n^2} \end{bmatrix}
海森矩阵由函数的所有二阶偏导组成。在二阶偏导连续的前提下,混合偏导与求导顺序无关,因此海森矩阵是对称的。
  1. 二阶偏导\(\dfrac{\partial^2 f}{\partial x_i^2}\) 表示只沿 xᵢ 方向求两次导数,衡量该方向上的弯曲程度。
    ∂2f∂xi2\frac{\partial^2 f}{\partial x_i^2}
  2. 混合偏导\(\dfrac{\partial^2 f}{\partial x_i \partial x_j}\) 表示先对 xᵢ 求导、再对 xⱼ 求导的结果。光滑函数中,它与求导顺序无关。
    ∂2f∂xi∂xj=∂2f∂xj∂xi\frac{\partial^2 f}{\partial x_i \partial x_j} = \frac{\partial^2 f}{\partial x_j \partial x_i}
  3. 对称矩阵上述等式让 H 的第 i 行第 j 列等于第 j 行第 i 列,因此海森矩阵天然对称,存储时只需保存上三角。
    H=H⊤\mathbf{H} = \mathbf{H}^{\top}

三者关系

现在把三件装备摆在桌上:坡度仪(梯度)、联动仪表盘(雅可比)、凹凸探测器(海森)。它们到底是什么关系?其实,你完全可以看成同一种“求导操作”在不同层次上的应用。梯度作用的对象是标量函数 f,输出一个向量;雅可比作用的对象是向量函数 F,输出一个矩阵;而海森,就是把梯度这个向量函数再求一次雅可比。

用公式表达,三者是一条严密的链条:

链条一旦打通,三件装备就不再是散装工具,而是同一套探测系统。探险队拿着坡度仪测出方向,看到联动表知道各指标如何互相牵扯,再用凹凸探测器判断前方该不该加速。三者配合,就是完整的“地形认知系统”。

∇f(x)=J(f)(x),H(f)(x)=J(∇f)(x)\nabla f(\mathbf{x}) = \mathbf{J}(f)(\mathbf{x}), \qquad \mathbf{H}(f)(\mathbf{x}) = \mathbf{J}(\nabla f)(\mathbf{x})
梯度是标量函数 f 的雅可比矩阵的特殊形式(m=1);海森是梯度向量函数的雅可比。这就是“海森是梯度的雅可比”这句话的来历。
  1. 梯度是雅可比的特例当输出只有 f 一个时,雅可比是 1×n 的行向量,转置后就是梯度。
    J(f)=[∂f∂x1⋯∂f∂xn]=(∇f)⊤\mathbf{J}(f) = \begin{bmatrix} \displaystyle\frac{\partial f}{\partial x_1} & \cdots & \displaystyle\frac{\partial f}{\partial x_n} \end{bmatrix} = (\nabla f)^{\top}
  2. 海森是梯度的雅可比把梯度看成向量函数,再对它求雅可比,得到的 n×n 矩阵恰好是全部二阶偏导。
    H=J(∇f)\mathbf{H} = \mathbf{J}(\nabla f)
  3. 信息层级递进梯度是一阶信息、m=1 的雅可比;海森是二阶信息、梯度的雅可比;三者共用同一套偏导语言。
    f→ ∂ ∇f→ ∂ Hf \xrightarrow{\ \partial\ } \nabla f \xrightarrow{\ \partial\ } \mathbf{H}

几何直觉

把三件装备放到同一张等高线地图上读图。等高线是海拔相同点的连线,疏密表示坡度大小。坡度仪的指针(梯度)有个漂亮的性质:它总是垂直于等高线,指向数值升高的方向。凹凸探测器(海森)则告诉你等高线弯曲的形态——是收拢成椭圆,还是散开成马鞍。

这一切都能用二次型解释。假设你在点 x 附近做一个小的扰动向量 d,函数值的变化量可以用二阶泰勒展开近似。其中关键的二次项 \(d^{\top} \mathbf{H} d\) 的正负,直接决定这个小邻域内的凹凸形态:

探险队在地图上眯起眼:等高线越密,梯度越大;等高线呈同心椭圆,谷底就在中心;若等高线像蝴蝶翅膀一样交叉张开,那是个鞍点——看似低处,实则左右是山脊、前后是山谷。有了这套读图能力,你就能在头脑中“看见”地形。

f(x+d)≈f(x)+∇f⊤d+12d⊤Hdf(\mathbf{x} + \mathbf{d}) \approx f(\mathbf{x}) + \nabla f^{\top} \mathbf{d} + \frac{1}{2} \mathbf{d}^{\top} \mathbf{H} \mathbf{d}
二阶项 \(d^{\top} H d\) 是“方向 d 上的曲率”。它对任意 d 都为正时,海森正定,曲面局部像碗;都为负时局部像倒扣的碗;有正有负时是马鞍面。
  1. 一阶项\(\nabla f^{\top} \mathbf{d}\) 表示沿 d 方向移动时,函数值因坡度产生的线性变化。
    ∇f⊤d\nabla f^{\top} \mathbf{d}
  2. 二阶项\(\dfrac{1}{2} \mathbf{d}^{\top} \mathbf{H} \mathbf{d}\) 是弯曲修正,它告诉你线性近似在哪个方向偏乐观、哪个方向偏悲观。
    12d⊤Hd\frac{1}{2} \mathbf{d}^{\top} \mathbf{H} \mathbf{d}
  3. 正定判别若对所有非零 d 都有 \(d^{\top} H d > 0\),则该点附近是极小值点;若恒小于 0 是极大值点;若符号不定则是鞍点。
    d⊤Hd>0⇒局部极小\mathbf{d}^{\top} \mathbf{H} \mathbf{d} > 0 \quad \Rightarrow \quad \text{局部极小}

优化应用

下山策略之争开始了。老队员主张“走一步看一步”:每次都用坡度仪找当前最陡的下坡方向,迈出一小步,再重新测量。这就是梯度下降法——它只用到一阶信息,每一步都保证局部下降,但路径常呈锯齿状。新队员则主张“先读全图再动身”:用凹凸探测器算出海森矩阵,直接判断谷底在哪条曲线上,一步抄近路。这就是牛顿法——它用到了二阶信息,对二次函数能一步到达极值点。

两条策略对应两个经典更新公式。梯度下降是沿着负梯度方向按学习率 η 迈步;牛顿法则用海森的逆矩阵去修正梯度方向,相当于把弯曲的地形“拉直”再走:

回到探险队:老队员一步一停,在椭圆形的山谷里走出锯齿线,虽然方向一直朝着谷底,但横向震荡浪费了不少路程;新队员读完地形直接迈一大步,准确落在谷底。可视化的动画演示的正是这一幕——红色锯齿是梯度下降,绿色直线是牛顿法。

xk+1=xk−η∇f(xk)\mathbf{x}_{k+1} = \mathbf{x}_k - \eta \nabla f(\mathbf{x}_k)
xk+1=xk−Hk−1∇f(xk)\mathbf{x}_{k+1} = \mathbf{x}_k - \mathbf{H}_k^{-1} \nabla f(\mathbf{x}_k)
梯度下降只关心“脚下最陡”,牛顿法额外利用海森矩阵的曲率信息,直接把下降方向指向极值点。代价是每步都要计算和求逆海森矩阵。
  1. 梯度下降步\(\mathbf{x}_{k+1} = \mathbf{x}_k - \eta \nabla f(\mathbf{x}_k)\),向负梯度方向前进,步长由学习率 η 控制。
    xk+1=xk−η∇f(xk)\mathbf{x}_{k+1} = \mathbf{x}_k - \eta \nabla f(\mathbf{x}_k)
  2. 牛顿修正\(-\mathbf{H}_k^{-1} \nabla f(\mathbf{x}_k)\) 是对梯度方向的“曲率校正”,沿着校正后的方向走更直。
    −Hk−1∇f(xk)-\mathbf{H}_k^{-1} \nabla f(\mathbf{x}_k)
  3. 收敛对比对二次函数,海森是常数矩阵,一步校正直达驻点;对一般函数,牛顿法通常在极值点附近二次收敛,远比梯度下降快。
    xk+1=xk−Hk−1∇f(xk)\mathbf{x}_{k+1} = \mathbf{x}_k - \mathbf{H}_k^{-1} \nabla f(\mathbf{x}_k)

场景选择

既然牛顿法更快,为什么大家不全用牛顿法?因为凹凸探测器很贵。海森矩阵有 n² 个元素,求逆要 O(n³) 计算量;参数是一亿的深度学习模型,海森矩阵存都存不下。这就好比探险队背着巨大的曲率扫描仪,地形是摸清了,但走到谷底前已经累垮了。

所以,选择哪件装备要看地形和预算。小规模、高精度的优化问题,比如几十个参数的数学建模,海森矩阵可以精确算出,牛顿法值得用;大规模机器学习,比如神经网络动辄百万千万参数,就采用梯度下降及其变种,或者用“拟牛顿法”(如 L-BFGS)只近似海森,用一阶信息配合少量二阶近似来平衡成本。这一切的根源,都藏在二阶泰勒展开里:

探险队最后总结出一条经验法则:人手有限、地形开阔时,坡度仪又快又便宜;地形复杂、目标精度极高时,才值得动用曲率扫描仪。理解这条取舍,你才算真正把梯度的“廉价”、雅可比的“联动”和海森的“精确”用在了刀刃上。

f(x+p)≈f(x)+∇f(x)⊤p+12p⊤H(x)pf(\mathbf{x} + \mathbf{p}) \approx f(\mathbf{x}) + \nabla f(\mathbf{x})^{\top} \mathbf{p} + \frac{1}{2} \mathbf{p}^{\top} \mathbf{H}(\mathbf{x}) \mathbf{p}
二阶项让优化器能预测“迈出一步后坡度会怎么变”,因此更聪明;但那多出来的 \(\frac{1}{2}p^\top H p\) 正是存储和计算成本的主要来源。
  1. 预测步长方向用 \(p\) 表示候选步长,泰勒展开把函数值拆成当前值、一阶斜率和二阶曲率三部分。
    f(x+p)f(\mathbf{x} + \mathbf{p})
  2. 斜率项\(\nabla f^{\top} \mathbf{p}\) 决定线性趋势,梯度下降只优化这一项。
    ∇f(x)⊤p\nabla f(\mathbf{x})^{\top} \mathbf{p}
  3. 曲率项\(\frac{1}{2} \mathbf{p}^{\top} \mathbf{H} \mathbf{p}\) 是二阶修正,牛顿法正是最小化这整个二次近似模型来选 p。
    12p⊤H(x)p\frac{1}{2} \mathbf{p}^{\top} \mathbf{H}(\mathbf{x}) \mathbf{p}

AI 应用场景

深度学习优化器:Adam 为什么“摸黑也能走稳”

阶段:模型训练与参数优化

解决的问题:大模型的参数动辄数十亿,海森矩阵完全无法计算。传统梯度下降在参数尺度差异大时震荡严重。Adam 用梯度的一阶矩(均值)估计方向、二阶矩(平方均值)估计每维的曲率尺度,巧妙地在不计算海森的前提下,近似出“每个方向该走多大步”。

具体案例:训练 70B 参数的 Llama 类大语言模型时,反向传播只给出每层参数的梯度,优化器根据梯度的历史矩动态调整每维学习率,让平坦方向的步长变大、陡峭方向的步长变小,训练稳定性显著提升。

机器人运动学:机械臂为什么要记住雅可比

阶段:机器人控制与运动规划

解决的问题:六自由度机械臂有六个关节角,末端执行器位置有三个坐标。想知道“每个关节转多快,末端会怎么动”,必须依靠雅可比矩阵这个从关节空间到任务空间的线性映射。传统逆运动学求解析解非常困难,有了雅可比就可以用伪逆做数值迭代。

具体案例:流水线上的机械臂抓取工件时,控制器每毫秒读取关节角度,计算雅可比矩阵,用 \(J^{\dagger}\)(雅可比伪逆)把末端的目标速度分解成六个关节的角速度指令,实现平滑跟踪。

Python 演示

python55 行
import numpy as np  class Quadratic:    """极小化 f(x) = 0.5 * x^T A x + b^T x    A 是正定对角阵,其海森矩阵恒等于 A。"""     def __init__(self, A, b):        self.A = np.array(A, dtype=float)        self.b = np.array(b, dtype=float)        self.H = self.A  # 海森矩阵是常数 A     def eval(self, x):        return 0.5 * x.dot(self.A).dot(x) + self.b.dot(x)     def gradient(self, x):        return self.A.dot(x) + self.b     def gradient_descent(self, x0, lr=0.14, tol=1e-6, max_iter=100):        x = x0.copy()        path = [x.copy()]        for _ in range(max_iter):            g = self.gradient(x)            if np.linalg.norm(g) < tol:                break            x = x - lr * g            path.append(x.copy())        return x, path     def newton(self, x0, tol=1e-6, max_iter=20):        x = x0.copy()        path = [x.copy()]        invH = np.linalg.inv(self.H)        for _ in range(max_iter):            g = self.gradient(x)            if np.linalg.norm(g) < tol:                break            x = x - invH.dot(g)            path.append(x.copy())        return x, path  if __name__ == "__main__":    A = [[2.0, 0.0], [0.0, 6.0]]    b = [0.0, 0.0]    model = Quadratic(A, b)    x0 = np.array([1.8, 1.0])     x_gd, path_gd = model.gradient_descent(x0, lr=0.14)    x_nt, path_nt = model.newton(x0)     print("梯度下降迭代步数:", len(path_gd))    print("梯度下降收敛点:", np.round(x_gd, 6))    print("牛顿法迭代步数:", len(path_nt))    print("牛顿法收敛点:", np.round(x_nt, 6))
目的:在同一个二次函数上对比梯度下降与牛顿法,直观展示“只靠一阶梯度会锯齿般慢走,借助海森矩阵一步到谷底”。
  1. self.H = self.A # 海森矩阵是常数 A二次函数的海森矩阵不随位置变化,因此实验最干净。
  2. def gradient(self, x):返回梯度向量 ∇f = Ax + b。
  3. x = x - lr * g梯度下降的核心更新:沿负梯度方向迈一小步。
  4. invH = np.linalg.inv(self.H)求出海森矩阵的逆,这是牛顿法昂贵但关键的一步。
  5. x = x - invH.dot(g)牛顿更新:用 \(H^{-1}\) 修正梯度方向。
  6. path.append(x.copy())记录每次迭代的位置,用于统计步数。

常见误区

误区我学一元微积分时导数就一个数,那梯度应该也是“求导出来的一个数”吧?看到 \(f'(x)\) 和 \(\nabla f\) 就觉得是一回事。

正解导数是一个标量,梯度是一个向量。梯度把“每个维度各自的变化率”打包在一起,既给方向又给大小。就像旅游手册只告诉你“气温在上升”,而山势报告会告诉你“向北走 30 度方向上升最快,坡度 15%”——后者才是梯度。如果函数输出还是多个值,那就要升级成雅可比矩阵了。

为何常见:绝大多数人先学一元函数再学多元函数,一元里的导数太深入人心,容易把“向量版的导数”和“标量的导数”画等号。

误区反正都是矩阵,里面都是偏导数,雅可比和海森应该只是名字不同吧?做题时看到矩阵就随便套。

正解两者层次完全不同。雅可比是向量函数的一阶偏导矩阵,形状是 m×n;海森是标量函数的二阶偏导矩阵,形状是 n×n。最干净的区分:海森是把梯度当向量函数后再求一次雅可比。好比“仪表盘”记录的是各旋钮对读数的直接影响,而“曲率表”记录的是这些影响本身的变化趋势,前者是一阶、后者是二阶。

为何常见:两者都是矩阵,入门时容易只看形式不看阶数,加上很多教材把海森直接写进雅可比的章节,导致混淆。

误区书上说海森矩阵对称,那我对任何函数算出来的海森都应该是 \(H_{ij} = H_{ji}\),不用检查。

正解对称性依赖“二阶偏导连续”这一条件(克莱罗定理)。绝大多数光滑函数满足,但分段函数、含绝对值或非光滑点的函数在个别点可能不满足。数值计算中,离散差分带来的舍入误差也会让矩阵出现轻微不对称。工程上常用 \((H + H^\top)/2\) 强制对称后再使用。

为何常见:教材为了简洁只讲光滑情况,初学者忽略了定理的前提假设。

误区梯度不是指向最陡下降方向吗?那一直沿着梯度走,肯定是最快的下山路线。

正解梯度只保证局部最陡,不保证全局最快。当山谷呈狭长椭圆形时,梯度方向几乎垂直于谷底方向,每一步都在“横着荡”,路径锯齿严重。牛顿法利用海森矩阵的曲率信息,把坐标系“拉直”后一步到位——这正是可视化里绿线比红线快得多的原因。

为何常见:直觉上“每步最优”容易让人误以为“全局最优”,忽略了局部最优的叠加会产生弯路。

面试题

Q1. 对可微函数 f(x, y),梯度 ∇f 的几何含义是什么?

单选题 · easy

  • A.指向函数值上升最快的方向← 正确答案
  • B.指向函数值下降最快的方向
  • C.始终平行于等高线的方向
  • D.与函数值变化速度无关

答案:A。梯度定义就是“各方向变化率最大的方向”,它指向上升最快;下降最快方向是负梯度。梯度还垂直于等高线而不是平行它。就像探险队坡度仪指针永远指向爬升最猛的方向,而不是沿等高线绕圈。

Q2. 梯度下降更新公式 x←x−η∇f(x) 中 η 表示什么?

单选题 · easy

  • A.学习率,控制每一步的移动幅度← 正确答案
  • B.动量系数,累积历史梯度信息
  • C.正则化系数,约束模型复杂度
  • D.损失值,表示当前预测误差

答案:A。η 是学习率,决定沿负梯度方向走多远。动量系数是另一类优化器的参数,正则化系数控制模型复杂度,损失值是目标函数本身。好比探险队迈步的大小由 η 控制:步子太大可能越过谷底,太小则半天走不到。

Q3. 在等高线地形图上,梯度方向与等高线是什么关系?

单选题 · easy

  • A.始终垂直等高线← 正确答案
  • B.始终平行等高线
  • C.与等高线成 45 度角
  • D.方向由等高线疏密决定

答案:A。梯度是函数值变化最快的方向,而沿等高线移动时函数值不变,所以梯度必须垂直于等高线。等高线的疏密只影响梯度的模长,不改变这种垂直关系。

Q4. 映射 F: Rⁿ→Rᵐ 的雅可比矩阵的维度是多少?

单选题 · mid

  • A.m×n← 正确答案
  • B.n×m
  • C.m×m
  • D.n×n

答案:A。雅可比矩阵的行数等于输出个数 m,列数等于输入个数 n,因此维度是 m×n。可以联想“联动仪表盘”:每一行是一个输出读数,每一列是一个输入旋钮。只有当 m=n 时它才是方阵。

Q5. 标量函数 f: Rⁿ→R 的雅可比矩阵与梯度有什么关系?

单选题 · mid

  • A.行向量,等于梯度的转置← 正确答案
  • B.列向量,等于梯度本身
  • C.标量函数没有雅可比
  • D.矩阵形式的海森矩阵

答案:A。梯度是把 n 个偏导排成列向量;雅可比是“输出对输入”的导数,标量函数输出只有 1 个,所以雅可比是 1×n 行向量,恰好是梯度转置。这说明梯度是雅可比 m=1 时的特例。

Q6. 若 ∇f=0 且海森矩阵正定,则该点是?

单选题 · hard

  • A.局部极小值点← 正确答案
  • B.局部极大值点
  • C.鞍点或不确定
  • D.无法用海森判断

答案:A。临界点处梯度为零,海森正定意味着任意方向 d 都有 \(d^\top H d > 0\),函数沿任何方向都先上升,所以是局部极小。若 H 负定才是局部极大,若不定则是鞍点。

Q7. 关于海森矩阵,正确的说法有哪些?

多选题 · mid

  • A.由二阶偏导数组成← 正确答案
  • B.二阶偏导连续时对称← 正确答案
  • C.由所有一阶偏导组成
  • D.正定性可判极值点← 正确答案

答案:ABD。海森矩阵全部元素都是二阶偏导,一阶偏导构成的是梯度/雅可比。在二阶偏导连续的光滑条件下,混合偏导与求导顺序无关,所以矩阵对称。正定、负定、不定分别对应极小、极大、鞍点。

Q8. 与一阶梯度法相比,牛顿法有哪些特点?

多选题 · hard

  • A.需要计算海森矩阵或其逆← 正确答案
  • B.对二次函数一步收敛← 正确答案
  • C.每步计算成本通常更高← 正确答案
  • D.只需要零阶函数值

答案:ABC。牛顿法用 \(H^{-1}\nabla f\) 修正方向,所以需要海森矩阵及其逆;对正定二次函数,一步就精确到达极值点;求逆是 O(n³) 代价,明显高于梯度法。零阶函数值只能做无导数优化,牛顿法还要求一阶和二阶导数。

Q9. 雅可比矩阵在工程中常用于?

多选题 · mid

  • A.多输出系统的灵敏度分析← 正确答案
  • B.机械臂关节速度到末端速度映射← 正确答案
  • C.判断单变量函数的凹凸性
  • D.求解标量函数极值点坐标

答案:AB。雅可比描述多个输出对多个输入的敏感度,因此可做灵敏度分析;机器人学中末端速度 \(v = J \dot{q}\) 正是它的典型应用。判断凹凸要用海森矩阵,求标量函数极值点主要用梯度配合海森,都不是雅可比的核心职责。

Q10. 对正定二次函数 f(x)=½xᵀAx+bᵀx,精确牛顿法从任意起点出发通常几步收敛?

单选题 · extreme

  • A.一步到达极值点← 正确答案
  • B.与变量维度相同
  • C.一般需要无限次
  • D.无法保证收敛

答案:A。二次函数的海森矩阵是常数 A,牛顿步 \(x - A^{-1}(Ax+b)\) 会精确落到驻点 \(x^* = -A^{-1}b\)。因为二阶泰勒展开对二次函数是精确等式,没有近似误差,所以一步收敛。这也解释了可视化中绿色直线一步到谷底。