(更新:对于其中的一些内容做了一些更新,如有问题可以在评论区交流)

一、问题定义(Problem Definition)

训练模型之前必须先明确 任务是什么

常见任务类型:

  1. 分类(Classification)
    • 输入:图像 / 文本 / 分子
    • 输出:类别
      例如:
    • 活性分子 vs 非活性分子
  2. 回归(Regression)
    • 输出连续值
      例如:
    • 预测 binding affinity
  3. 生成(Generation)
    • 生成新的数据
      例如:
    • 小分子生成
    • SMILES 生成
    • 3D ligand 生成
  4. 结构预测
    • 输入结构 → 输出结构
      例如蛋白结构预测

二、数据收集(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) 指纹

  1. Morgan指纹(又称圆形指纹)
  • 基于分子拓扑结构的指纹算法
  • 通过迭代扩展原子环境生成特征
  • 典型实现:2048位向量表示
  • 应用场景:化合物相似性搜索、虚拟筛选
  1. RDKit实现细节
  • 开源化学信息学工具包
  • 提供多种指纹生成方法
  • 支持可配置的参数:
    • 指纹半径(通常2-3)
    • 指纹长度(默认2048位)
    • 特征类型(默认包含所有原子类型)
  1. 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)。可以是:

  1. 形式电荷(如NH4+中的N为-1)
  2. 部分电荷(如H2O中O约为-0.8,H约为+0.4)
  3. 力场中的有效电荷参数 电荷值可以是正数或负数,例如:-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 序列中的应用

典型应用场景

  1. 分子生成:从头设计具有特定性质的分子
  2. 性质预测:根据 SMILES 预测分子特性
  3. 反应预测:预测化学反应结果
  4. 分子优化:改进现有分子结构

代表模型

  • Transformer-based 模型
    • MolGPT:基于 GPT 架构的分子生成模型
    • Chemformer:专门为化学任务设计的 Transformer
    • MolT5:多模态化学语言模型
  • RNN-based 模型
    • ORGAN:结合对抗训练的分子生成模型
    • ReLeaSE:基于 LSTM 的分子设计框架

模型对比

特性 RNN/LSTM Transformer
序列处理方式 顺序处理 并行处理
长程依赖 相对较弱 优秀
训练速度 较慢 较快
内存消耗 较低 较高
适用场景 小规模数据集 大规模数据集

实际应用示例

  1. 药物发现:生成具有潜在活性的候选药物分子
  2. 材料设计:设计新型功能材料
  3. 化学反应预测:预测有机反应结果
  4. 分子性质优化:改进现有分子的溶解性、稳定性等特性

注: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使用两种主要损失函数:

  1. 重构损失:确保解码器能够准确重建输入数据
  2. 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)

根据任务不同,常用的评估指标可分为以下几类:

分类任务评估指标

  1. Accuracy(准确率)

    • 定义:模型预测正确的样本占总样本的比例
    • 公式:(TP + TN) / (TP + TN + FP + FN)
    • 适用场景:类别分布均衡时效果较好
  2. Precision(精确率)

    • 定义:预测为正的样本中实际为正的比例
    • 公式:TP / (TP + FP)
    • 示例:在垃圾邮件检测中,精确率高意味着误判为垃圾邮件的正常邮件较少
  3. Recall(召回率)

    • 定义:实际为正的样本中被正确预测的比例
    • 公式:TP / (TP + FN)
    • 示例:在疾病诊断中,高召回率意味着漏诊率低
  4. F1 Score(F1分数)

    • 定义:精确率和召回率的调和平均数
    • 公式:2 * (Precision * Recall) / (Precision + Recall)
    • 特点:在类别不平衡时比准确率更有参考价值
  5. ROC-AUC(受试者工作特征曲线下面积)

    • 定义:模型区分正负样本能力的综合指标
    • 范围:0.5(随机猜测)到1(完美分类)
    • 优势:不受分类阈值影响

回归任务评估指标

  1. RMSE(均方根误差)

    • 定义:预测值与真实值差异的平方的平均值的平方根
    • 公式:sqrt(mean((y_true - y_pred)^2))
    • 特点:对异常值敏感,单位与原始数据一致
  2. MAE(平均绝对误差)

    • 定义:预测值与真实值绝对差异的平均值
    • 公式:mean(|y_true - y_pred|)
    • 优势:对异常值不敏感,解释性强
  3. R²(决定系数)

    • 定义:模型解释的目标变量方差比例
    • 范围:负无穷到1(1表示完美拟合)
    • 应用:常用于比较不同回归模型的解释力

生成任务评估指标

  1. Validity(有效性)

    • 定义:生成内容符合特定领域规则的程度
    • 示例:在分子生成中,评估生成的分子结构是否化学有效
  2. Novelty(新颖性)

    • 定义:生成内容与训练数据中已有样本的差异程度
    • 测量方法:计算与最近邻样本的距离或相似度
  3. Uniqueness(独特性)

    • 定义:在批量生成中不同样本之间的差异程度
    • 应用:在创意设计领域尤为重要,避免生成重复内容

补充说明:

  • 实际应用中常需要根据具体需求组合多个指标
  • 某些领域(如NLP)还有BLEU、Perplexity等专用指标
  • 指标选择应考虑计算成本和业务需求的平衡

十三、模型保存(Checkpoint)

训练完成后保存:

torch.save(model.state_dict())

或:

checkpoint


十四、模型推理(Inference)

部署时:

model.eval()

输入新数据:

prediction = model(x)


十五、模型部署(Deployment)

例如:

Web API

例如:

  • Flask

流程:

用户 → API → 模型 → 结果


十六、持续训练(Continual Learning)

在实际项目中,模型迭代更新通常需要以下关键步骤:

  1. 数据准备阶段:
  • 收集新产生的业务数据(如用户行为日志、交易记录等)
  • 清洗数据(处理缺失值、异常值、重复数据)
  • 进行特征工程(特征提取、特征转换、特征选择)
  • 划分训练集、验证集和测试集(建议比例7:2:1)
  1. 模型重新训练:
  • 加载原有模型结构和参数作为初始值
  • 使用新数据+旧数据的混合数据集进行训练
  • 调整超参数(如学习率、batch size等)
  • 监控训练过程(通过验证集评估性能)
  • 早停机制防止过拟合
  1. 模型更新部署:
  • 在测试集上评估新模型性能
  • A/B测试验证实际效果(新旧模型并行运行)
  • 灰度发布新模型(逐步扩大流量比例)
  • 全量替换旧模型
  • 建立监控报警机制(监控预测延迟、准确率等指标)

十七、完整训练 Pipeline

完整流程:

定义任务

数据收集

数据清洗

特征工程

数据划分

模型设计

训练

验证

调参

测试

保存模型

部署


十八、深度学习训练代码框架(PyTorch)

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