这几年AI药物发现的热度一直没降但很多人一上来就在“追模型”追着追着反而忘了这个领域真正难的是把计算、数据、实验三条线咬合在一起。我见过不少团队深度学习部分做得花团锦簇一到湿实验验证就露馅最后项目整个卡在“算得出来但做不出来”的尴尬阶段。这篇文章不打算给你罗列一百个工具而是用一个尽量贴近真实研发的视角把这套体系拆开讲分子怎么表示、模型怎么选、流水线怎么搭、从候选分子到临床还要解决哪些计算问题。里面会穿插一些我做项目时踩过的坑和实测下来的处理方式希望对你真正上手有点用。1. 打通链路AI药物发现的整体架构与分工1.1 药物研发的核心痛点在哪里先建立一个共同认知一款药物从靶点确认到最终上市平均周期和投入大家都听过十几亿美金的数字不是吓唬人的。这么长的链条里最大的问题不是某个环节不够快而是环节与环节之间反复试错、返工、推到重来。传统流程大致是这样的先确认一个和疾病相关的靶点蛋白然后靠高通量筛选从几十万个分子里找能和靶点结合的先导化合物接着做一轮轮的化学修饰提高活性、降低毒性再进入动物实验、临床试验。每一步的失败率都很高尤其临床阶段大量分子倒在了安全性或有效性的验证上。AI在这里面的角色不是把化学家或者临床专家取代掉而是把计算前置。用模型在早期就过滤掉大概率会失败的分子把有限的资源集中到更有希望的候选物上。我以前有个项目组里一半人做实验一半人做计算计算组每天输出一批打分靠前的分子实验组加班做合成和活性测试——这种配合方式比过去纯粹靠历史数据拍脑袋选分子要高效得多。1.2 从计算到湿实验AI能在哪些环节真正发力用一个表格来梳理药物研发不同阶段和AI任务的对应关系会比较清晰研发阶段核心任务AI典型介入方式输出物靶点发现与验证找到致病相关的蛋白或通路组学数据分析、知识图谱推理、因果推断候选靶点列表先导化合物发现找到能结合靶点的骨架虚拟筛选、分子生成、对接打分候选化合物先导物优化提升活性、降低毒性、改善ADMET多目标优化、活性-性质联合建模优化后的分子系列临床前评估预测安全性、毒性ADMET预测、跨物种外推潜在风险清单临床开发验证安全性和有效性患者分层、生物标志物发现、试验设计优化试验方案与决策支持从这个表能看出来AI不是某一段的“银弹”而是镶嵌在整条链路里的辅助决策引擎。我个人的经验是越早介入对后续省的成本越大。比如在靶点阶段就算清楚某种副作用信号强就不该让这个分子继续往后走了。算得不够准没关系能粗筛掉一部分高危项就已经值回票价。1.3 这个领域的学习路径建议如果你刚入行先不要急着啃最前沿的扩散模型或大语言模型。最好的起点是把分子表征、图神经网络的基础吃透再动手跑一个完整的虚拟筛选流程最后再往上叠加生成式方法和多目标优化。道理很简单不理解分子是怎么“被模型看见”的后面替换再花哨的网络结构都是空中楼阁。2. 核心技术拆解分子表征、模型选型与训练要义2.1 分子长什么样模型才看得懂——SMILES、分子图与3D构象的选择AI没法直接读化学结构式它需要先把分子转化成计算机能处理的数据形态。这个转化方式直接决定了你能用什么样的模型、能学到什么样的特征。目前主流有三种分子表征第一种叫SMILES简化分子线性输入规范本质上是用一串字符把分子结构编码起来。比如苯环可以写成c1ccccc1。它的好处是方便用处理自然语言的办法来处理Transformer这类模型可以直接上。但SMILES有一个天生缺陷同一个分子有不同的写法虽然现在有标准化工具可以统一但字符序列里并没有显式把原子之间的连接关系表示出来模型只能隐式地去学。第二种叫分子图把原子当成节点、化学键当成边。这种表示最接近化学家的直觉图神经网络天然就适合在这个结构上做消息传递——每个原子聚合邻近原子的信息逐层更新自己的状态。这也是目前虚拟筛选和药物性质预测的主流做法。第三种是3D构象连原子在空间里的坐标也一起保留。对于手性、静电效应这类立体化学敏感的问题3D表示能提供更丰富的信息但计算成本更高需要先做构象生成和优化不然输入本身就是噪声。这里面的选型逻辑我用一句夸张但准确的话来总结如果你想快速跑通流程优先SMILES如果你要追求性质的预测精度优先分子图如果你特别关注立体化学细节再看3D构象。三个层次不是互斥的很多项目其实是多模态一起用。2.2 图神经网络在原子连接关系上做推理要说AI药物发现里最核心的基础设施非图神经网络莫属。它的工作方式有点像“让每个原子去问邻居要信息”而且可以叠好几层让信息越传越远。对于一个分子来说第一层消息传递能让原子看到自己的直接键连邻居第二层就能看到邻居的邻居相当于扩展了每个原子的“视野半径”。值得留意的是图神经网络的表达能力不能盲目追求层数。我在实际测试中发现不是层数越多越好——对于大多数类药分子3到5层消息传递已经足够覆盖整个分子的拓扑范围再加深很容易让所有节点的表征趋于一致反而损害区分度。业内戏称这种现象叫“过度平滑”本质是节点信息都混成一锅粥了。这个点新手特别容易踩。实操中还有一个容易被忽略的细节节点特征和边特征的构造。原子特征至少应该包含原子类型、度数、形式电荷、手性、杂化方式边特征包含键型、共轭、是否在环内。这些特征不是越多越好但核心的几项一定得有理有据不能拍脑袋乱塞。2.3 生成模型从随机噪声到类药分子分子生成的目标不是随机吐出一堆乱七八糟的结构而是生成有意义的、可合成的、能和靶点结合的分子。天然适合这个任务的思路是变分自编码器VAE、对抗网络GAN和当下的扩散模型。以基于SMILES的变分自编码器为例它的工作原理是先把字符串编码成潜在空间里的一个向量再从这个向量解码出新的分子字符串。潜在空间有一个很好的性质化学结构相似的分子在空间里通常靠得近所以可以在空间里做插值或移动得到“介于两个分子之间”的新结构。但纯粹这样生成出来的分子往往不满足实际需求。所以主流方案会接上强化学习或多目标优化用额外的奖励函数来引导生成方向——比如一边生成一边评价“这个分子的合成难度高不高”“这个分子的溶解度行不行”分数低就往回纠偏。扩散模型的思路则是从噪声出发逐步去噪还原出一个分子图。它在生成质量和多样性上表现突出但训练成本高、收敛慢对数据量的要求也更高。我的建议是如果项目数据量只有几万条安心用VAE或自回归生成如果数据量特别充足再去上扩散模型收益会更明显。2.4 属性预测ADMET不能只靠一张表很多做AI药物发现的人有个思维惯性觉得预测活性是最重要的其他性质后面再说。但实际上一个分子的吸收、分布、代谢、排泄和毒性ADMET问题比活性问题更容易让项目死掉。活性可以靠化学修饰一点点调上去但如果是代谢太快、有毒性警报或者溶解性太差那就是牵一发动全身的长期拉锯战。ADMET预测本质上是一个多任务学习问题有的任务是分类比如判断有没有血脑屏障穿透能力有的是回归比如预测CYP酶的抑制活性。现实的难点是不同数据之间质量差异很大来自不同实验室的数据可能不一致合并起来噪声很大。我处理这类问题的一个有效手段是分层建模先单独做一个毒性过滤器规则优先、模型辅助把明显有问题的结构在一开始就排除掉然后再用模型预测更细致的性质指标。规则引擎加机器学习模型结合比纯粹端到端要稳得多。另外对预测置信度要采取保守态度低置信度的预测结果宁可标成“待实验验证”也不要直接输出一个让化学家白忙一通的结论。3. 从0到1搭建一个AI分子发现流水线3.1 目标定义与数据准备搭建一个靠谱的AI分子发现流水线第一步不是写代码而是定义问题。你得把“要发现什么”落到一个具体的、可度量的目标上。比如“找到对某激酶靶点有抑制活性、且没有已知毒性警报的化合物”这就比“找到一种治癌症的新分子”要清晰得多。数据准备是这个领域最脏最累也最重要的一环。你可以从公开数据库下载活性和分子结构数据但要非常小心数据质量。以下是我每次都会做的几个动作对SMILES做标准化和去重统一芳香性和手性表示剔除包含无机盐、混合物或明显异常结构的条目看活性值的分布如果极不均匀要考虑分层采样而不是直接切训练集、验证集检查同一分子在不同文献中的重复记录避免数据冲突导致模型混乱。这些动作做完才能进入建模环节。千万不要跳过这一步我见过太多团队用没清洗的数据训出一个看起来挺准、实际上一上线就崩的模型。3.2 构建第一代模型以虚拟筛选为例虚拟筛选的目标很直接在一个很大的化合物库里筛出最可能对靶点有活性的分子。标准做法大致分几步准备靶点蛋白的三维结构如果有实验结构就直接用没有就靠同源建模或AlphaFold预测对化合物库做标准化、去盐、去重复生成每个分子的三维构象用分子对接计算每个分子与靶点蛋白的结合能得分。然而分子对接得分和真实活性之间的相关性并不完美。一个更稳的做法是把对接得分、2D指纹相似度、基于图神经网络的活性预测分数综合起来做一个排序融合。我在项目里常用加权投票式的策略让不同模型互相制衡而不是单一模型说了算。这样可以避免某类模型特有的偏差比如对接软件对某些官能团有偏向性。此外还有个非常重要的细节虚拟筛选结束后一定要做聚类分析。如果你筛出来的前100个分子都来自同一个化学骨架这不算你找到了100个候选分子只算找到1个骨架而且后续一旦这个骨架的实测活性不理想整条线就断了。按骨架聚类后从每一类里各取几个代表分子去做测试是控制风险的关键操作。3.3 分子生成与多目标优化拿到第一批有初步活性的分子之后会希望在这个基础上生成结构相近但性质更好的类似物。这时候生成模型的角色就出来了。这里我给一段简化版的伪代码用来表示基于SMILES自回归生成的流程# 伪代码基于SMILES的分子生成与属性过滤 from molecular_model import SMILESGenerator, PropertyPredictor gen SMILESGenerator.load(pretrained_model.pt) property_model PropertyPredictor.load(admet_model.pt) samples [] gibbs_rounds 8 for i in range(gibbs_rounds): seed random.choice(starting_molecules) generated gen.generate(seedseed, max_length120, temperature0.8) # 逐一打分 for smi in generated: activity_score property_model.predict(activity, smi) toxicity_flag property_model.predict(toxicity, smi) synthesizability calculate_synthesizability(smi) if activity_score threshold and toxicity_flag safe_limit and synthesizability 0.6: samples.append(smi) # 最终去重 骨架聚类 samples deduplicate_and_cluster(samples, similarity0.7)这段代码里面的温度参数temperature0.8决定了生成时的随机性太高会生成一堆没有意义的废分子太低则只会机械复读训练集里的结构。0.7到0.9这个区间通常比较合适具体可以按生成结果的多样性调整。生成出来的分子还要过一遍“可合成性”评估。我的经验是一个看起来完美但合成不了的分子在实际项目里价值等于零。所以要么用规则评估器打一个可合成性分数要么让经验丰富的化学家看图给意见。后者虽然费人但却是最可靠的。3.4 湿实验验证与失败处理计算完之后就到了最见真章的环节湿实验验证。这里最大的认知偏差是期待模型预测能百分之百准确。但实际上的命中率视项目难度和数据量不同可能只有10%到40%。“命中率不高”不等于模型没用关键是看你能不能建立“预测-验证-再训练”的闭环。我的操作方式通常是这样的第一批先合成10到20个分子快速拿到活性数据然后用来校验和改进模型而不是盲目追求一次性大批量验证。这里有一个经济账单次做50个分子的实验成本比做20个高二倍还多但你能从中获取的改进信号并没有等比增长。失败处理上我给出三个原则如果模型预测高活性但实测没活性优先查实验条件是否匹配浓度、溶剂、缓冲液可能完全不同如果同一个系列分子高低活性都符合预测说明模型学到了一些东西可以从失败样本里找共性特征做负面训练数据如果完全无序大概率是数据泄漏或模型特征选择出了问题回到起点检查。3.5 一个完整的实操流程表格下面这张表是我在一个内部项目里常用的流水线总览方便你对照自身项目做调整。阶段输入输出关键工具思路周期参考数据准备原始活性数据清洗后的标准化数据集SMILES标准化、去重、骨架聚类3-5个工作日靶点建模蛋白序列/结构对接模型或口袋特征同源建模、AlphaFold结构预测3-10个工作日虚拟筛选百万级化合物库数百个候选分子对接、指纹相似度、模型集成打分2-4周分子生成活性分子种子数千个类似物VAE/自回归/扩散模型1-2周综合排序打分列表20-50个优化分子ADMET预测、可合成性过滤、人工审阅3-5个工作日湿实验验证候选分子清单实测活性与性质合成、活性测试、毒性初筛4-8周4. 核心细节解析与实操要点4.1 分子表征细节构象生成为什么容易被忽略在真正搭建流水线时2D和3D的差距常常会体现为验证阶段的巨大落差。很多模块默认用2D结构但当你需要做药效团映射、形状相似性比对时3D构象是绕不开的。我在实操中发现构象生成的质量直接决定了后续对接和形状筛选的命中率。构象生成必须注意两点一是要涵盖足够的构象多样性二是要保证生成的构象能量上合理。有些工具默认只生成少数几个低能态构象这会导致分子里柔性链的折叠方式被固定成一种错过真正能结合靶点的活性构象。我习惯把每个分子生成的构象数量调高再按能量窗口去掉冗余这样对接的覆盖度会明显改善。4.2 训练技巧批次采样、不平衡处理与早停训练属性预测模型时最常见的问题是数据不平衡。比如毒性阳性样本可能只占全部数据的5%以下如果直接训练模型会把所有样本都预测成阴性因为这样“准确率”很高。这不是模型聪明是大模型在偷懒。对策有两种一种是采用加权的损失函数让少数类样本在训练时获得更高权重另一种是过采样阳性样本、欠采样阴性样本但要注意别在验证集上引入样本复制导致的数据泄漏。更稳妥的方案是直接用ROC-AUC或PR-AUC做早停标准而不用accuracy。我每次跑模型都会同时查看这两个指标一旦在验证集上出现明显背离就说明要么指标选择不对要么模型过拟合了。4.3 多目标优化的两个常用模式当你要同时优化活性、溶解度、穿透性和安全性时不可能靠单一模型搞定。目前我常用的多目标优化方法有两种思路加权求和把不同性质分数线性加权成总分数简单、直观、可控但需要人工设定权重且对帕累托前沿不同区域的探索较弱多目标贝叶斯优化把不同目标真实地当作多个目标函数去寻找帕累托前沿上的一组最优解信息量更大但计算复杂需要在每次迭代里权衡样本获取和模型更新的开销。实操建议是第一阶段用加权求和快速收敛方向等到有了一批有希望的区域之后再切换到多目标贝叶斯优化去探索边界分子。纯靠单一模式要么方向偏要么效率低。4.4 可解释性让化学家愿意相信你的结果模型再准化学家不相信等于白搭。因此可解释性不是锦上添花而是落地必需的。我常用的可解释性手段是子结构分析把预测结果归因到分子里的某个药效团或风险片段上。例如模型预测某个分子有肝毒性高概率最好能指出是哪个取代基诱导了这一判断。这样化学家就可以针对性地换基团而不是把整分子推倒重来。一种轻量级的做法是枚举所有可能的分子片段用SHAP值或注意力权重分析每个片段对预测的贡献。把它做成一个可视化报告每次给化学家看的不是一串得分而是“这个分子哪里有问题、动了哪里能改善”。5. 实操过程与核心环节实现5.1 场景某靶向抗癌项目A85的完整过程我带过的一个内部代号模拟项目A85的口袋目标是一个激酶家族成员的结构域。公开数据里有一些抑制剂活性和不良反应标注但来源混杂需要花大力气清洗。这里完整记录一下当时的处理过程。数据处理阶段我先从下载的数据里筛出活性明确标注IC50值且小于10微摩尔的分子剔除实验条件不清的样本。随后按骨架聚类发现现有数据主要分布在三个核心骨架上另外还有一大批是快速翻版的类似物覆盖度非常有限。这一步让我提前认识到原始数据经过聚类后化学空间的多样性并没有表面看起来那么丰富。虚拟筛选阶段我们从外部化合物库抽取了约80万个分子用了对接加图神经网络打分融合的策略。最终每一轮从排名前500的分子里挑选50个做人工审阅人工审阅后剩下25个进入合成与活性测试。第一次实验测下来命中率大约28%对于一个结构多样的筛选任务来说已经算是不错的成绩。随后用第一轮实测数据作为训练集扩充重新校准了模型权重第二轮命中率提升到了接近四成。整个项目最大的收获不是模型有多强而是验证数据的回灌闭环在飞快地提升模型质量。如果一开始追求“一步到位”可能还在原地打转。5.2 强化学习与奖励函数设计要点在分子生成环节我用过一段强化学习驱动优化的方案。核心是对生成器输出的分子做实时打分基于打分结果更新策略。这里最关键的设计是奖励函数的形状。奖励函数不应该只有一个“活性得分”而是至少包含三个部分目标活性得分越大越好惩罚项合成难度高、毒性警报、存在不稳定片段都扣分多样性奖励鼓励探索新颖骨架避免所有样本都堆在同一骨架里。这里有个技巧多样性奖励不能用“当前分子和上一批分子的差异”来实现那样容易导致模型在批次间剧烈震荡。更稳的单分子多样性度量是与“已生成并确认优质分子集合”的相似度负相关鼓励去补集里探索。这个细节看着不重要实则是稳定性的关键。我早期就走过弯路奖励函数太激进导致生成分子在活性和可合成性之间剧烈摇摆隔几个批次就塌出一种奇怪的化学结构。后来把三项奖励改成对数线性组合收敛情况才稳定下来。5.3 临床前的安全性与毒性预测细节临床前阶段我特别关注三类风险遗传毒性Ames试验阳性信号肝胆毒性CYP抑制、转运体相互作用心血管毒性hERG抑制表现为QT间期延长风险。这些风险预测模型的数据来源大多是历史试验数据和公开数据库存在严重的报告偏倚被测试过的分子本身就已经偏向“潜在风险较高”的类别。因此直接用这些数据训出来的模型会对很多结构给出过于悲观的预测。我的对策是引入背景化学空间补偿在训练时将分子结构相似度纳入协变量让模型学会区分“这个分子本来就在高风险空间”和“模型对这个分子看走了眼”。5.4 样本量与统计验证方法无论多么高级的AI模型最终的上线都绕不开统计学验证。对于一轮性质预测任务如果你想验证A模型比B模型在某个指标上显著更优不能只给一个对比折线图需要做配对统计检验。一个快速概念示例假设两组活性预测误差分别为16个和21个分子约25%差距用配对t检验时P值是否显著取决于样本量和方差。如果样本量太小哪怕均值差看着大也可能不显著。实操里我习惯至少准备30个以上独立测试分子才启动正式对比验证。这里要特别提醒别用同一批数据反复做检验那会让显著性变得虚高。根本思路是保留一个从未参与调参的盲测集所有定论都在这套集上落锤。5.5 数字孪生与虚拟临床试验的备选思路虽然“虚拟临床试验”这个说法现在听起来还很前沿但它代表的思路在临床上已有雏形用既往对照数据和外部真实世界数据构造虚拟对照组从而减少实验组所需患者数。这背后依赖高质量的遗传数据、电子健康记录和生物标志物图谱。AI在里面承担的任务是做因果推断而不是简单预测相关性——比如“这个患者在这条通路上有异常信号所以对某抑制剂可能有响应”。这一步做扎实了临床方案就能设计得更聪明。6. 常见问题与排查技巧实录6.1 为什么模型在本地验证集上表现好到新数据上就崩了这是所有AI药物项目里被问得最多的一个问题。根本原因不外乎三大类数据泄漏、分布偏移、标签噪声。数据泄漏最常见的来源是分子相似性太高训练集和测试集里的分子共享了相同的骨架或相似的片段导致模型预测“过于乐观”。解决办法是在划分数据集时采用骨架分割而非随机分割。按骨架划分训练集和测试集让测试集的分子骨架在训练集里从未出现过这才能真正检验模型的泛化能力。分布偏移则是训练数据的化学空间和你要预测的新分子空间差异太大。比如训练时以某些杂环结构为主预测时全是新型螺环模型自然会崩。解决策略是在预测前先做一个“适用域检测”计算新分子与训练集的相似度分布超出范围就明确标注“低置信度”。6.2 湿实验数据和计算结果系统性不一致怎么办这类问题通常出现在跨物种外推或实验条件不一致的场景。先不要急着改模型要先去查实验本身。我遇到的多数情况是计算基于的是一个特定的体系而实验用的缓冲液、pH、离子强度或温度不同差距就放大了。比较务实的做法是为计算模型增加一个“体系校准项”用已有的少量实验数据回归出一个校正因子而不是重新训练整个模型。还有一种少见但致命的情况蛋白质靶点本身存在多个构象计算时只用了某一个构象而实验用的是另一个主导构象下完成的。这种情况属于目标定义错误不是模型能力问题。如果你发现对接打分和实验活性完全不相关可以先尝试不同靶点构象做一轮再对接。6.3 训练成本过高模型效果却没有更好算力不该是AI药物发现的瓶颈但很多时候它成了。一个常见陷阱是数据量只有几万条却非要去训练一个大型预训练模型。教育行业有一句话叫“模型越大数据不够时越容易过拟合”在这个领域同样成立。我的建议是根据数据量将模型选型分成三档数据量级推荐方向理由1万以下传统机器学习随机森林、XGBoost加手工分子指纹小数据下泛化稳定1万到10万图神经网络、中等规模Transformer特征自动学习且不易过拟合10万以上预训练大模型、扩散模型大数据量才能发挥优势盲目堆模型规模不仅浪费资源还可能带来维护和可复现性的额外负担。先小规模试错确认收益后再扩大训练是更稳健的路线。6.4 三个值得长期维护的基础设施最后分享一个经验不管项目大小团队里最好长期维护这三样东西标准化数据管线能把任何来源的分子数据清洗成统一格式并记录每一步处理规则。这是所有模型复现的基础基准测试集挑一组覆盖多样化骨架、不同难度任务的数据只用来评估模型能力绝不参与训练。每一次模型升级都要在这份基准上报告指标失败案例库记录所有“计算预测失败”的案例包括当时输入了什么、模型输出了什么、实验实际测了什么。这个库是团队最有价值的资产比任何单独的数据集都香。结尾一点个人实操体会做AI药物发现这几年我最深的体会就一句话这个领域真正难的不是AI而是怎么让AI老老实实嵌入药物研发的齿轮里。模型再先进落不到实验台上就是一堆漂亮的数字。所以如果你准备做这个方向别急着追最新论文先把手头的数据管线打扎实、把验证闭环跑通再去考虑更高级的生成方法。稳定可复现的流程要比灵光一现的模型可靠得多。最后再分享一个小技巧日常实验里的每一次合成结果即使当时看是走走弯路也建议全部结构化记录下来。因为这些“失败数据”在整理后往往能训练出比你精心准备的公开数据集更贴近真实情况的纠错模型。我在多个项目上都有过这种事——模型的第二版提升靠的主要不是新模型结构而是把之前积攒的负样本系统地加了进去。数据会越用越值钱这套思路无论你做到哪一阶段都适用。
阅读完成 · 觉得有帮助?