想象你是城市里最有名的一间“蛋白质拼图工作坊”坊主。你的工作台上躺着一盒神秘拼图——不是平面的风景画,而是一条由上千个氨基酸碎片折叠而成的立体蛋白质。这盒拼图的原始图纸(基因序列)只有一份,但幸运的是,大自然在亿万年的进化中,把这张图纸复印了几千份,只是每份都有不同程度的涂改:有的换了几个碎片颜色,有的缺了一角,还有的只在某一片上做了小标记。这些涂改过的副本,正是不同物种身上对应的同源蛋白质序列。你手里捏着这摞带着岁月痕迹的“进化草稿”,要怎么做才能拼出唯一正确的三维结构? 答案,就是开一场盛大的“拼图讨论会”——让几十位经验丰富的拼图师(每条进化草稿),先自己回忆碎片之间的关联,再相互对照彼此的推测,同时用一张不断更新的“碎片关系卡”记录每两枚碎片靠近的倾向,在讨论中反复修正。这场讨论会的全套流程设计,就是 AlphaFold 的核心引擎——Evoformer。它把进化信号炼成一张精准的“碎片关系网”,再用结构模块把关系网铺成三维空间中的蛋白质骨架。

岗位关联

AlphaFold2 凭借 Evoformer 在 CASP14 竞赛中预测精度达到实验水平,直接改变了结构生物学的研究范式。掌握它的双流架构与信息交换机制,是理解现代 AI for Science 模型设计的关键。

目录
  1. 可视化演示
  2. 起源密码
  3. MSA表示
  4. 行列注意力
  5. Pair表示
  6. 信息交换
  7. 结构模块
  8. 对比演进
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

\u5c55\u793aA*\u7b97\u6cd5\u572812\u00d712\u7f51\u683c\u4e0a\u7684\u641c\u7d22\u8fc7\u7a0b\uff0c\u901a\u8fc7f(n)=g(n)+h(n)\u542f\u53d1\u5f0f\u8bc4\u4f30\u627e\u5230\u4ece\u8d77\u70b9\u5230\u7ec8\u70b9\u7684\u6700\u4f18\u8def\u5f84\u3002

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

A*\u542f\u53d1\u5f0f\u641c\u7d22 \u7d2b\u8272\u4e3a\u5df2\u63a2\u7d22\uff08\u5173\u95ed\u8868\uff09\uff0c\u7c89\u8272\u4e3a\u5f85\u63a2\u7d22\uff08\u5f00\u653e\u8868\uff09 \u7ea2\u8272\u4e3a\u6700\u4f18\u8def\u5f84 f(n)=g(n)+h(n) g\u4e3a\u5b9e\u9645\u4ee3\u4ef7\uff0ch\u4e3a\u66fc\u54c8\u987f\u8ddd\u79bb\u542f\u53d1\u503c

起源密码

回到拼图工作坊。很久以前,坊主们只有一张原始图纸,只能靠物理化学规则一点一点试错,拼出粗略的轮廓。直到有人发现:大自然早就把答案偷偷写在了不同物种的“涂改版图纸”里——两个位置上若有氨基酸经常一起变动,说明它们在三维空间中多半是紧挨着的。这就是共进化信号。问题是,怎么从几十张涂改图纸里系统性地榨出这些信号?

第一代 AlphaFold(AlphaFold1)尝试用卷积神经网络从多序列比对(MSA)中提取成对距离图,但卷积的感受野有限,像拼图师只能看见手边几厘米的范围,全局信息要靠网络一层层传导,信息容易衰减。到了 AlphaFold2,DeepMind 做了一个关键决定:放弃“先预测距离图、再重建坐标”的老路,直接设计一个全新的深度架构,让进化信号端到端地流向三维坐标。这个架构的核心,就是 Evoformer。

Evoformer 维持两条并行的信息流:一条承载 MSA 信息(拼图师们的草稿),另一条承载残基对信息(碎片之间的关系卡)。每一层 Evoformer 块都让这两条流通过注意力机制各自精炼、然后互相交换情报。整个 AlphaFold2 有 48 个这样的块串联,相当于把讨论会重复开了 48 轮,每轮都让草稿和关系卡变得更可靠。

回扣一下:48 层 Evoformer 就是连续开 48 轮拼图讨论会。第一轮大家还很糊涂,关系卡上满是猜测;越到后面,草稿之间的共识越强,关系卡越像最终拼图的蓝图——这正是进化信息被“蒸馏”成结构的全过程。

