材料发现的核心任务是寻找具有特定性能的晶体或分子结构。传统方法通过密度泛函理论计算和高通量实验筛选,但化学空间巨大,穷举不可行。大模型生成方法把材料结构看作可采样的概率分布,从已知数据中学习规律并生成新候选,再交给下游验证。这背后涉及晶体学约束、图神经网络、扩散模型和评价体系,本文逐一拆解。

一、晶体与分子的可学习表示
晶体和分子在化学上具有不同的拓扑结构。分子可以表示为原子集合和化学键,常用图结构描述,节点为原子类型,边为化学键类型。晶体则具有周期性,需要晶格基矢和原子分数坐标来描述,同一个晶体可以有无限多种原胞选择,这给生成模型带来对称性和周期性约束。为了让神经网络处理这些结构,通常将晶体转换为晶胞内原子图,并加入周期性边条件;分子图不需要周期性。
常用的编码方式包括网格表示、点云表示和图表示。网格表示便于卷积处理,但会损失原子级精度;点云表示灵活但难以捕捉化学键;图表示结合了原子特征、边特征和几何信息,是当前主流。等变图神经网络能够保证在旋转和平移下预测结果不变,这对于晶体生成尤其重要,因为晶格和原子坐标在笛卡尔坐标系中随观察角度变化。
代码示例:将晶体结构转换为图表示,节点为原子类型,边为距离小于截断半径的原子对,特征包含距离。这里使用pymatgen库。
import numpy as np
from pymatgen.core import Structure
def crystal_to_graph(structure, r_cut=5.0):
nodes = []
edges = []
edge_features = []
for site in structure:
nodes.append(site.specie.number)
for i, site_i in enumerate(structure):
neighbors = structure.get_neighbors(site_i, r_cut)
for neighbor in neighbors:
j = neighbor.index
dist = neighbor.nn_distance
if dist > 0:
edges.append((i, j))
edge_features.append(dist)
return nodes, edges, edge_features
# 示例:NaCl结构
nacl = Structure.from_spacegroup(225, [[0,0,0]], ["Na", "Cl"], [[0,0,0], [0.5,0.5,0.5]])
nodes, edges, edge_feats = crystal_to_graph(nacl)
print(f'节点数: {len(nodes)}, 边数: {len(edges)}')
上面的代码将晶体中的原子和近邻关系抽取为图数据,后续生成模型可以在这样的图上进行消息传递和结构更新。分子表示类似,但边代表共价键,不需要周期性搜索邻居。
二、生成模型范式:扩散、自回归与变分方法
当前晶体和分子生成模型主要分为三类:变分自编码器、自回归模型和扩散模型。变分自编码器将结构映射到连续隐空间,再从隐空间采样解码,优点是隐空间平滑,便于做性质优化;缺点是后验坍塌和重构精度有限。自回归模型按顺序生成原子类型、坐标或化学键,例如分子生成常基于SMILES字符串,用循环神经网络或Transformer逐字符生成;对于晶体,则按原子顺序生成坐标和元素,但顺序敏感性影响生成质量。
扩散模型近两年成为主流。其思想是定义正向过程逐步向结构加入噪声,直到完全破坏,然后训练神经网络学习逆向去噪过程。对于晶体扩散,需要在晶格参数、原子坐标和原子类型上都进行扩散,并且保证等变性。代表性工作包括CDVAE和DiffCSP。CDVAE先通过变分自编码器学习隐变量,再在隐空间扩散;DiffCSP直接在分数坐标和晶格参数上进行扩散,用等变图神经网络预测去噪方向。分子扩散模型则在原子坐标和原子类型上扩散,生成三维分子构象。
下面代码展示一个简化的扩散训练循环,说明噪声调度和损失计算。
import torch
import torch.nn as nn
class SimpleDiffusion(nn.Module):
def __init__(self, dim=128):
super().__init__()
self.net = nn.Sequential(
nn.Linear(dim, dim),
nn.ReLU(),
nn.Linear(dim, dim)
)
def forward(self, x, t):
return self.net(x)
def train_diffusion(model, data_loader, epochs=100, beta_min=1e-4, beta_max=0.02):
optimizer = torch.optim.Adam(model.parameters(), lr=1e-3)
for epoch in range(epochs):
for x0 in data_loader:
bs = x0.size(0)
t = torch.randint(1, 1000, (bs,))
beta_t = beta_min + (beta_max - beta_min) * t / 999
alpha_bar = torch.prod(1 - beta_t)
noise = torch.randn_like(x0)
x_t = torch.sqrt(alpha_bar) * x0 + torch.sqrt(1 - alpha_bar) * noise
pred_noise = model(x_t, t)
loss = nn.functional.mse_loss(pred_noise, noise)
optimizer.zero_grad()
loss.backward()
optimizer.step()
print(f'Epoch {epoch}, Loss {loss.item():.4f}')
实际晶体扩散模型远比这个简单示例复杂,需要处理周期性边界、分数坐标的归一化以及空间群约束。例如在分数坐标空间加入噪声时,需要保证坐标落在[0,1)区间,可以通过取模操作实现。去噪网络通常采用等变图神经网络,确保旋转不变性。
三、评估指标与稳定性验证
生成模型输出的结构需要经过严格评估。最基本的指标是结构有效性,即原子间距是否合理、没有重叠、化学价态是否满足。对于晶体,还需要检查晶格参数是否合理,以及是否满足空间群对称性。新颖性衡量生成结构与训练集中已知结构的差异,常用结构指纹或图同构判断。唯一性统计生成结构中不重复的比例。多样性和覆盖率则衡量生成分布是否覆盖了训练集的主要模式。
仅有几何合理性还不够,材料能否稳定存在取决于热力学稳定性。通常使用密度泛函理论计算生成结构的能量,并绘制凸包图判断其是否位于稳定相。对于晶体,需要计算形成能并与相同成分的已知相竞争。分子则计算原子化能或与已有分子的相对能量。机器学习势函数可以快速预估能量,但最终还需DFT验证。较高的DFT计算成本限制了大规模筛选,因此许多工作会训练代理模型进行初筛。
下面展示一个简单的结构有效性检查函数,基于原子间距离判断是否存在严重重叠。
import numpy as np
def check_validity(atomic_numbers, coords, covalent_radii, threshold=0.6):
n = len(atomic_numbers)
valid = True
for i in range(n):
for j in range(i+1, n):
dist = np.linalg.norm(coords[i] - coords[j])
min_dist = threshold * (covalent_radii[atomic_numbers[i]] + covalent_radii[atomic_numbers[j]])
if dist < min_dist:
valid = False
break
if not valid:
break
return valid
该脚本快速筛除原子严重重叠的结构,但不检查键长过长或化学合理性。更完整的评估会结合价态规则和分子动力学模拟。生成模型论文通常报告有效性、覆盖率、能量分布等指标,并与基线模型对比。
四、应用与挑战:数据稀缺、组合爆炸与对称性约束
大模型材料生成已在多个领域展现潜力。在电池材料中,生成新的固态电解质晶体,要求高离子电导率和宽电化学窗口,生成模型可从已知快离子导体中学习结构特征并生成候选。在催化剂设计中,生成具有特定活性位点的晶体表面或分子催化剂。在药物分子领域,分子生成模型结合强化学习或贝叶斯优化,定向生成具有高结合亲和力的分子。这些应用都依赖大规模公开数据集,如Materials Project、QM9、OC20等。
然而,材料生成面临数据稀缺问题。与自然语言或图像不同,高质量晶体结构数据只有几十万条,且分布不均。组合爆炸使得化学空间无法穷举,生成模型必须在小样本条件下学习可泛化的表示。对称性约束是另一个难点,晶体必须满足230个空间群之一,生成模型需要显式或隐式地遵守这些约束,否则生成的结构在实验上无法合成。周期性边界条件要求生成模型对分数坐标和晶格参数进行特殊处理,如使用分数坐标扩散并施加周期性噪声。
未来方向包括:结合大型语言模型与结构生成模型,用自然语言描述目标性质并生成候选材料;发展等变扩散模型和流匹配方法;利用主动学习闭环迭代,将实验或DFT反馈用于微调生成模型。可解释性也需要提升,让研究者理解模型为何生成某个结构。随着计算资源和算法进步,大模型有望将材料发现从数年缩短到几周,甚至实现反向设计。