4. 生成模型基础:从自编码器到扩散模型

做分子生成,手头没点生成模型底子,那训练起来简直是摸黑走路。我早期搞分子生成时,最先接触的就是自编码器(AE),后来一路碰上 VAE、GAN、自回归模型,再到如今最火的扩散模型。每个模型都有它的脾气,适合的场景也大不一样。这一章咱们就挨个捋一遍。

4.1 自编码器(Autoencoder)

自编码器说白了就是「压缩再还原」。它由编码器(Encoder)和解码器(Decoder)组成。编码器把输入 x 压成一个低维的隐变量 z,解码器再把 z 还原成 x'。训练目标就是让 x' 和 x 尽量像。

核心公式:loss = ||x – x'||²
编码器:z = f_enc(x)
解码器:x' = f_dec(z)

我在早期项目中用过 AE 来做分子指纹的降维。效果嘛,训练很快,但生成出来的新分子质量很差,因为隐空间 Z 不是连续的,随便插值可能生成一堆 无意义的分子。嗯,这就是 AE 最大的局限。

4.2 变分自编码器(VAE)

VAE 解决了 AE 隐空间不连续的问题。它让编码器输出的是 均值和方差,而不是直接一个向量。然后通过重参数化技巧采样出隐变量 z,再解码。训练时不仅要有重建损失,还得加一个 KL 散度约束,让 z 的分布接近标准正态。

VAE 损失函数

L = E[||x – decode(encode(x))||²] + β · KL(N(μ, σ²) || N(0, 1))
我的经验:β 这个系数很重要。β 太大,生成多样但重建模糊;β 太小,重建好但隐空间没规整。我调参时常用 β=0.01 起步,看重建和生成质量的 trade-off。

分子生成领域,VAE 的变体 JT-VAE 和 GraphVAE 用得很多。JT-VAE 把分子拆成子结构,先生成树再组装成图,化学有效性高不少。我踩过坑:生成分子时,如果 KL 散度那项没调好,隐空间会出现「空洞」,插值中间区域全是无效分子。

4.3 生成对抗网络(GAN)

GAN 的思路简单又暴力:一个生成器 G 伪造分子,一个判别器 D 分辨真假。两者对抗训练,直到 G 能产出 D 分不出来的分子。听起来很酷,实际训练时 非常不稳定。

我曾经尝试用 GAN 生成药物分子,模型跑了三天,最后生成的全是苯环串串。事后分析发现,判别器太强,生成器根本学不到梯度。解决办法是加谱归一化和 WGAN-GP 损失。

GAN 必备技巧

  • 谱归一化:约束判别器的 Lipschitz 常数,让梯度更稳定。
  • 梯度惩罚(Gradient Penalty):WGAN-GP 里的核心,避免模式崩塌。
  • 标签平滑:别让判别器太自信,缓解训练振荡。
避坑:分子 GAN 容易生成带环太少的分子,化学多样性差。建议在生成器输出时加上 valency 检查,或者用 RL 辅助训练。

4.4 自回归模型(AR)

自回归模型把分子生成当成一个序列预测问题。比如 SMILES 就是一串字符,模型从左到右逐个预测下一个 token。经典的有 RNN、LSTM,后来被 Transformer 替代,成了分子生成界的扛把子。

自回归模型的优势是 生成质量高,但慢 —— 一次只能生成一个 token,不能并行。在单 GPU 上还好,多 GPU 分布式训练时,我遇到过序列截断不一致导致梯度不对齐的问题。

常用自回归分子生成模型

模型表示方式特点
CharRNNSMILES简单,但生成化学有效性低
TransVAESMILES结合 Transformer 和 VAE,效果好
GraphRNN分子图直接生成图结构,不用线性化
个人偏好:我目前团队里用 GraphRNN 生成骨架,再用 SMILES 自回归补全 side chain。两种方式结合,化学通过率能到 85% 以上。

4.5 扩散模型(Diffusion Models)

扩散模型最近火得一塌糊涂,分子生成领域也不例外。它的思想是:前向过程一步步加噪声把分子图变成纯噪声,反向过程用神经网络学去噪,一步步恢复出原始分子。

训练时只需要预测噪声,反向采样时从纯噪声开始,逐步去噪得到新分子。对分子图来说,常见的扩散对象有 原子类型、键类型、坐标。

扩散模型在分子生成中的典型流程

1. 前向扩散:x_t = sqrt(1-β_t) · x_{t-1} + sqrt(β_t) · ε
2. 去噪网络:ε_θ(x_t, t) 预测添加的噪声
3. 采样:从 x_T ~ N(0, I) 开始,逐步 x_{t-1} = x_t - σ_t · ε_θ(x_t, t) + 噪声
工程经验:扩散模型采样步数多(通常 1000 步),在单卡上生成一批分子可能要几分钟。要做多 GPU 分布式,可以把采样 batch 拆到各卡上,每卡生成一批,最后汇总。不过去噪网络本身很大,需要数据并行。

我试过用 EDM(Equivariant Diffusion Model)做 3D 分子生成。训练比较稳定,生成的结构精度高,但 训练收敛慢,而且显存占用吓人——一张 A100 只能装 32 个分子(每个分子几十个原子)。所以必须上分布式,后面章节会细讲怎么拆。

4.6 模型对比与选型建议

选哪个模型,取决于你要生成什么、计算资源多少、能否容忍无效分子。我做分子生成项目时,一般先看目标:如果做高通量虚拟筛选,VAE 最快;如果要对接到靶点,扩散模型精度最高;如果做逆合成,自回归最直接。

模型生成速度化学有效性多样性分布式难度
AE极快低低低
VAE快中中低
GAN中低(易崩塌)高(但不可控)中
AR (自回归)慢高高中(需同步)
扩散慢(需多步)高高高
注意:表中速度是单 GPU 对比。多 GPU 分布式后,扩散模型可以通过并行采样大幅加速,自回归受限于序列依赖,并行度最差。分布式架构的影响后面专门讲。

4.7 本章知识结构图

下面这张图把五种生成模型的核心流程和关系串一起,方便复习。

生成模型知识结构图 生成模型基础 自编码器 AE 变分自编码器 VAE 生成对抗网络 GAN 自回归模型 AR 扩散模型 重建压缩 隐空间不连续 生成质量低 均方差采样 KL 散度约束 生成多样 对抗训练 训练不稳定 模式崩塌风险 自回归逐 token 生成质量高 并行度差 逐步去噪 精度高 采样慢需加速 多GPU分布式适配度 AE/VAE: 低 → GAN: 中 → AR: 中(需同步) → 扩散: 高(可并行采样)

从这张图能看出来,不同模型在生成质量、速度和分布式适配度上各有侧重。实际项目中,我经常把 VAE 和扩散模型组合使用 ——VAE 做快速粗筛,扩散模型做精细优化。后面几章,咱们就开始深入多 GPU 分布式训练的细节,看看怎么让这些模型真正跑起来。