(ml+1,zl+1)=EvoformerBlock(ml,zl)(m^{l+1}, z^{l+1}) = \text{EvoformerBlock}(m^{l}, z^{l})
这个公式说明 Evoformer 的每一层都接收上一层的 MSA 表示 m 和 pair 表示 z,经过内部处理后同时输出更新版的 m 和 z。两个信息通道是捆绑更新的。
  1. mMSA 表示:m 是三维张量,形状为(序列数 × 位点数 × 特征维度),存储每条进化草稿在每个位点的嵌入特征。它回答“每个拼图师觉得哪个碎片应该放在哪里”。
    m∈RS×L×dm \in \mathbb{R}^{S \times L \times d}
  2. zpair 表示:z 是残基对张量,形状为(位点数 × 位点数 × 特征维度),记录每对碎片之间的亲缘倾向——它们是该靠近、该远离,还是存在某种化学互补。它回答“这两块碎片的关系如何”。
    z∈RL×L×dz \in \mathbb{R}^{L \times L \times d}
  3. l层索引:l 表示当前在第几轮讨论。输入是第 l 轮的结果,输出进入第 l+1 轮。信息就在这层层传递中不断精炼。
    l∈{1,2,…,48}l \in \{1, 2, \dots, 48\}
  4. EvoformerBlock一个完整的讨论单元:包含行/列注意力、三角更新、外积均值、行投影等多个子模块。它不是单个操作,而是一整套流程包。
    EvoformerBlock=(MSA自注意力,三角更新,信息交换)\text{EvoformerBlock} = \big( \text{MSA自注意力}, \text{三角更新}, \text{信息交换} \big)

MSA表示

拼图讨论会的第一步,是把几十张涂改版图纸整理成统一格式。所谓多序列比对(MSA),就是把来自不同物种的同源蛋白质序列按列对齐:每一行是一条序列,每一列代表同一个位点(同一“拼图片”在不同物种中的选择)。因为进化中可能发生插入或缺失,比对算法会插入空位(gap),让真正对应的位点对齐在同一列。

打个比方:你让三十个拼图师各自描述“从左往右数第 17 号碎片是什么颜色”,他们可能说“红色”“浅红”“不确定”“此处缺失”。把这些回答排成一列,就是 MSA 的一列。列与列之间的统计模式,隐藏着碎片间的物理接触密码——比如第 17 号碎片变红时,第 42 号碎片几乎总是变蓝,那这两块多半是邻居。

在 Evoformer 中,每个氨基酸残基先被编码为独热向量(20 种标准氨基酸加未知类别),再通过查表得到可学习的嵌入向量。于是整个 MSA 变成了一个三维张量:序列数 S × 位点数 L × 特征维度 d。这个张量就是后续所有讨论的原材料。

这一节回到比喻:MSA 张量就像会议桌上那一摞整理好的草稿册,每一页是一位拼图师的记录,每一行是他在各个桌位(位点)上写下的碎片选择。接下来的所有注意力机制,都在这本册子上做文章。

M∈RS×L×d\mathbf{M} \in \mathbb{R}^{S \times L \times d}
整场讨论会的所有原始材料都封装在这个三维矩阵里:S 是来了多少位拼图师(同源序列数),L 是拼图点数(残基个数),d 是每个位置的笔记深度(特征维度)。
  1. S序列数:代表参与讨论的进化草稿数量。S 越大,统计信号越强,但算力开销也越大,通常在几十到几千之间。
    S=序列条数S = \text{序列条数}
  2. L位点数:比对后序列的长度,也就是拼图的碎片总数。蛋白质链长通常 100~1000。
    L=比对列数L = \text{比对列数}
  3. d特征维度:每个残基用多少维向量来描述自己的身份和状态。AlphaFold 中常用 256 维。
    d=嵌入维度d = \text{嵌入维度}
  4. ℝ实数空间:经过嵌入层后,离散的氨基酸类别变成了连续的实数向量,方便后续计算梯度。
    Ms,i=Embedding(残基类型)\mathbf{M}_{s,i} = \text{Embedding}(\text{残基类型})

行列注意力

有了拼图师们的草稿册,Evoformer 要从中提炼两层面的信息:第一,某一位拼图师自己的记录中,位点之间有什么联系?这是“行”的维度——对同一条序列,让残基们互相注意。比如第 5 个位置是疏水氨基酸,它旁边第 6 个位置也倾向疏水,这种序列内模式是局部结构偏好的来源。第二,所有拼图师在同一个位点上选择了什么?这是“列”的维度——跨序列对比同一列,捕捉共进化信号。如果许多草稿在第 i 列和第 j 列同时发生相同变动,那么 i 和 j 大概率在空间上靠近。

行注意力和列注意力本质都是标准缩放点积注意力,只是作用方向不同。为什么不用一个大注意力同时覆盖两个方向?因为 MSA 是三维张量,同时处理 S×L 个 token 的注意力矩阵大小是 (S×L)²,内存爆炸。拆成行(在 L 方向做注意力,S 个独立头)和列(在 S 方向做注意力,L 个独立头),既保留了两种语义又控制了复杂度。

