
这两年大家都在聊大语言模型但真正让它扎进硬核科学问题里的思路其实比想象中更朴素别急着让模型背化学知识先想清楚它最适合干哪种脏活累活。这篇发表在 Nature Machine Intelligence 的工作就把一个让计算化学家头疼多年的问题——分子可合成性优化改写成了一种让大语言模型输出“编辑序列”的形式再用可合成性指标作为反馈让模型自己学会怎么一步步改造分子结构。换句话说不是拿模型去凭空生成一个完美分子而是让它告诉你从这个化合物出发依次做哪几步化学编辑最终能改出一个既保持活性、又更容易做出来的分子。这条路线对我这种常年跑分子生成模型的人来说第一反应是“对啊问题本来就该这么表达”。合成化学里没有“一步到位”的魔法只有一连串可执行的操作这里加个甲基调节脂溶性那里换掉一个麻烦的杂环再把空间位阻调一调。把这些操作排成序列让模型去规划最优顺序逻辑上天然自洽。下面我把这个工作的核心思路、复现过程中需要死磕的细节以及我踩过的坑按我自己的理解完整拆一遍。1. 先搞懂它在解决什么问题可合成性为什么是瓶颈1.1 打分容易给出修改路径难做药物发现的人对这一幕应该都不陌生虚拟筛选跑出来一批活性很高的分子对接分数漂亮ADMET性质预测也不错结果合成同事看了一眼结构就说“这个我做不出来中间那步要过硅胶柱三回还得碰运气”。这其实就是分子生成领域最尴尬的裂缝——生成模型擅长在化学空间里翻花样但生成出来的东西经常偏离可合成范围。长期以来大家处理可合成性问题主要靠打分函数。SA score 也好RA score 也好本质都是给一个分子打一个“好不好合成”的分数数值越低越容易合成。这种打分有个天然局限它只给你一个结果不给你路径。就像教练告诉你“你动作不标准”但没说清楚是脚踝发力不对还是膝盖内扣。对下游工作来说真正需要的是“怎么改才能更可合成”而不是验收的时候拿个分数说“不过关”。这篇文章抓的点就在这不满足于给一个可合成性分数而是训练模型输出一整套具体的编辑动作序列。每个动作都是真实可映射到分子图上的化学变换比如把某个苯环替换成吡啶、给某个位点加一个氟、断开一根易水解的酯键。模型不能只给出“最终目标分子长什么样”还得给出一条能走通的逐步修改计划。1.2 编辑序列把“优化”变成“多步规划”“编辑序列”这个词听起来玄其实类比一下就好懂了。比如你要装修一套老房子理想的 AI 辅助不是直接甩给你一张“完美户型图”而是告诉你下周先拆掉客厅和厨房之间的非承重墙再把阳台窗户封起来最后换掉入户门的位置。每一步看起来都不大但按这个顺序做完房子就变成了你想要的样子。分子优化同理。我们手里有一个起点分子它有活性但合成路线太长目标是另一个分子活性更好或者合成更简单。以前有两种粗暴做法一种是直接让生成模型产出目标分子不管中间过程另一种是做逆合成分析把目标分子拆成买得到的片段但逆合成只解决“怎么合成目标分子”不解决“活性怎么改”。把两种需求拼接起来看就能理解编辑序列的价值。它把活性优化动作和可合成性优化动作统一在同一个序列里先做一步骨架替换再做一步官能团简化最后调整一下手性中心构型。每一步单独拿出来都是一次合理的化学操作连起来就成了一条可以执行的“施工计划”。模型需要学习的不是静态分子分布而是多步决策策略——在每一步选择动作时同时考虑当前分子的活性、可合成性以及后续动作的空间。1.3 为什么选大语言模型而不是图神经网络这个问题背后其实是序列化表达的天然优势。分子可以表示为图但图上操作的组合空间不容易离散化而一个“编辑序列”天然是 tokens 序列这正好落进语言模型的射程。把每一个编辑动作编码成 token把起始分子编码成上下文模型要做的就是自回归地预测接下来的动作 token。语言模型对长序列依赖的处理能力恰好能担得起“前面改了杂环、后面会影响取代基位置”这种跨步骤约束。当然我不是说图神经网络不行。图模型在分子表征上的强项依然能打但到了“多步编辑路径生成”这个任务上它得额外设计一个动作解码器还得处理图编辑的循环依赖工程复杂度高不少。语言模型直接把问题简化成了“序列生成”加上这些年 Transformers 在长上下文上的积累训练和推理的工具链都成熟落地成本低很多。坦白说这篇工作选 LLM 不是因为它能记住多少化学知识而是因为**“多步规划”这个任务形态恰好长在语言模型的能力半径里**。2. 核心方法拆解怎么让模型输出一份可用的编辑序列2.1 编辑动作怎么 token 化动作空间的设计是整个系统能不能跑通的第一个分水岭。我见过不少复现卡壳的案例问题都出在动作定义太随意——有人直接把整段 SMILES 作为“编辑单元”输入结果模型输出一堆语法正确但化学上完全畸形的变体。这一类工作里比较合理的做法是把动作定义成原子和片段级别的变换每个动作都对应 RDKit 能执行的修改。常见动作类型包括原子替换把某位点的原子类型替换比如 C → N附带氢原子数的自动修正片段插入/替换在特定连接点插入常见基团如 -F、-OCH₃、-CF₃或者替换整个芳香环键级调整单键调双键、双键调单键需要保证价键规则断键/成键断开一个连接位点或者新建一个桥环连接立体化学翻转修改手性中心构型适用于活性构象相关的优化把这些动作做成一整套受控词汇表后每个动作 token 背后绑定一个实际可执行的分子编辑函数。这样不论模型怎么生成序列最后一步都会经过化学合法性校验非法动作直接拦截。这个设计很关键——它相当于给模型加了一层“语法海怪”不允许它在语法层面胡言乱语只能犯“化学策略”层面的错误。token 化时还会涉及定位信息。分子总不能只有一个全局动作得告诉模型“改哪个位置”。做法上通常是先给分子做一次子结构匹配把修改位点编号动作 token 里带上位点索引。不过要提醒一句位点跟着骨架走一旦序列前面已经替换过片段位点编号也会变。处理不好会出现“改了一个被删掉的位点”这种矛盾所以实现时必须在每一步执行后重新算分子图和位点映射。2.2 奖励反馈可合成性不是一个数字那么简单如果只看最终的 SA score 来给模型打分训练出来大概率是个“刷分机”。这个坑后面细说先谈怎么设计一个不太容易被钻空子的奖励组合。一个可用的奖励函数至少包含几块活性预测评分由外部预测器给出模型是为了它才做优化的可合成性评分SA score、RA score 或逆合成置信度可以加权组合结构相似性约束用 Tanimoto 相似度衡量编辑序列产物与起始分子的距离防止模型一步改到完全无关的分子来投机取巧合法性惩罚每一步执行失败或最终分子校验失败直接给负奖励我记得有不少工作还往奖励里加了药化规则过滤比如 PAINS 警报、过度卤代的惩罚否则模型很容易发现“多加几个氟原子 SA score 会变低”这种讨巧路径。这里有个实操心得奖励函数尽量设计成“相对提升”而非“绝对数值”。因为不同活性预测器出来的分值范围完全不一样直接叠加数值容易让某一项特别大的权重主导训练。更稳的做法是每一步计算当前分子和起始分子的奖励差值让模型学会的是“编辑后比编辑前好”而不是单纯追一种绝对值。这个细节对收敛稳定性影响很大。2.3 训练流程先从模仿开始再用强化学习收敛直接从随机策略开始强化学习大概率训练十天半个月还在原地打转。这类工作的通用套路是分两阶段先用监督学习做一个“像样”的初始化再用强化学习去拉高奖励。第一阶段是模仿学习。从已有的合成化学数据里挖出真实的分子改造案例例如从一个先导化合物到一个上市药物的已知优化路径把这些“起点分子 → 编辑序列 → 终点分子”三元组拿去训练模型。目标是让模型先学会说化学家听得懂的“化学语言”而不是等强化学习从零去试。没有这个阶段模型连合法的编辑序列都生成不利索后面奖励信号再准也没用。第二阶段才是强化学习。常见做法是用策略梯度类的方法把模型当作策略网络输入起点分子输出一整段编辑序列然后用上面组合出来的奖励函数评估终点分子再把回报回传。为了防止模型在强化阶段彻底忘掉第一阶段学到的基本规则会在损失函数里加一项 KL 正则让模型不要偏离初始策略太远。这个技巧几乎是标配不加的话训练后期容易“奖励膨胀但结构全面退化”。在算力受限的环境里还有一个折中方案不用完整强化学习而是用模仿学习配合 beam search 做推理时搜索。也就是训练好一个编辑策略后用波束搜索同时展开多个候选序列每个候选走完再打分排序。这样做虽然理论上不如强化学习端到端最优但工程实现简单而且效果在很多任务上已经能满足需求。我觉得可以先从这个版本跑通再往上加强化学习。3. 复现时真正要下功夫的几个环节3.1 动作空间别贪大先做能约束的我见过有人一上来就把动作空间切得特别细原子级替换来一套、官能团变换来一套、立体化学又来一套结果模型训练难度翻倍。动作空间大意味着 token 种类多、输出分布宽在小数据量下很难学出可靠策略。我的建议是分阶段扩展。第一版先做一个中等规模的动作集大概覆盖常见官能团替换和原子替换就够用。等 pipeline 跑通、验证奖励函数稳定后再往里面加复杂动作。动作集的选择还要考虑数据覆盖率如果某个动作在训练集里连几十次都没出现过模型基本学不会它不如先砍掉。另一个容易踩坑的地方是动作冲突处理。比如序列里第一步在某个位点插入了甲氧基第二步想在这个位点替换杂原子此时位点其实已经变成甲氧基的一部分。简化处理是在当前分子里重新做子结构匹配匹配不到就跳过这一步但跳过后要重新计算后续位点偏移不然整个序列会越编越乱。这一步实现时多花点时间后续会省掉大量麻烦。3.2 模型选型与训练超参模型结构不用太花哨基于分子 SMILES 或者 SELFIES 预训练的 Transformer 编码器-解码器框架基本够用。编码器读入起点分子序列解码器逐步输出编辑动作。如果想把任务做得更可控可以在编码器中额外加入一个“优化目标描述”字段比如“降低 SA score 并保持活性不低于 0.5”让输入变成指令式的。训练超参这块有几条比较实在的经验学习率监督微调阶段可以放在 1e-4 到 3e-4强化学习阶段要降到 1e-5 左右否则策略变化太猛KL 正则根本拉不住batch size受限于分子序列长度batch size 不用开特大16 到 32 够用但强化学习阶段为了让奖励信号稳定梯度累积步数可以适当加序列长度上限编辑序列一般限制在 10 到 20 步就够了太长的序列会带来两个问题推理时 beam search 开销指数增长奖励稀疏性加剧因为只有到最后才能评估结果还有一个小细节起点分子输入前最好统一做标准化处理去盐、中和电荷、规范立体化学表达。否则同一个分子可能有多种 SMILES 写法模型会浪费容量去学习这种无意义的表示差异。3.3 评测指标别被一个 score 骗了这类工作最容易出现的情况是模型在训练集上的奖励分数一路飙升但拿给合成化学家一看出来的分子还是“纸上谈兵”。所以评测指标一定要多层交叉验证。我的建议是至少看四个维度评测维度常用指标注意点有效性RDKit 可解析率、价键合法率必须保持接近 100%否则说明动作约束有漏洞定向优化成功率满足活性阈值和 SA 阈值的目标分子占比别只看 top-1要看 top-50 里的占比可合成性可信度SA/RAScore 之外再用逆合成分析器做完整路线评估便捷分数高不代表真实路线存在结构多样性骨架类型数量、Tanimoto 距离分布防止模型围着一个骨架疯狂微调特别想强调第四点。模型很容易钻进死胡同找到一个局部最优骨架后后续所有编辑都在这个骨架周围打转最终输出 top-100 里全是同一家族结构。多样性指标没盯着审稿人随便抽几个结构就能看出问题。更严格的做法是让合成化学家对抽出的结构做一轮人工评估打分表上包含路线长度、原料可得性、反应可靠性。这个工作里模型输出的是“序列”而不是“单个分子”本来就更方便专家去阅读和判断人工评估门槛并不高。4. 踩坑实录这些问题我基本都遇到过4.1 分子有效性塌方第一次跑通训练 pipeline 的时候我兴冲冲地看生成结果结果发现 RDKit 解析失败的分子占了差不多 30%。后来查日志问题出在编辑函数的容错处理上模型预测的动作是“在原子 5 和原子 7 之间新建一个键”但执行条件没检查这个键是否已经存在、两原子距离是否合理、价电子是否允许。后来加了几道硬校验才算稳定每执行一步动作前先检查原子映射是否存在动作执行后立即 sanitize 一次分子失败就整体回滚到上一步状态。不要想着用概率手段掩盖非法动作该拦截就拦截该回滚就回滚有效性才会稳定在 99% 以上。4.2 模型钻奖励的空子这是最让人头大的问题。奖励函数设计得再好模型也能嗅到漏洞。我遇到的一次情况是模型开始大范围引入溴原子。代进去看SA score 确实降了因为溴代物在某些打分规则里被当成了“常见商业片段”但药化上溴代总是有代谢稳定性隐患而且多溴化合物的合成后处理也不干净。这就是典型的“奖励短视”问题。后来我为卤素原子数量加了额外惩罚项并且调整了 SA score 权重情况才好一些。这类问题没有一劳永逸的解法只能在实验过程中不断检查生成物分布用统计手段发现“模型在刷什么特征”再动态调整奖励函数。说白了就是跟模型打攻防战。4.3 稀疏奖励训不动大部分编辑序列跑完活性分数可能根本没变化。奖励全是零模型策略梯度为零训练就成了空转。我试过降低活性预测器的阈值让更多分子“看起来有提升”但代价是模型改进方向变得很模糊。最终有用的办法是课程学习。先把奖励简化成只看可合成性优化让模型学会“把一个难合成分子改简单”的基本能力此时序列短、奖励相对密集。等这一步稳了再引入活性预测器开始联合优化。这样分两阶段训练比从第一天就上完整奖励可靠得多。顺便说一句这种思路和人类学习很像先学基础操作再学策略判断。4.4 长序列与搜索成本的平衡规则上把编辑序列限制在 20 步以内但实际推理时 beam search 的宽度加深计算成本感人。我试过 beam size 从 8 加到 32多样性好了不少但推理时间直接涨了几倍。在这个任务上list 里比较现实的配置是 beam size 16 左右长度控制在 15 步以内再配合“提前终止”如果连续几步的中间分子奖励没有再提升就不再往下搜索了。这个技巧能省一多半算力质量下降不明显。5. 这个思路能往哪里用5.1 药物发现里的苗头优化与骨架跃迁最直接的落点是药物发现流程里的 hit-to-lead 阶段。传统做法是药化专家盯着先导化合物结构手动尝试各种类比物设计费时费力。编辑序列模型可以批量给出多条修改路径专家只需要审阅这些路径挑出靠谱的去验证。因为模型输出的是可解释的多步编辑计划而非一个黑箱结构专家的介入成本很低——看一眼就知道这条路线想干嘛哪些步骤合理哪些步骤不靠谱。骨架跃迁是特别值得期待的方向。编辑序列天然包含“替换杂环片段”“重新连接环体系”这类操作模型如果学会跨骨架规划就能在保持活性的前提下跳出原专利覆盖范围。很多团队真正想要的就是这种能力而不是微调几个取代基的程度。5.2 更广的分子领域材料、农化不要只看药物发现。农化分子的优化也存在同样痛点先导发现后要做的结构修饰、可合成性评估、多目标权衡和药物化学如出一辙。材料领域里某些发光分子或电子传输分子对纯度、合成路径的敏感度甚至比活性还高一个漂亮的核心骨架如果第一步就合成不出来后面都是空谈。这类领域的好处是分子数据没有那么大但筛选成本更高模型编辑序列的输出能帮材料科学家快速聚焦到“值得试的核心骨架”而不是在传统试错里耗几个月。我觉得这个方向未来会扩散得比药物发现更快因为材料领域的实验验证成本更贵对“少走弯路”的需求更迫切。5.3 它不会取代化学家它提供的是可讨论的路线草案看得多了会发现这类模型最强的部分永远是生成假设最弱的部分永远是构造世界知识模型。真实合成中还有催化剂配体选择、溶剂效应、反应浓度、纯化难度这些很难在一套通用打分函数里完整表达。所以别指望模型输出一条“绝对正确”的路线而要把它当成一个高产的助手在几秒内提出几十条候选路径再用化学家的经验去过滤和修正。复盘这篇工作我最大的感受是把问题表达成语言模型擅长的形态比堆模型结构重要得多。分子编辑序列这个角度让模型既发挥了长程规划能力又把每一步动作变得可执行、可回溯、可讨论这才是深度学习方法落到化学问题里的正确姿势。我自己之后再做分子优化应该不会再优先考虑“直接生成终态分子图”了换成这种多步编辑的形式至少和化学家的对话会顺畅十倍。如果你也想复现一条类似的技术路线我建议从“动作空间 奖励函数 分阶段训练”这三个点起步先别管模型参数多大、网络多深。把动作约束做到位、奖励设计到不钻空子、监督初始化到能说化学语言后面的强化学习和 beam search 都只是锦上添花。真把这三点打磨扎实你大概率已经能跑出一个让人眼前一亮的原型了。