在蛋白质的世界里,天然蛋白质就像一把把精密的锁。每把锁的齿纹,是由一串氨基酸按顺序串成的“钥匙齿”;而这些齿纹折叠起来,便构成了锁芯弹子般的立体结构——三维构象。过去几十年,科学家一直习惯“正着来”:先拿到氨基酸序列这把钥匙,再去猜它折叠成怎样的锁芯,这被称为蛋白质结构预测。而 ProteinMPNN 偏偏是一位“反着干”的 AI 锁匠:给我一把打磨好的锁芯(目标三维结构),我反向敲出一份能完美插入并转动的钥匙齿纹(氨基酸序列)。它把蛋白质设计从一个漫长的实验摸索,变成了一次快速的“按图配钥匙”。本文就带你来认识这位 AI 锁匠——看懂它的配锁原理、打开它的工具箱、练习一整条实战流程,并学会在抗体、酶和疫苗设计里派上大用场。

岗位关联

对 AI 从业者而言,掌握 ProteinMPNN 是从结构生成序列的逆折叠范式,是切入 AI+生命科学与医疗方向最实用的技能支点之一,能直接服务于药物发现与分子生成中的真实业务场景。

目录
  1. 可视化演示
  2. 序列设计原理:锁与钥匙的逆向工程
  3. 模型架构解析:锁匠的手指与触觉
  4. 工具安装部署:锁匠的工具箱
  5. 实战设计流程:打磨钥匙的全过程
  6. 性能调优策略:手感与打磨节奏
  7. 应用场景案例:通往药物的钥匙
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

展示蛋白质骨架结构、MPNN消息传递迭代过程、以及序列设计输出的逐残基置信度,直观呈现蛋白质逆折叠设计流程。

本节配有交互动效(进入视口后自动加载,约 3KB)。

蛋白质骨架结构 残基按骨架轨迹排列,疏水性(紫)/极性(蓝)/碱性(绿)/酸性(红) 虚线框标注α螺旋区域(H),骨架连线展示肽链走向 E(structure|sequence)→min ProteinMPNN从骨架反向设计最优序列

序列设计原理:锁与钥匙的逆向工程

自然界制造蛋白质,有点像先刻钥匙再铸锁:核糖体按照氨基酸序列(钥匙齿纹)把肽链合成出来,这条链再自己折叠成三维结构(锁芯)。几十年来,以 AlphaFold 为代表的结构预测工具一直在做“看钥匙猜锁”——输入序列,输出结构,这叫正折叠。而 ProteinMPNN 把流程彻底倒转,干的是“逆折叠”的活:你给我一把已经成型的锁芯(目标三维结构),我还你一份能把它打开的钥匙齿纹(氨基酸序列)。这里的锁芯,就是蛋白质的空间构象;钥匙齿纹,就是 20 种氨基酸组成的线性序列。

这套“反锁匠”思路之所以可行,是因为它把设计问题变成了概率问题:在已知蛋白质三维结构的前提下,什么样的氨基酸序列最有可能折叠成这个结构?模型需要学习一个条件概率分布——给定结构 C,生成序列 A 的概率。

模型并不一次性吐出整条序列,而是像接龙一样逐位生成。每生成一个氨基酸,它都要参考前面已经生成的所有位点,以及整套结构的几何信息。整条序列的概率因此被拆成一个连乘:

所以 ProteinMPNN 并不是“咔嚓”一下画出整把钥匙,而是一位耐心的锁匠:从锁孔深处开始,沿着齿位一位一位试探,每刻一齿都掂量着前面已经刻出的形状,最终交出一份与锁芯严丝合缝的完整序列。

