想象一位折纸大师拿到一张长纸条,上面只写了 20 种符号。他的任务不是读懂纸条,而是把这张纸条折成一个有功能的立体纸雕——蛋白质在生物体内也必须把自己折叠成精确的三维结构才能工作。过去,科学家要靠 X 射线晶体衍射等实验方法慢慢拍下纸雕的成品照,一张照片可能就要拍几年。AlphaFold2 则像一间全自动折纸工坊:它先收集同主题的参考折法(多序列比对,MSA),再看已知的成品照(模板),然后在审图室里反复推敲折痕关系(Evoformer),最后用一双手在三维空间里把纸雕摆出来(结构模块)。更神奇的是,折完还能回炉再折几次,越折越准。这篇文章会走进这座工坊的每一间房,看看它从序列到坐标的完整流水线。
理解 AlphaFold2 的分层设计,是进入 AI 驱动蛋白质结构预测与药物发现领域的关键一步。对 AI 工程师而言,双表示协同、几何约束与迭代精化思想,也能迁移到其他科学智能任务中。
目录
可视化演示
演示Evoformer特征提取、结构模块IPA与三角注意力、FAPE损失与回收机制,直观展示AF2如何从MSA和模板推断原子坐标。
本节配有交互动效(进入视口后自动加载,约 3KB)。
Evoformer特征提取 MSA+配对表征 共进化信息 提取残基间共进化信号与几何关系
问题与数据:长纸条与参考照片
折纸大师的第一步,不是直接动手,而是先看清自己拿到的是什么。AlphaFold2 面对的问题也一样:给定一条氨基酸序列,预测蛋白质折叠后的三维坐标。这里的输入不只是“一张纸条”,还有一叠辅助资料。多序列比对(MSA)就像一群见过类似纸雕的人,从各自角度描述哪些折痕位置很稳定;模板则是以前拍好的成品照片,能告诉模型大致框架。更关键的是,整个流程从原始输入到三维坐标全部可微,意味着所有环节可以放在同一个神经网络里联合训练。
为了让机器处理字符,需要先把 20 种氨基酸变成数字。这里使用最简单的 one-hot 编码:把每个氨基酸表示成一个只管“是或不是”的向量。
有了这些数字化的“参考折法”,工坊才能开始给纸雕建立内部表达。下一节我们看看这些数据如何被加工成两种核心表示。
- 氨基酸编码$a_i$ 是序列第 $i$ 个氨基酸,one-hot 把它变成 20 维的 0/1 向量。
- 序列位置$i = 1,2,\dots,L$,$L$ 表示蛋白质的残基总数,也就是纸条长度。
- 多序列比对每条比对的序列 $\mathbf{m}_s$ 也是 20 维 one-hot 构成的矩阵,相当于一位老师傅的“观察笔记”。
输入表示:把证据写成便签
审图室里最忌讳信息混乱。AlphaFold2 把所有输入整理成两类便签:一类是“MSA 便签”,记录每个序列位置在不同同源序列里的状态;另一类是“配对便签”,记录每两个残基之间的关系。前者像每位老师傅对某一处折痕的评价,后者像两张折痕之间“是否搭配、距离多远”的合作关系。
在具体实现中,MSA 表示会把残基本身的信息与多序列比对的原始特征拼接起来,再通过线性层转换到统一维度。配对表示则把相对位置编码和模板特征拼在一起,同样投影到统一空间。
两种便签准备好后,真正的主角 Evoformer 上场了。
- 拼接操作$\oplus$ 表示把两个向量首尾相连,好比把两张便签钉在一起。
- 线性投影$\operatorname{Linear}(\mathbf{u}) = \mathbf{W}\mathbf{u} + \mathbf{b}$,把拼接后的高维向量压缩到统一大小。
- 配对表示$\mathbf{z}_{ij}$ 是残基 $i$ 与残基 $j$ 的配对向量,$C_z$ 是它的通道数。
Evoformer与几何:审图室里的双向沟通
Evoformer 是 AlphaFold2 中最重要的“审图室”,由许多 Transformer 块堆叠而成。它手里始终拿着两张表:MSA 表示和配对表示。MSA 表回答“大家怎么看这条折痕”,配对表回答“两条折痕之间怎么配合”。两个表不是各看各的,而是不断互相更新,这就是双表示协同。
为了不让计算量爆炸,Evoformer 没有对整张 $L \times L$ 的图做全局注意力,而是使用轴向注意力:先沿着序列行看一遍,再沿着列看一遍。同时,外积求和会把 MSA 中多个序列的共识凝聚成配对特征,相当于把几十个师傅的意见汇总成一张折痕合作图。另外,三角几何更新让每三个残基之间的折痕信息互相校验,避免出现“A 能折到 B、B 能折到 C、但 A 折不到 C”的矛盾。
审图室讨论结束后,工坊终于要到真正动手折纸的车间了。
- 查询、键、值$\mathbf{q}_i, \mathbf{k}_j, \mathbf{v}_j$ 由输入向量分别乘三个权重矩阵得到。
- 缩放点积加偏置点积除以 $\sqrt{d}$ 后,再加上配对表示 $\mathbf{z}_{ij}$,让注意力自动参考折痕合作信息。
- Softmax 加权求和所有 $j$ 的权重归一化后,对 $\mathbf{v}_j$ 加权求和,得到更新的 MSA 表示。
- 三角消息传递对每个中间残基 $k$,把 edge $(i,k)$ 和 $(k,j)$ 的信息逐元素相乘后求和,再更新配对表示。
结构模块:从图纸到三维坐标
结构模块是 AlphaFold2 的“双手”。它接收 Evoformer 输出的 MSA 表示与配对表示,为每个残基生成一个刚体框架,也就是一个局部坐标系。每个残基的坐标不是凭空出现,而是由这些局部坐标系的旋转和平移决定。最核心的机制叫不变点注意力,它保证整套预测不随蛋白质整体旋转或平移而改变。换句话说,纸雕放在桌上还是拿在手里折,结果都一样。
这种不变性来自一个巧妙设计:计算注意力时,先把每个点到对应残基局部坐标系里,再比较距离。这样即使整体旋转 90 度,局部坐标距离也不会变。
结构模块每次只折出一个“半成品”,但 AlphaFold2 不会就此收工,它会回到审图室再来一轮。
- 刚体框架每个残基 $i$ 有一个旋转矩阵和平移向量组成的框架。
- 局部坐标把点 $\mathbf{p}_i$ 用 $T_i^{-1}$ 转到残基 $i$ 的局部坐标,这是“不变”的关键。
- 距离惩罚项两个局部点距离越远,注意力分数越低,这相当于告诉模型“空间上远就不该强行连接”。
- Softmax 注意力权重归一化后得到每个残基对当前残基的影响权重。
循环精化:折了又折,越折越准
现实中的折纸大师不会一次成功,往往会先折个大概,然后对着照片纠正细节。AlphaFold2 也采用循环精化:把上一轮结构模块输出的信息重新喂回输入,再跑一轮 Evoformer 和结构模块。训练时通常使用 3 次循环,每多一轮,模型就能多纠正一次偏差。
但循环带来一个麻烦:如果每一轮都完整反向传播,梯度会穿过多个循环步,导致训练显存和梯度不稳定。因此 AlphaFold2 在循环之间使用梯度阻断,也就是只让最后一轮的结果参与梯度回传,前面的循环虽然参与前向计算,但不再回传梯度。
经过几轮回炉,工坊还需要一把“尺子”来评判纸雕折得好不好。
- 网络状态$\mathbf{h}^{(t)}$ 表示第 $t$ 轮的 MSA 表示与配对表示。
- Evoformer 更新先让审图室讨论一轮。
- 梯度阻断$\mathrm{sg}$ 把梯度截断,数学上等价于让上一轮的输出像常数一样不参与求导。
- 结构模块输出最后用结构模块把状态变成三维坐标,进入下一轮或输出最终结果。
损失与工程优化:裁判的量尺与量产武器
训练 AlphaFold2 时,裁判不能只看整体像不像,因为蛋白质常常有多个相对运动的结构域。FAPE 损失在每次测量前,先把预测原子和真实原子都转到某个残基的局部坐标系里,再计算距离。这就像裁判不站在房间中央,而是站在每个氨基酸的肩膀上,用该位置自己的尺子量误差。误差过大时还会做截断,防止个别离谱原子主导梯度。
除了 FAPE,训练还有辅助损失:距离直方图损失用来预测残基对之间的 Cβ 距离分布,pLDDT 置信度损失让模型学会对自己每个残基的预测打分。工程上,AlphaFold2 通过裁剪训练样本、梯度阻断、TPU 并行等手段控制显存与训练时间。正是这些设计,让 AlphaFold2 在 CASP14 上一鸣惊人,精度接近实验方法,并随后开源了模型与推理代码。
至此,AlphaFold2 这座“AI 折纸工坊”的完整流程已经清晰:输入数据、构建表示、Evoformer 审图、结构模块动手、循环精化、FAPE 裁判打分。
- 局部坐标转换把第 $j$ 个原子的预测坐标和真实坐标都转到第 $i$ 个残基的局部坐标系。
- 逐点误差计算两个局部坐标的欧氏距离。
- 截断操作$\min(\cdot, d_{\max})$ 限制最大损失贡献,避免个别远距离原子过度影响梯度。
- 全局平均对所有残基、所有原子取平均,得到最终的 FAPE 分数。
AI 应用场景
药物靶点结构预测
阶段:数据准备与模型推理
解决的问题:传统结构解析依赖 X 射线晶体衍射或冷冻电镜,周期长、成本高、有些蛋白难以结晶。AlphaFold2 可以先给出高置信度的候选结构,大幅缩小实验范围。
具体案例:某研发团队在研发新型抗体时,需要快速了解靶点蛋白的胞外结构域。他们先用 AlphaFold2 生成结构模型,再结合分子对接筛选候选表位,把原本数月的前期调研压缩到两周。
蛋白质设计与突变效应预测
阶段:模型微调与结果评估
解决的问题:设计或改造蛋白质时,需要估计单点突变会不会破坏三维结构。AlphaFold2 可用来比较突变前后的预测结构,辅助判断稳定性变化。
具体案例:酶工程团队想提高某工业酶的耐热性,对几十个候选突变逐一用 AlphaFold2 预测结构,再根据 FAPE 与 pLDDT 筛选出最可能保持折叠的突变体,后续实验验证成功率明显提升。
Python 演示
import numpy as np class MiniAF2: def __init__(self, L=8, d=8, n_seq=4, seed=42): rng = np.random.default_rng(seed) self.L = L self.d = d self.n_seq = n_seq self.msa = rng.normal(size=(n_seq, L, d)) self.pair = rng.normal(size=(L, L, d)) self.w_msa = rng.normal(size=(d, d)) * 0.1 self.w_pair = rng.normal(size=(d, d)) * 0.1 self.w_coord = rng.normal(size=(d, 3)) * 0.1 def evoformer_step(self): m = self.msa.mean(axis=0) outer = m[:, None, :] * m[None, :, :] self.pair = self.pair + 0.05 * outer triangle = np.einsum("ikd,kjd->ijd", self.pair, self.pair) self.pair = self.pair + 0.01 * triangle bias = self.pair.mean(axis=1) self.msa = self.msa + 0.1 * bias[None, :, :] def predict_coords(self): rep = self.msa.mean(axis=0) coords = np.einsum("ld,do->lo", rep, self.w_coord) return coords def structure_module(self, true_coords, steps=3): for _ in range(steps): self.evoformer_step() coords = self.predict_coords() return coords, self.fape(coords, true_coords) def fape(self, pred, true, clip=5.0): dist = np.linalg.norm(pred - true, axis=-1) return float(np.mean(np.minimum(dist, clip))) if __name__ == "__main__": model = MiniAF2(L=8, d=8, n_seq=4) rng = np.random.default_rng(1) true_coords = rng.normal(size=(model.L, 3)) pred, loss = model.structure_module(true_coords, steps=3) print("pred shape:", pred.shape) print("FAPE-like loss:", round(loss, 4))
self.pair = self.pair + 0.05 * outer把 MSA 共识通过外积信息写入配对表示,相当于汇总师傅们的意见。triangle = np.einsum("ikd,kjd->ijd", self.pair, self.pair)三角消息传递,用 $i \to k$ 与 $k \to j$ 更新 $i \to j$。coords = np.einsum("ld,do->lo", rep, self.w_coord)从残基表示线性投影出三维坐标。np.mean(np.minimum(dist, clip))截断后的平均距离误差,对应 FAPE 的截断思想。
常见误区
误区看到论文说“端到端可微”,就以为 AlphaFold2 只要输入一条氨基酸序列就能直接输出结构,完全不依赖参考数据。
正解端到端可微指的是“从输入到输出的整个计算图都能求导训练”,不代表零外部依赖。实际推理时,AlphaFold2 仍然需要从数据库中搜索同源序列构建 MSA,也常使用模板信息。这就像折纸大师手法再熟练,也得先看一眼参考照片。
为何常见:大家容易把“训练方式”和“输入条件”混为一谈,尤其当论文宣传“从序列到结构”时,省略了“借助 MSA 与模板”这一前提。
误区以为 AlphaFold2 就是把普通 Transformer 套在氨基酸序列上,自己“脑补”出三维结构。
正解Evoformer 使用轴向注意力,分别沿着 MSA 的行和列计算注意力,并在注意力分数里加入配对表示作为偏置。它维护的不只是序列表示,还有残基两两之间的配对表示。只看整条序列会丢失大量折叠约束。
为何常见:Transformer 在 NLP 里太深入人心,初学者容易忽略 AlphaFold2 专门为蛋白质几何设计的双表示结构。
误区听到“三角”就认为模型显式检查 $d_{ik} + d_{kj} \ge d_{ij}$,不满足就惩罚。
正解三角更新没有直接计算距离三角不等式,而是设计了一种消息传递路径:用 edge $(i,k)$ 和 $(k,j)$ 的信息更新 edge $(i,j)$。它让配对表示在反复迭代中自发学会几何一致性,属于结构先验,不是硬编码的几何公式。
为何常见:名字里的“三角”太有诱惑力,容易让人联想到数学中的三角不等式。
误区以为 FAPE 只是普通坐标误差,只不过把特别大的误差截断一下。
正解FAPE 会先对每个残基的框架做局部坐标转换,再计算距离。这样即使蛋白质整体旋转或两个结构域发生相对运动,损失也不会因为全局对齐方式而失真。截断只是其中一步,真正的关键是局部坐标系量误差。
为何常见:RMSD 是结构比较中最常见的指标,很多人先把 FAPE 类比成 RMSD,忽略了它“局部框架对齐”的本质。
面试题
Q1. AlphaFold2 输入中 MSA 的主要作用是什么?
- A.提供同源蛋白的进化保守信息← 正确答案
- B.直接给出最终三维坐标
- C.仅用于计算 GPU 显存
- D.替代模板的唯一数据源
答案:A。MSA 是多个同源序列的比对结果,能提供哪些位置在进化中稳定不变,帮助模型判断折叠关键区域。它不直接输出坐标,也不只是显存工具,更不是模板的替代品。
Q2. Evoformer 中同时维护的两种核心表示是?
- A.MSA 表示和配对表示← 正确答案
- B.序列表示和坐标表示
- C.图像表示和文本表示
- D.原子表示和键长表示
答案:A。Evoformer 的核心创新是同时维护 MSA 表示与配对表示,并在两者之间反复交换信息。坐标是结构模块的输出,图像和文本不属于蛋白质折叠任务的核心表示。
Q3. 下列哪些属于 Evoformer 的更新机制?
- A.轴向注意力← 正确答案
- B.外积求和← 正确答案
- C.三角乘法更新← 正确答案
- D.反向传播剪枝
答案:ABC。Evoformer 使用轴向注意力降低计算量,用外积求和把 MSA 信息汇总进配对表示,用三角更新约束几何一致性。“反向传播剪枝”是循环精化中的梯度处理技巧,不属于 Evoformer 内部更新机制。
Q4. 三角几何约束的核心思想是什么?
- A.满足几何一致性← 正确答案
- B.减少序列长度
- C.提高训练速度
- D.降低内存占用
答案:A。三角更新让每个残基对 $i,j$ 借助第三个残基 $k$ 接收更完整的消息,从而让配对表示在迭代中满足一致的几何关系。它不是用来缩短序列或省内存的。
Q5. 不变点注意力中的“不变”是指什么?
- A.对整体旋转平移不变← 正确答案
- B.对氨基酸序列不变
- C.对 MSA 数量不变
- D.对损失函数不变
答案:A。不变点注意力把点先转到残基自己的局部坐标系再比较距离,因此整体旋转或平移不会改变注意力结果。这与序列长度、MSA 数量或损失函数无关。
Q6. 循环精化中梯度阻断的主要作用是?
- A.避免多层循环的梯度不稳定和显存压力← 正确答案
- B.提高序列比对的速度
- C.强制所有层共享权重
- D.去掉模板特征的输入
答案:A。多次循环会让反向传播穿过很深的计算图,导致梯度不稳定并消耗大量显存。梯度阻断让前向计算照常,但反向梯度不再穿过前面的循环,从而稳定训练。
Q7. FAPE 损失主要用于衡量什么?
- A.预测坐标与真实坐标的差异← 正确答案
- B.氨基酸序列的相似度
- C.MSA 的保守性
- D.模板数据库的大小
答案:A。FAPE 是 Frame Aligned Point Error 的缩写,用来衡量预测结构中各原子相对真实结构的位置误差。它不评估序列相似度、MSA 保守性或数据库规模。
Q8. 以下哪些监督信号出现在 AlphaFold2 的训练中?
- A.距离直方图损失← 正确答案
- B.pLDDT 置信度损失← 正确答案
- C.FAPE 坐标损失← 正确答案
- D.密码子偏好损失
答案:ABC。AlphaFold2 除了用 FAPE 监督最终坐标,还训练残基对距离直方图,并让模型预测每个残基的 pLDDT 置信度。密码子是核酸层面的概念,与蛋白质结构预测无关。
Q9. AlphaFold2 在 CASP14 上的主要突破是什么?
- A.预测精度接近实验方法← 正确答案
- B.完全替代核磁共振
- C.不需要任何实验验证
- D.只用单序列预测结构
答案:A。CASP14 中 AlphaFold2 对多数靶点的预测精度已经接近实验方法,这是计算结构预测领域的里程碑。它没有完全替代实验,也没有宣称只用单序列就能达到同样效果。
Q10. 下列哪些做法能降低长序列训练时的内存压力?
- A.裁剪训练样本← 正确答案
- B.梯度阻断回传← 正确答案
- C.一次处理全长
- D.无限增加序列数
答案:AB。AlphaFold2 训练时从一个蛋白质里裁剪局部窗口,降低 $L^2$ 级配对表示的体积;梯度阻断也减少了循环反传的显存开销。一次处理全长和无限增加序列数都会让内存问题更严重。