做二维材料计算的人,十有八九会有这种经历:单层体系的能带十分钟跑完,一提到转角堆叠,计算量直接给你上一课。我第一次跑魔角石墨烯的莫尔超胞时,以为把结构文件丢给第一性原理程序就能坐等结果,结果在超算上等了一整夜,最后发现高对称点采样不够,整个能带看起来像一团乱麻。
后来我逐渐把工作流从单纯的DFT大超胞计算,改成“紧束缚模型生成训练数据 + 机器学习建立代理模型 + 输运计算”的组合。这篇博文想分享的,就是这套针对二维材料电子结构、转角物理和热输运的数据驱动建模全流程里的关键节点和真实感受。
先说个结论:机器学习在这里不是用来端到端预测热导率数值的,它更合适的定位是插在紧束缚模型和输运模拟之间,把“算不动”的中间量用数据驱动替代掉。这样一来,物理图像不会丢,计算量也能降几个量级。如果你正在被莫尔超胞的规模、转角扫描的维度、声子三阶力常数的成本卡住,这篇文章应该能给你一条可以落地的思路。
1. 数据源头:紧束缚模型与DFT/Wannier接口构建
1.1 为什么首选紧束缚模型作为机器学习的数据生产线
做数据驱动建模,第一件事不是调模型,而是解决“数据从哪来”。在凝聚态电子结构这个方向,你当然可以用DFT批量生成数据,但问题在于价格和维度。
这里说的“价格”不只是算力,还有人力。你要给机器学习准备的是覆盖不同转角、不同层间距、不同应变状态的样本。如果每个样本都跑一遍DFT自洽,哪怕是一个中等尺寸的转角双层体系,几十个核跑上几天也很正常。转角稍微小一点,莫尔波长拉长,超胞原子数涨到几千量级,这个方案就基本不可行了。DFT在后续做局部校验可以,但要靠它批量生产训练集,账算不过来。
紧束缚模型是另一个思路。你可以把它理解成一个“成本极低但物理图像不缺失的模拟器”。它牺牲的是从头计算的绝对精度,换来的是可以对哈密顿量做快速、大批量的操作。而且紧束缚模型的参数本身是局域的,原子间的hopping参数只依赖局域化学环境,这跟机器学习处理原子构型的基本逻辑天然一致。从这一层意义上说,紧束缚模型正是ML进入电子结构计算的最佳入口。
1.2 从Wannier函数到紧束缚哈密顿量的构建细节
当然,紧束缚模型不应该是拍脑袋写出来的,它的参数要能和DFT对应上。标准做法是先做一次DFT自洽计算,再用Wannier90做最大局域化,得到一组类似原子轨道的Wannier基组。在这个基底下,实空间哈密顿量写成:
H_ij(R)
其中i、j是轨道指标,R是格矢。把实空间矩阵做傅里叶变换到动量空间,就能得到H(k),对角化后就是能带。
不同材料体系,局域轨道基的选择很不一样。石墨烯通常只需要pn轨道(垂直于平面的p轨道)就能抓住费米面附近的物理,而过渡金属硫化物(TMD)则要取出金属原子的d轨道和硫原子的p轨道组合。轨道基取得越少,后面机器学习要学习的矩阵维度越小,训练越简单;但轨道基太少又会丢掉重要的物理,比如自旋轨道耦合、d电子关联效应。这里要根据你的研究目标来取舍,没有一个通用答案。
这个环节里最值得注意的,是Wannier函数的规范问题。Wannier基组有一个整体的规范自由度,不同设置下提取出的hopping参数可能相位相差很多,但物理结果是一样的。如果后面直接拿这些复数矩阵元作为机器学习标签,模型会试图去拟合那些“只来自规范、不来自物理”的相位抖动,结果往往很糟糕。我在实操时更倾向于不让模型直接输出原始复数Hopping矩阵,而是输出Slater-Koster参数化的标量系数。比如用V_ppσ、V_ppπ这种按轨道对称性分解的键积分参数,它们随原子间距变化的趋势非常平滑,机器学习拟合起来要容易得多,物理可解释性也更强。
1.3 训练标签到底存什么:能带曲线不是最优选择
很多初学者做这个方向时,喜欢把能带数据当成训练标签:固定一组转角参数,算出能带离散点,然后用神经网络学一个“参数到能带”的映射。这个方案看起来直接,但实际操作中坑很多。
一个最大问题是能带交叠处的简并交换。你按能量升序排列能带时,在交叉点附近两条带会发生能带“颜色翻转”。同一份训练数据物理上是对的,但如果标签只是按顺序排列的能带值,损失函数会在交叉位置给出一个巨大的虚假误差,逼迫模型去拟合一个本身不存在的光滑轨道连续性。更麻烦的是,如果后面要算群速度和热输运性质,在简并点的导数行为完全错误。
更好的做法是:第一阶段让机器学习学习紧束缚模型里的矩阵元或Slater-Koster参数,第二阶段用学到的参数重新组装H矩阵,对角化并加密k点采样来得到你想要的一切物理量。能带离散点只是在验证阶段用来对比模型精度的参照物,而不是机器学习的主要学习对象。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 转角莫尔超胞到底难在哪:计算瓶颈与特征设计
2.1 莫尔超胞的计算规模为什么会爆炸
转角物理、特别是魔角石墨烯体系的研究,本质上是把一个原本很简单的单层问题变成“巨大的实空间周期结构”问题。
当两个二维材料单层以很小的相对角度堆叠时,会形成周期的莫尔图案。单层晶格常数a和转角θ决定了莫尔波长:
λ = a / (2 sin(θ/2))
石墨烯的晶格常数大约0.246 nm,当θ接近1.1°时,莫尔波长可以达到十几纳米。对应的莫尔超胞里动不动就是几千个原子,二维材料体系从“一个原胞几个原子”瞬间膨胀了三个数量级。
紧束缚模型在这个尺度下虽然比DFT便宜很多,但依然要面对维度问题。构造出数千轨道组成的稀疏大矩阵后,要得到低能区域的平带结构,还是会遇到大规模特征值求解。如果要用精确对角化方法去研究,内存和时间的开销随体系尺寸呈平方乃至立方级增长。更麻烦的是,你不只算一个角度,你要扫描不同转角、不同层间距、不同外加电场,这种参数空间的组合爆炸,让传统“每个参数点单独对角化”的做法变得非常笨重。
2.2 ML介入的正确时机:从扫描参数到学习局域映射
传统计算策略是每个物理参数组合从头算一遍。数据驱动建模的思路换了个角度:既然紧束缚模型的hopping参数只依赖于局域原子环境,那为什么不让模型直接学习这个局域映射?
训练完一个代理模型之后,遇到新的转角结构,理论上不需要再为每一个新几何重新做一次TB对角化或DFT计算。你只需要对新体系做一次几何建模,把局域环境特征输入到模型里,预测出所有需要的紧束缚参数,然后组装哈密顿量。原先的“扫描参数空间”问题,被转化成了“在少数关键点做主动学习加点”的问题,密度一下子降下来了。
2.3 特征描述符设计:模型不能只“看”原始坐标
给机器学习输入原始笛卡尔坐标,模型理论上也能训练,但需要满足平移、旋转、交换对称性,数据量要求会急剧上升。二维材料转角体系的局域环境相对简单,所以没必要直接上一套复杂的分子图表示,可以用更物理化的描述符。
我的经验是,每个原子对之间的相对位移用高斯或Bessel径向基展开,再在局域截断半径内对邻居原子求和,构造出保持平移和旋转不变性的向量。特别要注意的是,描述符必须能够区分不同的层间堆叠类型,比如AA堆叠、AB堆叠、以及莫尔结构中的不同局部堆叠区。这对电子结构影响极大。层间耦合的强弱直接决定平带色散和能带间隙,如果描述符只捕捉无序的原子分布,模型很难学会转角如何无级调控电子结构。
另外,建议在大尺度特征中至少保留一个与莫尔周期相关的量,比如局部堆叠棋子的中心位置到底靠近AA区还是AB区。实测中如果不加入这类结构信息,模型在连续变化转角时经常出现局部振荡,学到的不是一个平滑变化的过程。这在后面的输运计算中会带来很大麻烦。
2.4 两个容易忽略的转角体系物理细节
第一,转角结构的原子位置通常要做弛豫。实际材料里,转角会引进局部堆叠的优劣,不同堆叠区域的层间距不一样,原子在面内也有微小移动,这会极大改变电子结构。我见过不少人直接用刚性原子位置生成训练数据,模型在测试集上很好,但一预测实际弛豫后的结构就崩溃。最稳妥的做法是:至少用经验势或机器学习力场把几何弛豫一遍,再生成标签。
第二,带交叉处的投影权重要保留。如果训练数据里只有本征值,没有本征向量在轨道基上的投影,模型学出来的能带虽然大概能对上,但各条带的“身份”是乱的。对于热输运计算,这不能接受——你要算的是某条带上的电子群速度对热导的贡献,如果能带身份都错了,后面全都白算。所以,在生成每个k点样本时,我的习惯是连带轨道投影权重一起存下来,后续处理时好让能带在交叉区域正确对齐。
3. 从坐标到哈密顿量:代理模型的选型、训练与误差控制
3.1 不同模型结构的适配性对比
很多人接触机器学习时,最先想的是“能不能上个更潮的模型”。但在这个场景里,模型选型应该服从物理量本身的特征。
我在不同阶段的尝试经验如下表所示:
| 模型结构 | 输入输出是什么 | 适合场景 | 实操评价 |
|---|---|---|---|
| MLP + 手工对称函数 | 原子对距离/角度描述符 -> Hopping参数 | 轨道类型少、结构相对简单 | 最容易落地,泛化稳定 |
| DeepMD式嵌入网络 | 局域环境嵌入 -> 力/能量等标量量 | 原子间势方向 | 改造成输出张量Hopping需要额外工作 |
| SE(3)等变图神经网络 | 坐标+元素 -> 等变张量/Hamiltonian矩阵 | 包含d轨道、复杂轨道对称性 | 表达力强,但数据需求大 |
| 纯Transformer/通用模型 | 几何序列 -> 直接推能带 | 概念验证 | 一般不推荐,忽略太多物理结构 |
我在石墨烯pn轨道的案例里,实际上用最基础的MLP加对称函数就能把层间、近期Hopping的参数拟合到很好的精度。这是因为问题本身是结构的对称性很高、轨道少、相互作用局域,模型细节并不需要特别复杂。后来遇到TMD的d轨道体系,才需要考虑更高阶的等变结构。建议各位不要一开始就上重模型,先用简单结构把流程跑通,再逐步增加复杂度。一个越花哨的模型往往意味着越多的人工调参和越大的数据需求,而你可能并没有那么多高质量训练数据来支撑它。
3.2 损失函数设计的两种路线
训练代理模型时,损失函数的选择很大程度上决定最终物理量准不准。最常见的是直接做矩阵元误差:
loss = || H_pred - H_true ||_F
这个度量很好用,但对低能区域的误差权重不够。不同轨道的Hopping参数对费米面附近的电子结构影响差异很大,如果统一用Frobenius范数,模型可能花了很多能力去拟合对物理结果影响很小的远距离矩阵元,反而对决定平带的层间耦合项拟合不足。
更推荐的思路是在损失函数里加入物理约束。比如在能带结构已经计算好的情况下,可以比较模型得到H后的本征值分布;或者更轻量级,可以只对某个能量窗口内的表面态密度做加权。实际损失可以写成:
loss = || H_pred - H_true ||_F + α * || projected_DOS_pred - projected_DOS_true ||
其中α是一个平衡权重。这种做法本质上是把物理量下降为了可微目标的一部分,模型训练过程会自适应地把资源集中在影响电子结构的核心部分。
3.3 数据与采样:主动学习比大力出奇迹更重要
转角体系的参数空间很大,我们不能指望一次性把所有数据都生成完。建议采用主动学习框架:
- 先在初始的低密度网格上生成一批数据,比如角度取0.5°到5°之间的5到10个点;
- 训练一个初步的模型;
- 用这个模型去预测剩余角度,观察其统计不确定性或不同角度的预测差异;
- 把模型最不确定的区域加入下一轮训练,重新训练,循环迭代。
这种策略可以避开一个非常常见的坑:在整个角度范围均匀采样时,大量样本会落在莫尔波长很长、计算很慢的区域,但真正对物理重要的魔角附近却因为角度区间太窄而没有足够样本。主动学习天然会把更多计算资源投入到误差大的区域,节省训练成本的同时也让模型外推能力更可靠。
3.4 一个容易被忽视的训练约束:H矩阵的厄米性
紧束缚哈密顿量必须是厄米矩阵。如果你的模型直接独立预测每个矩阵元,训练完后组装成的矩阵未必满足H_ij = H_ji^*(R)。这不是小问题,非厄米矩阵的本征值可能是复数,物理上根本没有意义。
最常用的解决方法是约束模型输出:对每对原子(i, j),只需要预测一个复数(或者它的实部虚部),然后人为构造:
H_ij = t_ij
H_ji = t_ij^*
这样就能天然保证厄米性。我在代码里经常把模型输出结构设计成上三角参数,然后复用共享参数映射到下三角,正则性会好很多。
4. 把ML结果接入热输运管线:电子与声子的分头处理
4.1 热输运物理框架:电子和声子贡献不能混为一谈
在二维材料热输运里,总热导率一般分成晶格(声子)贡献和电子贡献两块。对大多数本征半导体二维材料来说,声子输运占主导;但在栅压调控、重掺杂或者金属性体系中,电子热导贡献不可忽略。
这两块物理对应完全不同的计算工具链:
| 输运类型 | 需要什么 | 传统计算痛点 | ML加速点 |
|---|---|---|---|
| 电子热导 | 电子能带群速度、态密度、弛豫时间 | 需要大量k点且考虑散射机制 | 代理H矩阵快速给出色散和群速度 |
| 晶格热导 | 二阶力常数、三阶力常数、BTE求解 | 力常数计算成本高 | MLIP拟合原子间势,加速力常数计算 |
4.2 电子热输运侧:用ML紧束缚快速得到群速度和散射量
电子热导率在弛豫时间近似下的核心表达式涉及每个能带的能量导数,也就是群速度v_k = ∂ε(k)/ℏ∂k。这个量对k点网格密度极其敏感,如果只在稀疏的k网格上做有限差分,噪声往往很大。
用机器学习紧束缚代理模型处理这个问题的好处在于:模型输出的不是离散能带,而是连续的紧束缚参数。因此可以任意加密k点网格,甚至用解析梯度去计算群速度,避免了数值差分带来的误差。我通常的做法是,先用代理模型得到H_ij(R),然后在极密的k网格上对角化,再配合一条插值函数得到平滑的群速度谱。
电子弛豫时间的处理要更小心。直线散射和声学声子散射在二维材料中有各自的温度依赖,很多人为了省事直接用经验的形变势近似。如果要更精确,可以把电子-声子耦合矩阵元计算与机器学习力场结合:用MLIP产生晶格振动信息,然后利用微扰思想计算电子-声子耦合常数。
这是一条比较前沿但并非不可控的路:ML不是预测最终矩阵元,而是提供高精度的声子色散和振动模式,再由这些物理量组装出耦合矩阵元。这比从头算EPW全流程便宜一个量级。
4.3 声子热输运侧:MLIP加速力常数与BTE求解
声子热导率通常通过求解声子Boltzmann输运方程(BTE)来计算。这个过程现在最常用的工具链是:用DFT算二阶和三阶力常数,再交给ShengBTE或phono3py之类的程序求解声子寿命和热导率。
这个流程最大的痛点是三阶力常数。一个体系要算三阶力常数,需要在超胞里对每个原子沿多个方向做一定位移,然后计算受力。对几十个原子的体系,可能要做几百甚至上千次DFT单点计算。到转角结构,动辄几百上千个原子,直接算三阶力常数几乎是不可接受的。
ML加速的正确姿势是训练一个机器学习原子间势(MLIP),比如用DeePMD-kit或NequIP训练一个能够准确描述原子受力的模型,然后用这个模型去做那些位移扰动与受力计算。训练集通常只需要几百到几千个DFT单点能量和力,一旦MLIP精度达标,三阶力常数矩阵的计算成本就可以降到几乎可以忽略。
必须强调,MLIP训练时的采样范围要有针对性地覆盖转角引起的扭曲结构,不能只在高对称构型附近取样本。否则后面微扰位移后,模型的力预测误差会大得离谱,算出的声子寿命也完全失调。
4.4 一个完整可复现的端到端流程骨架
把电子通道和声子通道合在一起,我的标准工作流大致如下:
code复制# 1. 数据生成
structure_gen -> 生成不同转角/应变/层间距的构型
DFT/Wannier90 -> 提取紧束缚Slater-Koster参数作为标签
# 2. 机器学习训练
train H_proxy: 输入局域环境描述符, 输出TB参数
validate: 比较能带/群速度/态密度
# 3. 电子热导
for theta in new_angles:
H_param = H_proxy(angle_descriptor)
H_matrix = assemble_H(H_param)
eps, v_k = solve_band(H_matrix, dense_kmesh)
kappa_ele = BTE_electron(eps, v_k, relaxation_model)
# 4. 声子热导
train MLIP (DeePMD/NequIP)
compute 2nd/3rd force constants via MLIP
solve phonon BTE -> kappa_lattice
# 5. 分析
kappa_total = kappa_lattice + kappa_electronic
这个流程从头到尾没有一步是在“猜”最终答案,每一步都保留了清晰的物理链路。哪怕机器学习某个环节效果偏差,你也可以快速定位是模型结构问题、描述符设计问题、还是训练数据覆盖问题。数据驱动建模最大的价值就在这里。
5. 实操中的几个关键细节与避坑记录
5.1 训练集采样:均匀随机看起来科学,实则低效
转角体系的参数空间不是“各向同性”的。如果直接对角度、层间距、应变都做均匀采样,你会花大量计算资源去学习那些对物理变化不敏感区域的无聊行为,而在魔角附近这种电子结构剧烈变化的地方,样本严重不足。
我用过一种更有效的采样策略:按物理敏感度来分配样本密度。先跑一个很粗的网格并用已有模型估算能带在费米能附近的态密度变化率,在变化大的地方增加样本,在变化平缓的地方缩减样本。这相当于把主动学习的思想向前挪到了数据生成阶段,比盲目抽样省掉约一半的训练集大小,效果还好很多。
另外提醒一点:转角样本不要全用刚性原子位置。转角体系真实结构里原子会弛豫,导致局域堆叠不同区域的层间距差异很大。如果生成数据时不考虑这一点,模型永远只见过“理想刚性的几何”,之后用在真实弛豫结构上必然偏。
5.2 模型验证:测试集误差小不代表输运量准确
这是我踩过最深的一个坑。某个版本模型在测试集上的能带平均绝对误差看起来非常漂亮,只有几毫电子伏特,但拿去算电子热导率,和基准结果差出两倍多。
原因在于能带整体误差小,不代表费米能附近、特别是小能量窗口内的群速度误差小。输运量对能量导数的敏感度远高于对本征值本身。因此,在验证模型时,至少要同时检查四个方面的指标:
- 能带结构:整体MAE可以作为粗筛指标;
- 群速度分布:在费米面附近若干窗口内对比;
- 态密度/投影态密度:是否出现假峰或缺失峰;
- 最终物理量的温度依赖关系:热导率在100K到500K区间是否有合理的量级和趋势。
另外,可以用一组完全没参与过训练的转角结构做“转角泛化测试”。只看训练集内随机划分的测试误差很容易高估模型能力,真正的检验是内插角的泛化能力。
5.3 H矩阵厄米性与相位规范:看着小,崩起来要命
训练预测紧束缚参数时,如果模型是逐元素输出复矩阵,H_ij和H_ji的预测是独立且可能不一致的。组装出的矩阵有非零的反对称部分,其本征值会出现虚部。哪怕虚部很小,也会让后续的能带排序和态密度计算产生莫名其妙的“伪带隙”。
我建议在模型输出的最后一层直接做结构约束:对于所有原子对(i,j),只预测实数或复数的中间量,然后通过厄米共轭操作构造完整矩阵。省去了训练后“强制对称化”的额外步骤,模型本身学到的相关性也更好。
相位规范问题同样需要重视。不同DFT计算过程中Wannier函数的规范可能不同,导致看似相同的体系提取出的Hopping矩阵元带有不同的全局相位。跑数据时需要对所有构型统一一个参考态,把所有Hopping参数对齐到同一规范下。最简单的方式是固定中心原子的相位参考,然后再去预测相对值。我在初期跳过了这一步,结果模型训练loss一直降不下来,最后花了一天排查才发现是规范不一致的问题。
5.4 工程落地的几条建议
工具链方面,如果从零起步,建议优先使用成熟的框架:
- Wannier90做紧束缚参数提取,配合VASP/Quantum ESPRESSO做DFT底层的对接;
- DeePMD-kit或NequIP做机器学习原子间势,稳定性经过大量验证;
- phono3py配合ShengBTE做声子三阶力常数和BTE求解;
- 电子输运部分如果不需要太高的散射精度,可以用自己写的小工具完成RTA,避免引入过重的依赖。
数据存储上,最好在生成阶段就用HDF5格式统一保存原始几何、TB参数、Wannier规范信息以及对应的能带/投影权重,尽量不要只保存中间结果。后面每次试验模型版本、修改描述符时,都不需要重新生成一遍昂贵的训练数据。这个习惯帮我节约了大量重复劳动。
算力调度上,TB数据生成是天然可并行的,可以做一个简单的任务队列脚本,把每个结构当作独立任务分发。即使没有大型超算资源,在自己实验室的工作站上也能利用二三十个核心把初步数据集跑完。机器学习训练阶段如果数据量不太大,单张普通GPU就足够,瓶颈往往在数据加载I/O而不在模型本身。
5.5 关于“端到端预测热导率”的看法
最后说一点个人观点。现在很多文章喜欢讨论“直接输结构,出热导率”的端到端模型。想法很吸引人,但从我在这个项目中的体会来看,端到端方案对复杂物理体系的可解释性太差,偶尔可以在这里找到适合做演示的探索,但真要用于机制研究就非常冒险。热导率本身是很多中间量积分的最终结果,哪怕每个中间量的误差只有百分之几,积分后也可能出现倍数级别的偏差;而且一旦出问题,你很难判断是模型容量不足、训练数据分布不好,还是物理假设本身有误。
相比之下,把机器学习聚焦在力常数、紧束缚参数、声子色散这些中间量的代理模型上,误差可以通过物理规律被约束和放大,模型的适用范围也能通过一批独立测试集定量检验。这比永远追逐更高的“端到端精度”要稳健得多。
最后再分享一个很实用的经验:凡是模型给出来的新结构预测结果,一定要人为挑几个极端角度和最接近魔角的点去用原始DFT或TB做一次复核。不只是看能带中心位置,还要看它算出来的群速度和态密度是不是合理。这一步会花掉你半天时间,但它能帮你挡住大多数模型幻想出来的“伪物理”。
这个流程的价值也不局限于石墨烯。你换到TMD双层、异质结,甚至多层转角体系,底层框架不需要变,只要更新训练数据和必要的描述符,物理积累全部都能保留。后面要继续做三层转角、莫尔声子与超快输运的耦合,也只需要在这个底座上加数据、加模块,不需要重新造轮子。这正是数据驱动建模相比传统单点计算最大的长期收益。