P(a1,a2,…,an∣C)=∏i=1nP(ai∣C,a1,…,ai−1)\displaystyle P(a_1, a_2, \ldots, a_n \mid C) = \prod_{i=1}^{n} P(a_i \mid C, a_1, \ldots, a_{i-1})
通俗说明:整把钥匙齿纹的“正确概率”,等于从第一道齿开始,每刻一道齿都参考前面所有齿形,把每一步选对材料的概率连乘起来。
  1. 序列表示$a_1, a_2, \ldots, a_n$ 表示一条由 n 个氨基酸残基串成的序列,就像钥匙上一道道连续的齿纹。
    a1,a2,…,ana_1, a_2, \ldots, a_n
  2. 条件给定$\mid C$ 表示概率是在“已知结构 C”的前提下计算的,C 是整把锁芯的几何信息,在模型里表现为节点坐标与接触图。
    ∣C\mid C
  3. 连乘展开$\prod_{i=1}^{n}$ 表示把 n 个位置各自的选对概率乘起来,因为每一位都要正确,整把钥匙才能真正插进锁芯。
    ∏i=1n\prod_{i=1}^{n}
  4. 自回归依赖$P(a_i \mid C, a_1, \ldots, a_{i-1})$ 表示生成第 i 位时,模型已经看到了前面 i-1 位的选择,像刻齿时步步参考前齿,而非孤立决定。
    P(ai∣C,a1,…,ai−1)P(a_i \mid C, a_1, \ldots, a_{i-1})

模型架构解析:锁匠的手指与触觉

真正的老师傅配钥匙,不会只盯着锁芯外形发呆——他会把手指探进锁孔,用指尖去感受每一颗弹子的高低、每根弹簧的松紧。ProteinMPNN 的“手指”是图神经网络(GNN),而它的“触觉”来自一种叫消息传递的机制。蛋白质结构天然就是一张图:每个氨基酸残基是一个节点,主链肽键连接相邻节点,空间上靠得很近的残基之间也有“接触边”。

GNN 在这张结构图上不断执行消息传递,让每个节点一边倾听邻居发来的“手感”,一边更新自己对周围化学环境的理解。经过多轮传递,一个残基不仅知道自己的局部环境,还知道整个锁芯里其他部位的形状,为后续的“刻齿”提供完整上下文。

从数学上看,第 l 轮到第 l+1 轮的消息传递可以写成一个通用公式:

经过若干轮“摸锁”,每个残基位点都清楚了自己在整个锁芯中的角色。编码器把这些感知压缩成上下文向量,解码器再逐位生成氨基酸,就像摸清锁芯之后动手刻齿。架构中的序列预测头最终把隐状态映射为 20 种氨基酸的得分,完成“这一齿该用什么材料”的决策。

hi(l+1)=UPDATE(hi(l),AGGREGATEj∈N(i)mij(l))\displaystyle h_i^{(l+1)} = \text{UPDATE} \left( h_i^{(l)}, \text{AGGREGATE}_{j \in \mathcal{N}(i)} m_{ij}^{(l)} \right)
通俗说明:每个残基先安静听周围邻居汇报“我这边是什么环境”,把邻居的汇报汇总后,再结合自己的旧记忆,更新对自身角色的判断。
  1. 节点特征$h_i^{(l)}$ 是第 l 轮推进后残基 i 的隐状态向量,可以理解为锁匠指尖当前感受到的触觉编码。
    hi(l)h_i^{(l)}
  2. 邻居集合$\mathcal{N}(i)$ 是与残基 i 存在空间接触的残基集合,不只是序列上挨着的伙伴,也包括折叠后凑在一起的远程残基。
    N(i)\mathcal{N}(i)
  3. 聚合操作$\text{AGGREGATE}_{j \in \mathcal{N}(i)} m_{ij}^{(l)}$ 把所有邻居传来的消息 m_{ij} 汇总成一个综合信号,相当于把几根手指的触觉叠在一起判断。
    AGGREGATEj∈N(i)mij(l)\text{AGGREGATE}_{j \in \mathcal{N}(i)} m_{ij}^{(l)}
  4. 更新操作$\text{UPDATE}\left(h_i^{(l)}, \cdot\right)$ 用旧特征和聚合结果生成新特征 $h_i^{(l+1)}$,代表新一轮“摸锁”后对锁孔形状的更深认知。
    UPDATE(hi(l),⋅)\text{UPDATE}\left(h_i^{(l)}, \cdot\right)

工具安装部署:锁匠的工具箱

配钥匙前,老师傅得先备好趁手的家伙:精钢锉刀、游标卡尺、标准弹子模组。ProteinMPNN 的工具箱同样需要三样东西:带 GPU 的 Python 环境、官方预训练权重、符合规范的蛋白质结构文件(PDB/MMCIF 格式)。官方开源仓库提供了环境配置脚本与推理入口,常见流程是用 conda 建环境、安装 PyTorch 与相关依赖、再下载预训练权重。工作台一旦搭好,这位 AI 锁匠就随时可以开工。