这里的画面感很直接:行注意力是每位拼图师低头看自己的笔记,回忆碎片间的局部关系;列注意力是所有人突然抬头,把同一桌位上的不同选择摊开对比——谁和谁悄悄联动,一目了然。两种注意力再配上多头机制,相当于每次讨论分成几个小组、各关注不同侧重点,然后再把小组意见合并。

Attn⋅(X)=softmax(QK⊤dk)V\text{Attn}_{\cdot}(\mathbf{X}) = \text{softmax}\left(\frac{\mathbf{Q} \mathbf{K}^{\top}}{\sqrt{d_k}}\right) \mathbf{V}
这是 Transformer 的标准注意力公式。行注意力中 X 是每条序列的 (L×d) 矩阵,列注意力中 X 是每个位点的 (S×d) 矩阵。唯一区别是聚合方向不同。
  1. Q、K、V查询、键、值:把输入 X 分别乘以三组可学习矩阵得到。Q 问“我跟谁有关”,K 回答“我是什么”,V 提供“该传什么内容”。就像拼图师拿着自己的碎片特征,向全场发出询问。
    Q=XWQ,K=XWK,V=XWV\mathbf{Q} = \mathbf{X}\mathbf{W}_Q, \quad \mathbf{K} = \mathbf{X}\mathbf{W}_K, \quad \mathbf{V} = \mathbf{X}\mathbf{W}_V
  2. QK⊤相似度打分:计算每个 token 和所有其他 token 的相关性分数,得到注意力权重矩阵。谁与谁的草稿呼应,分数就高。
    score(i,j)=qi⋅kj\text{score}(i,j) = \mathbf{q}_i \cdot \mathbf{k}_j
  3. 除以 √d_k缩放稳定:维度高时点积数值会很大,softmax 容易饱和到极端值。除以 sqrt(d_k) 把分数拉回合适区间。
    QK⊤dk\frac{\mathbf{Q}\mathbf{K}^{\top}}{\sqrt{d_k}}
  4. softmax → V 加权求和把分数归一化成权重,再对各处的 V 加权叠加。焦点处的信息被揉进当前 token 的新表示。
    Attn=∑jsoftmax(q⋅kjdk)vj\text{Attn} = \sum_j \text{softmax}\left( \frac{\mathbf{q} \cdot \mathbf{k}_j}{\sqrt{d_k}} \right) \mathbf{v}_j

Pair表示

拼图师们的草稿虽然信息量大,但太嘈杂。Evoformer 还需要一个更直接的工具:碎片关系卡,即 pair representation。它是一张 L×L 的表格,每个格子 z_ij 记录第 i 块和第 j 块碎片之间的关系——它们应该离多远、朝向如何、是否有氢键或疏水接触。初始时,这张关系卡主要来自对 MSA 的粗略统计和序列位置编码,但真正的魔力在于它会在每一层被不断修正。

修正的核心约束来自几何常识,也就是“三角不等式”:如果已知 i 靠近 k、k 靠近 j,那 i 和 j 不可能无限远。换句话说,关系卡里的数值必须满足某种“三角形两边之和大于第三边”的自洽逻辑。神经网络的每一层更新 z_ij 时,如果只单独看这一对,很容易违背全局几何约束。于是 Evoformer 引入了三角乘法更新:更新 z_ij 时,把所有中间残基 k 的信息 z_ik 和 z_kj 组合进来,这样网络被迫学会尊重三元组关系。

这个“拉上第三人一起判断”的思路,正是几何直觉的神经网络化:人拼拼图时也会用三角形定位——找到两个已知锚点,再确立第三块的位置。三角更新让关系卡里的每一格都在全校师生的眼皮底下修正,任何与三维空间不相容的矛盾都会被逐步挤压掉。再加上旋转平移不变性的设计(特征描述的是相对关系而非绝对坐标),关系卡便成了完全“几何友好”的蓝图。

z~ij=zij+∑k=1Lg(zik)⊙h(zkj)\tilde{\mathbf{z}}_{ij} = \mathbf{z}_{ij} + \sum_{k=1}^{L} g\big(\mathbf{z}_{ik}\big) \odot h\big(\mathbf{z}_{kj}\big)
更新第 i、j 对碎片的关系时,遍历所有第三方碎片 k:综合“i 与 k 的关系”和“k 与 j 的关系”,让更新后的 z_ij 与整张关系网自洽。这是 Evoformer 中最重要的几何归纳偏置。
  1. z_ij目标关系对:要更新的那一格关系卡。比如第 17 号碎片与第 42 号碎片。
    zij∈Rd\mathbf{z}_{ij} \in \mathbb{R}^{d}
  2. k第三方残基:遍历所有位点的中间人。拼图时,如果你知道 17 号贴着 20 号、20 号又贴着 42 号,那 17 号和 42 号也不会太远。
    k∈{1,…,L}k \in \{1, \dots, L\}
  3. g(z_ik) 与 h(z_kj)两条边关系:分别对 i→k 和 k→j 的关系做线性变换(g 和 h),提取可用于推算 i↔j 的信息。
    g,h=Linear(⋅)g, h = \text{Linear}( \cdot )
  4. 逐元素乘加(⊙ 和 Σ)把两条边的信息逐位相乘再求和,相当于对每个中间人 k 投一票,最后合计所有票数,作为 z_ij 的修正量。
    ∑kg(zik)⊙h(zkj)\sum_{k} g(\mathbf{z}_{ik}) \odot h(\mathbf{z}_{kj})

