Hamiltonian Neural Networks: Does a Financial System Conserve Anything?
關於哈密頓神經網絡,您可以問兩個問題,其中只有一個是有趣的。
無聊的問題是「HNN 穩定嗎?」答案是肯定的,而這是定理,而不是實驗。將漢密爾頓方程式編碼到架構中,與辛格式集成,後向誤差分析可以讓您在指數長的範圍內得到有限的能量誤差。沒有涉及任何金融方面的內容。你不需要回測就能相信它。
有趣的問題是穩定性結果悄悄預設的問題:**金融狀態向量是否承認保守量? ** HNN 不會發現 是否存在。它假設 存在並在該假設下找到最好的一個。如果市場對於您選擇的座標沒有守恆的 ,網路仍然會收斂,仍然會產生平滑的標量,仍然會積分而不會崩潰 - 整個事情將是一個非常穩定的虛無模型。
這篇文章建造了機器,然後用後半部分試圖打破它。所測試的聲明是狹隘且可證偽的:所選的 對(例如對數價格和收益 EMA)是規範共軛,這意味著 實際上適用於某些 。這是一個經驗主義的主張,草案本身的理論部分並沒有給出相信它的理由。
哈密頓力學:這裡其實有什麼新內容

相空間、動力系統、軌跡和軌道已經是本部落格中的詞彙 - 請參閱 algotrading 中的吸引子 了解定義,以及 復流形 透過 Takens 嵌入進行相空間重建。以下內容假設它們。
新的部分是辛結構。經典力學有兩個等效的公式。牛頓給出。 Hamilton 給了一個標量函數 ,所有動力學都遵循該函數:
三個結果很重要,但它們都不適用於通用動力學模型:
- ** 沿軌跡守恆。 ** 此系統被限制在一個恆定能量表面-相空間內的一個低維流形。這是對國家發展方向的嚴格限制,而不是一種趨勢。
- **辛2-型 被保留。 ** 相空間體積完全守恆(劉維爾定理)。軌跡不能收斂到吸引子上;流是不可壓縮的。
- **動力學是時間可逆的。 ** 向後執行流程即可準確恢復初始狀態。
第 2 點值得暫停,因為它是本部落格中與其他所有內容最尖銳的矛盾點。劉維爾定理說哈密頓系統「沒有吸引子」。體積保持流不能收縮到任何東西上。如果你相信市場具有吸引結構(吸引子文章認為確實如此),那麼你就已經致力於市場不是嚴格意義上的哈密爾頓式的。這是真正的衝突,而不是技術問題,這就是為什麼下面的耗散擴展不是事後才想到的原因。
為什麼積分器很重要
使用樸素積分器(Euler,RK4)模擬哈密頓系統,計算出的軌跡慢慢地偏離恆定能量表面。局部截斷誤差小; 幾何誤差是系統性的。從長遠來看,模擬在質量上會變得錯誤:本應閉合的軌道開始螺旋上升。
由於更深層的原因,標準神經網路也存在著同樣的缺陷。將狀態映射到導數的 MLP 沒有保存任何內容的機制。它充分學習局部動態並累積複合的錯誤。
守恆聲明簡介

這篇部落格已經論證了市場遵循類似守恆的原則——Navier-Stokes for algotrading,第 2 部分詳細闡述了案例,從流動性品質到流體動力學風險管理,並提供了正確的經濟物理學框架。均值變異數最佳化同樣已經是本部落格上的拉格朗日系統:請參閱馬科維茲投資組合理論(約束二次形式)與Almgren-Chriss最優執行(風險預算/Q識別),其中KEEP17XQ2角色的角色。
這裡沒有重新推導這些內容,因為有趣的舉動是不同的。這些文章使用保護作為激發模型的「隱喻」。 HNN 將守恆轉變為“架構約束”,即使資料要求模型遵守該約束,模型也不能違反該約束。這種差異——軟類比與硬結構——是接下來的全部內容,它是雙向的:資料不滿足的限制不是先驗,而是錯誤。
HNN 架構:結構化守恆與懲罰守恆

