ProteinMPNN(Dauparas et al., Science 2022)是 蛋白质逆折叠(inverse folding) 的代表模型:给定骨架三维结构(backbone coordinates),预测氨基酸序列,使序列在该构象下稳定折叠。与 AlphaFold2「序列 → 结构」相反,ProteinMPNN 服务 de novo design pipeline 中「结构已定 → 填序列」环节——典型组合为 RFdiffusion / Chroma 生成骨架 → ProteinMPNN 设计序列 → AlphaFold2 自洽筛选(见 Diffusion-5)。
段末注释:逆折叠 指由目标构象反推氨基酸序列;de novo design 指从头设计而非天然序列微调。
前置阅读:MPNN-0 消息传递神经网络、范式综述 §GNN
对照:Diffusion-Example-1 序列离散扩散(纯序列生成范式)
插图:5003.大模型-架构-ProteinMPNN-0.概述/proteinmpnn-fig*.png
官方代码:github.com/dauparas/ProteinMPNN
1. 任务定义与在 design pipeline 中的位置
| 步骤 | 模型/工具 | 输入 → 输出 |
|---|---|---|
| 1. 骨架生成 | RFdiffusion、Chroma 等 | 条件 → 3D 骨架 |
| 2. 序列设计 | ProteinMPNN | 骨架 → 氨基酸序列 |
| 3. 验证 | AlphaFold2、ESMFold | 序列 → 预测结构,算 scRMSD / pLDDT |
ProteinMPNN 不预测结构,只建模 (p(\mathrm{seq}\mid\mathrm{backbone}));结构质量由上游扩散/优化与下游折叠器负责。
2. 结构框架总览
ProteinMPNN = 稀疏 kNN 图 + Encoder MPNN(仅看骨架)+ Decoder MPNN(骨架 + 部分序列上下文)+ 顺序无关自回归(order-agnostic autoregressive) 解码。

2.1 图构建
- 节点:每个残基一个节点(以 Cα 为中心建 k 近邻图)。
- 边:每个节点连 (k) 个空间最近邻(官方默认 (k=48),按 Cα–Cα 距离)。
- 多链:全复合物所有链的残基置于同一图;边特征含同链 / 异链标识。
2.2 Encoder(骨架编码器)
- 3 层消息传递,hidden_dim = 128,含 边更新(edge update)(非仅节点更新)。
- 输入:不依赖氨基酸类型(或仅用 mask 占位),主要编码几何:
- N、Cα、C、O 与虚拟 Cβ 之间的距离(RBF 展开);
- 相对 Cα–Cα–Cα 局部坐标系方向/旋转;
- 骨架二面角等(早期 baseline 以二面角为主,最终版以原子间距离为主,恢复率更高)。
- 输出:每个残基节点特征 (\mathbf{h}i)、边特征 (\mathbf{e}{ij})(供 Decoder 复用)。
2.3 Decoder(序列解码器)
- 3 层 MPNN,hidden 128。
- 输入:Encoder 输出的 (\mathbf{h}i,\mathbf{e}{ij}) + 已部分解码的氨基酸序列(one-hot 或 embedding)。
- 输出:每个位置 20 种标准氨基酸(+ 掩码 token)的 logits。
- 顺序无关自回归:训练时解码顺序 (\pi) 从全排列中随机采样;推理时可任意顺序,先解码固定 motif、再设计侧翼(Fig. 1B)。
2.4 对称 / 多链 tying
- Tied positions:指定多个位置(可跨链)共享同一 logits(对数概率平均后采样),用于同源寡聚体、重复蛋白、环对称 design(Fig. 1C)。
3. 训练输入信息(详细)

