课程/M08/多元函数、偏导与梯度
M08 · 微积分与优化核心约 35 分钟

8.1 多元函数、偏导与梯度

本节位置:模块 8 · 微积分与优化 | 前置:1.3 点积 | 预计:35 分钟

一句话:梯度把「函数在每个方向上的变化率」打包成一个向量,它指向上升最快的方向。

0. 场景引入

清晨 6 点,一台多旋翼无人机要从 3 km × 3 km 的风电场东侧起飞,巡检 12 台风机。飞控里存的不是一条固定轨迹,而是一个代价函数:

24 个坐标就是 24 个变量。今天西风 8 m/s,空速 15 m/s,返程逆风段要按 7 m/s 的地速折算;电池只够 25 分钟。

电量只剩 5% 余量,飞手要做一个决定:24 个坐标里,把哪几个、往哪个方向挪一点,能把总时间压下来? 逐个试是不可能的:24 个坐标、每个正负两个方向,就是 48 次轨迹仿真,每次 0.4 秒,将近 20 秒——而阵风每秒都在变。

算错的代价很具体:方向选反,多飞 40 秒,返航时电量跌破 10% 告警线,备降场在 1.2 km 外,这一架次作废。

把现场抽象掉:你有一个 24 元的函数 ,想在一点附近知道「每个坐标动一点, 变多少」,并且要把这 24 个数组织成一个既能查表、又能指方向的对象。这就是梯度(gradient)。

读完本节,你应该能回答三件事:

  1. 偏导与梯度分别是什么,为什么梯度的形状必须和变量一致?
  2. 梯度为什么垂直于等高线、指向上升最快的方向?
  3. 「梯度是敏感度表」和「梯度是方向」这两种读法,各自在什么情况下会骗你?

1. 直觉

1.1 等高线地图

想象一座山, 是海拔。地图上画着等高线(level set):同一条线上海拔相同。

  • 你沿等高线走,海拔不变;
  • 你垂直等高线往上走,海拔升得最快;
  • 梯度就是那个「垂直等高线、指向高处」的箭头。

梯度场:箭头垂直等高线并指向函数增大的方向

图:等高线是 的等值线;箭头是 ,始终垂直等高线并指向 增大的方向。

1.2 偏导是「切一刀」

固定 ,只看 的变化,得到一条曲线;它在该点的斜率就是 。同理固定 ,得到 。

💡 一句话直觉:偏导是沿坐标轴的变化率,梯度是把这些变化率按坐标轴拼起来的箭头。

1.3 它在现实世界里对应什么

回到那台无人机。梯度在飞控里有两个身份,它们不是同一件事:

读法数学对象在航迹里的含义单位
敏感度表第 个偏导 第 个坐标往东挪 1 m,总时间变多少s/m
方向整条向量 24 个坐标一起动时,时间增长最快的那条调整方向s/m(逐分量)

第一种读法只需要「逐个数字」: s/m 就是说,第 1 个航点往东挪 1 m,能省 0.04 秒。第二种读法要求你先把 24 个数当成一条向量,才有「方向」可言。

量级直觉:一次巡检的 约 1200 s,单个偏导的典型量级在 s/m,所以 大约是 s/m。换算成「挪 200 m 省多少」: s——正好和电量余量同一个量级。梯度大不大,要乘上你能实际移动的距离再判断。

单位会直接改变数值。 如果飞控把坐标从「米」换成「经纬度(度)」,同一个物理敏感度要乘上 度 m:原来的 s/m 变成 s/度。函数没变、物理没变,梯度的每个分量都放大了 倍。这也是优化前要统一量纲的原因。

类比边界:等高线图只对二维可画。高维时没有图,但「梯度垂直于等值面」这个性质仍然成立——只是你想象不出来。

这个类比在哪里失效:梯度的「方向」不是坐标空间里的方向,而是在给定内积下的方向。航迹代价由分段欧氏长度求和而成,一旦某一段退化成零长度(两个航点重合), 在那里有尖点、不可微,梯度根本不存在——这时只能用次梯度,或把航点做光滑化。

2. 定义

2.1 多元函数

多元函数(multivariable function)是映射 ,输入一个 维向量,输出一个标量。

2.2 偏导数

对第 个变量的偏导数(partial derivative)定义为

读法:把其它变量都当常数,只对 求导。

2.3 梯度

梯度把 个偏导排成一列:。

形状约定: 与 同形。若变量是矩阵 ,则 也是 。这个约定在 8.5 节会展开。

2.4 可微

在 处可微(differentiable),指存在向量 使

并且这个 就是 。逐项读法:函数在局部可以用一个线性函数(平面)逼近,误差比一阶小量还小。

3. 为什么这样定义

如果只有一元导数,你只能说「沿某个方向的变化率」。但在 里有无限多个方向,每个方向都有自己的变化率。

