拓冰建站拓冰建站
首页 / 资讯中心 / 正文

AlphaFold pLDDT 与 PAE 一次讲清:怎么算、怎么读、什么时候会打架

AlphaFold pLDDT 与 PAE 一次讲清怎么算、怎么读、什么时候会打架【免费下载链接】alphafoldOpen source code for AlphaFold 2.项目地址: https://gitcode.com/GitHub_Trending/al/alphafold你刚用 AlphaFold 跑完一条序列拿到一组 ranked 模型但把它塞进分子对接或论文图之前有个绕不开的问题这个结构哪里能信、哪里不能信仓库很贴心地在结果里附了两套自评分数pLDDT 给每个残基打一个 0-100 的置信度PAE 给每对残基一个以 Å 为单位的预期距离误差。真正的难点不在单独读懂其中一个而在两者指向不一致的时候——pLDDT 说靠谱PAE 却显示某个结构域的取向一团糟。下面以仓库里的实际代码为准把这两个数字怎么算出来的、怎么读、在哪里容易打架讲清楚。为什么 pLDDT 和 PAE 要一起看它们各描述什么先说结论pLDDT 高不等于结构一定对但 pLDDT 低几乎总是一个值得留意的信号。pLDDT 是长度为 N 的向量回答每个残基的局部折叠质量有多可靠——它只看 Cα 原子在约 15 Å 邻域内的位置这一点直接写在训练代码里。PAE 是 N×N 矩阵回答任意两个残基的相对取向有多可靠。打个比方拍一组楼群的全景照片pLDDT 是每栋楼本身的清晰度PAE 是楼与楼之间相对摆位拍对没有。每栋楼都很清晰但两栋楼摆反了位置整张照片照样没法用——这种情况 pLDDT 会很高PAE 的非对角块却很高。两者互补的来源是pLDDT 是模型对自身局部误差的自检PAE 是跨残基的互检。高 pLDDT 低 PAE基本可以放心用高 pLDDT 高 PAE说明局部对但相对取向存疑多结构域蛋白和复合物里最常见某段 pLDDT 低说明那段自身不确定对应的 PAE 行/列通常也偏高。顺带提第三个数字pTM 是一个标量由同一套 PAE logits 算出来见 confidence.py 中的predicted_tm_score用来判断整个骨架/结构域堆积的大方向对不对比平均 pLDDT 更适合当全局指标。pLDDT 与 PAE 怎么算从 logits 到 0-100 和 0-31 ÅpLDDT一个 50 分的期望值这个数字不是回归出来的而是概率加权期望。PredictedLDDTHeadmodules.py 约 1026 行拿结构模块输出的逐残基表示过 LayerNorm 和两层 128 通道的 ReLU MLP输出 50 个 logits——也就是这个残基的局部质量落在哪个分数段的未归一化得分num_bins: 50见 config.py。推理阶段做的事非常短不需要逐行理解知道softmax 之后按桶中心加权即可# 对应 alphafold/common/confidence.py 的 compute_plddt逻辑一致 num_bins logits.shape[-1] # 50 width 1.0 / num_bins # 桶宽 0.02 centers np.arange(0.5 * width, 1.0, width) # 桶中心 0.01, 0.03, ..., 0.99 probs scipy.special.softmax(logits, axis-1) plddt np.sum(probs * centers, axis-1) * 100写成公式就是$$\text{pLDDT}i 100 \cdot \sum{k1}^{50} p_{ik}, c_k$$其中 $p_{ik}$ 是第 $i$ 个残基落在第 $k$ 个分桶的概率$c_k(2k-1)/100$ 是第 $k$ 个桶的中心。所以 pLDDT 本质上是模型预测自己在 LDDT-Ca 这个局部误差尺度上会得几分。训练时这个头就是用真实结构算出的 lDDT-Cacutoff 15 Å分桶成 one-hot 后做交叉熵监督的——模型在预测自己的误差这件事上是被显式教过的。算出的分数再按固定阈值切成四档_confidence_category给出的字母 D/L/M/H 就是confidence_*.json里confidenceCategory字段的内容档位字母分数范围官方配色习惯通常含义非常低D0-50橙色大概率无序/柔性区低L50-70黄色拓扑可信细节存疑中M70-90青色主干可信高H90-100蓝色接近原子级精度PAE把期望的对象换成残基对计算流程与 pLDDT 同构区别只有两点期望对象从单个残基变成残基对分桶单位从比例变成 Å。默认配置里 PAE 头用 64 个桶桶宽 0.5 Å桶边界从 0 排到 31 Å最后一个桶是兜底的 [31 Å, ∞)config.py 中max_error_bin: 31.0, num_bins: 64旁的注释写得很直白。代码同样很短# 对应 confidence.py 的 _calculate_bin_centers / _calculate_expected_aligned_error probs scipy.special.softmax(logits, axis-1) # [N_res, N_res, 64] step breaks[1] - breaks[0] # 桶宽 0.5 Å centers breaks step / 2 # 桶中心 centers np.concatenate([centers, [centers[-1] step]]) # 末尾兜底桶 pae np.sum(probs * centers, axis-1) # [N_res, N_res]$$\text{PAE}{ij} \sum{k} p_{ijk}, c_k$$$p_{ijk}$ 是残基对 (i, j) 的对齐误差落在第 $k$ 桶的概率$c_k$ 是该桶中心的 Å 值返回的max_predicted_aligned_error取最后一个桶的中心充当色标上限。读法上最关键的一个词是aligned它不是两个残基距离的绝对误差而是把预测结构和真实结构做最优叠加之后这对残基的相对位置还会差多少。所以 PAE 矩阵读的是块——对角块看局部质量非对角块看两个结构域/两条链之间的取向可信度它不是距离图距离分布是另一个头 distogram 的事。一个隐藏差异一个被显式训练一个不是默认配置里predicted_lddt头的损失权重是 0.01predicted_aligned_error头的权重是 0.0experimentally_resolved头是 0.01。也就是说pLDDT 有明确的监督信号PAE 头在默认配置下没有直接损失它的感觉是网络学其他目标时顺带长出来的。pTM 则复用 PAE 的 logits再对每个误差桶套上 TM-score 核 $1/(1(d/d_0)^2)$、并用 experimentally_resolved 头的输出当残基权重做期望interfaceTrue时只统计跨链残基对得到 ipTM。两个数字的出身不同所以它们偶尔打架是结构性的不是你跑错了。pLDDT 与 PAE 打架时怎么判断拿到 ranked_0 之后推荐的检查顺序是固定的下面这张流程图可以直接贴在工位上展开成条件句就是如果 pLDDT 普遍高于 70 且 PAE 对角块低直接用pLDDT 的 D/L/M/H 档位可以标注进论文方法部分。如果 pLDDT 高但 PAE 非对角块高局部折叠没问题结构域间取向不可靠——对接、复合物建模前先用 pTM/ipTM 复核界面别把每段都对当成摆位也对。如果 pTM 偏低经验阈值 0.5以你项目的实际分布为准而 pLDDT 尚可整体拓扑或堆积有问题此时 pLDDT 给你的高置信是假象回查 MSA 覆盖和模板重跑。如果只有局部 pLDDT 低、对应 PAE 行/列也高、但其余区块都干净多半是真实的柔性/无序片段保留它而不是当模型错误删掉。场景pLDDTPAE 非对角pTM解读标准高置信普遍高低高直接使用局部对、摆位不确定高高中谨慎用于对接/复合物整体可疑低高低回查 MSA/模板并重跑柔性段稳定核心局部低局部高高核心区照用低段按无序处理pLDDT 与 PAE 的四个常见误读这四个坑仓库文档和代码里都有迹可循但很容易在下游软件里踩中。现象容易犯的错误正确理解⚠️ PDB 的 B-factor 列有数值直接当 B-factor 拿去分子替换那是 pLDDT越大越好与物理 B-factor 方向相反README 专门警告过这点某段 pLDDT 低于 50当成模型算错了直接删残基模型在告诉你这段没有固定构象低置信本身就是有用的生物学信息只有 PAE 同步异常才怀疑预测本身PAE 某个格子数值很大读成这两个残基距离差了这么多 Å它是最优叠加后的残余误差用来判断两个结构域/链的相对取向可信度不是距离值有 ranked_0 到 ranked_4 共 5 个模型把 5 个 pLDDT 平均当共识置信度ranked_0 只是 pLDDT 最高的那个其余是不同随机种子的独立预测不是置信区间以选中模型的逐残基 pLDDT PAE 为准补充一句边界以上阈值70、0.5 等是解读习惯仓库代码里并没有硬编码这些合格线D/L/M/H 四档和 50/70/90 的切分是仅有的官方定义。10 分钟跑起来从现成的 AlphaFold 结果读置信度完整管线要下几个 TB 的数据库、还要 GPU10 分钟搞不定但如果你手里已经有一个输出目录自己跑过run_alphafold.py或从数据库下载的结果集读置信度指标在笔记本上就能完成。缺代码的话先git clone https://gitcode.com/GitHub_Trending/al/alphafold第一步看输出目录里有哪些文件文件名以实际输出为准ls results_dir # ranking_debug.json confidence_model_1.json pae_model_1.json # result_model_1.pkl ranked_0.pdb relaxed_model_1.pdb ...第二步用 Python 把 pkl 里的三个核心数字打出来——这段代码就是把三个指标读出来不需要理解内部实现import pickle, numpy as np with open(result_model_1.pkl, rb) as f: out pickle.load(f) plddt out[plddt] # [N_res]0~100 pae out[predicted_aligned_error] # [N_res, N_res] off pae[~np.eye(pae.shape[0], dtypebool)] print(fpLDDT mean {plddt.mean():.1f}, min {plddt.min():.1f}) print(fPAE off-diag mean {off.mean():.1f} A, max {pae.max():.1f} A) print(ptm:, out.get(ptm)) # 仅 pTM 模型有此字段第三步交叉核对confidence_*.json给出逐残基的分数与 D/L/M/H 档位pae_*.json给出完整 PAE 矩阵和max_predicted_aligned_error再看一眼ranked_0.pdb的 B-factor 列那列就是 pLDDT。第四步可选如果你有各头的 logits 输出result pkl 中存有 distogram 等头输出pLDDT/PAE 的 logits 是否在场以仓库实际输出为准可以调用 confidence.py 里的compute_plddt和compute_predicted_aligned_error把上面两个数字从零复算一遍验证理解。一句话总结AlphaFold 置信度指标该怎么读 延伸阅读pLDDT 告诉你哪些残基的局部折叠可信PAE 告诉你哪些结构域的相对摆位可信pTM 再把这两者压成一个全局拓扑对不对的标量。读数顺序永远是先看 pLDDT 切掉肯定不靠谱的部分再用 PAE 的非对角块决定相对取向能信到几 Å两者冲突时听更保守的那个。想继续深挖三个入口都在这份代码里alphafold/common/confidence.py不到 250 行pLDDT、PAE、pTM 的计算与 JSON 序列化全在这里值得逐行读一遍。alphafold/model/modules.py 中的PredictedLDDTHead约 1026 行与PredictedAlignedErrorHead约 1130 行以及它们的loss方法——能直接看出谁有监督、谁没有。docs/technical_note_v2.3.0.mdv2.3.0 的模型与推理流程说明置信度指标的方法学出处则是 Jumper et al. 2021Nature论文的补充方法 1.9.6 节。【免费下载链接】alphafoldOpen source code for AlphaFold 2.项目地址: https://gitcode.com/GitHub_Trending/al/alphafold创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门