Chemprop(Yang 等,JCIM 2019)提出了 D-MPNN(有向消息传递神经网络)。但这篇论文最有价值的部分不是模型架构,而是它的系统性评估——它诚实地报告了:在很多数据集上,认真调优的传统方法与深度学习打平。
D-MPNN:在边上传递消息
# 普通 MPNN(消息传递发生在【节点】之间):
# 每个原子从邻居原子接收消息
# h_v^(t+1) = U(h_v^(t), Σ_{w∈N(v)} M(h_v, h_w, e_vw))
#
# 问题:【消息会「折返」】
# 原子 A → 原子 B 的消息,
# 在下一轮又从 B 传回 A
# → 信息在两个原子间来回震荡
# → 产生冗余,稀释了远距离信息
#
# D-MPNN(消息传递发生在【有向边】上):
# 状态定义在「从 v 到 w 的有向边」上
# h_vw^(t+1) = U(h_vw^(t), Σ_{k∈N(v)\{w}} h_kv^(t))
# ↑
# 【排除了 w 自身】
#
# → 从 B 来的消息不会再传回 B
# → 消除了折返,信息传播更「干净」
#
# 效果:
# 在多个数据集上比节点式 MPNN 有稳定但不大的改善
#
# 这个设计的启发:
# 图神经网络中「信息如何流动」的细节,
# 比堆更多层更重要
论文真正的贡献:诚实的基线比较
| 比较对象 | 论文的发现 |
|---|---|
| ECFP + 随机森林/SVM | 在多个数据集上与 D-MPNN 相当 |
| 特征工程 + 梯度提升 | 在小数据集上常常更好 |
| D-MPNN(纯图) | 在大数据集上占优 |
| D-MPNN + RDKit 描述符 | 最好——「图 + 手工特征」的组合 |
「加上 RDKit 全局描述符能显著提升性能」是很有实践价值的发现:图网络擅长捕捉局部结构,但对分子量、logP、TPSA 这类全局性质的表达并不高效。把它们直接作为额外特征拼进去,是低成本的重要改进。
超参数优化的影响被严重低估
# 论文的一个重要观察:
# 【超参数优化带来的提升,
# 常常大于换一个「更先进」模型带来的提升】
#
# 这意味着:
# 如果论文 A 的新模型经过精心调优,
# 而基线只用了默认参数,
# 那么报告的「提升」可能主要来自调优而非架构
#
# → 【这是 AI 制药论文中最常见的不公平比较】(见 169)
#
# 正确的做法:
# 给基线【同样的调优预算】
# 报告调优的搜索空间与试验次数
#
# Chemprop 的做法:
# 用贝叶斯优化对所有方法做同等预算的超参数搜索
# → 这才让比较有意义
# 实践建议:
# 在自家数据上做任何模型选型前,
# 先建立一个【认真调优的 ECFP + LightGBM 基线】
# 如果新模型打不过它,就不要上新模型
#
# 这个基线通常:
# - 训练只需几分钟
# - 不需要 GPU
# - 易于部署与维护
# - 结果稳定可复现
使用 Chemprop
pip install chemprop
# 训练(v2 命令行接口)
chemprop train \
--data-path train.csv \
--task-type regression \
--smiles-columns smiles \
--target-columns activity \
--split-type scaffold_balanced \
--num-folds 3 \
--epochs 50 \
--save-dir model_out/
# 【关键参数】:
# --split-type scaffold_balanced
# 按骨架划分,而非随机划分
# → 随机划分会严重高估性能(见 167)
# → 这几乎总是应该开启的
# 加入 RDKit 描述符(论文推荐的组合)
chemprop train \
--data-path train.csv \
--task-type regression \
--descriptors-path rdkit_features.npz \
--save-dir model_out/
# 集成模型(降低方差)
chemprop train ... --ensemble-size 5
# 预测
chemprop predict \
--test-path test.csv \
--model-path model_out/best.pt \
--preds-path predictions.csv
# 超参数优化
chemprop hpopt \
--data-path train.csv \
--task-type regression \
--search-parameter-keywords all \
--raytune-num-samples 30 \
--hpopt-save-dir hpopt/
多任务学习
# Chemprop 原生支持多任务
# 一个模型同时预测多个性质
#
# CSV 格式:
# smiles,logP,solubility,permeability
# CCO,-0.31,1.2,
# c1ccccc1,2.13,,0.8
# (空值表示该分子没有该性质的数据)
#
# 优势:
# 1) 数据少的任务可以从数据多的任务「借力」
# 2) 共享表示学习,减少过拟合
#
# 但要注意:
# 【任务之间必须真的相关】
# 把不相关的任务放在一起会互相干扰(负迁移)
#
# 判断方法:
# 先单独训练每个任务,再多任务训练,
# 比较每个任务的表现是否都改善了
# → 有任务变差 = 存在负迁移
#
# ADMET 多任务的现实:
# 不同来源的实验数据体系差异大
# → 多任务可能被数据不一致性拖累(见 156)
什么时候用 Chemprop
| 场景 | 建议 |
|---|---|
| 数据量 < 1000 | 用 ECFP + LightGBM |
| 数据量 1000~10000 | 两者都试,比较后决定 |
| 数据量 > 10000 | Chemprop 通常有优势 |
| 多个相关任务 | Chemprop(多任务) |
| 需要快速迭代/部署简单 | ECFP + 树模型 |
| 需要不确定性估计 | Chemprop(集成或证据回归,见 166《不确定性估计》) |
论文的持久价值
- Chemprop 成为了分子性质预测的标准基线:新方法必须与它比较才有说服力;
- 「强基线」的方法学立场:论文明确指出不公平的基线比较是领域的系统性问题——这个批评至今仍然适用;
- 工程质量:代码维护良好、文档完整、易于使用,这让它被广泛采用;
- 实际应用:它被用于抗生素筛选等实际项目,是少数有真实发现记录的开源分子模型。
关键要点
- D-MPNN 在有向边上传递消息,消除了节点式 MPNN 的信息折返;
- 「图 + RDKit 全局描述符」的组合效果最好——这是低成本的重要改进;
- 超参数优化的提升常大于换模型的提升——基线必须获得同等调优预算;
- 数据 < 1000 时先用 ECFP + LightGBM 基线,打不过就不要上深度模型。
延伸资源
- GNN 基础:159《图神经网络 GNN》;Benchmark 陷阱:169《Benchmark 陷阱》;
- MoleculeNet:132《MoleculeNet 论文精读》;模型外推性:167《模型外推性》;ADMET 预测:156《AI ADMET 预测模型》。