工具箱摆好了,还得先学会看“成品质检报告”。实战中验证锁匠手艺的第一把卡尺,叫序列恢复率(sequence recovery rate)。它统计你设计的序列和天然序列逐位一致的比例,直观回答一个问题:和原装的钥匙相比,我配的这把有多少齿是一模一样的?

恢复率虽然只是一把粗尺子,却是入行的第一课:没有它,你连自己的锁匠手艺是优是劣都无从判断。后续进阶时,还要结合 AlphaFold 回折置信度、实验表达率等更多指标一起评估。

Recovery=1n∑i=1n1[aidesign=ainative]\displaystyle \text{Recovery} = \frac{1}{n} \sum_{i=1}^{n} \mathbb{1}[a_i^{\text{design}} = a_i^{\text{native}}]
通俗说明:一把钥匙有 n 道齿,逐齿对比设计钥匙和原装钥匙,统计有多少齿完全一致,再除以总齿数,就是这把钥匙的“还原度”。
  1. 示性函数$\mathbb{1}[\cdot]$ 是示性函数,括号里的条件成立值为 1,不成立为 0,这里条件正是“设计序列第 i 位等于天然序列第 i 位”。
    1[aidesign=ainative]\mathbb{1}[a_i^{\text{design}} = a_i^{\text{native}}]
  2. 命中求和$\sum_{i=1}^{n}$ 把所有位点的命中数累加,相当于数出整把钥匙上有几道齿完全吻合。
    ∑i=1n\sum_{i=1}^{n}
  3. 平均比例$\frac{1}{n}$ 除以总残基数,把命中数换算成 0 到 1 之间的比例,乘以 100 就是常用的百分比口径。
    1n\frac{1}{n}

实战设计流程:打磨钥匙的全过程

配钥匙从来不是拿起锉刀就干,真正的工作流是先测锁芯数据,再逐齿打磨,最后试开验证。ProteinMPNN 的实战流程也严格分成三步:结构预处理、序列生成、结果评估。结构预处理的核心是把 PDB 结构“打扫干净”——移除水分子和无关配体、补全缺失残基或侧链、确定要设计的链与位点。这一步相当于吹掉锁芯里的灰尘与铁锈,否则后面锉出来的钥匙必然不准。

预处理完成后进入序列生成。模型对每个位置先给出 20 种氨基酸的原始得分(logits),再通过一个 softmax 操作把得分转换成概率,最后按概率采样确定这一位选哪个氨基酸。这步自回归生成的单步决策写成公式:

序列生成完毕后,还要把设计好的钥匙“插回锁眼”试转:用 AlphaFold 等结构预测工具把新序列重新折回三维结构,与目标结构叠合比较。如果回折结构与目标结构高度一致,说明这把钥匙打磨得靠谱;如果偏差过大,则要考虑换一个温度或重新预处理结构。一把看着像样的钥匙,得实际转得动锁芯才算数。

P(ai=a)=exp⁡(za/T)∑b=120exp⁡(zb/T)\displaystyle P(a_i = a) = \frac{\exp(z_a / T)}{\sum_{b=1}^{20} \exp(z_b / T)}
通俗说明:模型给二十种候选材料各打一个分,分数经过指数放大并归一化后变成“选谁当齿材”的概率,然后按概率抓阄决定这一道齿用什么材料。
  1. 原始得分$z_a$ 是模型对第 i 位选用氨基酸 a 的原始打分,正值表示倾向,负值表示排斥,来自序列预测头的输出。
    zaz_a
  2. 温度缩放$\exp(z_a / T)$ 先除以温度 T 再取指数;T 越小,打分差距被放大,概率越极端;T 越大,分布越平坦。
    exp⁡(za/T)\exp(z_a / T)
  3. 概率归一分母 $\sum_{b=1}^{20} \exp(z_b / T)$ 把所有 20 种氨基酸的指数分加起来,保证输出概率总和为 1。
    ∑b=120exp⁡(zb/T)\sum_{b=1}^{20} \exp(z_b / T)
  4. 采样决策$P(a_i = a)$ 得到的是“这一位选 a 的概率”,实际生成时按这个分布随机采样,因此同一条结构可以生成多条不同的序列。
    P(ai=a)P(a_i = a)

性能调优策略:手感与打磨节奏

