← 学习中心

AI驱动的分子生成模型:用扩散模型探索化学空间

扩散模型通过逐步去噪生成全新分子,在10^60量级化学空间中高效搜索候选药物。涵盖数学原理、SMILES表示与RDKit代码实战。

本节你将能

理解扩散模型如何在 10^60 量级的化学空间中生成全新分子,掌握 SMILES 表示法与 RDKit 工具链,读懂扩散模型的数学公式。

直觉模型

扩散模型像一位雕塑家——先学习如何将真实分子逐步"加噪"成随机噪声石料,然后逆转这个过程,从噪声中"雕刻"出全新的分子结构。

药物化学家面临一个令人敬畏的挑战:潜在类药物分子的化学空间估计在 $10^{60}$ 量级,这个数字比可观测宇宙中的原子总数还要多。在这个"无穷大海"中寻找有效且安全的药物分子,传统方法犹如大海捞针。而 AI 驱动的分子生成模型,特别是扩散模型(diffusion model),正在改变这一局面。

从随机噪声到药物分子

扩散模型的核心思想优雅而简洁:先学习如何将真实分子逐步"加噪"变成纯随机噪声,然后逆转这个过程——从噪声中逐步"雕刻"出新的分子结构。这就像一位雕塑家从一块混沌的石料中逐步揭示出隐藏的形式。

扩散过程分为两个阶段。前向过程(forward diffusion process)逐步向分子结构添加高斯噪声:

q(xt∣xt−1)=N(xt;1−βt xt−1, βtI)q(\mathbf{x}_t | \mathbf{x}_{t-1}) = \mathcal{N}(\mathbf{x}_t; \sqrt{1 - \beta_t}\,\mathbf{x}_{t-1},\, \beta_t \mathbf{I})

其中 xt\mathbf{x}_t 是第 tt 步的分子状态,βt\beta_t 是预定义的噪声调度(noise schedule)参数,控制每一步添加的噪声量。反向过程则通过训练神经网络来学习如何逆转每一步加噪操作,逐步从纯噪声 xT\mathbf{x}_T 恢复到分子结构 x0\mathbf{x}_0。

分子的数学表示:从SMILES到3D坐标

要让AI处理分子,首先需要将分子转化为计算机可理解的格式。SMILES 是最常用的线性表示法,用ASCII字符描述分子结构。例如:

O O O O H

上图是阿司匹林(acetylsalicylic acid)的分子结构。其SMILES表示为 CC(=O)OC1=CC=CC=C1C(=O)O,其中 C 代表碳原子,O 代表氧原子,= 代表双键,数字代表环的闭合位置。

除了SMILES,分子还可以用3D坐标表示——每个原子的空间位置 (xi,yi,zi)(x_i, y_i, z_i) 构成一个矩阵 X∈RN×3\mathbf{X} \in \mathbb{R}^{N \times 3},其中 NN 是原子数量。3D表示能捕捉分子的立体化学特征,对蛋白质-配体结合预测至关重要。

代码实战:用Python生成分子

以下代码展示如何使用 RDKit 处理SMILES字符串并计算分子描述符:

from rdkit import Chem
from rdkit.Chem import Descriptors, Draw

# 从 SMILES 创建分子对象
aspirin_smiles = "CC(=O)OC1=CC=CC=C1C(=O)O"
mol = Chem.MolFromSmiles(aspirin_smiles)

# 计算分子描述符
mw = Descriptors.MolWt(mol)          # 分子量
logp = Descriptors.MolLogP(mol)      # 脂水分配系数
hbd = Descriptors.NumHDonors(mol)    # 氢键供体数
hba = Descriptors.NumHAcceptors(mol) # 氢键受体数

print(f"分子量: {mw:.2f}")
print(f"LogP: {logp:.2f}")
print(f"氢键供体: {hbd}")
print(f"氢键受体: {hba}")

# 类药性判断 (Lipinski 五规则)
def is_drug_like(mol):
    mw = Descriptors.MolWt(mol)
    logp = Descriptors.MolLogP(mol)
    hbd = Descriptors.NumHDonors(mol)
    hba = Descriptors.NumHAcceptors(mol)
    return (mw <= 500 and logp <= 5 
            and hbd <= 5 and hba <= 10)

print(f"符合Lipinski五规则: {is_drug_like(mol)}")

输出结果:分子量180.16,LogP 1.31,氢键供体1,氢键受体4,完全符合 Lipinski五规则1。

扩散模型的分子生成流程

一个典型的分子扩散模型包含以下步骤:

  1. 编码:将分子从SMILES转换为图表示或3D坐标
  2. 前向加噪:对训练集中的分子逐步添加噪声,共 TT 步
  3. 训练去噪网络:神经网络学习预测每一步添加的噪声
  4. 反向生成:从随机噪声出发,逐步去噪生成新分子
  5. 解码与验证:将生成的表示转回SMILES,验证化学合理性

去噪网络的目标函数可以简化为:

Lsimple=Et,x0,ϵ[∥ϵ−ϵθ(xt,t)∥2]\mathcal{L}_{\text{simple}} = \mathbb{E}_{t, \mathbf{x}_0, \boldsymbol{\epsilon}} \left[ \| \boldsymbol{\epsilon} - \boldsymbol{\epsilon}_\theta(\mathbf{x}_t, t) \|^2 \right]

其中 ϵ\boldsymbol{\epsilon} 是前向过程添加的噪声,ϵθ\boldsymbol{\epsilon}_\theta 是神经网络预测的噪声。网络通过最小化两者之差来学习逆转扩散过程。

化学空间的"导航图"

扩散模型的一个关键优势是条件生成——可以引导模型朝向特定性质区域生成分子。例如,通过添加条件向量 c\mathbf{c}(如目标分子量、LogP值、生物活性),引导生成过程:

pθ(xt−1∣xt,c)=N(xt−1;μθ(xt,t,c),Σθ(xt,t,c))p_\theta(\mathbf{x}_{t-1} | \mathbf{x}_t, \mathbf{c}) = \mathcal{N}(\mathbf{x}_{t-1}; \boldsymbol{\mu}_\theta(\mathbf{x}_t, t, \mathbf{c}), \boldsymbol{\Sigma}_\theta(\mathbf{x}_t, t, \mathbf{c}))

这意味着研究人员可以"订购"具有特定属性的分子:比如"生成分子量在300-400之间、LogP小于3、对某靶点有潜在活性的化合物"。这种精准导航能力使药物发现的早期筛选效率提升数个量级。

当前挑战与展望

尽管扩散模型在分子生成中展现了巨大潜力,但仍面临若干挑战:

  • 化学有效性:生成的分子不一定满足化合价规则,需要后处理验证
  • 可合成性(synthesizability):AI生成的分子可能在实验室中极难合成
  • 训练数据偏差:模型倾向于生成与训练集相似的分子,难以探索全新化学空间
  • 3D精度:在蛋白质口袋等约束条件下生成3D分子仍是一个开放问题

随着AlphaFold 3等结构预测工具的成熟,以及分子动力学模拟的AI加速(如TITO模型),分子生成模型正在与这些技术形成协同:结构预测提供靶点信息,扩散模型生成候选分子,加速模拟验证结合亲和力——一条端到端的AI药物发现管线正在成型。


1 Lipinski五规则:由Christopher Lipinski于1997年提出的类药物性判断准则,要求分子量<=500、LogP<=5、氢键供体<=5、氢键受体<=10。注意"五规则"指的并非数字5的重复出现,而是规则编号。

AI驱动的分子生成模型:用扩散模型探索化学空间 | 必学必会