分子生成:基于深度生成模型的新药设计

FreeGuideOnline 最新 2026-06-26

分子生成概述:从随机筛选到智能设计

传统药物发现依赖高通量筛选,在庞大化学空间(估计 $10^{60}$ 个类药分子)中盲目寻找苗头化合物,成功率低、成本高。分子生成(Molecular Generation)旨在利用计算方法自动设计满足特定性质约束的新分子结构,将药物设计从“寻找”转变为“创造”。深度生成模型的崛起,使模型能直接从数据中学习分子分布,并按需生成新颖、可合成、高活性的分子,已成为人工智能驱动药物发现(AIDD)的核心环节。

为什么要用生成模型设计分子?

  • 探索未至空间:跳出已知化合物库,发现全新骨架。
  • 多目标优化:同时优化活性、选择性、代谢稳定性、合成可及性等。
  • 结构多样性:避免专利壁垒,产生丰富分子系列。
  • 条件生成:以靶点口袋结构或药理特性为条件,定向生成。
  • 提升效率:加速先导化合物发现与优化,缩短研发周期。

分子表示方法:让机器“看懂”分子

深度生成模型需要将分子转换为机器可处理的表示形式。常见表示各有优劣,直接影响生成质量和可控性。

一维字符串表示

SMILES(简化分子线性输入规范):将分子图转化为线性字符串,如苯可写作 c1ccccc1。优点是紧凑、自然语言模型可直接处理,但存在语法脆性(微小改动导致无效分子)和表达歧义(同一分子多种SMILES)。SELFIES 则是一种语法保证新字符串,每次修改都生成有效分子,非常适合生成任务。

二维图表示

将分子看作以原子为节点、化学键为边的无向图。节点特征包括原子类型、手性等,边特征包括键类型、键立体化学。图生成模型直接操作图结构,天然符合分子本质,但计算复杂度较高。消息传递神经网络(MPNN)常用于学习分子图表征。

三维几何表示

包含原子坐标和构象信息,对理解药物-靶点相互作用至关重要。可表示为点云、距离矩阵或体素网格。基于3D的生成模型能直接考虑形状互补和药效团匹配,但数据需求大,训练难度高。


深度生成模型家族:六类主流方法

1. 变分自编码器:潜伏空间导航

VAE 由编码器和解码器组成。编码器将分子映射到一个连续的高斯分布隐空间;解码器从隐空间采样点重构分子。训练目标包含重构损失和KL散度,迫使隐空间平滑。

分子VAE流程

  1. 将SMILES输入编码器,得到均值和对数方差向量。
  2. 通过重参数技巧采样隐变量 $z$。
  3. 解码器将 $z$ 翻译回SMILES(通常使用循环神经网络)。

优势:隐空间连续且结构化,可通过在空间内插值或向量运算实现性质渐变。劣势:重构率非100%,可能生成无效分子(改用SELFIES可缓解)。代表:JT-VAE引入分子子结构(Molecule Junction Tree)进行编解码,生成完全有效且新颖的分子。

2. 生成对抗网络:对抗博弈促生成

GAN 包含生成器 $G$ 和鉴别器 $D$。$G$ 从噪声生成分子,$D$ 判断输入是真实分子还是生成分子。二者交替训练,直至 $D$ 无法区分。

在分子生成中,常将GAN与强化学习结合,使用策略梯度训练生成器,化解离散分子序列不可微分的问题。ORGAN(Objective-Reinforced GAN)在传统GAN基础上加入目标引导,通过奖励信号控制生成分子的期望属性。挑战:模式坍塌、训练不稳定,且有效性和新颖性平衡较难。

3. 自回归模型:逐原子或逐键生长

将分子生成视为序列决策过程。每一步根据已有结构预测下一个符号(原子、键或片段)。RNN/LSTM 语言模型是最早应用:用大量SMILES训练,学习分子语法,然后采样生成新SMILES。

基于RNN的生成与微调

  • 在大型化学库上预训练一个SMILES分子语言模型。
  • 通过强化学习或迁移学习进行微调,使生成分子偏向特定活性值或综合打分。
  • 代表:DrugEx 系统使用多目标强化学习,同时优化活性与选择性。

Transformer/自注意力模型 取代RNN成为更强基线。MolGPT、cMolGPT使用GPT式架构,支持条件生成。可配合分子属性预测头做多任务学习,生成质量更高。

图自回归模型:如GraphRNN、GRAN,逐步添加节点和边,生成分子图,保证结构有效性。