The general physics-informed mechanism — take autograd derivatives of the network output with respect to its inputs, form a physics residual, minimise it — is already demonstrated in the Navier-Stokes PINN, whose physics_loss builds u_t, u_x, u_xx via autograd.grad and squares the residual. The HNN uses that same mechanism with one change, and the change is the whole point.
PINN 懲罰違反物理定律的行為。殘差是一個帶有權重的損失項;優化器將其與數據擬合進行權衡。降低權重,或是傳遞有衝突的數據,網路就會很樂意違反法律。保護是一種偏好。
HNN 使保護成為結構性。它不學習向量場 ,該向量場不受約束且不守恆。它學習標量 並從單一梯度導出向量場的兩個分量:
由於兩個導數都來自一個標量勢,因此所得到的場在構造上是辛梯度的。 ,同樣適用於每個參數設定 — 包含隨機初始化、完全未經訓練的網路。沒有重量可以調低。守恆是參數化的代數恆等式,而不是目標中的術語。
這是比 PINN 提供的更強有力的保證,並且它具有更尖銳的故障模式。損失將導出的導數與觀察到的數據進行比較:
如果觀察到的 場不是任何東西的辛梯度 - 如果它具有參數化無法表示的旋度 - 損失根本無法達到零。剩餘樓層並不是優化失敗。 **它是對數據距離承認哈密頓量有多遠的測量。 ** 該數字是整個架構中最有用的輸出,也是本文其餘部分組織的數字。
網路本身並不引人注目:從 到兩個寬度為 200 的 tanh 層的 MLP 到標量輸出。
座標
對於金融應用, 是廣義部位(對數價格、投資組合權重、因子暴露), 是廣義動量(變化率、動量指標、流量變數)。 就是網路可以找到的任何不變量——可能是總市值,可能是風險度量,可能是沒有經濟讀數的抽象量,也可能什麼都沒有。
配對的選擇並不無辜,這就是標準呈現的差距。 「 = 對數價格, = 收益 EMA」沒有任何內容表明它們是共軛。共軛是一種特定的結構關係 - 必須是與 規範配對的動量,使得 對於某些 成立。斷言它和測試它是不同的活動,而將 HNN 應用於金融的文獻主要是前者。
| (位置) | (動量) |
|---|---|
| 對數價格 | EMA 回報 |
| 投資組合權重 | 體重變化率 |
辛積分器

學習,問題就解決了一半。生成軌跡需要對哈密爾頓方程式進行積分,而積分器可能會破壞架構所保證的功能。
辛積分器 完全保留。相空間體積守恆, 圍繞其真實值振盪,誤差有限,而不是長期漂移,且軌道在質量上保持正確。 RK4 為您提供更小的每步誤差,並且沒有這些屬性。
最簡單的辛方案是 Stormer-Verlet (leapfrog):
對於可分離的 ,這些是明確更新。金融哈密頓量通常是不可分離的——動量動態取決於價格,反之亦然——因此一般情況需要隱式步驟、高階方法(Yoshida、Forest-Ruth)或下面的 SympNets 路線。
童等人。 (2020) 表明,將蛙跳步驟組合為網路層會產生通過構造辛的架構:每一層都是一個積分步驟,深度等於步數,並且學習的映射 準確地保留了辛結構。
穩定性保證:真實的,但不是重點

穩定性屬性來自定理,這正是它們無法證明市場的原因。
**後向誤差分析。 ** 應用於 的辛積分器精確求解附近的哈密頓量 。計算出的軌跡是輕微擾動系統的精確軌跡,KAM 理論限制了指數長時間內的能量誤差。
**李雅普諾夫穩定性。 ** 如果 在平衡時具有最小值,則 本身就是證明平衡穩定的李雅普諾夫函數。無需單獨分析。
这两个结果都以 是正确的对象为条件。他們告訴你所學系統的模擬是忠實的;他們沒有提及學習系統是否是市場。完美保存的 适合 0.9 的残差基底,是对工件的稳定模拟。
| 物業 | 標準NN+RK4 | HNN + 辛 |
|---|---|---|
| 能量漂移超過 1000 步 | 世俗,累積 | 有界,振盪 |
| 時間可逆 | 沒有 | 是的 |
| 相空間體積 | 未保存 | 完好保存 |
| 可代表的吸引子 | 是的 | 沒有(劉維爾) |
| 可解釋的不變量 | 無 |
實作