3.1 数据来源与过滤
| 项目 | 设置(论文 / 官方 training.py) |
|---|---|
| 数据库 | PDB(训练集快照 2021-08-02) |
| 方法 | X-ray 或 cryoEM |
| 分辨率 | ≤ 3.5 Å(rescut=3.5) |
| 组装 | 生物组装(biological assembly),多链复合物 |
| 划分 | 序列聚类 30% identity;CATH 80/10/10(单体开发实验);valid_clusters / test_clusters |
官方 .pt 每条链字段(training README):
| 字段 | shape / 类型 | 含义 |
|---|---|---|
seq |
string | 氨基酸序列(监督标签) |
xyz |
[L, 14, 3] |
原子坐标(骨架 + 侧链槽位) |
mask |
[L, 14] bool |
原子是否存在于 PDB |
bfac / occ |
[L, 14] |
温度因子、占有率 |
3.2 几何特征(模型实际「看到」的输入)
| 特征类 | 内容 | 作用 |
|---|---|---|
| 距离 RBF | N、Cα、C、O、虚拟 Cβ 间距离(残基对 / 局部) | 主归纳偏置;替代纯二面角更优(论文 Table 1 Exp.1) |
| 局部取向 | Cα 邻域刚体帧相对旋转 | 编码侧链朝向、氢键几何 |
| 序列位置 | 残基索引差 截断 ±32;同链 / 异链 bit | 多链与界面设计 |
| kNN 拓扑 | Cα 距离 Top-(k) 邻接 | 稀疏 MPNN 计算域 |
3.3 训练时动态输入
| 机制 | 说明 |
|---|---|
| 随机解码顺序 (\pi) | 每步从排列中采样;已解码位置提供序列上下文,未解码为 mask |
| 骨架噪声 | 对坐标加高斯扰动(官方默认 backbone_noise=0.2 Å 量级;发布权重有 0.02 / 0.10 / 0.20 Å 三档) |
| Dropout | 默认 0.1 |
| Batch | 按 token 数计,默认 10,000 tokens/batch(多蛋白拼 batch) |
4. 训练目标
4.1 顺序无关自回归交叉熵
对解码顺序 (\pi=(\pi_1,\ldots,\pi_L)),在第 (s) 步预测位置 (\pi_s) 的氨基酸 (a_{\pi_s}):
[
\mathcal{L} = -\frac{1}{N_{\mathrm{norm}}}\sum_{s=1}^{L} \log p_\theta\big(a_{\pi_s} ,\big|, \mathrm{backbone},, a_{\pi_1},\ldots,a_{\pi_{s-1}}\big)
]
- (p_\theta):Decoder 输出的 21 类 softmax(20 AA + mask/unknown)。
- (N_{\mathrm{norm}}):实现中按 batch 总 token 归一(论文报告 perplexity = (\exp()平均 NLL()))。
- 无结构损失:不对坐标回归;结构信息只经 Encoder 进入条件。
段末注释:Perplexity 为 (\exp()交叉熵()),越低表示序列预测越 confident 且与标签一致。
4.2 评估指标(非训练 loss)
| 指标 | 含义 |
|---|---|
| Sequence recovery | 预测序列与天然序列相同的残基比例(%) |
| Perplexity | held-out 集上的 (\exp(\mathrm{NLL})) |
| AlphaFold consistency | 设计序列单序列折叠与输入骨架的 TM-score / scRMSD |
论文最终 ProteinMPNN(Exp.3+4,随机顺序):PDB 测试集 recovery ≈ 50.8%(无噪训练)/ 47.9%(训练时 0.02 Å 噪);相对 baseline 41.2% 显著提升。
4.3 优化与 schedule
| 超参 | 典型值 |
|---|---|
| 优化器 | Adam |
| Epoch | 150–200(发布 v_48_* 为 150 epoch) |
| 混合精度 | 默认开启 |
| 梯度裁剪 | 可选(gradient_norm) |
5. 参数组成与模型变体