4. 流模型:精确密度估计与可逆映射

流模型(Normalizing Flows)使用一系列可逆变换将简单先验分布(如高斯)映射为复杂数据分布。核心优势是直接给出精确对数似然,可进行稳定训练,并能计算隐向量与分子间的一一映射。

应用:GraphNVP(Graph Normalizing Flow)将分子图分解为节点矩阵和邻接张量,分别用耦合层变换,实现有效分子的可逆生成。MoFlow则基于键结构进行图生成,提升有效性。流模型生成的分子有效性高,但隐空间不易约束属性,常需后接贝叶斯优化。

5. 扩散模型:从噪声中还原分子

扩散模型 是近期最火热的生成范式。前向过程逐渐向数据添加噪声直至纯噪声,逆向过程学习去噪复原数据。由于持续状态空间适用性,扩散模型最初用于图像,现已成功扩展到分子。

分子扩散模型分类

  • 基于坐标的扩散:对3D构象施加高斯噪声,学习生成具有合理构象的分子。GeoDiff 在去噪过程中结合图神经网络,利用E(3)等变性,同时生成原子坐标和元素类型。
  • 基于图的扩散:对离散的图成分(原子类型、键类型)进行连续扩散或类别扩散。DiGress 使用离散扩散过程,逐步添加类别噪声并学习逆过程,生成的分子图几乎100%有效。
  • 条件扩散:通过提供靶标蛋白质口袋的3D结构作为条件,TargetDiffDecompDiff 等模型可进行基于结构的药物设计,直接生成结合口袋内的配体分子。

扩散模型生成质量高、多样性好,但推断速度慢,需要多步去噪。

6. 强化学习驱动的多目标优化

强化学习本身不是生成模型,但与分子生成器(常为RNN或Transformer)结合,可实现高效的性质优化。将分子生成定义为马尔可夫决策过程:状态为当前分子序列,动作为选择下一个符号,奖励为生成分子综合评价得分(生物活性、QED、SA分数等)。

策略梯度方法(如REINFORCE)用于更新生成器参数,鼓励生成高奖励分子。通过引入多样性奖励相似性惩罚避免模式坍塌。常用框架:REINVENT使用基于RNN的代理模型,结合多样性过滤(Diversity Filter)确保骨架新颖性。这种方法适合在已有活性或ADME属性预测模型指导下,进行大步“跳跃”式的分子优化。


基于结构的分子生成:直接契合靶点口袋

当靶蛋白的3D结构已知时,分子生成任务变为“生成能非共价结合口袋的配体分子”,即基于结构的药物设计(SBDD)。

  • 3D编码器:使用等变图神经网络(如SE(3)-Transformer、Equiformer)处理蛋白质口袋原子和分子几何,提取结构特征。
  • 生成条件:将口袋编码作为条件信号注入生成器(如条件VAE、cGAN、条件扩散模型),使生成分子的原子完全在口袋约束下采样。
  • 代表性工作Pocket2Mol 利用等变网络编码口袋,自回归采样原子并根据距离约束放置;TargetDiff 以口袋为条件进行扩散,生成重心锚定的分子构象;FLAG 采用片段连接策略,在口袋内由模型自动拼接片段。

评估指标包括结合亲和力(Vina评分)、配体效率口袋占据率与参考配体构象的RMSD等。


分子生成评价体系:不止于新颖性

单一指标无法全面衡量生成质量,需多维度评估:

维度 指标 说明
有效性 Validity 生成分子符合化学规则的比例。用SELFIES或图生成通常接近100%。
新颖性 Novelty 与训练集最大Tanimoto相似度 < 阈值的分子占比,通常取0.4–0.6。
多样性 Uniqueness 生成集合中唯一分子的比例;内部多样性可用Tanimoto不相似度均值衡量。
化学合理性 QED, SAscore QED量化类药性,SAscore估计合成可及性。
目标性质 活性、选择性、代谢稳定性等 使用独立训练的分类/回归模型预测或实际生物实验验证。
合成可达性 SCScore, RASA 评估逆合成路线复杂度,确保分子可实际合成。
结构合理性 环张力、轨道互作用、构象能 3D生成时需检查键长键角、环构象是否合理。

实践建议:至少同时报告有效性、新颖性、独特性和一个目标性质命中率。


实战示例:用Python快速搭建分子生成

下面以基于SELFIES的VAE为例,展示核心代码片段(使用PyTorch)。

import selfies as sf
import torch
from torch import nn