信息交换

拼图工作坊最精彩的部分来了——草稿册和关系卡不是各说各话,而是每轮讨论都要互换情报。Evoformer 的每一层都包含两个方向的交流。第一个方向是 MSA → pair,叫作外积均值(outer product mean):从 MSA 中提取残基间的共进化信号,写入关系卡。具体做法是:把每条序列在位点 i 的特征和位点 j 的特征做外积,然后对所有序列求平均。如果许多草稿都显示 i 和 j 有联动,外积平均后的数值就会很强,这笔信息就被记入 z_ij。这相当于拼图师们在讨论中反复提到“17 号和 42 号总是一起变动”,主持人就把这条情报记进关系卡。

第二个方向是 Pair → MSA,叫作行投影:把关系卡中关于位点 i 与其他所有位点的关系压缩成一条向量,加回 MSA 的第 i 列特征上。这相当于主持人把关系卡的最新结论广播给所有拼图师:“注意,17 号的位置可能紧挨着 42 号,你们各自调整自己的方案。”经过双向交换,两条信息流越拧越紧——草稿引导关系卡的生成,关系卡反过来约束草稿的解读。

这样的循环要重复 48 次。每一层都是“草稿更新 → 关系卡更新 → 双向交换”的完整流程,其中穿插残差连接让梯度顺畅回流。如果把整个 Evoformer 比作一场持续整天的拼图马拉松,那么每层都是一轮小组讨论,最后的 pair representation 已经沉淀了整场讨论的所有共识。

这场双向广播的意义在于:MSA 保留了每条序列的完整信息,pair 浓缩了全局关系,两者各自精炼、又互相纠偏。48 层循环结束后,拼图师们的草稿高度一致,关系卡变得既稠密又自洽——一张几乎完美的拼图蓝图已经诞生在特征空间里。

zij←zij+1Ns∑s=1NsLinear(msi)⋅Linear(msj)⊤\mathbf{z}_{ij} \leftarrow \mathbf{z}_{ij} + \frac{1}{N_s} \sum_{s=1}^{N_s} \text{Linear}(\mathbf{m}_{si}) \cdot \text{Linear}(\mathbf{m}_{sj})^{\top}
这是外积均值的核心公式:把所有拼图师(序列)在 i、j 两个位点上的特征向量做“乘积投票”,再取平均,得到对这两块碎片关系的一个证据汇总,叠加进关系卡。
  1. m_si 与 m_sj两张选票:第 s 位拼图师在位点 i 和位点 j 上的特征向量。先经过线性变换,提炼成可比的“选票”。
    as=Linear(msi),bs=Linear(msj)\mathbf{a}_{s} = \text{Linear}(\mathbf{m}_{si}), \quad \mathbf{b}_{s} = \text{Linear}(\mathbf{m}_{sj})
  2. 外积投票的强度:a_s 与 b_s 的外积形成一个 d×d 矩阵,捕捉这两个位点在所有特征维度上的联动模式。单一票可能很弱,但许多票一致时,模式就会凸显。
    as⊗bs=asbs⊤\mathbf{a}_s \otimes \mathbf{b}_s = \mathbf{a}_s \mathbf{b}_s^{\top}
  3. 对 N_s 求平均共识提炼:把所有序列的投票取平均,过滤掉个别草稿的噪声,留下跨物种保守的共进化信号。
    1Ns∑sasbs⊤\frac{1}{N_s} \sum_{s} \mathbf{a}_s \mathbf{b}_s^{\top}
  4. 残差叠加写入关系卡:把提炼出的共识矩阵加到 z_ij 的当前值上,关系卡得到了 MSA 侧的更新输入。
    zij←zij+Δzij\mathbf{z}_{ij} \leftarrow \mathbf{z}_{ij} + \Delta \mathbf{z}_{ij}

结构模块

关系卡再完美,也只存在于抽象的“特征空间”里。最终,AlphaFold 需要一个结构模块(Structure Module),把关系卡翻译成实实在在的三维坐标。想象拼图讨论会进入尾声:主持人宣布“关系已定”,于是拼图师们开始把碎片真正摆到桌面上——但没人一次就能摆对。

