想象你是一名野外勘探专家,带队走进一片从未绘制过地图的丘陵。任务只有一个:找到这片区域的谷底。你不能飞,只能靠脚一步一步测量。第一件装备是一枚坡度仪——把它放在脚边,指针会指向最陡的下坡方向,这就是梯度。接着你发现,想同时弄清海拔、温度和湿度随位置的变化关系,光有单根指针不够,你需要一张联动表——每个旋钮对应的读数变化都列在上面,这就是雅可比矩阵。最后,你还想预判前方地形是凹下去的小碗还是凸起来的山包,决定该大步冲还是小步探,于是你需要第二件探测器来感知凹凸与曲率——这就是海森矩阵。这三件装备看似独立,其实是同一套“变化测量学”从一阶到二阶、从标量到向量的层层升级。读完这篇文章,你就能把三者装进一张清晰的关系地图里。
这是深度学习优化、机器人控制等 AI 岗位的数学地基。面试时把梯度、雅可比、海森的关系讲清楚,往往比背十个模型结构更能证明你的理论功底。
可视化演示
分步演示梯度(一阶标量导数向量)、雅可比(向量函数一阶导数矩阵)、海森(二阶偏导矩阵)三者的定义、结构差异与层级关系。
本节配有交互动效(进入视口后自动加载,约 3KB)。
梯度:一阶导数向量 箭头指向函数值增长最快方向 采样点处梯度向量指向远离最小值 ∇f=[∂f/∂x₁,...,∂f/∂xₙ] 梯度是标量函数的一阶偏导数组成的向量
梯度向量
探险队到达第一个测点。你掏出坡度仪,把它平放在草地上,指针立刻指向某个方向——那是海拔抬升最快的方向。稍微转动仪器,指针会跟着改变;放在不同的位置,指向也不一样。这支“会指路的箭头”,就是梯度给我们的第一印象:它是一个向量,带着方向和大小。
在数学里,我们面对的不一定是山丘,而是一个多元标量函数 f(x₁, x₂, …, xₙ),比如海拔高度随经纬度变化的函数。想要知道某个点往哪个方向走变化最快,就要分别问:单独动 x₁ 时,f 变化多快?单独动 x₂ 呢?这些“单独变化率”就是偏导数。把它们按变量顺序排成一个向量,就得到了梯度。
梯度的定义式如下:
回到探险队的场景:坡度仪不但告诉你要往哪走,还会用指针偏转的幅度告诉你这坡有多陡。梯度也是一样——方向对应指针朝向,模长对应刻度摆动大小。有了它,你就有了下山的第一步策略:沿着负梯度方向走,一定能最快降低海拔。
- Nabla 符号∇ 读作 nabla(纳布拉),它像一个“矢量求导操作符”,专门作用于多元函数。
- 偏导数$\displaystyle\frac{\partial f}{\partial x_i}$ 表示保持其他变量不变,只让 xᵢ 变化时 f 的变化快慢。它是梯度的第 i 个零件。
- 拼接成向量把 n 个偏导按变量顺序用逗号连接,组成 n 维向量,这就是梯度的完整形态。
雅可比矩阵
探险继续进行。你发现单纯一个海拔读数不够用:营地的选择还要考虑温度、湿度、坡度三个指标。而且你移动时,脚往前迈一步,三个读数会同时变化。这时单根的指针就忙不过来了,你需要一块“联动仪表盘”:表格的每一行对应一个输出读数,每一列对应一个输入方向的脚步变化,格子里填的就是“动这个输入,那个输出会变多少”。
这块表格在数学上有严格定义。当输入是 n 个变量,输出是 m 个函数时,我们把每个输出函数对每个输入变量求偏导,得到一个 m 行 n 列的矩阵,这就是雅可比矩阵。它是“向量函数的导数”——如果说普通导数是“标量对标量”的变化率,雅可比就是“向量对向量”的全套变化率。
回到营地选址:雅可比矩阵就是那张“多旋钮 × 多仪表”的对照表。往后你在机器人控制里会看到,关节转动速度和机械臂末端移动速度之间的换算,靠的正是这张表。它是梯度的自然推广——当输出只有一个时,雅可比就退化成一行,也就是梯度的转置。
- 向量函数F(x) = (f₁(x), f₂(x), …, fₘ(x)) 表示同时输出 m 个结果,通常 x 有 n 个分量。
- 逐元素求偏导把每个输出 fᵢ 对每个输入 xⱼ 求偏导,得到 \(\dfrac{\partial f_i}{\partial x_j}\),它是矩阵第 i 行第 j 列的元素。
- 排成矩形阵列m 个输出、n 个输入,所以矩阵维度是 m×n;当 m = n 时它是方阵,可以讨论行列式、特征值等性质。
海森矩阵
坡度仪能告诉你“现在有多陡”,却没法告诉你“再往前走一步会不会更陡”。探险队需要弯腰蹲下,用手摸一摸地面:如果掌心感到地面向上顶,这是凸的;如果向下凹,这是凹的。这种“对坡度的再感知”,就是二阶导数的直觉——曲率。
把这种想法数学化:我们已经有梯度这个一阶向量,那如果把梯度的每个分量再对每个变量求一次偏导呢?你会得到一个 n×n 的矩阵,每个元素都是二阶偏导,这就是海森矩阵。它描述的是“梯度的变化率”,也就是曲面的弯曲程度。
探险队靠“摸地面”预判前方地形:如果手指扫过感到处处向上顶,说明这里是个碗状凹地,朝任何方向走都会先上升再回来,这正是我们要找的谷底标志。海森矩阵做的,就是把这个“手感”量化成一张曲率分布表。
- 二阶偏导\(\dfrac{\partial^2 f}{\partial x_i^2}\) 表示只沿 xᵢ 方向求两次导数,衡量该方向上的弯曲程度。
- 混合偏导\(\dfrac{\partial^2 f}{\partial x_i \partial x_j}\) 表示先对 xᵢ 求导、再对 xⱼ 求导的结果。光滑函数中,它与求导顺序无关。
- 对称矩阵上述等式让 H 的第 i 行第 j 列等于第 j 行第 i 列,因此海森矩阵天然对称,存储时只需保存上三角。
三者关系
现在把三件装备摆在桌上:坡度仪(梯度)、联动仪表盘(雅可比)、凹凸探测器(海森)。它们到底是什么关系?其实,你完全可以看成同一种“求导操作”在不同层次上的应用。梯度作用的对象是标量函数 f,输出一个向量;雅可比作用的对象是向量函数 F,输出一个矩阵;而海森,就是把梯度这个向量函数再求一次雅可比。
用公式表达,三者是一条严密的链条:
链条一旦打通,三件装备就不再是散装工具,而是同一套探测系统。探险队拿着坡度仪测出方向,看到联动表知道各指标如何互相牵扯,再用凹凸探测器判断前方该不该加速。三者配合,就是完整的“地形认知系统”。
- 梯度是雅可比的特例当输出只有 f 一个时,雅可比是 1×n 的行向量,转置后就是梯度。
- 海森是梯度的雅可比把梯度看成向量函数,再对它求雅可比,得到的 n×n 矩阵恰好是全部二阶偏导。
- 信息层级递进梯度是一阶信息、m=1 的雅可比;海森是二阶信息、梯度的雅可比;三者共用同一套偏导语言。
几何直觉
把三件装备放到同一张等高线地图上读图。等高线是海拔相同点的连线,疏密表示坡度大小。坡度仪的指针(梯度)有个漂亮的性质:它总是垂直于等高线,指向数值升高的方向。凹凸探测器(海森)则告诉你等高线弯曲的形态——是收拢成椭圆,还是散开成马鞍。
这一切都能用二次型解释。假设你在点 x 附近做一个小的扰动向量 d,函数值的变化量可以用二阶泰勒展开近似。其中关键的二次项 \(d^{\top} \mathbf{H} d\) 的正负,直接决定这个小邻域内的凹凸形态:
探险队在地图上眯起眼:等高线越密,梯度越大;等高线呈同心椭圆,谷底就在中心;若等高线像蝴蝶翅膀一样交叉张开,那是个鞍点——看似低处,实则左右是山脊、前后是山谷。有了这套读图能力,你就能在头脑中“看见”地形。
- 一阶项\(\nabla f^{\top} \mathbf{d}\) 表示沿 d 方向移动时,函数值因坡度产生的线性变化。
- 二阶项\(\dfrac{1}{2} \mathbf{d}^{\top} \mathbf{H} \mathbf{d}\) 是弯曲修正,它告诉你线性近似在哪个方向偏乐观、哪个方向偏悲观。
- 正定判别若对所有非零 d 都有 \(d^{\top} H d > 0\),则该点附近是极小值点;若恒小于 0 是极大值点;若符号不定则是鞍点。
优化应用
下山策略之争开始了。老队员主张“走一步看一步”:每次都用坡度仪找当前最陡的下坡方向,迈出一小步,再重新测量。这就是梯度下降法——它只用到一阶信息,每一步都保证局部下降,但路径常呈锯齿状。新队员则主张“先读全图再动身”:用凹凸探测器算出海森矩阵,直接判断谷底在哪条曲线上,一步抄近路。这就是牛顿法——它用到了二阶信息,对二次函数能一步到达极值点。
两条策略对应两个经典更新公式。梯度下降是沿着负梯度方向按学习率 η 迈步;牛顿法则用海森的逆矩阵去修正梯度方向,相当于把弯曲的地形“拉直”再走:
回到探险队:老队员一步一停,在椭圆形的山谷里走出锯齿线,虽然方向一直朝着谷底,但横向震荡浪费了不少路程;新队员读完地形直接迈一大步,准确落在谷底。可视化的动画演示的正是这一幕——红色锯齿是梯度下降,绿色直线是牛顿法。
- 梯度下降步\(\mathbf{x}_{k+1} = \mathbf{x}_k - \eta \nabla f(\mathbf{x}_k)\),向负梯度方向前进,步长由学习率 η 控制。
- 牛顿修正\(-\mathbf{H}_k^{-1} \nabla f(\mathbf{x}_k)\) 是对梯度方向的“曲率校正”,沿着校正后的方向走更直。
- 收敛对比对二次函数,海森是常数矩阵,一步校正直达驻点;对一般函数,牛顿法通常在极值点附近二次收敛,远比梯度下降快。
场景选择
既然牛顿法更快,为什么大家不全用牛顿法?因为凹凸探测器很贵。海森矩阵有 n² 个元素,求逆要 O(n³) 计算量;参数是一亿的深度学习模型,海森矩阵存都存不下。这就好比探险队背着巨大的曲率扫描仪,地形是摸清了,但走到谷底前已经累垮了。
所以,选择哪件装备要看地形和预算。小规模、高精度的优化问题,比如几十个参数的数学建模,海森矩阵可以精确算出,牛顿法值得用;大规模机器学习,比如神经网络动辄百万千万参数,就采用梯度下降及其变种,或者用“拟牛顿法”(如 L-BFGS)只近似海森,用一阶信息配合少量二阶近似来平衡成本。这一切的根源,都藏在二阶泰勒展开里:
探险队最后总结出一条经验法则:人手有限、地形开阔时,坡度仪又快又便宜;地形复杂、目标精度极高时,才值得动用曲率扫描仪。理解这条取舍,你才算真正把梯度的“廉价”、雅可比的“联动”和海森的“精确”用在了刀刃上。
- 预测步长方向用 \(p\) 表示候选步长,泰勒展开把函数值拆成当前值、一阶斜率和二阶曲率三部分。
- 斜率项\(\nabla f^{\top} \mathbf{p}\) 决定线性趋势,梯度下降只优化这一项。
- 曲率项\(\frac{1}{2} \mathbf{p}^{\top} \mathbf{H} \mathbf{p}\) 是二阶修正,牛顿法正是最小化这整个二次近似模型来选 p。
AI 应用场景
深度学习优化器:Adam 为什么“摸黑也能走稳”
阶段:模型训练与参数优化
解决的问题:大模型的参数动辄数十亿,海森矩阵完全无法计算。传统梯度下降在参数尺度差异大时震荡严重。Adam 用梯度的一阶矩(均值)估计方向、二阶矩(平方均值)估计每维的曲率尺度,巧妙地在不计算海森的前提下,近似出“每个方向该走多大步”。
具体案例:训练 70B 参数的 Llama 类大语言模型时,反向传播只给出每层参数的梯度,优化器根据梯度的历史矩动态调整每维学习率,让平坦方向的步长变大、陡峭方向的步长变小,训练稳定性显著提升。
机器人运动学:机械臂为什么要记住雅可比
阶段:机器人控制与运动规划
解决的问题:六自由度机械臂有六个关节角,末端执行器位置有三个坐标。想知道“每个关节转多快,末端会怎么动”,必须依靠雅可比矩阵这个从关节空间到任务空间的线性映射。传统逆运动学求解析解非常困难,有了雅可比就可以用伪逆做数值迭代。
具体案例:流水线上的机械臂抓取工件时,控制器每毫秒读取关节角度,计算雅可比矩阵,用 \(J^{\dagger}\)(雅可比伪逆)把末端的目标速度分解成六个关节的角速度指令,实现平滑跟踪。
Python 演示
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))
self.H = self.A # 海森矩阵是常数 A二次函数的海森矩阵不随位置变化,因此实验最干净。def gradient(self, x):返回梯度向量 ∇f = Ax + b。x = x - lr * g梯度下降的核心更新:沿负梯度方向迈一小步。invH = np.linalg.inv(self.H)求出海森矩阵的逆,这是牛顿法昂贵但关键的一步。x = x - invH.dot(g)牛顿更新:用 \(H^{-1}\) 修正梯度方向。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 的几何含义是什么?
- A.指向函数值上升最快的方向← 正确答案
- B.指向函数值下降最快的方向
- C.始终平行于等高线的方向
- D.与函数值变化速度无关
答案:A。梯度定义就是“各方向变化率最大的方向”,它指向上升最快;下降最快方向是负梯度。梯度还垂直于等高线而不是平行它。就像探险队坡度仪指针永远指向爬升最猛的方向,而不是沿等高线绕圈。
Q2. 梯度下降更新公式 x←x−η∇f(x) 中 η 表示什么?
- A.学习率,控制每一步的移动幅度← 正确答案
- B.动量系数,累积历史梯度信息
- C.正则化系数,约束模型复杂度
- D.损失值,表示当前预测误差
答案:A。η 是学习率,决定沿负梯度方向走多远。动量系数是另一类优化器的参数,正则化系数控制模型复杂度,损失值是目标函数本身。好比探险队迈步的大小由 η 控制:步子太大可能越过谷底,太小则半天走不到。
Q3. 在等高线地形图上,梯度方向与等高线是什么关系?
- A.始终垂直等高线← 正确答案
- B.始终平行等高线
- C.与等高线成 45 度角
- D.方向由等高线疏密决定
答案:A。梯度是函数值变化最快的方向,而沿等高线移动时函数值不变,所以梯度必须垂直于等高线。等高线的疏密只影响梯度的模长,不改变这种垂直关系。
Q4. 映射 F: Rⁿ→Rᵐ 的雅可比矩阵的维度是多少?
- A.m×n← 正确答案
- B.n×m
- C.m×m
- D.n×n
答案:A。雅可比矩阵的行数等于输出个数 m,列数等于输入个数 n,因此维度是 m×n。可以联想“联动仪表盘”:每一行是一个输出读数,每一列是一个输入旋钮。只有当 m=n 时它才是方阵。
Q5. 标量函数 f: Rⁿ→R 的雅可比矩阵与梯度有什么关系?
- A.行向量,等于梯度的转置← 正确答案
- B.列向量,等于梯度本身
- C.标量函数没有雅可比
- D.矩阵形式的海森矩阵
答案:A。梯度是把 n 个偏导排成列向量;雅可比是“输出对输入”的导数,标量函数输出只有 1 个,所以雅可比是 1×n 行向量,恰好是梯度转置。这说明梯度是雅可比 m=1 时的特例。
Q6. 若 ∇f=0 且海森矩阵正定,则该点是?
- A.局部极小值点← 正确答案
- B.局部极大值点
- C.鞍点或不确定
- D.无法用海森判断
答案:A。临界点处梯度为零,海森正定意味着任意方向 d 都有 \(d^\top H d > 0\),函数沿任何方向都先上升,所以是局部极小。若 H 负定才是局部极大,若不定则是鞍点。
Q7. 关于海森矩阵,正确的说法有哪些?
- A.由二阶偏导数组成← 正确答案
- B.二阶偏导连续时对称← 正确答案
- C.由所有一阶偏导组成
- D.正定性可判极值点← 正确答案
答案:ABD。海森矩阵全部元素都是二阶偏导,一阶偏导构成的是梯度/雅可比。在二阶偏导连续的光滑条件下,混合偏导与求导顺序无关,所以矩阵对称。正定、负定、不定分别对应极小、极大、鞍点。
Q8. 与一阶梯度法相比,牛顿法有哪些特点?
- A.需要计算海森矩阵或其逆← 正确答案
- B.对二次函数一步收敛← 正确答案
- C.每步计算成本通常更高← 正确答案
- D.只需要零阶函数值
答案:ABC。牛顿法用 \(H^{-1}\nabla f\) 修正方向,所以需要海森矩阵及其逆;对正定二次函数,一步就精确到达极值点;求逆是 O(n³) 代价,明显高于梯度法。零阶函数值只能做无导数优化,牛顿法还要求一阶和二阶导数。
Q9. 雅可比矩阵在工程中常用于?
- A.多输出系统的灵敏度分析← 正确答案
- B.机械臂关节速度到末端速度映射← 正确答案
- C.判断单变量函数的凹凸性
- D.求解标量函数极值点坐标
答案:AB。雅可比描述多个输出对多个输入的敏感度,因此可做灵敏度分析;机器人学中末端速度 \(v = J \dot{q}\) 正是它的典型应用。判断凹凸要用海森矩阵,求标量函数极值点主要用梯度配合海森,都不是雅可比的核心职责。
Q10. 对正定二次函数 f(x)=½xᵀAx+bᵀx,精确牛顿法从任意起点出发通常几步收敛?
- A.一步到达极值点← 正确答案
- B.与变量维度相同
- C.一般需要无限次
- D.无法保证收敛
答案:A。二次函数的海森矩阵是常数 A,牛顿步 \(x - A^{-1}(Ax+b)\) 会精确落到驻点 \(x^* = -A^{-1}b\)。因为二阶泰勒展开对二次函数是精确等式,没有近似误差,所以一步收敛。这也解释了可视化中绿色直线一步到谷底。