【分子生成】构建一个分子生成模型的基本步骤
(更新:对于其中的一些内容做了一些更新,如有问题可以在评论区交流)
一、问题定义(Problem Definition)
训练模型之前必须先明确 任务是什么。
常见任务类型:
- 分类(Classification)
- 输入:图像 / 文本 / 分子
- 输出:类别
例如: - 活性分子 vs 非活性分子
- 回归(Regression)
- 输出连续值
例如: - 预测 binding affinity
- 输出连续值
- 生成(Generation)
- 生成新的数据
例如: - 小分子生成
- SMILES 生成
- 3D ligand 生成
- 生成新的数据
- 结构预测
- 输入结构 → 输出结构
例如蛋白结构预测
- 输入结构 → 输出结构
二、数据收集(Data Collection)
模型的能力 80%取决于数据。
数据来源:
1 公开数据集
例如:
- PDBbind
- ChEMBL
- ZINC
- QM9
2 自己生成数据
例如:
- 分子动力学
- docking
- pharmacophore
你之前提到的 MD HDF5数据 就属于这一类。
三、数据清洗(Data Cleaning)
原始数据通常 非常脏,必须清洗。
常见步骤:
1 删除错误数据
例如:
invalid SMILES
missing labels
坏结构
2 去重
很多数据集有重复分子:
SMILES 去重
canonical SMILES
通常用
- RDKit
3 标准化
例如:
离子形式
tautomer
盐
四、数据表示(Feature Engineering)
机器学习模型不能直接理解:
SMILES
PDB
图像
必须转成 数字形式。
1 分子表示方式
(1) 指纹
- Morgan指纹(又称圆形指纹)
- 基于分子拓扑结构的指纹算法
- 通过迭代扩展原子环境生成特征
- 典型实现:2048位向量表示
- 应用场景:化合物相似性搜索、虚拟筛选
- RDKit实现细节
- 开源化学信息学工具包
- 提供多种指纹生成方法
- 支持可配置的参数:
- 指纹半径(通常2-3)
- 指纹长度(默认2048位)
- 特征类型(默认包含所有原子类型)
- ECFP(Extended Connectivity Fingerprint)
- Morgan指纹的扩展版本
- 具体变体包括:
- ECFP4(半径=2)
- ECFP6(半径=3)
- 特点:
- 捕获分子局部环境特征
- 适用于机器学习模型输入
- 在药物发现中广泛应用
(2) Graph
分子天然是 图结构
atom = node
bond = edge
例如:
- node feature
- edge feature
然后使用
- PyTorch Geometric
- Deep Graph Library
(3) 3D结构
(x, y, z) - 原子坐标
表示原子在三维空间中的位置坐标,单位为埃(Å)。x、y、z分别代表笛卡尔坐标系中的三个方向分量。例如:(1.23, 4.56, 7.89)表示该原子在x轴1.23Å、y轴4.56Å、z轴7.89Å的位置。
atom type - 原子类型
标识原子的元素种类,使用标准的元素符号表示(如C、N、O等)。在分子力场中可能包含额外的类型信息,如:
- 碳原子可能细分为sp3杂化(CT)、sp2杂化(CA)等类型
- 氢原子可能根据连接方式分为极性氢(H)和非极性氢(HC)
charge - 原子电荷
表示原子的部分电荷,单位为基本电荷单位(e)。可以是:
- 形式电荷(如NH4+中的N为-1)
- 部分电荷(如H2O中O约为-0.8,H约为+0.4)
- 力场中的有效电荷参数 电荷值可以是正数或负数,例如:-0.5表示该原子带负0.5个基本电荷单位
五、数据集划分(Dataset Split)
必须划分:
train
validation
test
典型比例:
train = 70%
val = 15%
test = 15%
作用:
| 数据集 | 用途 |
|---|---|
| train | 训练 |
| validation | 调参 |
| test | 最终评估 |
六、模型设计(Model Design)
选择模型架构。
常见模型:
1 传统机器学习
例如:
- Random Forest
- XGBoost
2 深度学习
例如:
CNN
用于:图像、3D voxel
RNN / Transformer 在 SMILES 序列处理中的应用
模型架构
循环神经网络 (RNN)
- 传统序列处理模型,具有记忆能力
- 适用于 SMILES 序列的逐步生成
- 常见变体:LSTM、GRU,用于解决长序列依赖问题
- 单向/双向结构可用于不同应用场景
Transformer 架构
- 基于自注意力机制的创新模型
- 特别适合处理 SMILES 这种结构化序列数据
- 并行处理能力显著提高训练效率
- 位置编码保留序列顺序信息
在 SMILES 序列中的应用
典型应用场景
- 分子生成:从头设计具有特定性质的分子
- 性质预测:根据 SMILES 预测分子特性
- 反应预测:预测化学反应结果
- 分子优化:改进现有分子结构
代表模型
- Transformer-based 模型:
- MolGPT:基于 GPT 架构的分子生成模型
- Chemformer:专门为化学任务设计的 Transformer
- MolT5:多模态化学语言模型
- RNN-based 模型:
- ORGAN:结合对抗训练的分子生成模型
- ReLeaSE:基于 LSTM 的分子设计框架
模型对比
| 特性 | RNN/LSTM | Transformer |
|---|---|---|
| 序列处理方式 | 顺序处理 | 并行处理 |
| 长程依赖 | 相对较弱 | 优秀 |
| 训练速度 | 较慢 | 较快 |
| 内存消耗 | 较低 | 较高 |
| 适用场景 | 小规模数据集 | 大规模数据集 |
实际应用示例
- 药物发现:生成具有潜在活性的候选药物分子
- 材料设计:设计新型功能材料
- 化学反应预测:预测有机反应结果
- 分子性质优化:改进现有分子的溶解性、稳定性等特性
注:SMILES (Simplified Molecular Input Line Entry System) 是一种用 ASCII 字符串明确描述分子结构的化学语言规范。
图神经网络(GNN)及其应用
GNN的主要应用领域
分子图分析
图神经网络在分子图分析中具有重要应用价值,主要包括:
- 分子性质预测(如溶解度、毒性等)
- 药物发现中的分子活性预测
- 材料科学中的分子结构优化
- 化学反应预测和路径规划
常见的图神经网络模型
1. 图卷积网络(GCN)
- 通过邻域节点信息的聚合实现特征传播
- 采用对称归一化的拉普拉斯矩阵进行特征变换
- 适用于同构图数据,如社交网络、引用网络等
2. 图注意力网络(GAT)
- 引入注意力机制计算节点间的关联权重
- 可以处理异构图数据
- 适用于需要关注特定邻居节点的场景,如推荐系统
3. 消息传递神经网络(MPNN)
- 通过消息传递框架统一多种图神经网络
- 包含消息函数、更新函数和读出函数三个核心组件
- 广泛应用于化学分子和物理系统的建模
其他重要变体
- GraphSAGE:适用于大规模图的归纳学习
- GIN(图同构网络):具有强大图同构判别能力
- DiffPool:可学习的图池化方法
七、损失函数(Loss Function)
损失函数的作用
损失函数(Loss Function)是机器学习模型优化的核心,它量化了模型预测结果与真实值之间的差异程度。通过最小化损失函数,模型能够逐步调整参数以达到最佳性能。损失函数的选择直接决定了模型的优化方向和最终表现。
分类任务中的损失函数
交叉熵损失(Cross Entropy Loss)
- 二分类交叉熵:适用于二元分类问题,计算预测概率与真实标签之间的差异
- 多分类交叉熵:适用于多类别分类问题,常用Softmax激活函数配合使用
- 加权交叉熵:当类别不平衡时,可为不同类别赋予不同权重
- 应用场景:图像分类、文本分类、情感分析等
回归任务中的损失函数
均方误差(MSE, Mean Squared Error)
- 计算预测值与真实值之间差值的平方均值
- 对异常值敏感,会放大较大误差的影响
- 应用场景:房价预测、温度预测等连续值预测任务
平均绝对误差(MAE, Mean Absolute Error)
- 计算预测值与真实值之间差值的绝对值的均值
- 对异常值不敏感,更加稳健
- 应用场景:当数据中存在离群点时效果更好
生成模型中的损失函数
KL散度损失(KL Divergence Loss)
- 衡量两个概率分布之间的差异
- 在变分自编码器(VAE)中用于约束潜在空间分布
- 应用场景:生成模型的正则化项
重构损失(Reconstruction Loss)
- 衡量生成样本与原始样本之间的差异
- 常用MSE或交叉熵作为具体实现
- 应用场景:自编码器、生成对抗网络等
具体模型示例
变分自编码器(Variational Autoencoder, VAE)
VAE使用两种主要损失函数:
- 重构损失:确保解码器能够准确重建输入数据
- KL散度损失:使潜在变量的分布接近标准正态分布
这两种损失的加权组合构成了VAE的总损失函数,平衡了重建精度和潜在空间的正则化效果。
八、优化器(Optimizer)
优化器负责 更新模型参数。
常见:
| Optimizer | 特点 |
|---|---|
| SGD | 基础 |
| Adam | 最常用 |
| AdamW | Transformer常用 |
例如:
optimizer = Adam(model.parameters(), lr=0.001)
九、训练过程(Training Loop)
核心流程:
for epoch:
for batch:
forward
loss
backward
update
解释:
1 forward
输入数据:
y_pred = model(x)
2 loss
计算误差:
loss = criterion(y_pred, y_true)
3 backward
反向传播:
loss.backward()
基于:
- Backpropagation
4 更新参数
optimizer.step()
5 清空梯度
optimizer.zero_grad()
十、验证(Validation)
每个 epoch 都要验证。
model.eval()
计算:
val_loss
accuracy
RMSE
十一、超参数调整(Hyperparameter Tuning)
超参数:
learning rat
batch size
layers
hidden size
dropout
方法:
1 Grid Search
暴力搜索。
2 Random Search
随机组合。
3 Bayesian Optimization
自动优化。
常用工具:
- Optuna
十二、模型评估(Evaluation)
根据任务不同,常用的评估指标可分为以下几类:
分类任务评估指标
-
Accuracy(准确率)
- 定义:模型预测正确的样本占总样本的比例
- 公式:
(TP + TN) / (TP + TN + FP + FN) - 适用场景:类别分布均衡时效果较好
-
Precision(精确率)
- 定义:预测为正的样本中实际为正的比例
- 公式:
TP / (TP + FP) - 示例:在垃圾邮件检测中,精确率高意味着误判为垃圾邮件的正常邮件较少
-
Recall(召回率)
- 定义:实际为正的样本中被正确预测的比例
- 公式:
TP / (TP + FN) - 示例:在疾病诊断中,高召回率意味着漏诊率低
-
F1 Score(F1分数)
- 定义:精确率和召回率的调和平均数
- 公式:
2 * (Precision * Recall) / (Precision + Recall) - 特点:在类别不平衡时比准确率更有参考价值
-
ROC-AUC(受试者工作特征曲线下面积)
- 定义:模型区分正负样本能力的综合指标
- 范围:0.5(随机猜测)到1(完美分类)
- 优势:不受分类阈值影响
回归任务评估指标
-
RMSE(均方根误差)
- 定义:预测值与真实值差异的平方的平均值的平方根
- 公式:
sqrt(mean((y_true - y_pred)^2)) - 特点:对异常值敏感,单位与原始数据一致
-
MAE(平均绝对误差)
- 定义:预测值与真实值绝对差异的平均值
- 公式:
mean(|y_true - y_pred|) - 优势:对异常值不敏感,解释性强
-
R²(决定系数)
- 定义:模型解释的目标变量方差比例
- 范围:负无穷到1(1表示完美拟合)
- 应用:常用于比较不同回归模型的解释力
生成任务评估指标
-
Validity(有效性)
- 定义:生成内容符合特定领域规则的程度
- 示例:在分子生成中,评估生成的分子结构是否化学有效
-
Novelty(新颖性)
- 定义:生成内容与训练数据中已有样本的差异程度
- 测量方法:计算与最近邻样本的距离或相似度
-
Uniqueness(独特性)
- 定义:在批量生成中不同样本之间的差异程度
- 应用:在创意设计领域尤为重要,避免生成重复内容
补充说明:
- 实际应用中常需要根据具体需求组合多个指标
- 某些领域(如NLP)还有BLEU、Perplexity等专用指标
- 指标选择应考虑计算成本和业务需求的平衡
十三、模型保存(Checkpoint)
训练完成后保存:
torch.save(model.state_dict())
或:
checkpoint
十四、模型推理(Inference)
部署时:
model.eval()
输入新数据:
prediction = model(x)
十五、模型部署(Deployment)
例如:
Web API
例如:
- Flask
流程:
用户 → API → 模型 → 结果
十六、持续训练(Continual Learning)
在实际项目中,模型迭代更新通常需要以下关键步骤:
- 数据准备阶段:
- 收集新产生的业务数据(如用户行为日志、交易记录等)
- 清洗数据(处理缺失值、异常值、重复数据)
- 进行特征工程(特征提取、特征转换、特征选择)
- 划分训练集、验证集和测试集(建议比例7:2:1)
- 模型重新训练:
- 加载原有模型结构和参数作为初始值
- 使用新数据+旧数据的混合数据集进行训练
- 调整超参数(如学习率、batch size等)
- 监控训练过程(通过验证集评估性能)
- 早停机制防止过拟合
- 模型更新部署:
- 在测试集上评估新模型性能
- A/B测试验证实际效果(新旧模型并行运行)
- 灰度发布新模型(逐步扩大流量比例)
- 全量替换旧模型
- 建立监控报警机制(监控预测延迟、准确率等指标)
十七、完整训练 Pipeline
完整流程:
定义任务
↓
数据收集
↓
数据清洗
↓
特征工程
↓
数据划分
↓
模型设计
↓
训练
↓
验证
↓
调参
↓
测试
↓
保存模型
↓
部署
十八、深度学习训练代码框架(PyTorch)
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)