结构模块采用了一个优雅的策略:让所有残基从“一团游离的气体”开始,通过 8 轮蒸馏器(Refinement)循环逐步凝聚成精确结构。每一轮中,每个残基都带着自己的局部坐标系(一个框架:原点到 Cα 原子,坐标轴由该残基的旋转矩阵确定),通过不变点注意力(Invariant Point Attention, IPA)互相传递位置信息,然后预测一个位移更新。整个过程是迭代的:第 t 轮的坐标加上一个预测的 delta,得到第 t+1 轮的坐标。就像蒙着眼睛的拼图师们,每轮根据关系卡的感觉挪动一点碎片,越挪越准。

不变点注意力的巧妙之处在于:注意力分数和输出更新都只依赖残基间的相对位置(距离和方向),并且对整体坐标旋转平移完全兼容。这意味着无论你把这个“气体团”整体翻转、挪动,蒸馏器给出的相对位移模式都不变——网络学到的知识是纯粹的几何关系,而不是某个绝对坐标系下的模板。

回到拼图工作坊的场景:蒸馏器就是主持人最后的“微调口令”——“第 17 号碎片,你往左手边挪 3 埃;第 42 号,你面向 17 号转 15 度。”每轮口令都参考当前全局布局与关系卡,8 轮之后,一千个碎片严丝合缝地拼成了立体蛋白质。更妙的是,整个过程端到端可微,从序列进来到坐标出去,梯度一路畅通。

x(t+1)=x(t)+fIPA(h(t),z,{Ri(t),Ti(t)})\mathbf{x}^{(t+1)} = \mathbf{x}^{(t)} + f_{\text{IPA}}\left(\mathbf{h}^{(t)}, \mathbf{z}, \{\mathbf{R}_i^{(t)}, \mathbf{T}_i^{(t)}\}\right)
结构模块通过蒸馏器迭代更新所有残基坐标。每一步,不变点注意力读取残基特征、关系卡、当前骨架位置,输出一个位移量,让残基位置像气体凝聚一样逐步收敛到最终构象。
  1. x(t)当前坐标集合:第 t 轮所有残基的 Cα 原子坐标。初始时随机撒在空间中,像一团无序的气体分子。
    x(t)={x1(t),x2(t),…,xL(t)}\mathbf{x}^{(t)} = \{\mathbf{x}_1^{(t)}, \mathbf{x}_2^{(t)}, \dots, \mathbf{x}_L^{(t)}\}
  2. R_i、T_i第 i 个残基的框架:每个残基拥有一个旋转矩阵 R_i 和一个平移向量 T_i,定义了自己的局部坐标系。这是“拼图师手中的碎片朝向”。
    Framei=(Ri,Ti)\text{Frame}_i = (\mathbf{R}_i, \mathbf{T}_i)
  3. IPA不变点注意力:一种特殊的注意力机制,在计算时把查询、键、值全部变换到局部坐标系中,保证输出对整体旋转平移等变。它回答“在我自己的坐标系里,我应该朝哪个方向挪动”。
    IPA=∑jsoftmax(… ) f(xj−xi)\text{IPA} = \sum_j \text{softmax}(\dots) \, f(\mathbf{x}_j - \mathbf{x}_i)
  4. 迭代更新蒸馏器循环:每轮输出一个位移 Δx,坐标更新为 x + Δx。8 轮循环后,残基气体被“蒸馏”成清晰的三维骨架。
    x(t+1)=x(t)+Δx(t)\mathbf{x}^{(t+1)} = \mathbf{x}^{(t)} + \Delta \mathbf{x}^{(t)}

对比演进

站在 2020 年的时间点回望,Evoformer 与原始 AlphaFold 的差距堪称代际。AlphaFold1 的流程是先预测成对距离图(用 CNN 处理 MSA),再通过梯度下降把距离图“折叠”成坐标。这套两段式架构有一个天然的信息瓶颈:距离图是二维的,丢失了大量三维结构信息;且距离图预测错误时,后续重建阶段无法回头修正。

Evoformer 的突破是彻底的端到端设计:不再显式预测距离图,而是让 pair representation 动态演化,结构模块直接从演化后的关系卡生成坐标。这个“从二维投影到全三维”的转变,相当于把老工作坊里“先画交通图、再沿路开车”的流程,改成了“导航系统边开边更新路线”。老工作坊里,交通图画错了就满盘皆输;新工作坊里,关系卡和坐标互相校正,整个系统是柔性的。

CASP14 竞赛的成绩震惊了世界:AlphaFold2 在多数目标上达到了与实验解出的晶体结构相当的精度,GDT 中位数超过 90 分,而此前最好的方法通常在 70 分附近徘徊。这一跃升付出的代价同样惊人:训练需要 128 块 TPUv3 运行数周,单次预测也要消耗可观的计算资源,48 层 Evoformer 和多条注意力路径带来的显存压力很大。

