2. AlphaFold2 原理简介:架构、输入输出、置信度指标

大家好,我是你们这堂课的讲师。说到AlphaFold2,很多同学可能觉得它是个“黑盒子”,序列进去,结构出来。其实它的内部设计相当精妙。我当年第一次跑AlphaFold2的时候,说实话,看着那一堆输出文件和指标,也有点懵。后来用多了,才慢慢摸清它的脾气。

这一节,我带大家快速过一遍AlphaFold2的核心原理。你不会听到冗长的数学推导,重点是理解它的 架构骨架、输入输出长什么样,以及我们做域间距离分析时最关心的两个指标——pLDDT 和 PAE。

2.1 整体架构:不是端到端,而是“两块砖”

AlphaFold2不只是一个神经网络,它由两个核心模块串联而成:Evoformer 和 结构模块。

  • Evoformer:负责“理解”蛋白质。它把多序列比对信息和模板信息揉在一起,通过深层的Transformer,不断精化每一对残基的表征。说白了,它是在脑子里构建一个关系图谱——残基i和残基j之间有什么关系,距离远不远,有没有相互作用。
  • 结构模块:负责“折叠”蛋白质。它拿到Evoformer提供的精细表征后,直接输出每个残基的骨架坐标和侧链角度。这个模块用了 IPA(Invariant Point Attention) 机制,确保预测对旋转和平移是结构不变的。你想想看,分子在三维空间里随便转,它都能认出来。

我个人觉得,这个分工非常清晰:一个做推理,一个做构造。我在项目中调试的时候,经常把Evoformer的输出拿出来看看,能发现很多MSA噪声导致的问题。

核心流程:输入序列 → Evoformer(表征学习) → 结构模块(坐标生成) → 输出PDB文件 + 置信度指标。
AlphaFold2 核心架构流程(简化版) 输入序列 + MSA + 模板 Evoformer 残基对表征 结构模块 IPA + 坐标生成 PDB 结构 + 置信度 pLDDT(局部) 每个残基的局部置信度 值越高,结构越可信 PAE(残基对) 预测每对残基间的距离误差 评估域间相对位置的可靠性 循环回收:结构模块的输出会反馈给Evoformer,迭代精化 信息回收
一个小技巧:分析PAE矩阵时,如果域间PAE值普遍较低,说明Evoformer对这两个域之间的相对位置信心很足。如果PAE很高,即使pLDDT都很好,域间位置也要打个问号。这个判断在我做多域蛋白建模时救过我好几次。

2.2 输入与输出:你给什么,它吐什么

输入其实有三个部分,缺一不可:

  • 目标序列:就是你想要预测结构的那个蛋白的氨基酸序列,FASTA格式。
  • 多序列比对(MSA):通过同源序列检索(比如MMseqs2)得到的。MSA的质量直接决定了预测的上限。我曾经遇到过MSA里混进大量同源性很差的片段,结果预测的结构一塌糊涂。
  • 模板结构:从PDB库里找的同源结构。AlphaFold2对模板的依赖其实比大家想象的要小,但遇到全新的折叠类型时,模板还是能给一个不错的初始参考。

输出比较丰富,其中最核心的是:

输出文件 内容 对我们课程的意义
ranked_0.pdb 最优模型的原子坐标 直接可视化的基础
result_model_0.pkl 完整推理结果,包括所有中间层 提取PAE矩阵和pLDDT的源头
confidence_0.json 摘要置信度指标 快速查看pLDDT、pTM等

嗯,这里要注意。如果你只拿到了PDB文件,想直接分析PAE是做不到的。PAE矩阵藏在.pkl文件里。我习惯用Python的pickle模块手动加载它,然后掏出PAE矩阵。

import pickle

# 加载AlphaFold2输出的.pkl文件
with open('result_model_0.pkl', 'rb') as f:
    data = pickle.load(f)

# 提取PAE矩阵,形状为 [N_res, N_res]
pae_matrix = data['pae']

# pLDDT是每个残基的1维数组
plddt = data['plddt']

print(f"PAE矩阵形状: {pae_matrix.shape}")
print(f"前5个残基的pLDDT: {plddt[:5]}")
避坑指南:我曾经在加载.pkl文件时遇到版本兼容问题(Python版本不同)。建议在运行AlphaFold2的同一个Python环境里做后处理。另外,pae和plddt的单位不同——pAE是埃(Å),代表距离误差;pLDDT是0-100的分数。

2.3 置信度指标:pLDDT vs PAE

这两个指标我们会在后续课程里反复用到。这里先做一个概览。

pLDDT(每个残基的局部置信度):来源于AlphaFold2对每个残基的IDDT-Cα评分预测。说白了,它告诉你“这个残基周围的局部结构我猜得有多准”。

  • pLDDT > 90:高度可信,侧链都基本可信。
  • 70 < pLDDT ≤ 90:骨架基本可信,但侧链可能不准。
  • 50 < pLDDT ≤ 70:无序区域或灵活性大的环区,骨架也不太可靠。
  • pLDDT ≤ 50:基本上是不可信区域,往往对应天然无序区。

PAE(残基对之间的距离误差):这个厉害了。它是一个N×N的矩阵,元素PAE[i][j]表示“如果我把残基i和残基j对齐,它们在预测结构中位置误差的期望值(单位是埃)”。

  • 小PAE值(比如<5Å):表示这两个残基之间的相对位置非常可信。
  • 大PAE值(比如>10Å):表示模型对这两个残基的相对位置把握不大。
  • 在分析域间距离时,我们特别关注PAE[domain_A][domain_B]这个区域块。如果整块都是绿色(低PAE),说明两个域的界面预测很可靠。
简单对比:pLDDT是“自我评价”——单个残基做得怎么样;PAE是“相对评价”——两个残基之间的关系猜得怎么样。做域间分析,PAE才是你真正的朋友。

我个人习惯是先看pLDDT,排除掉那些明显无序的低置信度区域,然后用PAE矩阵去界定哪些域之间是紧密关联的,哪些是相对独立的。你想想看,如果一个域内部的pLDDT都很高,但域间的PAE很大,那大概率是两个柔性连接的独立结构域。这个信号在后续的域切割和工作流里特别重要。