核心 HNN 模組
import torch
import torch.nn as nn
class HamiltonianNN(nn.Module):
"""Learns a scalar H(q, p); derives dynamics via Hamilton's equations."""
def __init__(self, input_dim: int, hidden_dim: int = 200):
super().__init__()
self.net = nn.Sequential(
nn.Linear(input_dim, hidden_dim), nn.Tanh(),
nn.Linear(hidden_dim, hidden_dim), nn.Tanh(),
nn.Linear(hidden_dim, 1),
)
def hamiltonian(self, q: torch.Tensor, p: torch.Tensor) -> torch.Tensor:
return self.net(torch.cat([q, p], dim=-1))
def time_derivative(self, q: torch.Tensor, p: torch.Tensor):
q = q.requires_grad_(True)
p = p.requires_grad_(True)
H = self.hamiltonian(q, p)
dH_dq, dH_dp = torch.autograd.grad(H.sum(), [q, p], create_graph=True)
return dH_dp, -dH_dq # dq/dt, dp/dt
辛蛙跳積分器
class LeapfrogIntegrator:
"""Stormer-Verlet integrator. Preserves the symplectic structure."""
def __init__(self, hnn: HamiltonianNN, dt: float = 0.01):
self.hnn, self.dt = hnn, dt
def step(self, q: torch.Tensor, p: torch.Tensor):
_, dp_dt = self.hnn.time_derivative(q, p)
p_half = p + 0.5 * self.dt * dp_dt
dq_dt, _ = self.hnn.time_derivative(q, p_half)
q_new = q + self.dt * dq_dt
_, dp_dt = self.hnn.time_derivative(q_new, p_half)
return q_new, p_half + 0.5 * self.dt * dp_dt
def integrate(self, q0, p0, n_steps: int):
traj_q, traj_p, q, p = [q0], [p0], q0, p0
for _ in range(n_steps):
q, p = self.step(q, p)
traj_q.append(q); traj_p.append(p)
return torch.stack(traj_q), torch.stack(traj_p)
相空間座標
對數價格、差異收益、EMA動量和滾動波動性是本部落格的標準結構——擴散模型管道和複雜流形]都提供了它。這裡唯一重要的兩行是定義共軛對的行:
q = np.log(prices)[w:-1] # generalised position
p = ewma(np.diff(np.log(prices), axis=0), w)[w-1:-1] # generalised momentum
下游的一切——有限差分 、、長度對齊、將派生導數與 Adam 觀察到的導數進行匹配的訓練循環——都是機械的。
守恆檢查
def measure_conservation(hnn, integrator, q0, p0, n_steps=1000):
"""Energy drift along an integrated trajectory."""
with torch.no_grad():
traj_q, traj_p = integrator.integrate(q0, p0, n_steps)
energies = torch.stack([
hnn.hamiltonian(traj_q[i], traj_p[i]) for i in range(n_steps + 1)
]).squeeze().numpy()
return {
"H_initial": energies[0],
"H_final": energies[-1],
"drift": energies[-1] - energies[0],
"oscillation": energies.std(),
"relative_error": abs(energies[-1] - energies[0]) / abs(energies[0]),
}
請注意此函數不測試什麼。它測量積分器是否保留 ——根據定理,無論 是否意味著什麼,它都會保留 。學習的哈密頓量的樣本內守恆並不是證據。重要的測試是不同的。
證偽測試

誠實的實驗分為三個部分,其設計目的是讓負面結果提供資訊而不是令人尷尬。
**1.殘差下限。 ** 在實際數據上擬合 並報告收斂損失,而不是守恆。辛梯度參數化不能表示具有旋度的向量場;下限測量觀察到的動力學的非哈密頓分量。在相同的數據上擬合無約束 MLP 作為參考 - 它沒有結構限制,因此兩層之間的差距 * 是 * 哈密頓假設的成本,以問題的損失單位表示。
**2.樣本外守恆。 ** 適合一個窗口,然後沿著觀察到的樣本外軌跡評估 - 真實價格路徑,而不是綜合路徑。如果 確實是規範的,那麼 沿著它從未見過的資料保持大致恆定。如果 偏離樣本,則守恆量是樣本內的產物,且架構的保證不起作用。
**3.協調消融。 ** 這是理論部分要求的部分,似乎沒有金融 HNN 的演示。沒有任何證據表明對數價格和 EMA 收益是共軛的;據斷言。因此,相互測試配對 —(對數價格、EMA 收益)、(對數價格、原始收益)、(投資組合權重、權重變化率) — 並根據樣本外 穩定性對它們進行排名。反對以洗牌回報替代作為控制:破壞時間結構,保持邊際分佈,重新調整。如果替代項產生可比較的 穩定性,則「守恆量」是參數化的屬性,而不是市場的屬性。
我的先驗,在事實之前陳述,以便可以根據結果進行檢查:這失敗了。推理在上面的初級讀物中——劉維爾定理禁止吸引子,市場似乎具有吸引結構,並且下面的兩個逃生艙口都承認嚴格的哈密頓假設不成立。如果剩餘下限很高,且樣本外 在每次配對中都不穩定,那麼這在物理知識先驗中是一個乾淨的測量負值,並且該博客之前已經發布過這些內容(誠實的負值 ,洩氣的 Sharpe])。對優雅的理論進行衡量的否定比未經測試的教程更有價值。
如果守恆失敗:耗散擴展