一个自然的想法是:先测 个坐标轴方向,再想办法组合出任意方向。 梯度正是这个「组合」的载体——8.2 节会证明,任意单位方向 上的方向导数恰好是 。

没有梯度,你就无法用一个有限的对象( 个数)描述「所有方向的一阶变化」。这就是反向传播能只用一遍计算就拿到全部参数梯度的根本原因。

3.1 反事实:换一种「梯度」会坏在哪

方案 A:只报最大的那个偏导。 取 (把 24 维压成 2 维便于手算),在原点 ,。最大偏导在第 2 个坐标,于是你决定「只动 」,沿 的变化率是 2。但真正的陡上升方向是 ,变化率 ,比 2 大 。只挑最大偏导,等于把「方向」丢掉了,你走的不是最陡的路。

方案 B:把梯度定义成偏导的绝对值之和。 。它不再是一个方向,没法用来决定「往哪走」;而且 也得到 3——一个上升、一个下降,被算成同一个数。

方案 C:混用单位。 这是一个更隐蔽的坑。设 ,其中 的单位是米、 的单位是千米。若直接在这组坐标里求偏导,得到 :看起来两个方向一样陡,最陡方向是 。但把 换成米(),同一个函数是 ,梯度变成 ——最陡方向几乎贴着 轴。

同一个物理问题、两种单位,坐标空间里的「梯度方向」差了约 。真相是:物理上的最陡方向一直是「几乎沿 走」,因为沿 走 1 m 只值 0.001 秒,沿 走 1 m 值 1 秒。坐标系里的 是被单位伪造出来的。

三条反事实指向同一个结论:梯度是敏感度(每米多少秒),它的数值依赖变量单位;只有当所有坐标共享同一套量纲与度量时,这条敏感度向量才同时是方向。工程上的对策是归一化——这也是训练模型前要先做特征标准化的原因。

4. 性质与推导

4.1 基本运算

规则式子
线性
乘积
链式(标量情形)
二次型

最后一条在 8.5 节推导,这里先记住它和「 当 对称」的关系。

4.2 梯度为什么垂直于等值面

设曲线 落在等值面 上,即 。对 求导并用链式法则,得 。

是等值面的任意切方向,所以 与所有切方向正交,即垂直于等值面。

4.3 局部线性近似

这个式子说的是:函数在一点附近的行为,由「当前值 + 梯度」完全决定到一阶。 8.3 节把它推广到向量值函数,就是 Jacobian。

5. 例子

5.1 手算:二元与三元

设 ,在点 :

所以 ,且 。

用线性近似估计 :

精确值是 ,误差 ,来自二阶项。

再看三元函数 在 :,。

5.2 场景:线性回归的梯度

数据 ,模型 ,损失 。在 处:

梯度 指向 上升方向;沿反方向更新 ,损失会下降。注意 的梯度绝对值更大,因为 放大了误差——这也是特征未归一化时训练「偏爱某些参数」的原因。

5.3 场景闭环:24 维航迹、20 秒预算

把开头那次巡检从头算到尾。

输入:12 个航点 → 维;风场用 的网格查表(每格 5 m,覆盖 3 km),风速与风向按 10 分钟一次的实测更新;电池余量、空速、地速折算都在飞控里。

计算:一次 的评估要算 11 段长度、按风向做地速折算、加转弯惩罚,约 FLOP,实测 0.4 s(主要花在读风场表)。中心差分求梯度要 次评估,总计 s,约 FLOP。

输出:24 个偏导排成 。按 排序,取前 3 个航点各挪 200 m,用一阶近似预估省下的时间:

(这里用 s/m 的量级;实际要逐分量相乘再求和。)决策是「改这 3 个点,还是申请换电池」。

成本:19.2 s 的仿真、24 个标量进飞控。若在机载端把代价函数写成计算图、用反向模式求一次梯度,成本约是 1 次前向的 2.5 倍,即 1 s 量级——快 19 倍,内存只需多存 24 个中间量。 这就是真正的航迹优化器都写自动微分、而不是有限差分的原因。

失败条件与兜底:

  • 不可微点:两个航点重合、或转弯角超过阈值时, 有尖点,中心差分给出的「梯度」依赖步长 。兜底:先用 m 与 m 各算一次,若结果差一个量级以上就判定不可信。
  • 梯度过期:风场 10 分钟才更新一次,梯度算完时风已经变了。兜底:把 的预估值乘 0.6 的安全系数,飞过 2 个航点后重算。
  • 数值淹没: 是 s 量级,双精度相对误差约 ,差分步长取 m 时分子上的差只有 s,已经贴着舍入噪声。兜底: 取 1 m,宁可引入 的二阶截断误差,也不要被舍入误差支配。

