雅可比矩陣與海森矩陣(Jacobian and Hessian)
/ yuh-KOH-bee-un and HESS-ee-un /
當函數有許多個輸入、又產出許多個輸出時,單單一個斜率就不夠用了——你需要一整張斜率表。雅可比矩陣就是這張「一階導數表」:矩陣裡的每個元素,都說明你抖動某一個輸入時,某一個輸出會變多少。如果一個函數把3個數變成2個數,它的雅可比就是一張 2×3 的網格,一口氣裝下全部六個輸入對輸出的敏感度。
海森矩陣則更深一層。如果說導數告訴你斜率,那麼二階導數告訴你曲率——斜率本身在增大還是減小,也就是你這隻碗是彎得很急、還是幾乎平坦。海森矩陣就是一個多輸入函數的「二階導數全表」:它刻畫出曲面在每一對方向上是怎麼彎曲的。處處向上彎,意味著這是個極小值;向下彎,是極大值;一個方向向上彎、另一個方向向下彎,則是個鞍點。
兩者對於理解「學習如何進行」都很要緊。每當你把多輸出層的導數串聯起來時,雅可比就會登場,它也是自動微分運作方式的核心。海森矩陣的曲率資訊,原則上能讓優化器邁出比樸素梯度下降聰明得多的步子。老實說,難處在於代價:對一個有一百萬個參數的模型,海森矩陣會有一萬億個元素——大到根本無法計算、甚至存都存不下。所以實踐中,深度學習倚靠的是一階方法和各種巧妙的海森近似,而不是真正的海森矩陣。
對於一個單輸入的函數,雅可比縮成了一個普通導數(斜率),海森縮成了一個二階導數(曲率)。以 y = x² 為例,斜率是 2x,曲率則是常數 2——處處為正,這恰恰說明了為什麼這條拋物線是一隻向上彎曲、且只有一個最低點的碗。
雅可比 = 一張斜率表;海森 = 一張曲率表。在一維情形下,它們又塌回成普通的斜率與彎曲。
雅可比 = 一階導數(斜率);海森 = 二階導數(曲率)。對性質良好的函數,海森矩陣是對稱的;但它的大小會隨參數個數的平方增長,這正是為什麼完整的二階方法在大模型上很少切實可行。