同样的工具,新手锉得又慢又毛,老师傅却能根据锁芯材质调整下刀力度和打磨节奏。ProteinMPNN 的“手感”主要体现在三个旋钮:温度参数、迭代设计、约束设计。温度是采样时的“胆量”:温度低,模型保守,几乎只选得分最高的氨基酸,序列恢复率高但多样性低;温度高,模型大胆尝试冷门选择,多样性好但失败率也随之上升。训练时模型优化的是交叉熵损失,这既是它学习“正确齿形”的标尺,也是调参时观察收敛的仪表盘:

实际调参时,迭代设计与位点约束同样关键。常见做法是:先以温和温度生成一批序列,用 AlphaFold 回折,挑出结构最稳的序列作为下一轮“种子”再输入模型继续设计;同时用约束固定关键位点(如酶催化残基、抗体框架区),不允许模型改动。这种“试开-微调-再试开”的循环,正是老师傅打磨钥匙时收放自如的手感。

L=−1n∑i=1nlog⁡P(ai∗∣X)\displaystyle \mathcal{L} = -\frac{1}{n} \sum_{i=1}^{n} \log P(a_i^{*} \mid X)
通俗说明:对每一个正确的天然氨基酸,模型给出的概率越高,损失就越小;整体损失是所有位点“答错代价”的平均值。
  1. 目标残基$a_i^{*}$ 是训练样本里第 i 位的天然氨基酸,也就是标准答案,模型要努力把概率压在这一个选项上。
    ai∗a_i^{*}
  2. 对数概率$\log P(a_i^{*} \mid X)$ 是模型对标准答案给出的对数概率,概率越接近 1,其值越接近 0。
    log⁡P(ai∗∣X)\log P(a_i^{*} \mid X)
  3. 负号$-\log$ 把“越满意损失越小”转成“错误越大损失越大”的优化目标,让梯度下降有明确方向。
    −log⁡-\log
  4. 取平均$\frac{1}{n}\sum_{i=1}^{n}$ 对整条序列所有位点求平均,使不同长度序列的损失值可比较。
    1n∑i=1n\frac{1}{n}\sum_{i=1}^{n}

应用场景案例:通往药物的钥匙

医院里最需要的从来不是万能钥匙,而是只开一把锁的专用钥匙。蛋白质药物研发中的抗体、酶和疫苗,恰好都需要这种量身定做。在抗体工程中,科学家把抗体结构输入 ProteinMPNN,固定框架区,只让模型重设计识别抗原的 CDR 区序列,再配合亲和力筛选,往往能获得活性更好的候选抗体。酶与疫苗设计也类似:以目标骨架为前提,让模型给出稳定而多样的序列,为实验提供大批候选。

从概率视角看,一条候选序列最终能否成药要经历两道关卡:先要“结构上合理”,即逆折叠模型给出的序列与目标结构高度兼容;再要“实验里可表达、有活性”,即序列在细胞里能正确折叠并表现出功能。成功概率可以粗略写成两个概率的乘积:

这正是 AI 锁匠与生物实验的协奏曲:模型负责批量打造钥匙,实验室负责逐一试锁。只有真正能在锁芯里顺畅转动的钥匙,才有资格被送进临床的钥匙环。

Psuccess=P(candidate∣structure)⋅P(express∣candidate)\displaystyle P_{\text{success}} = P(\text{candidate} \mid \text{structure}) \cdot P(\text{express} \mid \text{candidate})
通俗说明:一条候选序列最终能成为有效药物的概率,等于“锁匠刻出的钥匙对得上锁”的概率,乘以“这把钥匙在真实世界里造得出来、转得动锁”的概率。
  1. 结构合理性$P(\text{candidate} \mid \text{structure})$ 是逆折叠模型给出的候选序列与目标结构兼容的概率,对应“钥匙齿形是否匹配锁芯”。
    P(candidate∣structure)P(\text{candidate} \mid \text{structure})
  2. 可表达与活性$P(\text{express} \mid \text{candidate})$ 是候选序列在细胞中正确折叠并获得功能的概率,来自实验统计而非模型本身。
    P(express∣candidate)P(\text{express} \mid \text{candidate})
  3. 概率连乘两项相乘意味着两道关卡都必须通过,任何一关失败都会大幅拉低总成功率。
    ⋅\cdot

AI 应用场景

抗体 CDR 区亲和力成熟

阶段:序列生成与优化

