131

Chemprop / D-MPNN 论文精读:为什么强基线比新模型更重要

Chemprop 的论文核心结论是:调优的传统基线常常打平甚至击败新模型。这篇讲清 D-MPNN 的设计与那个更重要的方法学教训。

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 基线,打不过就不要上深度模型。

延伸资源