# 1. SELFIES词汇表构建(略)
# 假设已有 vocab: {symbol: idx} , max_len

class MolecularVAE(nn.Module):
    def __init__(self, vocab_size, embedding_dim=128, hidden_dim=512, latent_dim=64):
        super().__init__()
        self.embed = nn.Embedding(vocab_size, embedding_dim)
        # 编码器:双向GRU
        self.encoder_gru = nn.GRU(embedding_dim, hidden_dim, batch_first=True,
                                  bidirectional=True)
        self.fc_mu = nn.Linear(hidden_dim*2, latent_dim)
        self.fc_logvar = nn.Linear(hidden_dim*2, latent_dim)
        # 解码器:从隐变量z开始,初始状态映射,然后逐步生成
        self.lat2hidden = nn.Linear(latent_dim, hidden_dim)
        self.decoder_gru = nn.GRU(embedding_dim+latent_dim, hidden_dim, batch_first=True)
        self.output = nn.Linear(hidden_dim, vocab_size)

    def encode(self, x):
        # x: (batch, seq_len)
        emb = self.embed(x)
        _, h = self.encoder_gru(emb) # h: (2, batch, hidden_dim)
        h = torch.cat([h[0], h[1]], dim=-1) # (batch, hidden_dim*2)
        return self.fc_mu(h), self.fc_logvar(h)

    def reparameterize(self, mu, logvar):
        std = torch.exp(0.5 * logvar)
        eps = torch.randn_like(std)
        return mu + eps * std

    def decode(self, z, targets=None, teacher_forcing=0.5):
        batch_size = z.size(0)
        # 初始输入是开始符
        current = torch.full((batch_size, 1), start_token_idx, device=z.device)
        hidden = self.lat2hidden(z).unsqueeze(0) # (1, batch, hidden_dim)
        outputs = []
        # 在每个时间步将z拼接给嵌入
        for t in range(max_len):
            emb = self.embed(current) # (batch,1,emb_dim)
            input = torch.cat([emb, z.unsqueeze(1)], dim=-1)
            out, hidden = self.decoder_gru(input, hidden)
            logits = self.output(out.squeeze(1)) # (batch, vocab_size)
            outputs.append(logits.unsqueeze(1))
            # 训练时有时使用教师强制
            if targets is not None and torch.rand(1).item() < teacher_forcing:
                current = targets[:, t].unsqueeze(1)
            else:
                current = logits.argmax(-1).unsqueeze(1)
        return torch.cat(outputs, dim=1)

    def forward(self, x):
        mu, logvar = self.encode(x)
        z = self.reparameterize(mu, logvar)
        recon = self.decode(z, targets=x)
        return recon, mu, logvar

训练时损失 = 重构交叉熵 + KL散度权重。生成时从标准正态采样 $z$,调用 decode(z) 即可获得SELFIES序列,再解码为分子。


前沿发展与未来趋势

合成可及性深度整合

当前生成分子常在可合成性得分上偏低。未来趋势是将逆合成规划模型直接融入生成循环:在生成时调用单步逆合成预测,过滤掉难以合成的产物,或利用合成子(synthon)作为生成的基本单元。

3D全原子生成与打分耦合

随着AlphaFold等带来的蛋白质结构富集,基于口袋的3D分子生成成为热点。扩散模型有望与分子对接、自由能微扰(FEP)等物理计算方法耦合,实现在生成过程中直接评估结合亲和力,形成“生成-评估-反馈”闭环。

大型分子预训练模型

类似GPT的分子基础模型(如MolGPT-X、GIMLET、GROVER)在大规模无标注分子库上预训练,捕获通用分子语义,然后是下游生成任务微调。这些模型为分子生成带来了强大的先验知识,显著提升生成质量和泛化能力。

交互式生成与主动学习

将分子生成与化学家直觉结合,使用人在回环(HITL)系统,化学家对生成的分子提供反馈,模型在线学习并调整生成策略。配合主动学习,能高效探索特定性质区域,极大加速“设计-合成-测试”循环。


总结

分子生成已从简单的SMILES采样演变为多目标、多约束、结构感知的智能设计利器。初学者可从基于SELFIES的VAE或RNN语言模型入手,快速体验分子生成的概念;进阶者应掌握图生成、条件扩散模型和强化学习优化,并着眼于实际问题(如针对特定靶标的SBDD)。无论选择哪种方法,务必始终以化学合理性合成可行性为锚点,让AI真正赋能药物研发。