AI蛋白质结构预测与设计:AlphaFold之后的生成式生物学
2020 年 CASP14 竞赛上,AlphaFold2 把蛋白质结构预测的中位精度推进到原子级,被评审团宣布"问题基本解决"。这是 AI for Science 的第一个里程碑时刻。但故事没有停在预测——过去三年,领域的重心已经明显转向"设计":给定功能需求,反向生成自然界不存在的蛋白质。这条从"读懂"到"写出"的路线,正在把生物学从观测科学变成工程学科。
AlphaFold2 做对了什么
回看 AlphaFold2,它的成功不是单点突破,而是几个设计咬合在一起的结果。
第一是共进化信息。模型的主干输入不是单条序列,而是多序列比对(MSA)——同一蛋白质在不同物种中的同源序列。残基之间的共变异信号隐含了空间接触约束,这是几十年结构生物学的核心洞察,AlphaFold2 把它做成了端到端可学习的一等公民。
第二是Evoformer。这是一个双轨注意力结构:MSA 表征和残基对(pair)表征互相交换信息,pair 轨道维护"任意两个残基之间关系"的几何先验。注意力在这里不是算词与词的相关性,而是在推断三维约束。
第三是结构模块与循环精修。末端用不变点注意力(IPA)直接输出刚体坐标,并施加符合化学规则的损失;整个网络做三次 recycling,把输出再喂回输入迭代优化。
开源的 AlphaFold 数据库一次性放出 2 亿多个预测结构,几乎覆盖了 UniProt 的已知蛋白质。从科研民主化的角度看,这可能是 DeepMind 做过的影响力最大的一件事。
AlphaFold3 与生成式转向
AlphaFold2 的边界也很清楚:只管静态结构,不管蛋白质怎么动、怎么和小分子或核酸结合。2024 年发布的 AlphaFold3 把架构换成了扩散模型——先预测配体-蛋白复合物的原子坐标分布,再从噪声中逐步去噪生成结构。它能处理蛋白质、DNA、RNA、小分子、离子的任意组合,分子对接精度超过了传统物理方法。
这个改动意味深长:从"回归一个确定结构"变成"从分布中采样结构"。当输出从点估计变成分布,生成式生物学的大门就打开了。
从预测到设计:RFdiffusion 与 ProteinMPNN
如果说 AlphaFold 解决的是"序列→结构",蛋白质设计要解决的是反问题:"功能/结构→序列"。这条线上有两个绕不开的工具。
RFdiffusion(Baker 实验室,2023)把图像领域的扩散模型搬到了蛋白质骨架上。它以 RoseTTAFold 为去噪网络骨架,在三维残基坐标和旋转上做 SE(3) 等变的扩散过程。给它一个功能位点或者目标蛋白的结合面,它能生成全新的骨架,把功能基团"脚手架"式地撑起来。实验验证的结合蛋白亲和力可以到皮摩尔级,还做出过对称寡聚体、金属结合蛋白。
ProteinMPNN负责配套的另一半:给定骨架,设计能折叠成这个骨架的氨基酸序列。它是一个消息传递神经网络,比 Rosetta 物理方法快几个数量级,序列恢复率也更高。典型工作流是:RFdiffusion 生成骨架 → ProteinMPNN 设计序列 → AlphaFold2/ESMFold 回测结构是否与设计一致 → 湿实验验证。这套"生成-筛选-验证"闭环,和软件工程里的 TDD 有异曲同工之妙。
蛋白质语言模型:另一条腿
不依赖 MSA 的单序列模型是另一条路线。Meta 的 ESM 系列把蛋白质序列当"句子",在海量序列上做掩码语言模型预训练,学到了结构和功能信息。ESM-2 参数量做到 15B,浮现出了原子级的结构表征;ESMFold 直接用语言模型表征预测结构,速度比 AlphaFold2 快一个数量级,代价是精度略降。2024 年的 ESM-3 更进一步,把序列、结构、功能统一成离散 token,多轨联合生成,直接演示了"生成一个新荧光蛋白"。
动手试试:用 ESMFold 预测一个结构
import torch from transformers import AutoTokenizer, EsmForProteinFolding # 加载 ESMFold (需要 16GB+ 显存, 可用 esmfold_v1) model = EsmForProteinFolding.from_pretrained( "facebook/esmfold_v1", low_cpu_mem_usage=True ).cuda().eval() tokenizer = AutoTokenizer.from_pretrained("facebook/esmfold_v1") sequence = "MKTAYIAKQRQISFVKSHFSRQLEERLGLIEVQAPILSRVGDGTQDNLSGAEK" \ "AVQVKVKALPDAQFEVVHSLAKWKRQTLGQHDFSAGEGLYTHMKALRPDEDRL" with torch.no_grad(): inputs = tokenizer([sequence], return_tensors="pt").to("cuda") outputs = model(**inputs) # 输出 PDB 字符串与 pLDDT 置信度 pdb = model.output_to_pdb(outputs)[0] plddt = outputs["plddt"].mean().item() print(f"平均 pLDDT 置信度: {plddt:.1f}") # >70 认为可信 with open("predicted.pdb", "w") as f: f.write(pdb)得到的 PDB 文件可以直接拖进 PyMOL 或 ChimeraX 查看。pLDDT 是最重要的质量指标:低于 50 的区域通常是固有无序区,不要盲目采信。
主流工具横向对比
| 维度 | AlphaFold2 | AlphaFo