162

扩散模型在药物设计中:从去噪生成到可验证假设

扩散模型在药物设计中用于姿势、结构与分子生成。这篇讲清它的机制、在各任务上的表现与可验证性要求。

扩散模型已经成为药物设计中三维生成任务的主流方法:结合姿势预测、蛋白结构生成、基于口袋的分子设计。它的共同优势是能表达「多解」,共同短板是缺乏物理约束。

基本机制

# 两个过程:
#
# 前向(加噪):
#   x_0 → x_1 → ... → x_T
#   逐步加高斯噪声,最终变成纯噪声
#   【这个过程是固定的,不需要学习】
#
# 反向(去噪):
#   x_T → x_{T-1} → ... → x_0
#   训练一个网络预测「每一步应该去掉多少噪声」
#   【这是要学习的部分】
#
# 生成时:
#   从随机噪声出发,反复应用去噪网络
#   → 得到一个样本
#
# 【为什么适合分子问题】:
#
# 1) 【天然表达多解】
#    同一个口袋可能有多种合理的配体姿势
#    确定性模型会「平均」它们(见 102)
#    扩散模型可以采样出不同的解
#
# 2) 【训练稳定】
#    相比 GAN 稳定得多
#
# 3) 【易于条件生成】
#    在去噪网络中加入条件(口袋结构、目标性质)
#    → 分类器引导、无分类器引导
#
# 4) 【可以在任意流形上定义】
#    不限于欧氏空间:
#      SE(3)(刚体变换)—— RFdiffusion(见 151)
#      R³ × SO(3) × SO(2)^k —— DiffDock(见 101)
#      离散空间 —— 分子图的扩散

三大应用与实际表现

应用 代表 实际表现
结合姿势预测 DiffDock(见 101《DiffDock 论文精读》 盲对接强;物理有效性需后处理
蛋白骨架生成 RFdiffusion(见 151《RFdiffusion 论文精读》 实用,已有实验验证案例
复合物结构预测 AF3、Boltz(见 113《AlphaFold3 论文精读》121《Boltz-2 技术报告精读》 当前最强
基于口袋的分子生成 TargetDiff、DiffSBDD 等 生成的分子常不可合成
构象生成 GeoDiff、torsional diffusion 与 RDKit ETKDG 各有胜负

基于口袋的分子生成:期望与现实

# 想法很吸引人:
#   给定蛋白口袋,直接生成能结合的分子
#   → 跳过「生成 + 对接筛选」两步
#
# 实际问题:
#
# 1) 【生成的分子常常不可合成】
#    模型学的是「什么样的分子出现在口袋里」,
#    完全不知道「这个分子怎么合成」
#    → 生成大量含奇怪环系、
#      不稳定基团的分子
#    → 【必须加可合成性过滤,通过率可能很低】
#
# 2) 【物理有效性问题】
#    键长键角异常、与蛋白冲突、手性错误
#    → 用 PoseBusters 检查(见 096)
#
# 3) 【训练数据的局限】
#    可用的蛋白-配体复合物结构只有数万个
#    → 相比分子生成模型的千万级训练数据,
#      数据量少得多
#    → 【泛化到新口袋的能力有限】
#
# 4) 【评估困难】
#    生成的分子没有实验数据
#    → 只能用对接分数评估
#    → 而对接分数本身不可靠(见 095)
#    → 【循环论证的风险】
#
# 5) 【实验验证案例仍很少】
#    公开发表的、经实验证实有活性的
#    「基于口袋生成」的分子案例不多
#
# 【务实的用法】:
#   把它当作【产生结构假设的工具】
#   生成 → 过滤(可合成性、警示、性质)
#   → 对接验证 → 化学家审查 → 少量合成
#   而非「自动设计药物」

让扩散生成的结果可验证

# 【这是使用所有扩散模型的通用要求】
#
# 第 1 步:【多次采样看一致性】
#   同一输入采样 10~40 次
#   → 结果高度一致 = 模型有信心
#   → 结果分散 = 该体系不可靠
#   【这是最实用的可信度判据】
#
# 第 2 步:【物理有效性检查】
#   PoseBusters(姿势)
#   RDKit 有效性(分子)
#   键长键角、立体化学、空间冲突
#
# 第 3 步:【局部优化修正】
#   用 smina --minimize(见 100)
#   或力场最小化
#   → 修正轻微的几何问题
#
# 第 4 步:【独立方法交叉验证】
#   姿势:与 Vina/GNINA 比较(见 346)
#   结构:与 AF2/其它模型比较
#   分子:用对接、药效团独立评估
#
# 第 5 步:【领域知识审查】
#   化学家/结构生物学家看一遍
#   → 是否符合已知的 SAR 与结合模式
#
# 第 6 步:【实验验证】
#
# 【核心原则】:
#   扩散模型的输出是【假设】,不是【结论】
#   假设必须可验证,否则没有价值

import numpy as np
from rdkit.Chem import rdMolAlign

def sampling_consistency(poses, threshold=2.0):
    """多次采样的一致性评估"""
    n = len(poses)
    rmsds = []
    for i in range(n):
        for j in range(i + 1, n):
            try:
                rmsds.append(rdMolAlign.CalcRMS(poses[i], poses[j]))
            except Exception:
                continue
    rmsds = np.array(rmsds)
    agree = (rmsds < threshold).mean()
    return {
        "median_rmsd": float(np.median(rmsds)),
        "agreement_fraction": float(agree),
        "verdict": "高一致性" if agree > 0.7 else
                   "中等" if agree > 0.4 else "不可靠",
    }

技术要点

  • 在正确的流形上扩散这是设计的关键。DiffDock 在姿势自由度上扩散而非原子坐标,RFdiffusion 在 SE(3) 上扩散——选对流形能自动保持化学合理性,且大幅降低学习难度
  • 等变性:三维扩散必须用等变架构(见 160《等变神经网络》),否则旋转输入会得到不同结果;
  • 去噪步数的权衡:步数多质量好但慢;实践中 20~200 步;
  • 条件引导的强度:无分类器引导的权重控制「多样性 vs 符合条件」的平衡;
  • 自条件化:把上一步的预测作为输入,能显著提升质量(RFdiffusion 使用)。

与其它生成方法的定位

扩散模型 自回归 + RL 遗传算法
三维生成 天然支持 困难 困难
条件生成 通过奖励函数 通过打分
目标优化 较弱
可合成性 可通过奖励约束 天然较好
速度 慢(多步)
训练成本 无需训练

关键要点

  • 在正确的流形上扩散(姿势自由度、SE(3))比在原子坐标上扩散更有效;
  • 天然表达多解,避免了确定性模型「回归到均值」的问题;
  • 共同短板是缺乏物理约束——基于口袋生成的分子常常不可合成;
  • 多次采样的一致性是最实用的可信度判据;输出是假设不是结论。

延伸资源