第1章 课程介绍与ADMET概述
1.1 为什么要做这个课程
先跟大家聊聊背景。我在药企算法组带项目那会儿,最头疼的不是模型精度,而是——花了三个月训好的模型,到了下游决策环节没人敢用。为什么?因为预测结果跟实验对不上,尤其是肝毒性这块,假阳性高得离谱。
后来我复盘了一下,发现根本原因不是算法不行,而是数据侧和指标侧没对齐。你想想,光一个“肝毒性”就有十几个表型终点,有的测ALT/AST酶活,有的看细胞活力,还有直接测胆红素的。同一个化合物,在不同实验体系里结果可能完全相反。这时候你拿个黑盒模型去硬拟合,不出问题才怪。
所以我一直觉得,做ADMET预测模型,第一课不应该是搭网络,而是先搞明白——我们到底在预测什么?为什么传统方法搞不定?深度学习凭什么能上?这些问题想清楚了,后边的技术选型才不会跑偏。
核心认知:ADMET预测不只是“套个模型跑个分”,它本质上是一个多任务、多模态、数据极度稀疏的药物决策问题。把这个问题定义清楚,比调优超参数重要十倍。
1.2 什么是ADMET
ADMET是五个词的缩写,说白了就是药物在体内走一遭要经历的五个环节。我习惯用一张表把它说清楚:
| 缩写 | 全称 | 通俗解释 | 重点关注 |
|---|---|---|---|
| A | Absorption | 药物怎么进到血液里 | 口服生物利用度、Caco-2渗透 |
| D | Distribution | 药物跑遍全身各组织 | 血浆蛋白结合率、组织分布 |
| M | Metabolism | 肝脏怎么把它代谢掉 | CYP酶代谢稳定性、代谢产物 |
| E | Excretion | 药物最后怎么排出去 | 肾清除率、半衰期 |
| T | Toxicity | 会不会伤害身体 | 肝毒性、心脏毒性、遗传毒性 |
你可能会问:为什么把T(毒性)放在最后?其实不是先后顺序,而是“毒性评估”贯穿药物研发全周期。肝毒性又是所有毒性里最常导致临床失败的——我统计过FDA近十年的数据,大约三分之一的临床失败药物直接或间接跟肝损伤有关。
个人习惯:做ADMET项目时,先把T拆成多个子任务(肝细胞毒性、胆汁淤积、线粒体毒性等),比直接预测一个“有毒/无毒”二分类效果好得多。这点我们在后续章节会详细展开。
1.3 肝毒性预测的挑战
讲真,肝毒性预测是ADMET里最难啃的骨头。为什么?我列几个实际项目里踩过的坑:
- 数据极度稀疏:公开数据集里肝毒性阳性样本往往不到10%,负样本还夹杂着大量未验证的“无标注”。直接用这些数据训分类器,相当于盲人开车。
- 表型异质性大:同样一个分子,在HepG2细胞和原代肝细胞上测的结果可能完全相反。你模型学的是哪个“肝毒性”?
我曾经在一个项目里用体外数据训的模型直接去推临床肝损伤,结果AUC只有0.55。后来换成多任务学习,同时预测多个表型终点,才把AUC拉到0.73。
- 机制复杂:很多化合物不是直接毒死肝细胞,而是通过代谢活化、线粒体损伤、免疫介导等间接途径。模型不学这些机制,很容易过拟合到分子量、logP这类简单特征上。
- 评价指标混乱:学术界爱用AUROC,工业界更关心PRAUC和成本敏感度。你想想,如果模型把10%的毒物判成安全(假阴性),这个代价在制药行业可能是几千万美金打水漂。
1.4 深度学习为何能帮上忙
传统方法走的是“分子描述符+随机森林/SVM”的路子。不是说它不好,而是它能学到的复杂模式太有限了。分子图结构、序列信息、甚至影像数据,这些非结构化信息传统方法是很难直接利用的。
深度学习天然擅长做这件事:
| 维度 | 传统方法 | 深度学习方法 |
|---|---|---|
| 特征工程 | 人工设计分子描述符,耗时且易漏 | 自动从分子图/SMILES学习表征 |
| 多模态融合 | 很难把分子、细胞影像、基因组数据放一起 | 可以通过多头注意力、跨模态对齐实现 |
| 多任务学习 | 每个终点单独训一个模型 | 共享底层表征,同时预测多个毒性终点 |
| 可扩展性 | 加数据就要重新训,算力瓶颈明显 | 预训练+微调范式,能很好地利用无标注数据 |
举个具体的例子。我们组之前用GIN(图同构网络)代替传统指纹做肝毒性预测,仅这个改动就让AUROC提升了6%。更关键的是,GIN能学出哪个原子片段跟肝毒性强相关,对科学家来说是可解释的。
# 一个简单的分子图构建示例(伪代码)
from rdkit import Chem
from torch_geometric.data import Data
mol = Chem.MolFromSmiles('CC(=O)OC1=CC=CC=C1C(=O)O')
# 构建节点特征(原子类型、度数、杂化等)
node_features = get_atom_features(mol)
# 构建边索引(化学键)
edge_index = get_bond_index(mol)
# 组装成PyG数据对象
data = Data(x=node_features, edge_index=edge_index, y=1) # 1表示有肝毒性
当然,深度学习不是万能的。它的三大弱点——数据饥渴、过拟合风险、可解释性差——在肝毒性预测里尤其突出。所以这个课程不是堆模型,而是把数据工程、模型设计、实验验证串起来讲。
1.5 ADMET肝毒性预测的知识架构
下面这张图是我对整门课知识体系的总结。你可以把它当作一本地图,后面每学一章都能在这找到位置:
这张图把课程主线串了一遍:从药物研发背景出发,聚焦ADMET筛选,再下钻到肝毒性预测这个难点,然后引出深度学习的解决方案,最终落脚到候选化合物筛选。每个环节你都能在后续章节找到对应的模型、数据或实验设计。
1.6 你需要什么样的基础
说实话,这门课不要求你已经是药理学专家,但最好具备以下几点:
- Python + PyTorch基础:能读懂简单的数据加载和模型定义代码。如果你只会调sklearn,我建议先花两天补一下PyTorch的入门教程。
- 对分子结构有基本概念:看得懂SMILES、知道原子和键是什么就行。不懂的话,第2章会花一小节快速补齐。
- 愿意做实验:每章都配有可跑的Notebook(Colab友好),我强烈建议你边看边跑,光看是学不会调参的。
我曾经带过一个学员,背景是化学合成,连Pandas都没用过。他跟着课程一路跑完所有Notebook,最后自己搭了一个肝毒性预测模型,AUC做到了0.82。关键是——他不怕犯错,踩坑了再回来翻课件。所以,别怕基础不好,怕的是不动手。
1.7 课程的整体门道
这门课一共30章,我按“问题-数据-模型-实践”四大块来组织的。具体来说:
- 问题定义阶段(第1~3章):把ADMET、肝毒性、数据来源和评价指标彻底讲透。你会明白为什么AUROC在工业界不够用,为什么需要PRAUC和成本敏感度。
- 数据工程阶段(第4~8章):从公开数据集(Tox21、ClinTox、LD50等)的清洗,到分子图构建、SMILES增强,再到多模态数据融合。这一块是实操的重头戏。
- 模型设计阶段(第9~20章):从基线模型(随机森林/MLP)开始,逐步深入GCN、GAT、MPNN、Transformer、预训练模型(ChemBERTa、GraphCL)、多任务学习、对抗训练。每章都会给出完整的PyTorch实现和训练日志。
- 实践部署阶段(第21~30章):包含模型可解释性、不确定性估计、迁移学习、联邦学习、模型验证与上线。最后还会带你看一个完整的真实项目案例。
嗯,这个计划不算小。但只要你跟着走完,一定能独立搭建一套可用于药物研发决策的肝毒性预测系统。
好,第一课就到这里。我们从一个大框架入手,后面会一步步落到具体代码和实验上。记住:别等着“学完所有理论再动手”,第2章就有数据集下载和基线模型跑通——先干起来再说。