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最优执行(风险预算/识别),其中恰好扮演共轭动量的角色。
这里没有重新推导这些内容,因为有趣的举动是不同的。这些文章使用保护作为激发模型的“隐喻”。 HNN 将守恒转变为“架构约束”,即使数据要求模型遵守该约束,模型也不能违反该约束。这种差异——软类比与硬结构——是接下来的全部内容,它是双向的:数据不满足的约束不是先验,而是一个错误。
HNN 架构:结构化守恒与惩罚守恒

一般的物理信息机制——对网络输出相对于其输入进行自动求导,形成物理残差,将其最小化——已经在Navier-Stokes PINN中进行了演示,其physics_loss通过autograd.grad构建u_t、u_x、u_xx并对残差进行平方。 HNN 使用相同的机制,但做了一个更改,而更改就是重点。
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])。对一个优雅的理论进行衡量的否定比未经测试的教程更有价值。
如果守恒失败:耗散扩展

真实市场泄漏。交易成本、滑点和信息衰减会消除系统的能量,严格守恒的 无法代表这一点。存在两种原则上的放宽,两者都应被理解为对假设太强的让步,而不是改进:
- 保形哈密顿量:具有学习耗散率 的模型 。所安装的 的大小本身就是一种测量——系统离保守值有多远。
- 哈密尔顿港:,其中 为辛矩阵, 为耗散矩阵, 为外强迫(新闻、流量)。这里 相对于 直接量化了偏离。
两者都恢复了表示吸引子的能力,但代价是激励该架构的有界误差保证。简单地说,这就是交易:你可以拥有刘维尔,也可以拥有耗散,而市场似乎想要第二种。
相关的开放问题:金融哈密顿量是不可分离的(需要隐式或高阶辛步骤,或者SympNets直接学习辛映射),并且市场在单个不太可能捕获的多个时间尺度上运行——用于快速和慢速动态的分层哈密顿量,或者将慢变量作为快速尺度的参数的绝热处理。
## 结论

机器运转起来。学习标量 ,从其梯度导出向量场,辛积分,您就可以免费获得代数恒等式守恒、数千步的有界误差、精确的时间可逆性和李亚普诺夫函数。这些主张中的每一个都是一个定理,并且都不需要验证。
需要验证的是前提。 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.