5.1 默认架构超参(与 training.py 一致)
| 超参数 | 默认值 | 说明 |
|---|---|---|
hidden_dim |
128 | 节点/边隐层宽度 |
num_encoder_layers |
3 | 骨架 Encoder MPNN 层数 |
num_decoder_layers |
3 | 序列 Decoder MPNN 层数 |
num_neighbors |
48 | kNN 邻居数 (k) |
dropout |
0.1 | |
| 参数量 | ≈ 1.68 M | 论文 Table 1 Exp.3/4(含边更新) |
5.2 参数模块分解(数量级)
| 模块 | 角色 | 参数量级 |
|---|---|---|
| 距离 RBF + 边/节点嵌入 MLP | 几何标量 → 向量 | ~10⁴–10⁵ |
| Encoder(3× MPNN + edge update) | 骨架 → (\mathbf{h},\mathbf{e}) | ~45% |
| Decoder(3× MPNN) | 部分序列 + 图 → logits | ~45% |
| 氨基酸嵌入 + 输出线性层 | 21 类分类头 | ~10⁴ |
增大 hidden_dim 主要降低训练 loss,验证 recovery 增益边际(论文:>128 收益有限)。
5.3 官方发布权重
| 权重文件 | 训练骨架噪声 (\sigma) | 适用场景 |
|---|---|---|
v_48_002.pt |
0.02 Å | 近天然、高精度骨架 |
v_48_010.pt |
0.10 Å | 中等 |
v_48_020.pt |
0.20 Å | hallucinated / 低精度 骨架(RFdiffusion 常用) |
推理时可调 temperature 控制序列多样性;固定位置设 fixed_positions 做 motif scaffolding。
6. 推理与训练的关键差异
| 训练 | 推理 | |
|---|---|---|
| 序列上下文 | 随机顺序 (\pi) 下已知前缀 | 可指定顺序(先固定、后设计) |
| 骨架 | 真实 PDB + 可选噪声 | 设计模型输出的 idealized 骨架 |
| 输出 | CE loss | 自回归采样 + optional tying |
| 多链 | 生物组装图 | 界面 / binder design 同一套 API |
7. 与 MPNN 抽象及 LLM 的对照
| MPNN-0 抽象 | ProteinMPNN | |
|---|---|---|
| 图 | ((V,E)) | kNN on Cα,(k=48) |
| 消息 | (\mathrm{MSG}(h_u,h_v,e_{uv})) | 几何边特征 + 边更新 |
| 读出 | 图级 pool | 逐残基 氨基酸分类 |
| 序列性 | 无 inherent 顺序 | 顺序无关 AR |
与 Transformer LLM 不同:ProteinMPNN 不做自回归语言建模;结构先验在稀疏 3D 图上,序列仅 ~1.7M 参数即可高 recovery——归纳偏置来自 几何距离 + 局部 MPNN 而非 billion-scale 预训练。
8. 小结
| 维度 | ProteinMPNN 要点 |
|---|---|
| 输入 | 骨架 N/Cα/C/O(+ 虚拟 Cβ)坐标 → kNN 图 + RBF 距离/取向;多链 biounit |
| 目标 | 顺序无关自回归 交叉熵,预测天然序列 |
| 结构 | 3+3 层 MPNN Encoder–Decoder,hidden=128,~1.68M 参数 |
| 工程 | 骨架噪声增强、tied positions、固定残基 inpainting |
| 生态 | RFdiffusion 之后的事实标准序列设计模块 |
本篇索引
| 主题 | 章节 | 延伸阅读 |
|---|---|---|
| MPNN 消息传递 | §2 | MPNN-0 |
| 训练数据格式 | §3.1 | 官方 training README |
| 损失与 recovery | §4 | 论文 Table 1 |
| design pipeline | §1 | Diffusion-5 |
| 序列扩散替代 | §7 | Diffusion-Example-1 |
参考与延伸阅读
- Dauparas et al., Robust deep learning–based protein sequence design using ProteinMPNN, Science 378, 49–56 (2022). doi:10.1126/science.add2187
- Jumper et al., AlphaFold2(结构预测对照).
- Watson et al., RFdiffusion(上游骨架生成).
- 官方实现:dauparas/ProteinMPNN.