回扣比喻:AlphaFold1 的老工作坊凭一张“粗估的距离图纸”拼图,而 Evoformer 工作坊中,拼图师(MSA)、关系卡(pair)与最终摆盘(结构模块)形成了连续反馈闭环。从 CASP14 之后,RNA 结构预测、蛋白质设计、突变效应预测等领域纷纷借鉴 Evoformer 的双流范式——它已经成了 AI for Science 中“从进化信息到空间结构”这套思维方法的代名词。

GDT=14(P1+P2+P4+P8)\text{GDT} = \frac{1}{4}\left( P_1 + P_2 + P_4 + P_8 \right)
GDT-TS 是结构预测评估的标准指标。P_d 表示预测结构与真实结构在以 d 埃为半径的误差范围内匹配一致的残基比例。GDT 越接近 100,说明预测越接近真实结构。
  1. P_d阈值匹配率:取四档严格程度不同的“及格线”——1Å、2Å、4Å、8Å。比如 P_2 表示有多少比例的 Cα 原子距离真实位置的误差小于 2 埃。
    Pd=误差<dA˚ 的残基数NP_d = \frac{\text{误差} < d\text{Å 的残基数}}{N}
  2. 四个阈值平均把四种标准的得分取平均,兼顾超高精度(1Å 严苛)与整体折叠正确性(8Å 宽松)。
    P1+P2+P4+P8P_1 + P_2 + P_4 + P_8
  3. 除以 4归一化:让 GDT 落在 0~100 区间,便于跨方法比较。AlphaFold2 中位数 > 90,意味着大多数残基预测误差在 1~2Å 以内。
    GDT∈[0,100]\text{GDT} \in [0, 100]

AI 应用场景

药物靶点结构解析

阶段:模型推理与结构预测

解决的问题:许多疾病相关蛋白难以结晶或体积太大,传统 X 射线晶体学与冷冻电镜耗时数月甚至数年。AI 可以在几分钟内给出高置信度的结构模型,加速药物靶点的初步评估。

具体案例:某制药公司研究团队锁定了与肿瘤转移相关的膜蛋白靶点,但长达一年未能获得晶体结构。他们用 AlphaFold2 的 Evoformer 流程预测出该蛋白的胞外域结构,并据此开展虚拟筛选,找到了一批候选小分子,随后用突变实验验证了结合位点,整个靶点发现周期压缩了 80%。

突变致病效应的结构解释

阶段:特征提取与可解释分析

解决的问题:基因测序发现的大量错义突变,哪些致病、哪些无害?传统方法只看序列保守性,忽略结构上下文。Evoformer 的 MSA 与 pair 表示提供了“这个突变是否破坏了局部三维环境”的判断依据。

具体案例:临床遗传学团队拿到一位罕见病患儿的全外显子测序结果,在一个已知基因上发现从未报道过的错义突变。团队调用 Evoformer 预测突变前后蛋白结构,发现该残基原本与底物通道的关键残基形成氢键网络,突变后通道塌陷。据此确定该突变很可能致病,辅助了临床诊断。

蛋白质从头设计的结构约束

阶段:生成模型与结构校验

解决的问题:设计一个具有特定功能的天然蛋白,需要确保设计序列能折叠成目标结构。Evoformer 的结构预测能力可作为设计流程中的“质量关卡”,验证每个设计候选是否真的折叠。

具体案例:酶工程团队想设计一个能降解 PET 塑料的新酶。他们用逆向折叠方法生成候选序列,再用 Evoformer 预测每个候选的三维结构,与目标骨架比对,筛选出折叠吻合度最高的序列做实验验证,最终获得了活性比野生型提升 3 倍的工程酶。

Python 演示