真實市場洩漏。交易成本、滑點和資訊衰減會消除系統的能量,嚴格守恆的 無法代表這一點。存在兩種原則上的放寬,兩者都應被理解為對假設太強的讓步,而不是改進:
- 保形哈密頓量:具有學習耗散率 的模型 。所安裝的 的大小本身就是一種測量——系統離保守值有多遠。
- 哈密爾頓港:,其中 為辛矩陣, 為耗散矩陣, 為外強迫(新聞、流量)。這裡 相對於 直接量化了偏離。
兩者都恢復了表示吸引子的能力,但代價是激勵該架構的有界誤差保證。簡單來說,這就是交易:你可以擁有劉維爾,也可以擁有耗散,市場似乎想要第二種。
Related open problems: financial Hamiltonians are non-separable (requiring implicit or higher-order symplectic steps, or SympNets learning symplectic maps directly), and markets operate on multiple time scales that a single is unlikely to capture — hierarchical Hamiltonians for fast and slow dynamics, or an adiabatic treatment of slow variables as parameters of a fast-scale .
## 結論

機器運轉起來。學習標量 ,從其梯度導出向量場,辛積分,您就可以免費獲得代數恆等式守恆、數千步的有界誤差、精確的時間可逆性和李亞普諾夫函數。這些主張中的每一個都是一個定理,而且都不需要驗證。
需要驗證的是前提。 HNN 不會測試保守量是否存在——它們會假設它並在假設下進行最佳化,無論如何都會收斂到一個平滑、穩定、表現良好的模型。剩餘下限和樣本外 穩定性是區分「市場保留某些東西」和「參數化總是產生某些東西」的唯一兩個數字。
所以這篇文章結束的問題不是 HNN 是否穩定。問題在於這種優雅是否能經受住與 BTCUSDT 的接觸——在這些數字出現在頁面上之前,對待金融機器學習中的每一項保護主張(包括這一主張)的正確態度是,它還沒有經過測試。
## 參考
1.Greydanus, S.、Dzamba, M. 與 Sprague, J. (2019)。 哈密爾頓神經網路。 NeurIPS 2019。 2. 童Y.、熊S.、何X.、潘G.、朱B. (2020)。 基於辛積分器的深度哈密頓網路。 arXiv 預印本。 3.Baaquie, B.E. (2000)。 金融市場中的哈密爾頓。 arXiv 預印本。 4. Cotler, J. 與 Rezchikov, S. (2023)。 求解選擇權價格動態的高效率哈密頓模擬。物理評論研究。 5. Gonon, P. 和 Ortega, J.-P。 (2009)。 股票市場和量子動力學。 arXiv 預印本。 6.Greydanus, S. (2019)。 哈密爾頓神經網路 - 部落格文章。 7.桑托斯,C.等。 (2022)。 辛動量神經網路。 PMLR。
Authors
Trading-systems engineer
Trading-systems engineer building bots since 2017: cross-exchange arbitrage (connected up to 30 venues), cointegration-based pairs arbitrage across spot and futures, scalping, news and sentiment-driven strategies, trend algorithms, and portfolio management and balancing algorithms. Also builds sub-millisecond order execution, big-data warehouses, backtesting engines, AI agents, and trading interfaces (incl. open-source profitmaker.cc). Stack: JS/TS, Python, Rust/Zig/Go, DevOps, backend, frontend, architecture.