4. 生成模型基础:从自编码器到扩散模型
做分子生成,手头没点生成模型底子,那训练起来简直是摸黑走路。我早期搞分子生成时,最先接触的就是自编码器(AE),后来一路碰上 VAE、GAN、自回归模型,再到如今最火的扩散模型。每个模型都有它的脾气,适合的场景也大不一样。这一章咱们就挨个捋一遍。
4.1 自编码器(Autoencoder)
自编码器说白了就是「压缩再还原」。它由编码器(Encoder)和解码器(Decoder)组成。编码器把输入 x 压成一个低维的隐变量 z,解码器再把 z 还原成 x'。训练目标就是让 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))
分子生成领域,VAE 的变体 JT-VAE 和 GraphVAE 用得很多。JT-VAE 把分子拆成子结构,先生成树再组装成图,化学有效性高不少。我踩过坑:生成分子时,如果 KL 散度那项没调好,隐空间会出现「空洞」,插值中间区域全是无效分子。
4.3 生成对抗网络(GAN)
GAN 的思路简单又暴力:一个生成器 G 伪造分子,一个判别器 D 分辨真假。两者对抗训练,直到 G 能产出 D 分不出来的分子。听起来很酷,实际训练时 非常不稳定。
我曾经尝试用 GAN 生成药物分子,模型跑了三天,最后生成的全是苯环串串。事后分析发现,判别器太强,生成器根本学不到梯度。解决办法是加谱归一化和 WGAN-GP 损失。
GAN 必备技巧
- 谱归一化:约束判别器的 Lipschitz 常数,让梯度更稳定。
- 梯度惩罚(Gradient Penalty):WGAN-GP 里的核心,避免模式崩塌。
- 标签平滑:别让判别器太自信,缓解训练振荡。
4.4 自回归模型(AR)
自回归模型把分子生成当成一个序列预测问题。比如 SMILES 就是一串字符,模型从左到右逐个预测下一个 token。经典的有 RNN、LSTM,后来被 Transformer 替代,成了分子生成界的扛把子。
自回归模型的优势是 生成质量高,但慢 —— 一次只能生成一个 token,不能并行。在单 GPU 上还好,多 GPU 分布式训练时,我遇到过序列截断不一致导致梯度不对齐的问题。
常用自回归分子生成模型
| 模型 | 表示方式 | 特点 |
|---|---|---|
| CharRNN | SMILES | 简单,但生成化学有效性低 |
| TransVAE | SMILES | 结合 Transformer 和 VAE,效果好 |
| GraphRNN | 分子图 | 直接生成图结构,不用线性化 |
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) + 噪声
我试过用 EDM(Equivariant Diffusion Model)做 3D 分子生成。训练比较稳定,生成的结构精度高,但 训练收敛慢,而且显存占用吓人——一张 A100 只能装 32 个分子(每个分子几十个原子)。所以必须上分布式,后面章节会细讲怎么拆。
4.6 模型对比与选型建议
选哪个模型,取决于你要生成什么、计算资源多少、能否容忍无效分子。我做分子生成项目时,一般先看目标:如果做高通量虚拟筛选,VAE 最快;如果要对接到靶点,扩散模型精度最高;如果做逆合成,自回归最直接。
| 模型 | 生成速度 | 化学有效性 | 多样性 | 分布式难度 |
|---|---|---|---|---|
| AE | 极快 | 低 | 低 | 低 |
| VAE | 快 | 中 | 中 | 低 |
| GAN | 中 | 低(易崩塌) | 高(但不可控) | 中 |
| AR (自回归) | 慢 | 高 | 高 | 中(需同步) |
| 扩散 | 慢(需多步) | 高 | 高 | 高 |
4.7 本章知识结构图
下面这张图把五种生成模型的核心流程和关系串一起,方便复习。
从这张图能看出来,不同模型在生成质量、速度和分布式适配度上各有侧重。实际项目中,我经常把 VAE 和扩散模型组合使用 ——VAE 做快速粗筛,扩散模型做精细优化。后面几章,咱们就开始深入多 GPU 分布式训练的细节,看看怎么让这些模型真正跑起来。