1. 项目概述当机器学习遇见物理学的“不变性”在物理学的世界里对称性与守恒量是理解宇宙运行规律的基石。从牛顿时代起我们就知道一个系统如果具有时间平移对称性那么它的能量就是守恒的如果具有空间平移对称性那么动量就保持不变。这些由诺特定理所揭示的深刻联系构成了经典物理学的核心框架。然而当我们面对复杂系统——无论是高温超导材料中电子的诡异行为还是量子多体系统中难以捉摸的纠缠结构抑或是湍流中瞬息万变的涡旋——传统的解析方法常常显得力不从心。我们很难写出一个简洁的方程来描述所有细节更不用说从中直接“看出”隐藏的对称性或守恒律了。这正是机器学习特别是深度学习方法开始大放异彩的舞台。我最初接触这个交叉领域时也带着疑问一个从海量数据中学习模式的“黑箱”工具如何能帮助我们理解物理学中最根本、最抽象的不变性原理经过一段时间的实践和文献梳理我发现机器学习并非要取代物理直觉而是成为物理学家手中的一把新“放大镜”和“计算尺”。它能够从高维、复杂甚至带有噪声的实验或模拟数据中自动挖掘出那些表征系统本质的“不变模式”并以一种可解释的方式呈现出来有时甚至能发现人类未曾预设的规律。这个项目的核心就是探讨如何利用机器学习特别是神经网络模型来发现物理系统中的对称性与守恒量。这不仅仅是应用一个现成的算法更涉及如何将物理先验知识如拉格朗日量形式、对称性约束巧妙地编码进模型架构如何设计损失函数来“引导”网络学习守恒量以及如何从训练好的模型中“反推”出人类可读的物理定律。无论是使用受限玻尔兹曼机RBM从自旋构型中提取类似重正化群流的特征还是训练一个“哈密顿神经网络”来保证能量守恒亦或是利用自编码器的潜在空间来可视化序参量其目标都是一致的让机器帮助我们“看见”那些隐藏在数据背后的、支配万物运行的基本法则。2. 核心思路从数据中“蒸馏”物理定律的三种范式将机器学习应用于物理定律发现并非只有一种固定的模式。根据问题的性质、数据的类型以及我们期望的输出形式大致可以归纳出三种主流的范式。理解这些范式是设计有效方案的第一步。2.1 范式一基于符号回归的“白盒”发现这是最直接、也最符合物理学家思维习惯的一种方式。其目标是从系统的轨迹数据如位置、速度随时间的变化中直接回归出一个简洁的数学表达式例如系统的拉格朗日量L或哈密顿量H。2012年之前以施密特和利普森的工作为代表这类方法主要依赖于遗传编程等符号回归技术。核心思想算法在由基本数学运算符、-、×、÷、sin、cos等和变量构成的巨大搜索空间中寻找一个能最精确拟合观测数据如运动轨迹的表达式。这个表达式本身就被视为发现的物理定律。优势与挑战其最大优势是结果的可解释性极强——直接给出了一个人类可读的公式。然而搜索空间随着表达式复杂度指数增长计算成本高昂且容易陷入局部最优找到的可能是过拟合的复杂表达式而非简洁的物理定律如欧姆剃刀原则所追求的。近年来结合了神经网络特征提取和符号回归的混合方法如AI Feynman在一定程度上缓解了这个问题先由神经网络学习一个平滑的函数近似再对其进行符号化简化。2.2 范式二基于神经网络的“灰盒”学习与解释这是目前最活跃的研究方向。我们不要求网络直接输出一个符号公式而是训练一个神经网络来近似某个物理量或变换然后通过分析网络内部的权重、激活值或结构来解读它学到了什么。核心思想将神经网络本身视为一个复杂的函数逼近器。通过精心设计网络架构和损失函数我们可以约束或引导网络学习具有特定物理意义的表示。例如守恒量学习训练一个网络I(x)使其在系统的一条轨迹x(t)上输出恒定值即I(x(t1)) ≈ I(x(t2))。这个网络I学习到的函数就是一个近似的守恒量。对称性学习训练一个网络来识别经过某种变换如旋转、平移前后数据是否“等价”或者训练一个网络来生成这种对称变换本身。序参量学习在相变研究中训练分类网络区分不同相然后通过解释网络决策所依赖的特征如通过相关器卷积网络找到对应的序参量。优势与挑战神经网络的表达能力极强能处理高维、非线性的复杂关系。关键在于“解释”这一步。如何从一个训练好的、包含数百万参数的“黑箱”中提取出简洁的物理洞察这催生了诸如相关性探测、权重可视化、网络手术逐步剪枝直至性能下降等一系列可解释性技术。这就像一个“灰盒”我们知道它的内部结构权重连接但需要工具来理解这些结构对应的物理含义。2.3 范式三物理信息嵌入的“架构约束”学习这是将物理知识最深度融合进机器学习模型的方法。我们不再寄希望于事后解释而是在模型设计之初就将已知的物理定律如牛顿第二定律、能量守恒作为硬约束或软约束编码进去。核心思想设计具有特定归纳偏置的神经网络架构使其输出必然满足某些物理规律。最著名的例子是哈密顿神经网络和拉格朗日神经网络。哈密顿神经网络网络不直接预测系统的加速度或下一时刻状态而是学习一个标量函数H(q, p)哈密顿量。系统的动力学则由哈密顿方程dq/dt ∂H/∂p, dp/dt -∂H/∂q自动导出。这样只要H不显含时间能量自然守恒。拉格朗日神经网络类似地网络学习拉格朗日量L(q, dq/dt)然后通过欧拉-拉格朗日方程推导出运动方程。对称性等变网络设计卷积层、群卷积层等使其输出在输入经历特定对称变换如旋转时也以可预测的方式变换。这强制网络学习对称性等变的特征。优势与挑战这种方法得到的模型通常具有更好的外推能力、更高的数据效率并且由于内置了物理规律其结果天生可信。挑战在于如何为未知系统设计合适的约束架构有时过强的约束可能会限制模型发现新物理的能力。它更适合于“已知规律未知参数”或“已知部分规律补充剩余部分”的场景。在实际项目中这三种范式往往混合使用。例如可能先用一个物理约束网络范式三学习系统的近似动力学再对其学到的哈密顿量进行符号回归范式一以获得解析式或者分析其内部表示范式二以发现新的不变量。3. 关键技术实现从数据准备到模型解释的全流程理论思路需要落地为具体的代码和实验。下面我将以一个相对经典的案例——从经典力学系统轨迹中发现守恒量——为例拆解一个完整的实现流程。这里我们采用上述的“范式二”即训练一个神经网络来学习守恒量并尝试解释它。3.1 数据生成与预处理构建物理上有意的训练集机器学习需要数据。对于物理系统数据通常来自数值模拟或实验观测。以二维平面上的开普勒问题行星绕恒星运动为例这是一个能量和角动量都守恒的系统。步骤1数值模拟生成轨迹我们使用四阶龙格-库塔法数值积分开普勒问题的运动方程。生成多条具有不同初始条件不同能量、角动量的轨迹。每条轨迹是一系列时间点上的状态向量[x, y, vx, vy]。import numpy as np from scipy.integrate import solve_ivp def kepler_equations(t, state, GM1.0): x, y, vx, vy state r np.sqrt(x**2 y**2) ax -GM * x / r**3 ay -GM * y / r**3 return [vx, vy, ax, ay] # 生成多条轨迹 trajectories [] conserved_values [] # 存储真实的能量和角动量用于验证 for _ in range(100): # 随机初始条件保证轨道有界 a np.random.uniform(1.0, 3.0) # 半长轴 ecc np.random.uniform(0.0, 0.7) # 偏心率 # 根据轨道参数计算初始位置速度略 # ... initial_state [x0, y0, vx0, vy0] t_span (0, 10*np.pi) # 积分多个周期 t_eval np.linspace(*t_span, 500) sol solve_ivp(kepler_equations, t_span, initial_state, t_evalt_eval, rtol1e-9) trajectories.append(sol.y.T) # 形状 (500, 4) # 计算真实守恒量 E 0.5*(vx0**2vy0**2) - GM/np.sqrt(x0**2y0**2) L x0*vy0 - y0*vx0 conserved_values.append([E, L])步骤2构建“正负样本对”我们的目标是训练一个网络I(state)使其对同一条轨迹上的所有状态输出相同的值守恒量而对不同轨迹的状态输出不同的值。这需要构造对比学习所需的样本对。正样本对从同一条轨迹中随机选取两个不同时刻的状态(s_i, s_j)它们对应的标签网络应输出的值应该相同。负样本对从两条不同的轨迹中分别选取一个状态(s_i, s_k)它们对应的标签应该不同。注意直接让网络输出一个具体的“标签值”是困难的因为我们不知道守恒量的具体数值尺度。更常用的技巧是使用“孪生网络”或“对比损失”让网络学习一个嵌入空间在这个空间里正样本对的距离很近负样本对的距离很远。网络最终学到的是守恒量的一种“等价类”表示。3.2 模型架构设计孪生网络与对比损失我们采用一种改进的孪生网络架构其核心思想是让网络学会一个“不变函数”。import torch import torch.nn as nn import torch.nn.functional as F class InvariantNetwork(nn.Module): 学习守恒量的核心网络 def __init__(self, input_dim4, hidden_dims[64, 32], latent_dim1): super().__init__() layers [] prev_dim input_dim for h_dim in hidden_dims: layers.append(nn.Linear(prev_dim, h_dim)) layers.append(nn.ReLU()) prev_dim h_dim layers.append(nn.Linear(prev_dim, latent_dim)) # 输出一个标量 self.net nn.Sequential(*layers) def forward(self, x): return self.net(x) class SiameseConservationNet(nn.Module): 孪生网络框架 def __init__(self, base_network): super().__init__() self.base_net base_network # 共享权重的基网络 def forward(self, x1, x2): I1 self.base_net(x1) I2 self.base_net(x2) return I1, I2损失函数设计这是引导网络学习守恒量的关键。我们不能直接用均方误差因为不知道目标值。这里使用一种基于轨迹扰动的对比损失思想受Conservation Laws from Trajectories论文启发正样本损失对于来自同一条轨迹的两个状态s_i,s_j我们希望I(s_i)和I(s_j)尽可能接近。使用均方误差L_pos (I(s_i) - I(s_j))^2。负样本损失防平凡解如果只有L_pos网络可能学会一个将所有输入映射到同一个常数的平凡函数。为了防止这个我们需要引入“负样本”。一种巧妙的方法是对轨迹进行物理上不合理的扰动生成“假”的状态。例如随机打乱一条轨迹上状态的速度方向或者给位置加上随机噪声。对于原始状态s_i和其扰动后的状态s_i我们希望I(s_i)和I(s_i)的输出不同。损失可以设计为L_neg max(0, margin - |I(s_i) - I(s_i)|)其中margin是一个超参数鼓励两者差异大于某个阈值。总损失L_total L_pos λ * L_negλ是权衡系数。def conservation_loss(I1, I2, I1_perturbed, margin1.0, lambda_neg0.1): I1, I2: 同轨迹不同时刻状态的网络输出 I1_perturbed: I1对应状态的物理扰动版本的网络输出 pos_loss F.mse_loss(I1, I2) # 正样本对输出应一致 neg_loss F.relu(margin - (I1 - I1_perturbed).abs()).mean() # 鼓励与扰动样本输出不同 total_loss pos_loss lambda_neg * neg_loss return total_loss, pos_loss, neg_loss实操心得margin和lambda_neg的选择至关重要。margin太小网络可能无法有效区分真实状态与扰动状态太大则可能导致训练不稳定。通常需要根据输出值的量级进行多次调试。一个经验是可以先观察正样本损失L_pos下降后网络输出的典型波动范围将margin设置为该范围的2-3倍。3.3 训练与验证不仅仅是损失下降训练过程相对标准但验证需要物理直觉。# 训练循环伪代码 model SiameseConservationNet(InvariantNetwork()) optimizer torch.optim.Adam(model.parameters(), lr1e-3) for epoch in range(num_epochs): for batch in dataloader: states_a, states_b, states_perturbed batch # 同轨迹对扰动状态 I_a, I_b model(states_a, states_b) I_a, _ model(states_a, states_perturbed) # 获取扰动状态的输出 loss, pos_loss, neg_loss conservation_loss(I_a, I_b, I_a_perturbed) optimizer.zero_grad() loss.backward() optimizer.step()验证策略轨迹内一致性在一条训练未见的轨迹上计算网络对所有状态I(state)的输出。理想情况下这应该是一条近乎水平的直线忽略数值误差。计算其标准差标准差越小说明学到的量在轨迹上越守恒。跨轨迹区分性计算不同轨迹对应不同能量/角动量的I(state)的平均值。这些平均值应该彼此不同并且理想情况下与真实的守恒量如能量E单调相关。我们可以画散点图看IvsE是否呈现清晰的函数关系。物理可解释性测试这是最关键的。尝试用学到的I(state)来预测物理行为。例如在开普勒问题中角动量L守恒意味着掠面速度恒定。我们可以用网络输出的I值对轨迹进行排序看看是否与根据真实角动量计算出的掠面速度顺序一致。3.4 模型解释从网络输出到物理公式训练出一个在轨迹上输出稳定值的网络I(x, y, vx, vy)只是第一步。我们更希望得到一个人类可理解的解析表达式。方法1符号回归拟合将训练好的网络I视为一个黑箱函数在一个大的状态数据集上采样输入-输出(state, I(state))。然后使用符号回归工具如gplearn、PySR或AI Feynman对这个数据集进行拟合寻找一个简洁的数学表达式来近似I。# 假设我们有一个训练好的模型 trained_model 和采样数据 X_sample, y_sample trained_model(X_sample) import pysr # 使用PySR进行符号回归 model pysr.PySRRegressor( niterations100, binary_operators[, -, *, /], unary_operators[square, inv], # 平方倒数 complexity_of_constants2, maxsize20, # 表达式最大复杂度 ) model.fit(X_sample, y_sample) print(model.equations) # 查看找到的最佳表达式这个过程可能发现I ≈ 0.5*(vx**2 vy**2) - 1/sqrt(x**2y**2)这正是能量的表达式或者发现I ≈ x*vy - y*vx这是角动量的z分量。方法2网络权重分析与可视化对于简单的网络可以直接分析其权重。例如如果输入层到第一个隐藏层的某个权重只与x和vy以及y和vx强相关而与其他变量权重接近0这可能暗示网络学到了类似x*vy - y*vx的组合。更系统的方法是使用输入梯度显著性图Saliency Map或积分梯度计算输出I对每个输入变量的敏感度。如果∂I/∂x与vy强相关∂I/∂y与-vx强相关这同样是角动量形式的强烈提示。注意事项符号回归的结果需要仔细进行物理量纲检查。网络输出I是一个无量纲的数取决于权重初始化、激活函数等但真实的守恒量如能量、角动量有明确的量纲。符号回归找到的表达式可能差一个常数因子或加上一个常数偏置。需要结合物理背景判断其形式是否正确。例如能量表达式在势能零点选择不同的情况下可以差一个常数但其变量依赖关系动能势能应是确定的。4. 进阶应用与挑战从经典到量子从监督到无监督上述流程展示了在经典力学系统中发现守恒量的基本方法。但该领域的前沿已远远超出这个范围面临着更复杂的挑战。4.1 处理量子多体系统在量子系统中状态由波函数或密度矩阵描述守恒量是与系统哈密顿量对易的算符。机器学习的方法需要相应调整。数据数据可能来自量子蒙特卡洛模拟产生的样本构型如自旋组态或者是对易子[H, O]的测量结果。方法一种方法是利用受限玻尔兹曼机作为变分波函数。RBM的参数化波函数ψ(s; W)可以表示复杂的量子态。通过变分蒙特卡洛方法优化参数W以逼近基态。在这个过程中分析RBM权重随外部参数如磁场强度的变化有时可以揭示出与相变或守恒律相关的特征模式。另一种方法是直接处理量子可观测量数据使用类似于经典案例中的对比学习框架但输入是算符的期望值或测量投影。挑战量子系统的希尔伯特空间维度随粒子数指数增长维度灾难。机器学习模型必须能有效处理这种高维性同时保持对量子纠缠等特性的表达能力。4.2 无监督发现与相变识别在许多情况下我们连系统有哪些相都不知道更不用说守恒量了。无监督学习特别是自编码器在这里发挥了巨大作用。变分自编码器发现序参量在相变研究中我们将不同温度、压强下模拟得到的系统微观构型如图像化的自旋排列输入VAE。编码器将高维构型压缩到低维潜在空间。一个关键的发现是在发生连续相变的系统如伊辛模型中潜在空间中的一个维度潜在变量z的值会随着控制参数如温度变化而平滑变化并且在临界点附近方差增大。这个潜在变量z的行为非常类似于序参量如磁化强度。通过分析z与系统宏观量的关系可以确认它就是我们寻找的序参量。操作流程在跨越相变点的不同参数下采集大量系统快照{X_i}。用VAE进行无监督训练目标是重构输入X_i。训练完成后将所有X_i通过编码器得到其潜在表示z_i。绘制z_i的统计量如均值、方差随控制参数的变化曲线。在相变点通常会观察到均值发生跃变一级相变或方差出现峰连续相变。通过相关性分析将潜在变量z与物理学家提出的候选序参量如磁化强度、结构因子进行对比验证。实操心得VAE的瓶颈层维度潜在空间大小需要仔细选择。太小会导致信息丢失重构效果差太大则可能引入噪声使得序参量信号被淹没在无关维度中。通常从一个较小的维度如2-10开始尝试并观察潜在变量是否呈现出清晰的、与物理参数相关的结构。此外在潜在空间进行聚类如k-means有时可以直接揭示出不同的相。4.3 发现未知对称性这是更具探索性的任务系统可能存在我们尚未知晓的连续或离散对称性。连续对称性可以训练一个神经网络T_θ(x)来预测对输入x进行“微小变换”后的结果。通过优化网络参数θ使得某个目标函数F(T_θ(x))例如系统的能量在变换下保持不变。如果网络能学习到一个非平凡的、平滑的变换T_θ并且该变换能保持目标函数不变那么这个T_θ就可能生成一个连续对称变换的生成元。再结合诺特定理就有可能推导出新的守恒量。离散对称性可以将其视为一个分类或匹配问题。训练一个网络来判断两个构型x和x是否通过某个离散对称群如空间反演、时间反演、旋转90度中的操作相关联。网络学到的匹配规则实质上就是在识别该对称群。挑战这类方法高度依赖于损失函数的设计和网络架构的约束。很容易学到恒等变换这样的平凡解。需要引入额外的正则化或对比损失来鼓励网络发现非平凡的对称性。5. 常见问题、陷阱与调优实录在实际操作中会遇到各种各样的问题。以下是我在复现相关研究时踩过的一些“坑”及解决方案。5.1 网络学不到守恒量输出为常数问题表现无论输入什么状态网络I(state)的输出都几乎是一个常数。正样本损失L_pos可以降得很低但学到的量没有物理意义。根本原因负样本损失L_neg太弱或设计不合理无法阻止网络坍缩到平凡解。排查与解决检查扰动强度生成负样本的“物理扰动”必须足够“不合理”以至于改变守恒量的值。对于力学系统随机打乱位置和速度的关联是有效的。可以尝试多种扰动策略如添加不满足运动方程的随机加速度、将速度向量旋转一个随机角度等。调整损失权重λ_neg和间隔margin逐步增大λ_neg观察L_neg是否开始上升。同时监控正负样本对输出之间的距离分布。理想情况下正样本对距离应集中在0附近负样本对距离应大于margin。尝试不同的对比损失除了上述的间隔损失Triplet Loss可以尝试InfoNCE损失常用于对比学习或者直接使用**“轨迹变形”** 方法。后者的思路是轻微变形一条轨迹生成一条物理上不可能的轨迹然后要求网络在真实轨迹上输出恒定值在变形轨迹上输出变化的值。这通常比简单的状态扰动更有效。5.2 学到的量是真实守恒量的复杂组合或函数问题表现网络输出在单条轨迹上守恒性很好但符号回归得到的表达式非常复杂或者与多个真实守恒都相关。根本原因如果系统存在多个独立守恒量如能量和角动量网络可能学到它们的任意函数f(E, L)只要这个函数在单条轨迹E和L固定上是常数即可。这满足了训练目标但不是我们想要的“基本”守恒量。排查与解决网络放缩法Neural Deflation这是目前最有效的解决方案。首先训练第一个网络I1学习第一个守恒量。然后在训练第二个网络I2时在其损失函数中加入一项正则化项强制I2的输出与I1的输出不相关例如最小化它们的协方差。如此迭代可以逐步发现一组相互独立的守恒量。分析跨轨迹变化绘制不同轨迹对应的网络输出平均值I与真实能量E和角动量L做三维散点图或两两二维图。如果I在E-L平面上呈现为一个光滑曲面而不是沿着E或L轴方向的简单曲线则说明网络学到了复合函数。此时需要采用上述方法进行解耦。5.3 对噪声和数据集偏差过于敏感问题表现在模拟的干净数据上表现良好但加入少量噪声或使用不同初始条件分布的数据集时性能急剧下降。根本原因网络可能过拟合了数据中的特定模式或噪声没有学到鲁棒的物理不变量。排查与解决数据增强在训练数据中主动加入各种噪声高斯噪声、随机丢失等和扰动。这能迫使网络学习更本质的、对微小干扰不变的特征。模型正则化在损失函数中加入L1或L2权重正则化或者使用Dropout层防止网络过于复杂。架构引入物理归纳偏置如果已知守恒量可能是某些变量的低阶多项式如能量是速度的二次型可以在网络靠近输入的层使用多项式特征扩展或使用更简单的模型如多项式网络。这能大大降低过拟合风险提升泛化能力。集成学习训练多个网络取它们输出的平均或进行投票可以提高稳定性。5.4 可解释性分析失败问题表现网络性能很好但符号回归得不到简洁公式或者梯度分析结果混乱。根本原因网络学到的函数可能过于复杂或者潜在表示与人类可理解的物理量之间存在非线性的、难以简化的映射。排查与解决简化网络首先尝试用尽可能小的网络如1-2个隐藏层每层几个神经元去解决问题。小网络的函数表达能力有限更可能学到简单的关系也更容易解释。分阶段训练先训练一个大网络达到好的性能然后用它作为“教师”去蒸馏训练一个更小、更简单的“学生”网络。学生网络通常更容易解释。使用专为可解释性设计的架构如相关器卷积神经网络。其卷积核被设计为直接计算物理系统中可能存在的局部关联函数如最近邻自旋乘积。网络的决策过程可以直接归结为这些关联函数的线性组合物理意义清晰。关注变化趋势而非精确值有时网络输出与真实守恒量之间存在一个复杂的单调映射。此时可以更关注其相对顺序或导数行为。例如在网络输出与温度的关系图中关注其突变点是否对应相变临界温度而不是其绝对数值。机器学习为物理系统中对称性与守恒量的发现提供了强大的数据驱动工具。它并非万能其成功严重依赖于如何将物理洞察转化为模型架构、损失函数和训练策略。从我的实践经验来看最有效的方法往往是“物理引导的机器学习”我们先利用物理知识提出假设例如守恒量可能是状态变量的多项式然后设计一个具有相应归纳偏置的模型例如多项式网络或相关器网络去验证或发现它。纯粹的“黑箱”方法虽然灵活但解释和信任成本很高。这个领域的魅力恰恰在于这种“人机协作”——人类提供直觉和框架机器负责从数据中挖掘细节和验证猜想最终共同揭示出自然界更深层的简洁与优美。未来随着可解释性AI和神经符号计算的发展我们有望看到更多能直接输出简洁数学公式、并能与物理学家自然交互的“AI科学家”助手这将从根本上加速基础科学的探索进程。