跳轉到

08.1 哈密頓神經網路與守恆學習#

本章導讀#

前面的網路學什麼都「自由發揮」——包括學物理。但自由的網路學牛頓力學時會漏掉能量守恆: 預測的單擺會越盪越高、行星會慢慢飛散。 2020 年的哈密頓神經網路(HNN)給出解法:把守恆律寫進架構。 這是「把對稱性寫進結構」(05.1 節 CNN)思想的力學版。

淺顯說明#

一般神經網路學物理像「看影片學丟球」——學得像,但細節會飄。 HNN 換了一個聰明的問法:

  • 不直接學「軌跡 \(q(t)\) 」,而是學「能量函數 \(H_\theta(q, p)\) 」。
  • 能量學出來後,運動方程自動由哈密頓方程給出——而哈密頓方程天生守恆(能量是常數)。
  • 就像與其背食譜的成品照片,不如學食譜本身——成品自然對。

參考 ../../哈密頓物理學/教材/:哈密頓力學的主角是能量與相空間, HNN 把這套數學原封不動搬進神經網路。

正規理論#

復習:哈密頓方程#

相空間 \((q, p)\) 中,物理系統由哈密頓量 \(H(q, p)\) 決定:

\[ \dot q = \frac{\partial H}{\partial p}, \qquad \dot p = -\frac{\partial H}{\partial q} \]

能量守恆: \(\dfrac{dH}{dt} = \dfrac{\partial H}{\partial q}\dot q + \dfrac{\partial H}{\partial p}\dot p = \dfrac{\partial H}{\partial q}\dfrac{\partial H}{\partial p} - \dfrac{\partial H}{\partial p}\dfrac{\partial H}{\partial q} = 0\) 。

辛幾何:結構矩陣 \(\mathbf{J}\)#

把哈密頓方程寫成矩陣形式:

\[ \dot{\mathbf{z}} = \mathbf{J}\, \nabla_{\mathbf{z}} H, \qquad \mathbf{z} = \begin{pmatrix} \mathbf{q} \\ \mathbf{p} \end{pmatrix}, \qquad \mathbf{J} = \begin{pmatrix} \mathbf{0} & \mathbf{I} \\ -\mathbf{I} & \mathbf{0} \end{pmatrix} \]

\(\mathbf{J}\) 是斜對稱矩陣( \(\mathbf{J}^\top = -\mathbf{J}\) ),它定義了相空間上的辛結構。

能量守恆的矩陣證明:

\[ \frac{dH}{dt} = \nabla_{\mathbf{z}} H^\top \dot{\mathbf{z}} = \nabla H^\top \mathbf{J} \nabla H = 0 \]

(因為 \(\mathbf{a}^\top \mathbf{J} \mathbf{a} = 0\) 對任何 \(\mathbf{a}\) 成立——斜對稱性。)

Liouville 定理:辛流保相空間體積——哈密頓流不壓縮、不膨脹相空間, 這是統計物理與混沌理論的幾何基礎(參考 ../../哈密頓物理學/教材/01.2-相空間與狀態.md)。

哈密頓神經網路(HNN)#

Gray、Lange、Aitchison 等人(2020)的想法:用神經網路參數化 \(H_\theta\) ,運動方程由架構保證:

\[ \dot{\mathbf{z}} = \mathbf{J}\, \nabla_{\mathbf{z}} H_\theta(\mathbf{z}), \qquad H_\theta(\mathbf{z}) = \mathrm{MLP}_\theta(\mathbf{z}) \]

訓練目標:讓預測的向量場貼近觀測資料:

\[ \mathcal{L}(\theta) = \big\| \dot{\mathbf{z}}_{\text{data}} - \mathbf{J}\, \nabla_{\mathbf{z}} H_\theta(\mathbf{z}) \big\|^2 \]

\(\nabla_{\mathbf{z}} H_\theta\) 由自動微分算出(03.2 節)。 關鍵:無論 \(\theta\) 學成什麼, \(H\) 守恆永遠成立——守恆律是架構保證,不是學出來的近似。

辛積分器:數值解也不散逸#

用一般數值方法(如 Runge–Kutta、Euler)積分哈密頓方程,長時間後能量會緩慢漂移。 辛積分器(如 leapfrog/Verlet)保住辛結構,能量只在真值附近有界振盪:

Leapfrog 半步法:

\[ \mathbf{p}_{n+1/2} = \mathbf{p}_n - \frac{\Delta t}{2}\nabla_{\mathbf{q}} H(\mathbf{q}_n), \qquad \mathbf{q}_{n+1} = \mathbf{q}_n + \Delta t\, \nabla_{\mathbf{p}} H(\mathbf{p}_{n+1/2}), \qquad \mathbf{p}_{n+1} = \mathbf{p}_{n+1/2} - \frac{\Delta t}{2}\nabla_{\mathbf{q}} H(\mathbf{q}_{n+1}) \]

物理 AI 引擎(可微物理、Diff-Physics)用「可微模擬器 + 辛積分器」,讓梯度穿透物理引擎流動: \(\partial(\text{最終狀態})/\partial(\text{初始參數})\) 直接可算,支援系統識別與控制。

拉格朗日神經網路(LNN)#

另一條路:學 Lagrangian \(L_\theta(\mathbf{q}, \dot{\mathbf{q}})\) ,運動方程由 Euler–Lagrange 方程給出:

\[ \frac{d}{dt}\frac{\partial L_\theta}{\partial \dot{\mathbf{q}}} - \frac{\partial L_\theta}{\partial \mathbf{q}} = 0 \]

