
经典密度泛函理论classical density functional theory, cDFT与等变学习equivariant learning前者来自统计力学后者来自几何深度学习把它们放在一起本质上是为了解决一个很实际的问题如何构造一个既准确又具有物理对称性的“可迁移三维经典密度泛函”。传统 cDFT 在处理非均匀流体时非常依赖解析泛函近似而解析泛函往往只对特定体系成立神经网络则能表示复杂映射却又容易丢失三维空间中的旋转、平移对称性。等变学习恰好提供了一组对称性约束让网络学到的是符合物理规律的自由能或密度响应关系而不是单纯记忆外势模板。下面这篇文章会按照“概念 — 原理 — 建模路线 — 数据构造 — 代码骨架 — 问题排查”的顺序展开。无论你是刚接触密度泛函理论、想用机器学习改进经典泛函还是已经在做分子模拟数据驱动的自由能模型都能从里面找到一套较完整的实现思路。1. 从经典密度泛函到“学习一个泛函”1.1 经典密度泛函理论解决什么问题经典密度泛函理论是研究非均匀流体的重要工具。所谓非均匀流体指的是密度不是常数而是在空间中出现分布变化例如狭缝中的胶体、纳米孔道中的气体吸附、固液界面附近的溶剂分布、成核过程中的密度涨落等。统计力学中如果直接用分子模拟去扫描所有外势参数计算成本会很高cDFT 则把问题转化为密度分布 (\rho(\mathbf{r})) 的能量变分问题核心公式可以写为[ \Omega[\rho] F[\rho] \int \rho(\mathbf{r}) \left( V_{\text{ext}}(\mathbf{r}) - \mu \right) d\mathbf{r} ]其中 (\Omega[\rho]) 是巨势泛函(F[\rho]) 是内在自由能泛函(V_{\text{ext}}(\mathbf{r})) 是外部势场(\mu) 是化学势。真实系统的平衡密度分布满足巨势对密度的变分极值条件[ \frac{\delta \Omega[\rho]}{\delta \rho(\mathbf{r})} 0 ]这个变分条件把“找到平衡密度”变成了“最小化一个泛函”。理想气体部分 (F_{\text{id}}[\rho]) 是严格已知的真正的困难在于超额自由能部分 (F_{\text{ex}}[\rho])它包含了粒子之间的相互作用、排空效应、关联效应等。量子力学中的 Kohn-Sham DFT 处理的是电子密度而经典 DFT 处理的是分子、胶体或原子的中心数密度。两者在“泛函未知”这一点上非常相似但物理对象和尺度不同。经典 DFT 不需要求解薛定谔方程计算量通常比量子 DFT 小很多同时又能描述比原子模拟更大尺度的体系因此在软物质、界面科学、电化学双电层等领域很有吸引力。1.2 为什么需要构造“可迁移的”三维 cDFT传统的超额自由能泛函通常来自解析推导。例如硬球体系可以用基本度量理论Fundamental Measure Theory, FMT获得较准确的排空效应描述一些简单流体可以用平均场近似来处理长程吸引力。问题是真实体系往往同时存在硬球排斥、短程吸引、氢键、极性、电荷、聚合链等多体效应想用一个解析表达式同时覆盖所有物理机制非常困难。机器学习方法提供了一个不同思路与其从第一性原理手推泛函不如用大量高精度的参考数据训练一个模型让模型自动学习外势与密度之间的复杂映射关系。这里的“可迁移”包含三个层面迁移到不同的外势形状不只是训练集中出现过的孔道或缝宽迁移到不同热力学状态点例如温度和化学势在一定范围内变化迁移到不同体系尺寸或边界条件例如从周期性孔道迁移到孤立纳米颗粒周围的吸附层。如果把神经网络直接当作黑箱来拟合通常很难做到真正可迁移。普通全连接网络输入密度或外势的一维展开向量会忽略空间坐标之间的相对关系普通三维卷积网络虽然能局部感知却不具备旋转等变性。因此“等变学习”成了构造可迁移三维 cDFT 模型时非常自然的选项。1.3 本文所指的“三维 cDFT 学习任务”具体是什么在工程上最常见的监督任务是给定一个外部势场 (V_{\text{ext}}(\mathbf{r}))预测平衡态下的三维密度分布 (\rho(\mathbf{r}))。这个映射可以看成一种“密度响应学习”。还有一种更接近 DFT 理论框架的任务是学习超额自由能泛函 (F_{\text{ex}}[\rho])。模型以密度场为输入输出自由能数值或局域自由能密度之后通过自动微分求出泛函导数再用迭代优化获得平衡密度。这个方向理论上更严格但训练和推理的难度也更高。文章后文讨论的路线以前者为主预测三维密度场并用等变图神经网络作为骨干网络。之所以选择“外势到密度”作为切入任务是因为训练数据容易从分子模拟中获得监督信号明确而且密度场本身就是可视化、可验证的量。理解这条路线之后再扩展到“学习自由能泛函”会更有基础。2. 等变学习为什么必须强调三维对称性2.1 物理系统中的旋转与平移对称性经典 DFT 面对的系统通常位于三维空间。如果整个坐标系统一旋转一个角度那么外势、密度分布、粒子间相互作用都应该随之旋转而体系的自由能数值保持不变。也就是说物理规律在三维欧几里得空间中具有旋转等变性。对于一个预测模型如果输入输出关系不具备这个对称性可能发生的情况是同样的物理体系人为旋转坐标后模型预测出不同的吸附层结构或不同的密度分布这显然不符合物理事实。很多刚接触深度学习的研究者会想我在训练数据里加入旋转增强是不是就能解决效果有限。数据增强只能让网络“近似”学会旋转不变性而无法从结构上保证任何未见过旋转角度下的严格等变。等变网络则把对称性直接编码进网络层与消息传递过程中。2.2 等变与不变的分工“等变”和“不变”是两个容易混淆的概念。如果网络输出是一个标量例如体系总自由能、吸附总粒子数那么在旋转作用下输出不变这叫“不变性”。如果网络输出是向量场或张量场例如每个网格点上的密度梯度、一阶泛函导数对应的有效势那么输入旋转后输出也必须跟着旋转这叫“等变性”。在 cDFT 任务中这两类输出都有可能出现。最简单的密度回归模型输出通常是体素网格上的密度值。有人误以为密度是标量所以只需要不变性。其实不对密度场尽管由标量局部值构成但它绑定在空间坐标上。当整个体系旋转后密度场的空间位置必须跟着变这个映射属于场等变。等变网络通常在内部联合使用标量特征、向量特征和高阶张量特征。例如把每个节点的局部密度、外势数值作为标量特征把相邻节点之间的位移作为向量特征。在消息传递过程中标量与向量之间通过张量积相互混合最终输出需要的物理量。这样做一方面保留了节点间的方向信息另一方面让网络具备严格的空间对称性。2.3 图神经网络与三维网格的天然结合在三维空间中表示一个连续外部势场既可以采用规则的体素网格也可以采用点云。规则体素网格在旋转后很难继续对齐到原始网格坐标通常需要对体素场做重采样既繁琐又容易引入插值误差。点云和图的表示则更方便每个点携带空间坐标旋转整个图时坐标和相对位移一起旋转网络内部的特征更新方式不需要改变。等变图神经网络可以用如下方式理解每个“节点”代表一个局部区域或一个粒子位置边表示空间近邻关系边上保存距离和方向角。由于方向信息本身是三维向量网络必须用具有旋转变换规则的特征来混合它们这正是等变神经网络的职责。对于高分辨率网格我们可以先把密集体素降采样成非均匀点集或者只保留靠近外势边界的点如果必须保留完整三维场则可用局部子图分批训练避免一次性把整个大网格塞进显卡。3. 技术路线设计从数据到损失函数3.1 两种不同的建模视角在项目落地前先要确定预测目标。第一种是“直接响应映射”输入外势场输出平衡密度场。第二种是“变分自由能学习”输入密度场输出自由能再利用自动微分和优化器求解新的平衡密度。下表从工程角度比较两者的差别建模视角典型监督信号优点难点直接密度响应不同外势下的模拟平衡密度任务直观、训练稳定、推理快可能缺少热力学一致性自由能泛函学习自由能或泛函导数标签更贴近 DFT 理论、可迁移性好标签难构造、优化迭代慢直接密度响应的实现难度相对低适合作为第一版模型。在实际部署中如果模型需要用于新外势下的密度预测直接模型只需一次前向传播即可自由能模型则需要在给定外势下通过梯度下降多次迭代推理成本更高。当然自由能模型一旦训练成功原则上能够获得更严谨的流体热力学性质。3.2 输入特征与节点表示以“外势到密度”任务为例输入包括外势场 (V_{\text{ext}}(\mathbf{r}))、体系边界条件、粒子种类、热力学状态参数温度、化学势或体相密度。在点云表示里每个节点包含两类信息一是坐标 (\mathbf{r}i)二是该点处的外势值 (V{\text{ext}}(\mathbf{r}_i))。由于我们需要学习密度节点上也应该有当前迭代得到的密度猜测值尤其在等变自由能模型中密度值是输入特征而不是最终目标。对于直接响应模型模型没有密度输入输出就是每个点上的局域密度。点与点之间的边由 k 近邻或截断半径确定。边的特征一定要包含相对距离和方向因为粒子间排空效应、流体关联强依赖于相对距离而方向信息是三维空间方向敏感特征的载体。等变网络能否发挥作用很大程度上取决于是否在边上正确编码了这些几何信息。3.3 输出头、激活函数与损失设计密度输出必须始终非负因此输出头不应使用普通线性层而是可以配合softplus或exp激活。如果直接使用回归的 MSE 损失模型可能会在小密度区域产生负值物理上无法解释。常见做法是对密度取对数[ \log \rho(\mathbf{r}) \text{output}(\cdots) ]这样既能保证密度的正定性又不会像线性输出那样在大梯度变化区域产生振荡。损失函数通常包括密度场的均方误差尤其是外势变化激烈的区域。为了提高可迁移性还可以加入物理约束损失总粒子数守恒约束对同一体系预测密度场的空间积分应尽量接近参考值密度的非负约束通过输出激活天然保证结构相似度约束在吸附层和界面附近使用更细的离散化采样避免模型把所有误差集中在高密度峰值附近。训练和验证时另一个重要指标是“等变误差”。做法是随机生成若干旋转矩阵对输入外势做旋转后得到预测再反旋转回原坐标系与原本预测比较。如果网络满足严格等变整体误差应接近零。这一指标应当被列入模型的验收标准而不是只观察训练集和测试集上的密度误差。4. 环境准备与版本说明关于具体版本目前等变学习生态变化较快项目需要根据实际情况调整。我建议使用 Python 3.9 或 3.10采用独立 conda 环境隔离依赖避免和系统中其他项目冲突。安装命令仅作参考conda create -n eqc-dft python3.10 -y conda activate eqc-dft # 根据操作系统和显卡选择 PyTorch 安装方式 pip install torch # 等变网络相关 pip install e3nn # 科学计算与数据处理 pip install numpy scipy matplotlib pandas # 图数据与加速算子按需要安装 pip install torch-scatter -f https://data.pyg.org/whl/torch-{版本}.html这里的核心依赖是e3nn。它能构造旋转群上的不可约表示以及对应的线性层、张量积、激活函数。不过不同版本的e3nnAPI 差异较大本文代码只负责展示结构思路具体算子名称、参数顺序要查阅你所用版本的手册。如果公司项目需要非常稳定的复现建议把关键版本固定到requirements.txt并在实验记录文件里记录 Python 版本、CUDA 版本和 PyTorch 版本。5. 原型代码数据场构造与等变网络骨架5.1 把离散粒子轨迹转换为三维密度网格准备训练数据的第一步是从分子模拟轨迹得到三维密度场。下面代码给出一个概念性实现每个粒子对周围网格点做高斯涂抹同时考虑周期边界条件的最短镜像。代码仅为教学示意真实大数据体系需要用局部遍历或 GPU 并行加速。# 文件路径utils/grid_density.py import numpy as np def compute_density_grid(positions, box, grid_shape, sigma0.3): 将粒子坐标转换为周期性三维密度网格。 positions: (N, 3) 数组粒子坐标 box: (3,) 数组周期性盒子的边长 grid_shape: (3,) 数组例如 (64, 64, 64) sigma: 高斯涂抹宽度单位与 box 一致 nx, ny, nz grid_shape axes [ np.linspace(0.0, box[i], grid_shape[i], endpointFalse) for i in range(3) ] mesh np.stack(np.meshgrid(*axes, indexingij), axis-1) density np.zeros(grid_shape) norm (sigma * np.sqrt(2.0 * np.pi)) ** 3 for p in positions: # 周期性映射 p p % box # 对网格点做周期性最小镜像 diff mesh - p diff diff - box * np.round(diff / box) d2 np.sum(diff * diff, axis-1) density np.exp(-d2 / (2.0 * sigma * sigma)) density / norm * max(len(positions), 1) return density这个实现最大的问题是当网格点数很多时mesh数组会占用大量内存每个粒子也都要遍历所有网格点。工程改进思路通常有两种一是把粒子周围的网格点限制在一个半径范围内只计算该粒子的邻域二是用规则网格与 FFT 卷积来生成高斯密度场。若想快速测试可以将网格设为 32×32×32 或 64×64×64。5.2 把网格场转换为点云近邻图等变网络并不强制要求把每个网格点当成节点你可以先对网格做均匀采样也可以直接把粒子中心周围的关键位置作为节点。为了让消息在网络中传递需要提前构建图结构# 文件路径utils/build_graph.py import numpy as np from scipy.spatial import cKDTree def build_knn_graph(points, k8): 根据空间坐标构建 k 近邻图。 points: (N, 3) 节点坐标 k: 每个节点的邻居数 返回 edge_src, edge_dst分别表示边的起点和终点索引。 tree cKDTree(points) # k1 是因为查询结果包含自己 _, indices tree.query(points, kk 1) indices indices[:, 1:].astype(np.int64) n_nodes len(points) edge_src np.repeat(np.arange(n_nodes), k) edge_dst indices.reshape(-1) return edge_src, edge_dst选择 8 到 16 个邻居通常能兼顾计算效率和空间信息。距离太远的邻居关联较弱距离太近则会把计算浪费在局部密度几乎相同的点上。构建边之后等变特征会使用边向量表示方向# 示例边向量 edge_vec points[edge_dst] - points[edge_src]如果体系有周期边界条件必须用最小镜像方式计算边向量否则边界附近的节点会出现虚假的空间跳跃。5.3 等变网络骨干概念实现下面给出一个等变网络骨干的“结构示意类”。由于不同版本e3nn的接口并不统一我没有把这个类写成可直接运行的最终模型而是列出网络应具备的关键环节输入不可约表示、等变卷积或消息传递、非线性激活、输出预测。真实使用时需要根据e3nn版本替换层实现。# 文件路径model/equivariant_backbone.py import torch from torch import nn class EquivariantDFTBackbone(nn.Module): 等变网络骨架示意。 输入节点特征可以是外势值、密度值等标量 输入边特征会经过球谐函数展开使消息携带方向信息。 具体等变算子的 API 因 e3nn 版本而异这里只定义整体流程。 def __init__(self, hidden_irreps32x0e 16x1o): super().__init__() self.hidden_irreps hidden_irreps # 通常 e3nn 提供 # 1) o3.Irreps 描述不可约表示 # 2) 线性层或张量积层完成方向信息混合 # 3) 等变激活 # 下面设置为 None示意该处需要按实际版本实例化 self.message_layer None self.readout nn.Sequential( nn.SiLU(), nn.Linear(32, 16), nn.SiLU(), nn.Linear(16, 1), ) def forward(self, node_feat, edge_vec, edge_index): # 1: 将节点标量特征提升到 hidden_irreps h node_feat # 2: 多层消息传递 for _ in range(3): h self._message_passing(h, edge_vec, edge_index) # 3: 取标量通道作为节点输出预测对数密度 scalar_feat h log_rho self.readout(scalar_feat) return log_rho def _message_passing(self, h, edge_vec, edge_index): # 此方法应替换为真正的等变卷积消息传递 # 通常思路 # 1) 对 edge_vec 做球谐展开 # 2) 在边上执行张量积与线性混合 # 3) 按 target 节点聚合邻居消息 return h另一个常见的建模方式是先让输入经过一个等变卷积网络提取每个节点周围的局域结构特征再把所有节点的标量特征汇总成整个系统的自由能或者直接解码成每个节点的密度。最终的输出层应当与训练标签统一。若你希望输出密度场则最后一个投影通常是对每个节点独立做线性层不跨节点混合。5.4 训练循环与等变增强在训练时除了让网络结构本身具备等变性仍然可以加入旋转增强作为正则化帮助模型对外势形状变化更鲁棒。对于点云/图表示整体旋转只需要对节点坐标和边向量做矩阵乘法即可实现不需要重采样。下面是一个训练片段的简化示意# 文件路径train.py import torch from torch.nn import functional as F def train_one_epoch(model, optimizer, loader, device): model.train() total_loss 0.0 for graph_data in loader: node_feat, edge_src, edge_dst, coords, density_target [ x.to(device) for x in graph_data ] # 可选随机旋转整个坐标点云 if coords.size(0) 0: rot_matrix random_rotation_matrix(3, devicedevice) coords coords rot_matrix.T # 根据旋转后的坐标重建边向量 edge_vec coords[edge_dst] - coords[edge_src] # 随机平移平移只改坐标不影响边向量 coords coords torch.randn(1, 3, devicecoords.device) * 1e-3 log_rho_pred model(node_feat, edge_vec, (edge_src, edge_dst)) rho_pred torch.exp(log_rho_pred) loss F.mse_loss(rho_pred, density_target) optimizer.zero_grad() loss.backward() optimizer.step() total_loss loss.item() return total_loss / max(len(loader), 1)这里的random_rotation_matrix是自编旋转矩阵生成函数通常可以用 scipy 的旋转库生成。这个片段强调的是如果使用点云表示等变增强很容易实现如果使用网格表示则需要将规则网格坐标旋转后重新插值过程要小心处理网格边界。5.5 推理阶段如何获得平滑的三维密度场等变网络通常输出节点上的密度。这些节点可能是训练时抽样的点云而不是规则网格。要得到用于可视化和物理分析的三维密度场一般做法有两种。第一种做法是“无网格推理加场重建”先确定需要输出的规则网格点把这些网格点连同附近的抽样点一起输入模型模型给出网格点上的密度预测由于图结构包含近邻点这种方法可以给出较平滑的场估计。第二种做法是“直接网格回归”如果外势场本身是规则体素场节点就是每个网格点网络输出直接落在规则网格上这样后处理最简单但三维网格过大时显存压力明显。在具体项目里通常推荐先用较粗网格做数据探索。例如 64×64×64 的网格有约 26 万个节点如果每个节点使用 8 个邻居图中有约 210 万条边显存和训练时间都显著增加。可以先对局部区域采样或者在粗网格上训练一轮验证数据正确性后再切换到高分辨率网格。6. 参考数据生成与训练测试划分6.1 为什么建议使用巨正则蒙特卡洛数据要监督一个“外势到平衡密度”的映射训练数据必须对应开放体系中的热力学平衡。如果使用普通 NVT 分子动力学粒子总数固定体系整体密度不会随外势局部强弱自由调整外势产生的信号容易被粒子数守恒掩盖。更合适的方法是巨正则蒙特卡洛GCMC它允许体系与虚拟粒子库交换粒子能够体现不同化学势下外势带来的吸附与耗尽。实现 GCMC 时可以对外势场中的每个网格点尝试插入或删除粒子并根据 Metropolis 判据接受或拒绝。统计足够长的时间后计算每个网格区间的平均粒子数除以区间体积就得到目标密度分布。需要注意的是插入和删除步长会影响采样效率最好把粒子的位移、插入、删除比例调到 2:1:1 附近并按体系实际调控。如果你的团队没有 GCMC 代码也可以退而求其次使用带有粒子数控制方法的 MD 模拟比如在两个储层之间设置化学势梯度。但这类计算需要很长时间才能收敛而且外势与粒子库之间的平衡条件很难严格满足。因此当项目目标是构造可迁移三维 cDFT 时建议优先投入时间搭建 GCMC 数据管线而不是直接从现成 NVT 轨迹中切块。6.2 外势类型的多样性设计训练集的外势不能只有少数几种形状。如果想实现“可迁移”训练时就要覆盖足够丰富的几何构型例如平面壁狭缝、圆柱形孔道、球型腔体、随机粗糙表面、多个吸附位点组合。原因是神经网络只能在训练数据的分布范围内泛化如果测试集中出现了一种从未见过的凹角结构而训练集只有平面外势模型大概率无法外推。外势参数也要成体系地变化。比如缝宽、孔道半径、壁面强度、表面修饰基团密度、温度、体相密度等尽量用拉丁超立方采样或其他均匀设计方法覆盖整个参数空间。这里需要注意交叉组合会导致数据数量爆炸所以实际项目常用“主动学习 模拟校核”的方式先生成初始数据训练一个代理模型再把代理模型预测误差大的区域作为下一批模拟的重点。6.3 训练集与测试集的划分策略划分数据时不能把所有模拟结果混合后随机打散否则会高估模型的可迁移性。更合理的方法是“按外势结构分组”。例如把 80% 的外势参数组合用于训练20% 的参数组合用于测试确保测试外势的形状和参数在训练中没有出现。测试集应该额外包含边界条件扰动和旋转副本。旋转副本并不是用来训练而是用来衡量结构性等变性。如果模型在同一个外势的多个旋转副本上预测结果差异较大说明网络结构或预处理仍有对称性泄漏。7. 常见问题与排查思路问题现象常见原因解决思路模型输出的密度恒为 0 或恒为常数数据没有归一化损失被大梯度外势支配输出激活的尺度不合适对外势和目标密度分别做标准化检查最后输出头和激活函数旋转坐标系后预测场明显不同边向量没有正确参与消息传递或者模型只用了标量特征检查边向量是否采用最小镜像并做球谐展开用等变误差指标定量验证预测密度总粒子数严重不守恒密度回归完全自由没有施加全局粒子数约束在损失中加入粒子数差项或先预测总粒子数再对密度场做权重归一化训练集损失很低测试外势误差很大训练数据外势形状太单一过参数化增强外势多样性减少网络宽度增加多尺度局域特征网格分辨率提高后显存溢出三维修弥网格节点数量增长过快降低网格分辨率采用抽稀点云表示按空间区域分批输入后融合预测密度峰值附近误差明显高密度区域样本权重不足对高密度区域过采样或损失中增加局部加权模拟数据噪声大训练曲线震荡GCMC 采样长度不足轨迹没有充分平衡增加采样步数对密度场做时间块平均并检查分块之间的误差使用现成等变库时报接口错误e3nn等库版本更新导致 API 变化固定依赖版本查阅对应版本文档先用官方教程跑通最小示例碰到问题的时候优先检查数据管线因为数据方向一旦出错网络结构再怎么调整都没有意义。可以对一个外势样本做可视化左边是模拟得到的参考密度场右边是模型预测密度场并叠加外势等值面。如果二者的整体结构一致说明模型学到了重要物理特征如果差别只集中在局部边界则需要继续扩大邻域半径或提高采样密度。8. 最佳实践与工程建议8.1 把“对称性验证”做成自动化测试项目中一定要维护一个独立的test_equivariance.py脚本它不参与训练动态而是固定生成若干旋转角度对同一测试样本反复推理。自动化测试应作为每次代码提交的必备检查步骤。由于神经网络推理有随机性为了判断等变误差是否来自数值噪声最好设置固定随机种子并多次重复。这项工作在初期可能让人感觉繁琐但能显著减少后续在物理结果验证阶段出现的“幽灵错误”。8.2 用科学计算实验流程管理模拟数据构造三维经典密度泛函训练集比普通图像分类数据集复杂得多。需要记录每个模拟样例对应的外势类型、外势参数、温度、化学势、模拟方法、网格间距、采样步数、平衡判断标准。建议用 JSON 文件保存元数据并把每个样本的原始模拟轨迹、平均密度场、外势场放在同一目录下。缺少元数据的密度场很难反过来定位异常丢失了外势参数的样本甚至无法进入监督训练。训练结束后除了报告密度场的 MAE 或 RMSE还应当检验热力学可观测量的误差例如孔道平均吸附量、界面宽度、局部密度峰值高度。这些指标才是实际应用中真正关心的物理量只盯着整体密度损失有时候会掩盖局部误差。8.3 模型不是越大越好输入表示往往更关键等变图神经网络能利用三维方向信息但效果上限受限于节点采样密度、邻居半径和输入外势的数值分辨率。如果训练数据都是在粗网格下生成的模型永远无法输出高分辨率的界面结构。最典型的做法是使用“局部细化”在壁面附近和界面区域加密节点而在体相区域使用稀疏节点。这样既能降低计算量又能让模型集中精力学习密度变化最快的区域。模型的隐藏维度也不需要一开始就设得很大。在探索阶段先使用较小的 hidden 表示例如节点特征只有 32 或 64 维能够快速迭代数据管线和损失函数。确认数据正确、等变误差可接受后再逐步扩大网络容量。这样比第一步就堆一个超大模型更容易排查问题。8.4 物理约束不宜全部交给数据如果模型能够直接学习“外势变化导致密度变化”的映射网络会倾向于记忆高频细节在没有数据覆盖的构型上产生非物理外推。因此在工程中建议加入轻量级的物理先验密度场输出正定使用softplus或exp输出空间光滑性在损失中加入密度梯度惩罚降低相邻节点之间的突变总粒子数校准后处理阶段对密度场乘以一个修正系数使空间积分等于给定的粒子数参考极限当外势为零且体系均匀时模型输出应接近体相密度可专门构造均匀体系样本加入训练。这些做法并不完全等同于严格 DFT 变分求解但能显著提升模型的稳定性和实际可用性。8.5 迭代式“模型指导采样”策略在模拟数据较多但算力有限时推荐采用主动学习流程。初始训练后模型对外势参数域中某些区域预测不确定度很大可以对这些区域补充 GCMC 模拟。如果模型内部已经采用基于集成的方差那么不确定度估计非常简单如果使用单模型也可以用预测密度在梯度剧烈变化处的局部振荡程度作为临时启发指标。 每轮补充数据后重新训练模型直到测试集的迁移性误差不再明显下降。这个方法能最大化模拟数据的使用效率也是实现“可迁移三维经典密度泛函”比较实用的工程路径。9. 总结与下一步行动经典密度泛函理论擅长描述非均匀流体的平衡结构等变学习提供了让模型尊重三维空间对称性的建模工具二者结合目标就是用数据驱动方式构造可迁移的三维自由能或密度响应模型。整个项目的关键动作可以归纳为四点一是用 GCMC 等开放体系模拟生成准确的目标密度场二是设计覆盖多种外势形状的训练集按结构而非样本划分训练测试集合三是用等变图神经网络作为骨干保留三维空间旋转和平移的信息四是在训练阶段和验收阶段都加入等变误差和总粒子数误差指标。刚接触这个方向的读者建议先从一个最简单的体系入手。比如硬球流体在单个平面壁附近的外势与密度分布用较粗网格完成完整流程验证等变网络能够正确学习硬球排空产生的密度振荡峰后再扩展至狭缝、圆柱孔或复杂粗糙表面。不要一开始就把目标设定为训练一个超高精度的大模型理解数据规范、等变特征、损失函数和物理验证流程之间的关系会更有价值。实际项目落地时风险往往不在网络本身而在模拟数据质量与模型可迁移性评估不够严谨。如果你的模拟外势只有平面壁就不要指望模型能精确预测粗糙电极表面的双电层结构如果你的数据只覆盖高密度区就不要要求模型在低密度低压区也保持同样精度。把这些条件在实验记录里写清楚逐步扩大数据覆盖范围再配合等变模型的结构先验才能真正把一个“可学习的三维经典密度泛函”推向实际应用。