python54 行
# -*- coding: utf-8 -*-"""简化版 Evoformer 双流迭代演示"""import numpy as np S, L, D = 8, 10, 16   # 序列数、位点数、特征维度STEPS = 5 rng = np.random.default_rng(42)m = rng.normal(0, 0.1, (S, L, D))   # MSA 表示(拼图师草稿)z = rng.normal(0, 0.1, (L, L, D))   # pair 表示(碎片关系卡) def softmax(x, axis=-1):    e = np.exp(x - x.max(axis=axis, keepdims=True))    return e / e.sum(axis=axis, keepdims=True) def linear(x, out_dim=D):    w = rng.normal(0, 0.1, (x.shape[-1], out_dim))    b = rng.normal(0, 0.1, (out_dim,))    return x @ w + b def row_attention(m):    # 行注意力:序列内部残基互相关注    q, k, v = linear(m), linear(m), linear(m)    attn = softmax(q @ k.swapaxes(-1, -2) / np.sqrt(D))    return m + attn @ v def col_attention(m):    # 列注意力:同一位点跨序列聚合并换回原形状    mt = m.swapaxes(0, 1)    q, k, v = linear(mt), linear(mt), linear(mt)    attn = softmax(q @ k.swapaxes(-1, -2) / np.sqrt(D))    return m + (attn @ v).swapaxes(0, 1) def outer_product_mean(m):    # 外积均值:MSA -> pair 信息交换    a, b = linear(m), linear(m)    return a.swapaxes(0, 1) @ b      # (L, L, D) def triangle_update(z):    # 简化三角乘法:z_ij += sum_k z_ik 与 z_kj 的逐点乘积    za, zb = linear(z), linear(z)    return z + np.einsum('ikd,kjd->ijd', za, zb) for t in range(STEPS):    m = row_attention(m)    m = col_attention(m)    z = z + outer_product_mean(m) * 0.1   # 外积均值写入关系卡    z = triangle_update(z)                # 三角约束修正    z = z / (np.linalg.norm(z) + 1e-6)    # 稳定缩放    print("step", t + 1,          "| m norm:", round(float(np.linalg.norm(m)), 3),          "| z norm:", round(float(np.linalg.norm(z)), 3)) print("final pair mean:", round(float(np.mean(z)), 4))
目的:用纯 NumPy 实现一个微型 Evoformer 循环,演示 MSA 表示与 pair 表示如何交替更新、双向交换。每次迭代都能看到特征范数在逐步变化,说明信息在流动和精炼。
  1. m = rng.normal(0, 0.1, (S, L, D))用随机数初始化 MSA 张量,模拟尚未精炼的进化草稿。
  2. def row_attention(m):行方向的自注意力,让每条序列内部的残基互相交流信息。
  3. attn = softmax(q @ k.swapaxes(-1, -2) / np.sqrt(D))缩放点积注意力核心,除以 sqrt(D) 稳定 softmax。
  4. def col_attention(m):把张量转置后做注意力,实现跨序列的同位点对比。
  5. def outer_product_mean(m):返回 (L, L, D) 的矩阵,正是 MSA 向 pair 写情报的通道。
  6. def triangle_update(z):用 einsum 实现“第三方残基”的几何约束更新,对应三角乘法。
  7. z = z + outer_product_mean(m) * 0.1乘 0.1 控更新步长,模拟 PyTorch 中的层缩放。
  8. np.linalg.norm(z)监控特征范数,确认每轮信息在正常流动而非发散。

常见误区

误区Evoformer 无非是把 Transformer 加大加深,用更多层数和注意力头数堆出来的模型,原理上没有新鲜事。

正解Evoformer 与标准 Transformer 有本质区别。它同时维护两条信息流(MSA 与 pair),并设计了标准 Transformer 没有的三角乘法更新、外积均值、行投影等专用模块。这些模块不是为了“更大”,而是为了编码蛋白质特有的几何约束(三角不等式)与进化信号。把 Evoformer 理解为“Transformer 的蛋白质专用变体”才准确。

为何常见:Evoformer 的代码确实大量复用注意力机制,看起来和 Transformer 一脉相承,于是容易忽略其独有的双流与三角模块的设计本质。

误区既然进化信息来自 MSA,那么序列数量越多越好,多多益善。

正解MSA 序列再多,如果都是从亲缘极近的物种来的,信息冗余度极高,几乎不增加新信号。AlphaFold 还专门设计了 MSA 聚类与采样策略,限制每个 cluster 的序列数,让模型看到更多样化的进化信息。序列数量超过一万后收益急剧递减,显存占用量却线性上升,因此实践中会做截断。

为何常见:直觉上“样本越多统计越准”,忽略了同源序列之间并非独立同分布采样,冗余才是常态。

误区pair 表示无非是给残基对加一个“相对位置”的编码,和 Transformer 里的 positional encoding 属于同类东西。

正解两者层次完全不同。位置编码是静态的、一开始就固定好的;pair representation 是动态演化的高级特征——它从 MSA 与序列特征中初始化,经过 48 层三角更新与信息交换精炼,逐步蕴含距离、朝向、氢键等丰富的几何语义。位置编码只是它初始输入中的一小部分先验。

为何常见:公式里 z 和 positional encoding 都是加到特征上的“额外项”,初学者容易把两者画等号,忽视了 z 的深度演化过程。

误区Evoformer 输出特征后,模型直接通过一个全连接层预测每个原子的最终坐标。

正解坐标是结构模块中 8 轮蒸馏器循环逐步迭代出来的,不是一步回归。每轮只预测一个残基位移量,还要配合局部坐标系(框架)和不变点注意力,且最终坐标由多个蒸馏器循环加权平均生成。这种迭代精炼让模型能够从“气体团”逐步收敛,而不是贸然一步跳到终点。

为何常见:对外介绍时“从序列直接预测结构”的说法广为流传,让听众误以为坐标是一步生成的,忽略了内部的迭代求解过程。

面试题

Q1. Evoformer 中维护的两条核心信息流分别是什么?

单选题 · easy

  • A.训练流与推理流
  • B.MSA 表示与 pair 表示← 正确答案
  • C.行表示与列表示
  • D.序列表示与结构表示