6. 常见误区

  1. 误区:偏导都存在,函数就可微。 纠正:反例 (原点补 0)。两个偏导在原点都是 0,但沿 趋近时极限是 ,函数不连续,更不可微。

  2. 误区:梯度是一个数。 纠正:梯度是向量,维数等于变量维数。只有一元函数时它才退化成一个数。

  3. 误区:梯度大,步子就该迈得大。 纠正:梯度只描述局部斜率,不决定步长。步长由学习率控制,过大会越过极小点(8.7 节)。

  4. 误区:梯度为零就是极小值。 纠正:也可能是极大值或鞍点。例如 在原点梯度为零,但沿 上升、沿 下降(8.4 节用 Hessian 判定)。

7. 概念网络

  • 前置:1.3 点积 —— 是点积,梯度是线性泛函的向量表示。
  • 后续:8.2 方向导数与梯度下降 —— 用梯度决定走哪、走多远。
  • 后续:8.3 Jacobian —— 把标量输出的梯度推广到向量输出。
  • 后续:8.5 矩阵求导 —— 参数是矩阵时,梯度与参数同形。
  • 关联:6.5 二次型 —— 的梯度是 。

8. 通往大模型:梯度是「与参数同形」的张量

出现位置:反向传播(backpropagation;Goodfellow 等, 2016 第 6 章)的最后一步。对损失 ,框架要算出每个参数张量的梯度,形状与参数完全一致。

形状:若某层权重 ,则 也是 。一个 4096×4096 的权重矩阵对应 1677 万个梯度值;这就是为什么训练显存里除了参数,还要放梯度和优化器状态。

为什么需要:没有「梯度与参数同形」这个约定,更新规则 就无法逐元素写。Adam 的 也按元素维护,形状必须和 一致。

可检验结论:对一个线性层 ,有 ,是外积,形状 。误差向量与输入向量的外积,正好填满整个权重矩阵——一次矩阵乘法就得到全部梯度。

如果梯度算错,你在曲线上看到什么:漏掉一项偏导,更新方向会系统性偏斜,loss 仍在降,但停在一个比预期高的平台,训练集和验证集同步变差;符号写反,等价于在做上升步,loss 会在几步内单调抬升直到发散。这两种都不报错——框架只会执行你给的公式。所以自定义算子必须做数值梯度检查(8.5 节):解析梯度与中心差分的相对误差应在 量级。

9. 练习

  1. 概念:为什么梯度要定义成列向量而不是行向量?如果定义成行向量,8.2 节的 会变成什么?
  2. 计算:,求 ,并用线性近似估计 。
  3. 计算:,求 。
  4. 场景:数据 ,模型 ,损失 。在 处求梯度,并说明第一步该往哪走。
  5. 开放:如果只允许你查询函数在坐标轴方向上的变化率(偏导),能否恢复任意方向的变化率?需要什么额外条件?
参考答案
  1. 定义成列向量是为了让 直接是点积(标量),并与「梯度与变量同形」保持一致。若定义成行向量,则应写成 ;两者只差转置,但混用会导致链式法则里转置位置出错。
  2. ,;,。近似 ;精确值 ,误差约 ,来自二阶项。
  3. 。
  4. 。负梯度方向为正,所以第一步增大 。
  5. 仅凭偏导不够;需要函数在该点可微。可微时任意方向导数由 给出;不可微时(如 §6 的反例)各方向行为可以完全不一致。

10. 一页速记

  • 偏导:固定其它变量,沿一个坐标轴求导。
  • 梯度:所有偏导拼成的向量,与变量同形。
  • 可微:,误差 。
  • 梯度垂直于等值面,指向上升最快的方向。
  • 梯度为零只说明是驻点,不说明是极小值。
  • 物理意义 / 现实对应:梯度是「每个坐标挪 1 m,代价变多少秒」的敏感度表(单位 s/m);只有量纲统一时,它才同时是最陡上坡的方向。

11. 参考文献与致谢

这一页的知识不是凭空来的。下面列出本页直接借用的原始工作与权威整理;正文中的人名、定理名已链接到对应条目。链接优先指向 DOI、arXiv 或可长期访问的原文存档。

  • Nocedal & Wright(2006):Numerical Optimization(2nd ed.)。梯度、一阶最优性条件与反向传播在优化中的系统处理,本页 §2–§4 的框架可与之对照。Springer
  • Goodfellow, Bengio & Courville(2016):Deep Learning。第 6 章把梯度、Jacobian、计算图与反向传播串成一条线,对应本页 §8 的大模型落点。MIT Press(开放网页版)

下一篇 → 8.2 方向导数与梯度下降

返回 M08 导览去练习场

随堂测 · 4 题

单选难度 1第 1 / 4 题
设 可微,按本文约定,梯度 的形状是?

源文件:08-微积分与优化/01-多元函数与梯度.md

输入关键词开始搜索