735 字
4 分钟
扩散模型做晶体生成:从随机噪声到有序晶格

晶体生成的特殊挑战#

晶体和图像/分子最大的不同:三维周期性。一个晶胞平移复制就构成整个晶体,生成时必须在分数坐标空间([0,1)3[0,1)^3)操作,且生成的晶格参数(a,b,c,α,β,γa,b,c,\alpha,\beta,\gamma)需对应真实空间群。

flowchart LR Noise["随机噪声<br>原子坐标+晶格"] --> Denoise["逆向去噪<br>分数坐标空间"] Denoise --> CIF["CIF 结构<br>周期+对称约束"] CIF --> Relax["MLIP 弛豫<br>能量最小化"] Relax --> Stable["稳定晶体"]

前向扩散:逐步加噪#

给定晶体 C0=(X0,L0)C_0 = (\mathbf{X}_0, \mathbf{L}_0)X0RN×3\mathbf{X}_0 \in \mathbb{R}^{N\times 3} 为分数坐标,L0R3×3\mathbf{L}_0 \in \mathbb{R}^{3\times 3} 为晶格矩阵。

前向过程逐步加高斯噪声:

q(CtCt1)=N(Ct;1βtCt1,βtI)q(C_t | C_{t-1}) = \mathcal{N}(C_t; \sqrt{1-\beta_t}\, C_{t-1}, \beta_t I)

t=Tt=TXTN(0,I)\mathbf{X}_T \sim \mathcal{N}(0, I)LTN(0,I)\mathbf{L}_T \sim \mathcal{N}(0, I),完全随机。

反向去噪:分数坐标空间的约束#

反向过程学一个去噪网络 ϵθ(Ct,t)\epsilon_\theta(C_t, t),预测加上的噪声。DDPM 简化损失:

Lsimple=Et,C0,ϵ[ϵϵθ(Ct,t)2]\mathcal{L}_{\text{simple}} = \mathbb{E}_{t, C_0, \epsilon} \left[ \|\epsilon - \epsilon_\theta(C_t, t)\|^2 \right]

晶体生成的两个关键约束:

  1. 分数坐标周期性X\mathbf{X}[0,1)3[0,1)^3,噪声叠加后需 wrap 回单位立方体。DiffCSP 的做法:在分数空间定义 wrapped 正态分布,用 mod\mathrm{mod} 操作保证周期性。

  2. 晶格对称性:生成 L\mathbf{L} 时需保证晶格能构成合理空间群。MatterGen 的解决方案:直接生成 66 个晶格参数 (a,b,c,α,β,γ)(a,b,c,\alpha,\beta,\gamma),再加上 NN 个原子的分数坐标和元素类型。

DiffCSP:分数坐标 + 晶格联合扩散#

DiffCSP 是晶体扩散的经典框架,损失函数:

LDiffCSP=Et[λXϵXϵθX(Ct,t)2+λLϵLϵθL(Ct,t)2+λALA]\mathcal{L}_{\text{DiffCSP}} = \mathbb{E}_t \Big[ \lambda_{\mathbf{X}} \|\epsilon_{\mathbf{X}} - \epsilon_\theta^{\mathbf{X}}(C_t, t)\|^2 + \lambda_{\mathbf{L}} \|\epsilon_{\mathbf{L}} - \epsilon_\theta^{\mathbf{L}}(C_t, t)\|^2 + \lambda_{\mathbf{A}} \mathcal{L}_{\mathbf{A}} \Big]

三部分分别对应分数坐标去噪、晶格去噪、原子类型预测。λ\lambda 是权重系数。

MatterGen:属性条件生成#

MatterGen 在 DiffCSP 基础上加了属性条件:在去噪过程中注入目标属性(如带隙 >5eV)的嵌入,实现条件生成。

ϵθ(Ct,t,c)where c=condition embedding\epsilon_\theta(C_t, t, \mathbf{c}) \quad \text{where } \mathbf{c} = \text{condition embedding}

训练时以一定概率随机丢弃条件 c\mathbf{c}(classifier-free guidance),推理时通过 guidance scale 控制条件强度。

和 MatMind 生成方案对比#

维度扩散模型MatMind(LLM + RL)
生成空间分数坐标 + 晶格参数连续空间Wyckoff 序列离散 token 空间
训练方式去噪分数匹配(无监督)SFT + GRPO 强化学习
物理约束主要通过数据隐式学习RL 奖励函数显式约束
速度迭代去噪(慢,需 ~1000 步)自回归一步生成(快)
条件生成classifier-free guidance条件指令 + 属性奖励

关键局限#

  • 扩散需要多步迭代采样,生成速度慢
  • 很难同时保证三周期边界、空间群对称性和热力学稳定性
  • 无法输出结构化推理(只能给结构,不能解释”为什么这样生成”)
  • 和 GNN 一样是”窄架构”,一个模型只能做生成,不能做预测 == 这就是 MatMind 要解决的问题
扩散模型做晶体生成:从随机噪声到有序晶格
https://biscuit0613.github.io/posts/paperreading/diffusion-crystal-generation/
作者
Biscuit
发布于
2026-07-12
许可协议
CC BY-NC-SA 4.0
PPO:从策略梯度到 RLHF 的核心优化器
GNN 做晶体性质预测:从 CIF 到物理量的端到端图学习