第2章:AlphaFold整体架构与流程梳理
咱们先不急着调参数,得先把AlphaFold这个大家伙的骨架摸清楚。我刚开始接触这个模型的时候,也被它那复杂的流程图搞得有点懵。说白了,AlphaFold本质上是一个从序列到结构的端到端翻译器,只不过中间塞了好几个精妙的设计。
2.1 从输入到输出的一条主线
AlphaFold的输入很简单,就是一个蛋白质的氨基酸序列。但输出呢,是一个包含所有重原子三维坐标的PDB文件。你想想看,中间这过程得有多复杂。
这张图是我画了好几个版本才定下来的核心流程。你重点关注中间的特征加工流水线,那是我们调优的主战场。
2.2 输入特征的三个来源
AlphaFold的输入可不是简单的一条序列。它需要从三个维度构建特征:
| 特征来源 | 描述 | 特征维度 | 我的调优经验 |
|---|---|---|---|
| MSA(多序列比对) | 同源序列的进化信息 | N_seq × N_res × 22 | 这里我吃过亏,序列数太少模型会不稳定 |
| 模板结构 | 已知同源蛋白的三维结构 | N_res × N_res × 37 | 模板质量比数量更重要 |
| 序列特征 | 目标序列的理化属性 | N_res × 21 | 这部分我一般不动,除非特殊任务 |
核心要点:特征调优的本质,就是在这些原始特征进入Evoformer之前,通过清洗、增强、加权等手段,让信息更干净、更聚焦。
2.3 数据预处理:特征工程的主战场
原始特征拿过来是不能直接用的。AlphaFold做了一系列预处理操作,我个人觉得这是整个流程中最值得优化的环节。
MSA构建的具体步骤:
- 序列搜索:用HHblits或Jackhmmer在大型数据库里找同源序列。
- 配对与去重:去除冗余序列,保留多样性。我曾经遇到过一个案例,数据库里90%的序列都来自同一个物种,结果模型预测的偏好性特别强。
- 特征编码:把比对结果转成one-hot编码和profile矩阵。
模板搜索与处理:
- 结构搜索:用HHSearch在PDB里找结构相似的同源蛋白。
- 配准对齐:把模板结构映射到目标序列上。
- 距离矩阵提取:计算模板中Cα原子之间的距离,作为结构先验。
技巧分享:我在调试MPNN相关任务时发现,模板截断阈值(默认是30%序列一致性)对预测精度影响很大。遇到全新折叠的蛋白质,我建议把模板权重调低甚至关掉。
2.4 Evoformer模块:特征深度融合
Evoformer是整个模型的发动机。它由48个相同的blocks堆叠而成,每个block干两件事:
- 配对特征更新:用一个三角形自注意力机制,强化残基对之间的空间关系。
- MSA特征更新:用轴向注意力机制,同时捕获序列维度和残基维度的信息。
这两个特征流是双向交互的,说白了就是一个互相喂信息的过程。MSA特征告诉配对特征哪些残基是保守的,配对特征又反过来告诉MSA特征哪些残基可能在空间上靠近。
注意避坑:我见过有人试图直接修改Evoformer内部的注意力头数或层数来提升精度。说实话,这很容易翻车。我更建议你先从输入特征的质量入手,那才是源头。
2.5 结构模块:从特征到坐标的跳跃
Evoformer输出的特征经过结构模块,才真正变成三维坐标。这个模块的核心是迭代IPA机制(Invariant Point Attention)。
IPA的有趣之处在于它做预测时是保持旋转平移不变性的。你想想看,不管你把输入蛋白质怎么旋转,模型内部的计算结果不应该变。这个性质的实现,靠的是在注意力计算中引入了距离和方向信息。
结构模块会循环精炼8次,每次生成一个局部的残基框架,然后逐步构建出完整的骨架。嗯,这里要注意,循环次数是可以在配置文件中调整的,但我建议新手先别动它。
2.6 损失函数:指导模型学习的信号
AlphaFold的训练损失很有意思,它包含了好几个分量:
| 损失项 | 作用 | 权重 |
|---|---|---|
| FAPE损失 | 主链Cα坐标的对齐误差 | 0.5 |
| 距离损失 | 残基对距离图的预测误差 | 0.3 |
| 夹角损失 | 二面角的预测误差 | 0.1 |
| 结构流失 | 辅助的结构约束项 | 0.1 |
这些损失项在训练时是加在一起的,但调优的时候我建议你分开看。我遇到过的情况是,某个特征改动让FAPE损失降了,但距离损失反而升了,这时候就需要权衡了。
2.7 特征调优的切入点总结
通过这章对整体流程的梳理,你应该能看出特征调优的切入点了:
- MSA特征:调整序列搜索的e-value阈值、增加/减少同源序列数量、使用不同的数据库。
- 模板特征:控制模板数量、设定模板质量阈值、甚至完全禁用模板。
- 序列特征:很少改动,主要看是否需要加入额外的理化属性。