特征工程总览:输入特征与输出目标

在做AlphaFold特征调优之前,我们得先搞清楚一个问题:模型到底在看什么数据?

说白了,特征工程就是把乱七八糟的生物数据,转化成模型能理解的语言。你给它什么,它就学什么。你给它垃圾,它只能给你垃圾。

我个人习惯把特征工程比作「翻译官」:把氨基酸序列、进化信息、模板结构这些生物信息,翻译成机器能用的张量。

AlphaFold的输入特征

我刚开始接触AlphaFold时,面对那么多输入文件也是一脸懵。后来慢慢理清楚了,其实核心就三大类:

1. 序列特征:MSA(多序列比对)

MSA是AlphaFold的命根子。没有好的MSA,预测质量直接崩盘。

MSA里到底装了什么?

  • 目标序列
  • 同源序列(来自不同物种的亲戚)
  • 每个位置的进化保守性
  • 共进化信息(比如两个位置要一起变)

嗯,这块我踩过不少坑。一开始以为MSA越多越好,结果堆了10万条序列进去,训练反而变差了。后来才明白,质量比数量重要得多。

2. 结构特征:模板结构

模板其实就是已知的三维结构。AlphaFold会拿它们当「参考书」看。

模板特征包括:

  1. 模板的原子坐标(.pdb文件里的xyz数据)
  2. 模板和目标序列的比对信息
  3. 模板的残基间距离

我在项目中遇到过一种情况:明明有很好的模板,预测结果却很差。查了半天发现,模板比对错了。这事特别容易发生在序列相似度低的时候。

3. 其他特征:别忘了这些细节

除了MSA和模板,还有些「小角色」也管用:

特征名称 描述 调优价值
残基索引 每个氨基酸在序列中的位置编号 低(一般不碰)
链标识 区分多聚体中的不同亚基 中等(多聚体必调)
额外特征 实验条件、物种信息等 低(多数项目不需要)

我的建议:多数情况下,集中精力调MSA就够了。模板处理也有讲究,但属于进阶操作。

输出目标:AlphaFold到底在预测什么?

很多人以为AlphaFold直接输出pdb文件。错。
它输出的其实是一堆「概率图」。

1. 距离预测

这是核心。模型会预测每对残基之间的距离分布。

比如:残基i和残基j,它们之间最可能距离是8Å还是15Å?

距离图的格式什么样?

# 假设我们有个2残基序列
# 输出是一个N*N的矩阵
# 每个位置是一个64维的概率分布向量

distogram = {
    "shape": [N, N, 64],
    "bins": [2.0, 2.5, 3.0, ..., 20.0],  # 64个距离区间
    "probabilities": [[0.01, 0.02, ..., 0.001], ...]  # 每个区间的概率
}

2. 角度预测

蛋白质不是直的,它会弯。模型会预测每个残基的主链二面角(φ和ψ)。

我刚开始学的时候,老搞不清楚二面角是什么意思。
简单说:它决定了蛋白质骨架的走向。

3. 主链扭转角

这个比二面角更细粒度。模型预测每个残基的主链扭转角θ和角旋转τ。

你想想看,如果连骨架的扭动方向都能猜对,那整体结构肯定不会差太多。

输入和输出的关系图

搞清楚了双方,我们就能画出这张核心流程图了:

AlphaFold 特征工程核心流程 原始序列 MSA构建 模板匹配 其他特征 特征工程处理(清洗 / 降噪 / 对齐 / 裁剪) 输入特征:MSA + 模板 + 其他 距离图 角度预测 扭转角预测

我曾经犯过的错:只顾着调MSA,忽略了模板质量。结果有一半的预测实际上是「对着错误模板瞎猜」的。现在我做项目,一定会先检查模板比对的可信度。

特征工程的具体操作

搞清楚了输入和输出,下一步就是怎么调了。我把它分成三个层次:

初级:直接调参数

最容易上手。比如:

# AlphaFold配置中的特征相关参数示例
"max_template_date": "2020-05-14",  # 只取这个日期前的模板
"num_recycle": 3,                   # 循环迭代次数
"model_preset": "monomer",          # 单聚体/多聚体模式

中级:剪裁MSA

你想想看,MSA里有几万条序列,但真正有用的可能只有几百条。怎么剪?

  • 按序列相似度过滤(太相似的去掉)
  • 按覆盖度过滤(覆盖太差的去掉)
  • 按进化距离过滤(太远的物种参考意义不大)

高级:自定义特征

到了这个级别,你就开始动代码了。比如:

# 伪代码示例:添加自定义距离约束
custom_features = {
    "contact_penalty": 5.0,      # 强制某两个残基必须靠近
    "distance_bounds": [         # 限制某对残基的距离范围
        (10, 20),                # 残基A-B必须在10-20Å之间
        (30, 40)                 # 残基C-D必须在30-40Å之间
    ]
}

个人经验:如果你不是在做某个特定靶点的高精度优化,不建议碰高级特征。默认配置在大多数情况下已经够用了。我曾经花了两周时间加了一堆自定义特征,结果pLDDT(置信度分数)反而降了3个点。

小总结

我习惯把这章讲的内容记成一张「检查清单」:

  1. 输入:序列、MSA、模板、其他
  2. 处理:清洗、对齐、剪裁、编码
  3. 输出:距离图、角度、扭转角

每次调参前,先对着清单过一遍。你会发现很多问题其实出在输入数据上,跟模型结构没关系。