雅可比矩阵与海森矩阵(Jacobian and Hessian)
/ yuh-KOH-bee-un and HESS-ee-un /
当函数有许多个输入、又产出许多个输出时,单单一个斜率就不够用了——你需要一整张斜率表。雅可比矩阵就是这张「一阶导数表」:矩阵里的每个元素,都说明你抖动某一个输入时,某一个输出会变多少。如果一个函数把3个数变成2个数,它的雅可比就是一张 2×3 的网格,一口气装下全部六个输入对输出的敏感度。
海森矩阵则更深一层。如果说导数告诉你斜率,那么二阶导数告诉你曲率——斜率本身在增大还是减小,也就是你这只碗是弯得很急、还是几乎平坦。海森矩阵就是一个多输入函数的「二阶导数全表」:它刻画出曲面在每一对方向上是怎么弯曲的。处处向上弯,意味着这是个极小值;向下弯,是极大值;一个方向向上弯、另一个方向向下弯,则是个鞍点。
两者对于理解「学习如何进行」都很要紧。每当你把多输出层的导数串联起来时,雅可比就会登场,它也是自动微分运作方式的核心。海森矩阵的曲率信息,原则上能让优化器迈出比朴素梯度下降聪明得多的步子。老实说,难处在于代价:对一个有一百万个参数的模型,海森矩阵会有一万亿个元素——大到根本无法计算、甚至存都存不下。所以实践中,深度学习倚靠的是一阶方法和各种巧妙的海森近似,而不是真正的海森矩阵。
对于一个单输入的函数,雅可比缩成了一个普通导数(斜率),海森缩成了一个二阶导数(曲率)。以 y = x² 为例,斜率是 2x,曲率则是常数 2——处处为正,这恰恰说明了为什么这条抛物线是一只向上弯曲、且只有一个最低点的碗。
雅可比 = 一张斜率表;海森 = 一张曲率表。在一维情形下,它们又塌回成普通的斜率与弯曲。
雅可比 = 一阶导数(斜率);海森 = 二阶导数(曲率)。对性质良好的函数,海森矩阵是对称的;但它的大小会随参数个数的平方增长,这正是为什么完整的二阶方法在大模型上很少切实可行。