解决的问题:传统抗体亲和力成熟靠随机突变加噬菌体展示,周期长、通量有限,尤其在 CDR 区改造时容易破坏抗体稳定性。ProteinMPNN 在框架区固定的前提下对 CDR 区做大规模定向生成,把“碰运气”变成“批量配钥匙”。

具体案例:某抗体药团队拿到一个活性不足的候选抗体,将抗体-抗原复合物结构输入 ProteinMPNN,设定温度 0.2,对 CDR-H3 生成 600 条候选序列,再用 AlphaFold 回折筛出 50 条结构稳定的序列,最终实验获得亲和力提升约 8 倍的候选分子。

酶热稳定性改造

阶段:结构重设计与迭代优化

解决的问题:工业酶常在高温或有机溶剂中快速失活。ProteinMPNN 以酶的催化结构为输入,在不改变活性位点的约束下重设计其余区域序列,通过增加内部相互作用提升热稳定性。

具体案例:某合成生物学企业改造脂肪酶,固定催化三联体残基后,模型生成多轮序列并迭代设计两轮,挑选出熔解温度提升 12°C 且催化活力保留 90% 的变体投入生产。

疫苗免疫原设计

阶段:从头序列设计验证

解决的问题:疫苗研发常需把不稳定的融合前构象蛋白“焊死”在正确形状上。ProteinMPNN 针对设计好的免疫原结构生成稳定序列,帮助抗原保持正确构象。

具体案例:RSV 疫苗研发中,科学家设计出稳定的融合前 F 蛋白骨架,用 ProteinMPNN 生成候选序列并在小鼠模型验证出强中和抗体,成为结构疫苗学的经典范式。

Python 演示

python64 行
import numpy as np  class MiniProteinMPNN:    """A tiny inverse folding demo: read structure by message passing,    write sequence autoregressively."""     def __init__(self, hidden=16, n_rounds=3, seed=42):        self.h = hidden        self.T = n_rounds        self.rng = np.random.default_rng(seed)        self.temperature = 0.1        self.W_out = self.rng.normal(0, 0.3, (self.h, 20))     def build_graph(self, coords):        dist = np.linalg.norm(coords[:, None, :] - coords[None, :, :], axis=-1)        adj = (dist < 8.0).astype(float)        np.fill_diagonal(adj, 0.0)        return adj, dist     def message_passing(self, struct_feat, adj):        messages = struct_feat.copy()        for _ in range(self.T):            agg = adj @ messages            deg = np.maximum(adj.sum(axis=1, keepdims=True), 1.0)            messages = np.tanh(agg / deg)         return messages     def decode(self, struct_feat, adj, native_seq=None):        node_feat = self.message_passing(struct_feat, adj)        logits = node_feat @ self.W_out        if self.temperature != 1.0:            logits = logits / self.temperature         z = logits - logits.max(axis=1, keepdims=True)        probs = np.exp(z) / np.exp(z).sum(axis=1, keepdims=True)         if native_seq is not None:            recovery = (np.argmax(probs, axis=1) == native_seq).mean()            return probs, recovery         return np.array([self.rng.choice(20, p=p) for p in probs])     def design(self, coords, native_seq=None, temperature=0.1):        self.temperature = temperature        adj, dist = self.build_graph(coords)        struct_feat = np.column_stack([dist, dist ** 2])        return self.decode(struct_feat, adj, native_seq)  def main():    rng = np.random.default_rng(0)    coords = np.cumsum(rng.normal(0, 1.0, (20, 3)), axis=0)    native = rng.integers(0, 20, size=20)    model = MiniProteinMPNN(hidden=16, n_rounds=3, seed=42)    seq, recovery = model.design(coords, native_seq=native, temperature=0.15)    amino = 'ACDEFGHIKLMNPQRSTVWY'    print('design sequence:', ''.join(amino[i] for i in seq))    print('sequence recovery: %.2f' % recovery)  if __name__ == '__main__':    main()
目的:用 NumPy 实现一个迷你版 ProteinMPNN,演示“结构图构建 → 消息传递 → 自回归采样 → 恢复率评估”的完整逆折叠链路,无需 GPU 即可运行。
  1. adj = (dist < 8.0).astype(float)以 8 埃为阈值把空间距离矩阵转为接触图,构建“锁芯图”的边。
  2. agg = adj @ messages矩阵乘法实现消息传递核心:一次聚合所有邻居的隐状态。
  3. messages = np.tanh(agg / deg)按邻居数归一化后做非线性更新,防止信息爆炸。
  4. logits = node_feat @ self.W_out用学习好的权重把结构特征映射为 20 种氨基酸的得分。
  5. logits = logits / self.temperature温度缩放,直接控制采样时的“胆量”。
  6. probs = np.exp(z) / np.exp(z).sum(axis=1, keepdims=True)softmax 归一化,得到每个位置的氨基酸概率分布。
  7. recovery = (np.argmax(probs, axis=1) == native_seq).mean()按最大概率位点与天然序列逐位对比,计算序列恢复率。
  8. sampled = np.array([self.rng.choice(20, p=p) for p in probs])按概率分布逐位采样,生成多条多样的候选序列。