答案:B。Evoformer 的核心是双流架构:m 承担 MSA 信息(拼图师草稿),z 承担残基对信息(碎片关系卡)。行/列只是注意力方向,不是独立的信息流。

Q2. MSA 矩阵中的“列”对应什么生物学含义?

单选题 · easy

  • A.一条完整的蛋白质序列
  • B.一个物种的遗传信息
  • C.同一个位点在不同同源序列中的残基← 正确答案
  • D.一段基因启动子区域

答案:C。MSA 把同源序列按位点对齐,每行是一条序列,每列是所有序列在同一个位点上的氨基酸选择。列方向的统计模式正是共进化信号来源。

Q3. 行注意力与列注意力的主要区别是什么?

单选题 · mid

  • A.前者用 softmax,后者用 sigmoid
  • B.行注意力在序列内聚合残基,列注意力跨序列聚合同位点← 正确答案
  • C.行注意力用于 pair,列注意力用于 MSA
  • D.两者完全相同,只是名字不同

答案:B。行注意力在 L 维上操作,提取序列内部的残基关联;列注意力在 S 维上操作,提取跨序列的共进化信息。两者共用同一套注意力公式,但聚合维度不同。

Q4. 三角乘法更新在 Evoformer 中的作用是什么?

单选题 · mid

  • A.加速 GPU 上的矩阵运算
  • B.让关系对的更新尊重三角几何约束← 正确答案
  • C.将注意力头数压缩到三个
  • D.把 MSA 转置成 pair 表示

答案:B。更新 z_ij 时参考所有第三方 k 的 z_ik 与 z_kj,正是用“三角形两边推第三边”的几何观念约束关系演进。这样关系卡才不会产生三维空间里不可能的矛盾。

Q5. 外积均值(outer product mean)的输入与输出是什么?

多选题 · mid

  • A.输入是 MSA 表示← 正确答案
  • B.输出是更新的 pair 表示← 正确答案
  • C.输入是残基的三维坐标
  • D.输出是注意力权重矩阵

答案:AB。外积均值把 MSA 特征在位点 i、j 上的向量做外积再对序列求平均,得到共进化证据写入 z_ij。它的输入是 m,输出是对 z 的更新增量。

Q6. 结构模块中蒸馏器迭代的初始状态是什么?

单选题 · hard

  • A.完全随机的三维坐标
  • B.所有残基共用一个固定的中心框架
  • C.全部残基位于零坐标的原点← 正确答案
  • D.由 pair 表示直接解算的位置

答案:C。结构模块让所有残基从“一个点”出发——所有框架的坐标初始化为同一原点附近,类似一团无序气体,然后通过 8 轮蒸馏器逐步散开收敛到真实构象。

Q7. 关于不变点注意力(IPA)的说法,正确的是?

多选题 · hard

  • A.对蛋白质整体旋转平移具有等变性← 正确答案
  • B.直接回归每个残基的绝对世界坐标
  • C.在局部坐标系中计算注意力分数← 正确答案
  • D.与 Evoformer 的三角更新无关

答案:AC。IPA 在残基本地坐标系中做注意力与位移预测,整体旋转平移时输出模式不变,这才是“不变点”的由来。它独立于 Evoformer 的三角更新,属于结构模块的组件。

Q8. AlphaFold1 的主要局限是什么?

单选题 · mid

  • A.模型参数量太小无法拟合
  • B.距离图预测与坐标重建两阶段存在信息瓶颈← 正确答案
  • C.输入序列长度必须小于一百
  • D.只能预测小蛋白质

答案:B。AlphaFold1 先预测二维距离图再用梯度下降重建坐标,距离图丢失三维信息且错误无法在后续修正。Evoformer 的端到端双流设计从根本上绕开了这个瓶颈。

Q9. MSA 中的同源序列通常来源于哪里?

单选题 · easy

  • A.随机数生成器
  • B.数据库搜索到的天然同源蛋白序列← 正确答案
  • C.人工设计的氨基酸序列
  • D.蛋白质晶体结构直接翻译

答案:B。MSA 通过在序列数据库(如 UniProt)中搜索与目标序列同源的天然蛋白序列,再做多序列比对得到。本质是收集进化中自然发生的序列变异。

Q10. Evoformer 相比原始 AlphaFold 的进步体现在哪些方面?

多选题 · mid

  • A.用注意力机制替代 CNN 的小感受野限制← 正确答案
  • B.双流表示持续交换精炼信息← 正确答案
  • C.完全不需要进化信息
  • D.端到端预测三维坐标← 正确答案

答案:ABD。Evoformer 的 MSA 注意力解决了 CNN 感受野有限的问题,MSA 与 pair 双向交换让信息持续精炼,结构模块则直接输出坐标。但 MSA 进化信息仍是核心输入,“不需要进化信息”描述错误。