(參考 ../../哈密頓物理學/教材/03.1-最小作用量原理.md。) LNN 不需要動量 \(p\) ,直接從「位置+速度」資料學,適合只有視覺觀測的場景。

簡易範例:學單擺的能量#

單擺(參考 ../../哈密頓物理學/教材/02.3-簡易範例-自由落體與單擺.md): 真實哈密頓量 \(H = \dfrac{p^2}{2ml^2} + mgl(1 - \cos q)\) 。

給定觀測資料 \(\{(\mathbf{z}_i, \dot{\mathbf{z}}_i)\}\) (相空間點與其速度),HNN 訓練迴圈:

  1. 用 \(\nabla_\theta H_\theta\) 計算預測速度場: \(\hat{\dot{\mathbf{z}}}_i = \mathbf{J}\,\nabla H_\theta(\mathbf{z}_i)\) 。
  2. 損失: \(\mathcal{L} = \sum_i \|\dot{\mathbf{z}}_i - \hat{\dot{\mathbf{z}}}_i\|^2\) ,梯度下降更新 \(\theta\) 。

學成後驗證守恆:沿學出的向量場積分(用 leapfrog),計算 \(H_\theta(\mathbf{z}(t))\) —— 一般網路的預測能量隨時間漂移(單擺越盪越高),HNN 的能量在常數附近振盪不散—— 架構保證了守恆,資料只教「能量長什麼樣」。

歷史典故#

習題#

  1. 證明:對任何向量 \(\mathbf{a} \in \mathbb{R}^{2n}\) , \(\mathbf{a}^\top \mathbf{J} \mathbf{a} = 0\) ( \(\mathbf{J}\) 斜對稱)。
  2. 對單擺 \(H = \frac{p^2}{2ml^2} + mgl(1-\cos q)\) ,寫出哈密頓方程並驗證 \(\frac{dH}{dt} = 0\) 。
  3. 討論:為什麼「守恆律寫進架構」比「用損失懲罰能量漂移」(soft constraint)更可靠?(提示:懲罰是近似,架構是保證。)

補充#

1. 數學推導證明#

證明(習題 1): \(\mathbf{a}^\top \mathbf{J} \mathbf{a} = 0\) 。

\(\mathbf{J} = \begin{pmatrix} \mathbf{0} & \mathbf{I} \\ -\mathbf{I} & \mathbf{0} \end{pmatrix}\) 滿足 \(\mathbf{J}^\top = -\mathbf{J}\) (轉置後非對角塊變號)。標量 \(\mathbf{a}^\top\mathbf{J}\mathbf{a}\) 等於自己的轉置:

\[ \mathbf{a}^\top\mathbf{J}\mathbf{a} = (\mathbf{a}^\top\mathbf{J}\mathbf{a})^\top = \mathbf{a}^\top\mathbf{J}^\top\mathbf{a} = -\mathbf{a}^\top\mathbf{J}\mathbf{a} \]

故 \(2\,\mathbf{a}^\top\mathbf{J}\mathbf{a} = 0\) ,即 \(\mathbf{a}^\top\mathbf{J}\mathbf{a} = 0\) 。能量守恆 \(dH/dt = \nabla H^\top\mathbf{J}\nabla H = 0\) 是它的直接推論——守恆是斜對稱性的恆等式,與 \(H\) 長什麼樣無關,這正是 HNN「架構保證」的來源。 \(\blacksquare\)

證明(習題 2):單擺方程與守恆驗證。

\(H = \frac{p^2}{2ml^2} + mgl(1-\cos q)\) ,哈密頓方程: \(\dot q = \partial H/\partial p = p/(ml^2)\) , \(\dot p = -\partial H/\partial q = -mgl\sin q\) 。能量變化:

\[ \frac{dH}{dt} = \frac{\partial H}{\partial q}\dot q + \frac{\partial H}{\partial p}\dot p = (mgl\sin q)\cdot\frac{p}{ml^2} + \frac{p}{ml^2}\cdot(-mgl\sin q) = 0 \]

兩項相消——單擺的總能量沿軌跡恆定(動能與位能互換,總和不變)。 \(\blacksquare\)

說明(習題 3):架構保證 vs 損失懲罰。 懲罰 \(\mathcal{L} + \lambda(H(t) - H(0))^2\) 只在訓練集軌跡上近似守恆:換初值、拉長時間,漂移重現( \(\lambda\) 太小壓不住,太大拖累擬合)。HNN 的向量場恆為 \(\mathbf{J}\nabla H_\theta\) 形, \(dH_\theta/dt \equiv 0\) 是逐點恆等式——任何 \(\theta\) 、任何初值、任意長時間都成立。懲罰是「希望它守恆」,架構是「它不可能不守恆」。

2. 簡易範例#

範例一:leapfrog vs Euler 的能量漂移。 程式 _code/08.1-hamiltonian-pendulum-leapfrog.py( \(m = l = g = 1\) , \(dt = 0.1\) ,1000 步):Euler 終值能量漂移 \(+5.079\) (能量範圍 \([0.46, 5.67]\) ,單擺越盪越高);leapfrog 漂移 \(-0.000109\) (範圍 \([0.4586, 0.4597]\) ,有界振盪)——同一個哈密頓量,積分器不同,長期行為天差地別;辛積分器是守恆的第二道鎖。

範例二:斜對稱的數值驗證。 程式末段取隨機 \(\mathbf{a}\) 印出 \(\mathbf{a}^\top\mathbf{J}\mathbf{a} = 0.00\times 10^{0}\) (機器精度級零)——上面的證明不是抽象代數,是跑得出來的 \(0\) 。