常见误区

误区以为给模型随便一个想法或一段文本,它就能凭空生成全新蛋白质;甚至有人拿空结构文件去跑,期待模型自己发明蛋白。

正解ProteinMPNN 是严格意义上的逆折叠模型:输入必须是确定的三维结构,输出是匹配该结构的序列。它确实能设计全新蛋白,但前提是“锁芯”(目标结构)已经存在——无论是天然结构还是从头设计的计算结构。没有结构输入,模型就失去约束,无法工作。这就像锁匠再厉害,也得先见到真实的锁芯才能配钥匙。

为何常见:“AI 生成蛋白质”的新闻常把逆折叠与完全从头设计混为一谈,加上扩散模型等新方法让人误以为生成完全自由,忽略了逆折叠的本质约束。

误区以为计算输出的序列就是最终产物,直接交给实验室就能做出有活性的蛋白质;实验失败后第一反应是责怪模型。

正解序列设计只解决了“钥匙形状对不对”的问题。真正在细胞里表达、折叠、纯化、测活,还受密码子偏好、溶解度、折叠动力学等多种因素影响。ProteinMPNN 的产物只是候选序列池,必须经过实验验证才能确认可行。就好比锁匠配的钥匙再标准,也要插进真锁转一下才算数。

为何常见:计算结果呈现出“确定性”假象,让人忽略了生物系统的高度随机性,而实验失败的反馈往往滞后,容易让人把责任全推给模型。

误区把恢复率当成唯一质量指标,认为恢复率低于 60% 就是设计失败,高于 80% 就是完美方案。

正解恢复率衡量设计序列与天然序列逐位一致的比例,但“重现天然序列”不等于“实现功能”。同一个结构可以对应大量同工序列,模型有时能找到天然序列之外更稳定或更易表达的方案。若一味追求高恢复率,模型可能退化成记忆天然序列,而非真正理解结构-序列规律。评估设计质量还应结合回折 RMSD、AlphaFold 置信度与实验表达效率。

为何常见:恢复率直观、好算、天然有 0 到 100% 的数字刻度,初学者很容易把它当成唯一的 KPI,忽略了蛋白设计“功能为王”的本质。

误区认为只要算力足够,ProteinMPNN 就能处理任何残缺、不干净的结构输入,生成质量全看显卡。

正解ProteinMPNN 对输入质量非常敏感:缺失残基、断裂主链、非标准氨基酸、残留溶剂与配体都会显著降低生成质量。再强的 GPU 也救不了垃圾输入。实战中必须先做结构清理,补全缺失原子,明确设计链段,必要时删除无关水分子和配体。这就像用再好的锉刀,面对布满铁锈的锁芯也只能瞎锉。

为何常见:深度学习模型“端到端”的叙事容易让人误以为输入可以任意简陋,忽略了生物结构数据本身的特殊性和噪声。

面试题

Q1. ProteinMPNN 属于哪种蛋白质计算任务?

单选题 · easy

  • A.正折叠结构预测
  • B.逆折叠序列设计← 正确答案
  • C.分子动力学模拟
  • D.蛋白质对接计算

答案:B。正折叠是从序列到结构,逆折叠是从结构到序列。ProteinMPNN 输入三维结构、输出氨基酸序列,正是“反着来”的逆折叠任务,好比拿着锁芯图纸反推钥匙齿纹。

Q2. ProteinMPNN 模型推理时的输入数据是什么?

单选题 · easy

  • A.氨基酸序列
  • B.蛋白质三维结构← 正确答案
  • C.基因组 DNA 序列
  • D.小分子 SMILES 表示

