5.4 行列式与 Jacobian:变量替换
本节位置:模块 5 · 行列式 | 前置:5.1、8.3 Jacobian | 预计:35 分钟
一句话:非线性变换没有全局的 ,但在每一点有一个局部体积缩放因子——那就是 Jacobian 行列式。
0. 场景引入
一个做全球碳汇的团队拿到一张 Web Mercator 的全球栅格: 个格子,每格 ,标着「森林 / 非森林」。他们要在 2 小时内交出一个数字:格陵兰的冰盖边缘这一年退缩了多少平方公里。
最直接的做法是数格子。格陵兰主体在 N 附近,覆盖约 9 070 个格子;把每格都按赤道上的 km² 折算,得到 km²。而格陵兰的真实面积是 km²——高估了 3.2 倍。
原因不在数据,在投影:Mercator 在纬度 处把面积放大 。N 时 ,:地面上 238.8 km² 的一格,在图上占 2500 km²。
决策:接受「像素计数」只做相对变化(退缩比例),还是给每格乘一个随纬度变化的面积权重、报绝对平方公里?
代价:用错权重,局部面积高估 10.47 倍、全球合计高估 3.2 倍;一份按 km² 写进报告的碳汇估算会被评审打回,而重跑一次全球栅格统计要 6 小时。
读完本节,你应该能回答三件事:
- 为什么换元时面积元要乘 ,极坐标的 从哪来?
- 为什么 Jacobian 行列式是逐点的,而线性变换只有一个常数?
- 投影变形、密度换元、归一化流,用的是同一个公式吗?
1. 直觉
1.1 局部看,非线性也是线性的
一个非线性映射会把方格网弯成曲线网。但取一个很小的方格,它的像近似是一个平行四边形——因为可微函数在小范围里近似为线性映射。这个平行四边形的面积 ÷ 原方格面积,就是该点的 。所以:
💡 一句话直觉:Jacobian 行列式是「逐点的体积缩放因子」;积分时把它乘进面积元。
1.2 一维的类比
一维换元 里的 就是 的 Jacobian。 告诉你「 附近的一小段被拉长了几倍」。高维只是把「拉长倍数」换成「体积倍数」。
极坐标的网格是同心圆和射线:半径 处的格子,沿 方向宽 ,沿 方向弧长 ,面积约 。那个 就是「离原点越远,同样的角宽度对应的弧越长」。类比边界:这个「小格子近似平行四边形」的误差是 ,单独看不为零;但积分取极限后消失。要求 连续可微,且 在积分区域上几乎处处可逆。
图:左图是 平面上的方格;右图是极坐标映射后的像。橙色小格在 处的面积被放大 倍,所以面积元要乘 。
1.3 它在现实世界里对应什么
地图上,Jacobian 行列式是面积汇率:地面上 1 km²,画到这张图上占多少 km²。
| 数学对象 | 地图/气象里的对应物 |
|---|---|
| 从经纬度 到平面 的局部线性化 | |
| 图上面积 ÷ 地面面积;乘它把地面搬到图上 | |
| 随位置变 | 越往高纬,同样的经纬度格子在地图上越大 |
| 投影把区域压成零面积,例如 sinusoidal 投影的极点 | |
| Mercator 的极点附近,一格像素代表的地面面积趋于 0 | |
| 是否镜像,例如经度方向被翻转的图 |
量级:N 处 ,地面上 1 km² 在 Mercator 上占 4 km²;N 处是 10.47;N 处是 33.2;到 N 已经是 131.6。Web Mercator 通常截在 ,再往上格子面积趋于无穷。
这个对应在哪里失效:Mercator 保角(角度不变)但不保面积,所以「图上量面积」必须加权;换成等面积投影(sinusoidal、EASE-Grid)权重就是常数。另外这是球面到平面的映射, 逐点变化,不能提到积分号外面。
2. 定义
2.1 Jacobian 矩阵
对 ,,Jacobian 矩阵 是 ,即第 行第 列是 。当 时, 有意义,称为 Jacobian 行列式(Jacobian determinant)。
2.2 变量替换公式(change of variables)
设 连续可微、在 上单射,且 几乎处处不为零,则
逐项读法:目标空间的体积元 ,换成源空间的 。绝对值保证体积为正。完整的条件与证明见 Munkres。
2.3 概率密度(probability density)变换
若 且 可逆,则
线性情形 时 ,退化为 5.1 的 。
3. 为什么这样定义
把源区域切成很多边长 的小方块。第 个小方块的体积是 ;它的像近似是平行多面体,体积是 。
于是 ,右边正是目标空间里对 的黎曼和。这就是变量替换公式的全部内容:先把体积按局部比例换算,再求和。
导数的链式法则保证:先做 再做 ,总的体积因子是 ,与「逐点缩放相乘」一致。
3.1 反事实:漏掉 ,圆盘面积会变成
取极坐标换元,但假装 (把 当成 1)。单位圆盘的面积变成
而真实面积是 。算出来的正好是半径为 的圆盘——同一个圆盘,只因为换了坐标就变大一倍,而且没有任何数值误差,全是精确算术。
再取 ,。如果写成 而不取绝对值,一个真实面积为 2 的菱形会得到 ——负面积。
这两种错法都能通过「量纲检查」(结果都是面积),却分别错在漏了局部比例和漏了绝对值。公式里 的每一部分都不是装饰。
对地图同理:把每个 格子的面积都当成赤道上的 772.8 km²,相当于漏掉 这个局部因子,于是格陵兰那 9 070 个格子被算成 km²——正是第 0 节高估 3.2 倍的结果。
4. 性质与推导
- 链式法则:,因此 。
- 逆映射:,其中 。
- 线性映射:,,回到 5.1。
- 三角 Jacobian:若 是三角阵,;归一化流的 coupling 层就靠这一点把 降到 。
- 极坐标:;球坐标:。
- 定向: 表示局部翻转;积分用 ,所以面积/体积仍为正。
5. 例子
5.1 极坐标:完整的推导
所以 。单位圆盘面积:
高斯积分也变简单:。
5.2 线性变换:面积比是
,,。
单位正方形的四个顶点映到 、、、,围成菱形,面积 。 说明定向翻转,但面积仍取绝对值。
5.3 非线性变换:缩放逐点变化
,,。
在 处局部面积因子为 1,在 处为 4。这不是一个全局常数,必须放在积分号里面。
对单位正方形:,而像区域是 ,面积确实为 1——局部缩放有大有小,积分后正好抵消。
5.4 概率:线性变换后的密度
设 ,,,,则 。在原点:。可以验证: 的协方差是 ,二维高斯在原点处的密度正是 。
5.5 场景闭环:1 036 800 个格子,20 毫秒
输入: 个 格子。每个格子的面积权重用 float32 存,一张图 MB;森林比例另存一张。
计算:每格的真实面积是 , km、 rad:
N 处 km²,和 §0 的数对得上:。对 100 万个格子各算一次 ,单核约 20 ms。
规模感:这里每个点是一个 行列式,3 次乘法;100 万个格子合计约 次乘法,几毫秒。换成 100 维的换元(flow 的一层),每个点的 是 ,一次 要 次乘加;同样 100 万个点就是 次,单核 1 GFLOP/s 要 670 秒。这就是 coupling 层把 变成对角元乘积、把 降到 的现实动机。
输出:加权面积 km²,对比像素计数的 km²。决策:绝对面积必须加权;相对变化可以用像素比,前提是两期用同一张投影。
成本:20 ms CPU、4.1 MB 内存,相比 6 小时的人工复核可以忽略。真正的成本是验证:所有权重之和应等于 km²,差一点就说明经纬度网格或 写错了。
失败条件:
- 极点权重: 时 ,权重趋于 0,而 Mercator 的 趋于无穷;Web Mercator 截在 ,两极的格子直接缺失。兜底:换等面积投影,或在球面网格上积分。
- 经度环绕:跨 经线的格子被切成两半,按像素数会重复计数。兜底:在球面坐标里处理边界。
- 分辨率不一致:两期栅格一个 、一个 ,像素比没有意义。兜底:重采样到同一网格再比。
6. 常见误区
-
误区:。 纠正:极坐标下是 ,漏掉 是最经典的错误。 处的角宽度 对应的弧长是 ,面积自然多一个因子 2。
-
误区: 是一个常数,可以提到积分号外。 纠正:只有线性变换才是常数。非线性时 逐点变化,必须留在积分号内。
-
误区:换元时用 的 Jacobian 还是 的,随便。 纠正:记住「源空间体积元 × = 目标空间体积元」。若用 的公式,分母是 的 Jacobian 在 处的值。
-
误区: 在某点奇异,换元就失效。 纠正:失效只发生在该点附近;如果奇异点集是零测集(如极坐标的 ),积分仍成立。
7. 概念网络
- 前置:5.1 行列式几何 —— 线性变换的体积缩放,是这里的局部版本。
- 前置:5.2 行列式的性质与计算 —— 算 、 的 。
- 关联:5.3 逆与 Cramer 法则 —— 逆映射的 Jacobian 是原 Jacobian 的逆。
- 后续:8.3 Jacobian —— 把这里的矩阵当作多元导数,反向传播是它的链式法则。
- 后续:9.2 多元高斯—— 密度变换与协方差行列式。
- 关联:1.7 叉积 —— 二维面积与三维平行六面体体积。
8. 通往大模型:归一化流的
出现位置:归一化流(normalizing flow)的似然计算、概率密度变换、可逆残差网络。
形状:,可逆网络 ,。训练时要算
为什么需要:生成模型要最大化数据似然。密度变换必须带体积修正;少了这一项,优化的就不再是数据空间的归一化似然:模型可以靠任意改变体积把密度数值抬高,而不用为体积变化负责(偏好放大还是缩小,取决于网络参数化成 还是 )。
怎么算得动:一般 矩阵的 是 ,且高维容易下溢。Coupling 层(Dinh 等)把 分成两半:
它的 Jacobian 是块三角阵,,于是 ,只要 。这是 flow 能堆很多层的关键。
数值坑:、每维缩放 时,,float64 直接下溢为 0, 变 ;每维缩放 则上溢。必须在对数域累加,或调用 slogdet。可检验结论:np.linalg.det 对这种矩阵返回 0.0,而 np.linalg.slogdet 仍能给出约 的有限值。
算错时下游看到什么:漏掉 ,密度积分不再等于 1,模型可以靠缩小体积把 抬到任意大——训练 loss 一路下降,但采样出的分布与数据无关;忘记绝对值,遇到 的层时 负数,loss 一次前向就变 NaN。两种故障都不是「精度差一点」,而是目标函数本身错了。
9. 练习
- 推导:用 推导 ,并解释为什么是 而不是 1。
- 计算:。求 、,以及单位正方形像的面积;定向翻转了吗?
- 计算:。求 与 ;在 处局部面积放大几倍?
- 概率:,,。求 ,并与 比较。
- 开放:归一化流为什么偏爱「三角 Jacobian」的 coupling 层?它在表达能力上牺牲了什么?
参考答案
- ,。半径 越大,同样的 对应的弧长越长(),面积元多出因子 。
- ,;像是顶点 的菱形,面积 ;,定向翻转。
- ,;在 处为 ,局部保面积。
- ;。
- 三角 Jacobian 让 变成对角元乘积、 变成 的求和,数值稳定且反向传播便宜。代价是每层只变换一部分维度(另一半保持不变),需要堆叠多层并交替划分,单层表达能力受限。
10. 一页速记
- 非线性映射的局部体积因子是 ,逐点变化。
- 物理意义 / 现实对应: 是面积汇率——地面上 1 km² 在 N 的 Mercator 上占 10.47 km²。
- 变量替换:;概率密度要除以它。
- 极坐标 ,所以 ;球坐标 。
- 链式法则让 相乘, 相加;三角 的 是对角元乘积。
- 高维用 (
slogdet),别直接算 。
11. 参考文献与致谢
这一页的知识不是凭空来的。下面列出本页直接借用的原始工作与权威整理;正文中的人名、定理名已链接到对应条目。链接优先指向 DOI、arXiv 或可长期访问的原文存档。
- Jacobi(Carl Gustav Jacob Jacobi, 1841):De determinantibus functionalibus。把 个函数对 个变量的偏导行列式作为独立对象研究,并给出复合时的乘法规则;「Jacobian 行列式」的名字由此而来,本页第 2.1 节与第 4 节的链式法则都建立在这个对象上。Journal für die reine und angewandte Mathematik
- Munkres(James R. Munkres, 1991;CRC 2018 重印):Analysis on Manifolds。给出变量替换定理的完整陈述与证明,包括 、单射、 几乎处处非零这些条件各自的作用——本页第 2.2 节的公式以它为准。CRC Press
- Dinh 等(Laurent Dinh, Jascha Sohl-Dickstein & Samy Bengio, 2016):Density estimation using Real NVP。提出仿射 coupling 层 ,其块三角 Jacobian 让 只需 ;本页第 8 节的设计直接取自这篇。arXiv:1605.08803
本篇是模块 5 的最后一篇。回到 模块导览 做自测,或去做 习题。
随堂测 · 5 题
源文件:05-行列式/04-行列式与Jacobian.md