DiffDock(Corso 等,2023)提出了一个与传统对接完全不同的思路:不搜索、不打分,而是用扩散模型直接「生成」结合姿势。它是深度学习对接方法中影响最大的一个,也是争议最多的一个。
核心思想:在什么空间上扩散
# 传统对接:
# 在配体的位置/取向/扭转角空间中搜索,
# 用打分函数评价每个候选
#
# DiffDock:
# 把姿势生成看作从噪声逐步去噪的过程
#
# 关键设计:不在原子坐标上扩散,
# 而在「配体姿势的自由度」上扩散
#
# 平移:3 维(R³ 空间)
# 旋转:3 维(SO(3) 群)
# 扭转:k 维(可旋转键,每个是一个圆 —— SO(2))
#
# → 整体是一个乘积流形:R³ × SO(3) × SO(2)^k
#
# 为什么这样设计:
# 1) 自动保持配体的键长键角合理
# (因为不改变这些内部自由度)
# 2) 维度远低于全原子坐标
# → 扩散过程更容易学
# 3) 与对接问题的物理结构一致
#
# 这个「在正确的流形上做扩散」的设计
# 是论文最有价值的贡献
两个模型:生成 + 置信度
| 模型 | 作用 | 输出 |
|---|---|---|
| 扩散模型(score model) | 从噪声生成候选姿势 | N 个姿势(默认 10~40) |
| 置信度模型(confidence model) | 对候选姿势排序 | 每个姿势的置信度分数 |
置信度模型是独立训练的分类器:判断「这个姿势的 RMSD 是否 < 2 Å」。它取代了传统的打分函数——但它预测的是「像不像训练数据中的正确姿势」,而非结合强度。这个区别常被误解。
论文报告的结果
- 盲对接(不给口袋位置)上大幅领先:在 PDBBind 测试集上,DiffDock 的 top-1 RMSD < 2 Å 成功率约 38%,远高于传统对接方法在盲对接设置下的表现(通常 < 20%);
- 速度快:GPU 上每个复合物数秒到十几秒;
- 可给出多个候选:top-5 的成功率显著高于 top-1,说明正确姿势常在候选集中。
后续评估揭示的问题
# 问题一:物理有效性差
# PoseBusters 论文(2023)系统检查发现:
# DiffDock 生成的姿势中,相当比例存在
# - 与蛋白的空间冲突
# - 键长键角异常
# - 立体化学错误
# - 配体部分伸出蛋白外
#
# → 「RMSD < 2 Å」的成功率在加上物理有效性检查后
# 显著下降
#
# 原因:模型没有显式的物理约束,
# 只是在学习数据分布
# 问题二:泛化能力存疑
# 在与训练集蛋白序列相似度低的新靶点上,
# 成功率明显下降
# → 模型可能相当程度上在「记忆」训练集中的
# 蛋白-配体结合模式
# 问题三:评估设置的可比性
# 与传统对接比较时,传统方法用的是盲对接设置
# (不给口袋位置)——这对传统方法非常不利
# 实际使用中,口袋位置几乎总是已知的
# 在「给定口袋」的设置下,差距大幅缩小
# 应对:
# 1) 必须用 PoseBusters 检查(见 096)
# 2) 用 smina --minimize 修正物理不合理的姿势(见 100)
# 3) 在自家靶点上验证,不采信公开基准成绩
实际使用建议
# 安装(推荐用官方 conda 环境)
git clone https://github.com/gcorso/DiffDock.git
cd DiffDock
conda env create -f environment.yml
conda activate diffdock
# 运行
python -m inference \
--protein_path receptor.pdb \
--ligand_description "CC(=O)Nc1ccc(O)cc1" \
--out_dir results/ \
--samples_per_complex 40 \
--inference_steps 20
# 关键参数:
# samples_per_complex 生成多少候选(越多越可能包含正确姿势)
# inference_steps 去噪步数(影响质量与速度)
#
# 输出:rank1.sdf, rank2.sdf, ... 按置信度排序
# 文件名中含置信度分数
# 必做的后处理流程:
# 1) PoseBusters 检查所有姿势 → 剔除物理不合理的
# 2) smina --minimize 优化保留的姿势
# 3) smina --score_only 得到经验打分作为第二判据
# 4) 相互作用核对(见 109)
# 5) 与 Vina/GNINA 结果比较一致性(见 096)
#
# 只用 rank1 而不做这些检查,是最常见的误用
它适合什么场景
| 场景 | 适用性 |
|---|---|
| 口袋位置未知 | 最适合——这是它的原生优势 |
| 探索可能的结合位点 | 适合,作为假设生成 |
| 与传统方法交叉验证 | 推荐——原理不同,一致性有意义 |
| 口袋已知的常规对接 | 优势不明显,Vina/GNINA 更成熟 |
| 大规模虚拟筛选 | 不适合——无可靠的亲和力信号 |
| 先导优化的细微排序 | 不适合 |
方法学上的启示
- 选对流形比堆网络更重要:在 R³ × SO(3) × SO(2)^k 上扩散,而非全原子坐标,是论文成功的关键;
- 生成 + 排序的两阶段范式被后续很多工作沿用;
- 缺少物理约束是深度学习方法的共同短板:这催生了后续在损失函数中加入物理项、或在推理时做物理精修的一系列工作;
- 基准的可比性问题:DiffDock 引发的讨论推动了 PoseBusters 等更严格评估标准的建立(见 241《DUD-E》)。
关键要点
- 核心贡献是在 R³ × SO(3) × SO(2)^k 流形上做扩散,而非全原子坐标;
- 置信度分数不是亲和力,它预测「姿势像不像正确的」;
- 相当比例的姿势通不过物理有效性检查——必须用 PoseBusters + 局部优化后处理;
- 它的原生优势是盲对接;口袋已知时相对传统方法优势不明显。
延伸资源
- EquiBind:102《EquiBind 论文精读》;TankBind:103《TankBind 论文精读》;
- 姿势判断:096《Binding Pose》;方法对比:346《比较 DiffDock、Vina、GNINA》;基准:241《DUD-E》。