答案:B。逆折叠模型的核心特征就是“以结构为条件”,输入是 PDB/MMCIF 等格式解析出的三维结构与接触图。它不做结构预测,也不处理核酸序列或小分子表示。

Q3. ProteinMPNN 的核心网络结构属于哪一类?

单选题 · easy

  • A.卷积神经网络
  • B.循环神经网络
  • C.图神经网络← 正确答案
  • D.全连接前馈网络

答案:C。蛋白质结构天然是图(残基为节点、空间接触为边),ProteinMPNN 用图神经网络做消息传递来编码结构上下文,就像锁匠用指尖触觉感受锁孔各处的弹子分布。

Q4. 在图神经网络的消息传递公式中,AGGREGATE 操作负责什么?

单选题 · mid

  • A.更新节点自身特征
  • B.汇总邻居节点信息← 正确答案
  • C.计算训练损失函数
  • D.随机采样输出序列

答案:B。AGGREGATE 把邻居消息汇总成综合信号,而 UPDATE 才负责更新自身特征。类比锁匠把几根手指的触觉叠合起来判断锁孔整体形状,而不是直接决定刻齿方案。

Q5. 增大 softmax 采样温度 T,ProteinMPNN 生成行为会怎样?

单选题 · mid

  • A.更保守且接近最优
  • B.更随机且多样性高← 正确答案
  • C.输出结果完全不变
  • D.生成序列长度变长

答案:B。T 越大,logits 被压缩,概率分布越平坦,采样越多样;T 越小,分布越尖,越接近选择最高分氨基酸。好比打磨时用力的轻重:轻推(T 大)大胆试探,用力(T 小)中规中矩。

Q6. 序列恢复率的正确计算方式是?

单选题 · mid

  • A.设计序列与天然序列逐位相同的比例← 正确答案
  • B.设计序列长度与天然序列长度的比值
  • C.模型输出概率的对数之和
  • D.序列中氨基酸种类的覆盖率

答案:A。恢复率等于逐位完全一致的位点数除以总位点数,是直接对比原装钥匙的卡尺。长度比、概率对数和种类覆盖都不能衡量逐位还原程度。

Q7. 关于 ProteinMPNN 迭代设计的说法,正确的是?

单选题 · hard

  • A.一次生成即可得到最佳序列
  • B.将回折后的结构反馈给模型分轮逼近← 正确答案
  • C.迭代次数越多所有指标必然越好
  • D.迭代会改变目标结构的长度

答案:B。迭代设计一般流程是“生成序列 → 结构预测回折 → 比较结构相似度 → 选择最优序列再次生成”,通过多轮试开逼近目标。但并非所有指标都单调提升,也不会改变目标结构本身。

Q8. 以下哪些属于 ProteinMPNN 实战中的常见调优手段?

多选题 · mid

  • A.调整采样温度参数← 正确答案
  • B.增加消息传递轮数← 正确答案
  • C.添加关键位点约束← 正确答案
  • D.修改溶剂分子坐标

答案:ABC。温度控制采样多样性,消息传递轮数影响结构上下文感受野,位点约束能固定关键残基。修改溶剂分子坐标不能提升设计质量,正确做法是移除杂质。

Q9. 关于 ProteinMPNN 在抗体工程中的应用,下列正确的有?

多选题 · hard

  • A.以抗体结构输入设计 CDR 区← 正确答案
  • B.框架区加约束保持稳定性← 正确答案
  • C.直接生成序列而忽略结构
  • D.改善亲和力且保持特异性← 正确答案

答案:ABD。抗体 CDR 区是亲和力关键,固定框架区、只设计 CDR 区是常见做法,可显著提升候选质量。忽略结构的序列生成不属于逆折叠,也无法保证抗体正确折叠。

Q10. 用 ProteinMPNN 完成序列设计后,实验验证环节通常包含哪些?

多选题 · extreme

  • A.基因合成与蛋白表达纯化← 正确答案
  • B.冷冻电镜等结构验证← 正确答案
  • C.亲和力与活性功能测定← 正确答案
  • D.直接进入临床注射阶段

答案:ABC。设计序列需经基因合成、表达纯化验证可溶性,再用结构解析确认折叠正确,最后测功能活性。进入临床前还有动物实验与安全性评价,绝不直接用于人体。