总体流程图详解:图 A 是模型的整体流水线,从肽序列到预测标签的端到端流程:

  1. 输入 — Peptide Sequence(最上方彩色圆点)

    • 每个圆点代表一个氨基酸残基(例如 I、K、Q…)。

    • 序列长度记作 nnn(论文里统一截/填充为 L=40L=40L=40)。

  2. 预训练特征(左侧方块,ProtT5-XL-U50) — 黄色矩形

    • 把原始序列送入预训练蛋白语言模型(ProtT5-XL-U50)。

    • 输出每个残基的 上下文嵌入(embedding),图中标为 n×1024n \times 1024n×1024(每残基 1024 维)。

    • 目的是捕获残基在序列中的语义与全局上下文信息(类似 NLP 的词向量)。

  3. 手工/基础特征(中间上部,粉/褐色框)

    • one-hot(20维):每残基的 20 维独热表示,记 n×20n \times 20n×20。

    • physicochemical properties(14维):每残基 14 个理化量度,记 n×14n \times 14n×14。

    • 两者拼接后给出基础特征矩阵,合计 n×34n \times 34n×34。

  4. 特征融合(把两类特征合并)

    • 预训练 embedding(n×1024n \times 1024n×1024)与基础特征(n×34n \times 34n×34)合并/映射到同一维度 hhh(图中用橙色/绿色小圆块表示 n×hn \times hn×h)。

    • 合并后输入后续网络:左路(黄色→橙)和中路(粉/褐→绿)都变为 n×hn \times hn×h。

  5. Residual Dilated Convolution Block(紫色大框)

    • 中间流程先经过残差膨胀卷积模块,用来提取局部与中程模式(后面 B 详细解释)。

    • 该模块的输出也是 n×hn \times hn×h。

  6. Residual Transformer Block(蓝色大框)

    • 将卷积得到的局部表示(或融合后的表示)送入残差 Transformer 模块,提取全局依赖(后面 C 详解)。

    • Transformer 的输出仍是 n×hn \times hn×h。

  7. Average Pool(平均池化)

    • 对 n×hn \times hn×h 的序列表示做全局平均池化,得到固定长度向量 1×h1 \times h1×h(不随序列长度变化),便于分类器处理。

  8. Classification(分类器)

    • 平均池化后通过若干全连接层(MLP)输出二分类概率(抗炎 / 非抗炎)。

ProtT5 是这篇论文的核心“语义特征来源”

ProtT5 是一个基于 Transformer 的蛋白质语言模型(Protein Language Model)
Rostlab 团队(Heinzinger et al., 2021) 开发,用来“理解”氨基酸序列的语义结构。

传统 one-hot 或理化特征只看单个残基,无法理解上下文。(A图的one-hot)

(注意:ProtT5-XL-U50 是个很大的模型(约 3 B 参数),推荐使用 GPU ≥ 16 GB 显存

这里和前面复现的师哥的DeepBP中运用的ESM-2功能一样(能产出每个残基的向量表示(embedding))

One-hot 编码(独热编码)

把每个氨基酸看成一个离散的符号(类似单词),用一串 0/1 组成的固定长度向量来表示。

氨基酸 One-hot 向量示例
A [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
R [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
N [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

缺点:不能体现上下文语义。举例:D(天冬氨酸)与E(谷氨酸)都是酸性残基,但在 one-hot 中完全不相似,这正是其局限。

理化特征(Physicochemical Properties)

例如序列 “ACD”,

[[ 1.8, 8.1,  60,  0, 6.0, ...],   # A
 [ 2.5, 5.5, 110,  0, 5.5, ...],   # C
 [-3.5, 13.0,125, -1, 2.8, ...]]   # D

图 B 把残差膨胀卷积的内部结构放大说明:(整篇论文架构的第一层特征提取模块

在不破坏序列长度的前提下,捕获短程、中程的局部氨基酸模式(motif),并用残差结构保证梯度稳定与特征融合。

也就是说,它负责学“哪些局部氨基酸组合与抗炎功能有关”。

  1. 输入与输出形状

    • 输入:n×34n \times 34n×34(或已映射为 n×hn \times hn×h)——图左上角小黄方块表示输入通道。

    • 输出:n×hn \times hn×h(粉色小块)。

  2. 核心单元:Dilated Convolution(膨胀卷积)

    • 膨胀卷积(dilated conv)在卷积核之间插入“空洞(dilation)”,以扩大感受野而不增加参数/层数。

    • 图右侧小放大图展示了多层膨胀、不同 dilation rates

      • 第 1 层:膨胀率 d=1d=1d=1,看到邻近残基(3-gram 模式);

      • 第 2 层:膨胀率 d=2d=2d=2,跳过一个残基,看到更广上下文;

      • 第 3 层:膨胀率 d=4d=4d=4,感受野翻倍,能看到更远的残基关联。
        每层卷积后都ReLU + 归一化(LayerNorm/BatchNorm)。

    • 这样堆叠后,单个输出单元能感知到较长的局部窗口(有效感受野扩大)。

  3. 残差连接(Residual)

    • 输入被加回到卷积输出(跳跃连接),形成残差结构(图中灰色箭头回路)。

    • 作用:缓解深度网络训练中梯度消失、加速收敛并保留原始信息。

  4. 层归一化/激活

    • 实际实现会在每次卷积后加激活(ReLU)和归一化(LayerNorm 或 BatchNorm),保证训练稳定(图中未标出但常见)。

  5. 为什么用它?

    • 卷积擅长局部模式(短序列 motif),膨胀可以让卷积看到更宽的上下文但仍保留位置敏感性(顺序信息)。

    • 与 Transformer 的全局注意力互补:卷积负责“局部结构化信息”,Transformer 负责“全局关系”。


相当于在卷积核内部插入空洞,跳着取输入:

  • 普通 kernel=3 → 看相邻 [A, R, N]

  • dilation=2 → 看 [A, N, C](跳过一个)

  • dilation=4 → 看 [A, D, Q](更远)

这让 kernel 在不增加参数的前提下,感受到更长距离的依赖关系

图 C 展示 Transformer 模块和其与残差结构的结合方式:

  1. 模块输入

    • 图中标示有两个输入 Input1Input2(均 n×hn \times hn×h)。

    • 这表示 Transformer 块可以接受来自不同来源的表示(例如预训练 embedding 路径 + RDC 路径),论文实现里通常会拼接或相加这些表示后送入 Transformer(实际细节在代码里)。

  2. Transformer block(中间蓝色)

    • 核心由 Multi-Head Attention(多头注意力) + Feed-Forward Network(前馈网络) 组成。

    • 每个子层外面包裹 Add & Norm(残差相加 + 层归一化)。

    • 图右侧大放大图展示了标准 Transformer 的两个堆叠子模块(可能是 encoder–decoder 或 双层 encoder):

      • 自注意力层:输入经位置信息(Positional Encoding)后计算 Q/K/V 并做多头注意力;

      • 前馈层:逐位置的两层 FC(通常是线性→激活→线性);

      • 每个子层都有残差连接(输出 = LayerNorm(x + Sublayer(x)))。

  3. 残差 + 输出

    • Transformer 输出再与输入做残差(图中左侧有 residual 回路),便于信息流动和稳定训练。

    • 最终输出形状 n×hn \times hn×h。

  4. 位置信息(Positional Encoding)

    • Transformer 无法天然感知序列顺序,图中右下角标注了 Positional Encoding(正弦/余弦或可学习的位置编码),加到输入 embedding 上以编码位置信息。

  5. 为什么要 Transformer?

    • 自注意力能直接建立任意两残基之间的依赖关系(远程相互作用),适合捕获决定活性的远程协同特征(例如 N 端与 C 端的交互)。

Embedding:

假设输入序列为:A R N D C
把每个字母映射成一个 1024维向量(ProtT5输出)
得到矩阵形状 (n=5, h=1024)

那为什么不直接用 1024 维?

因为:

  1. ProtT5 的特征虽然强,但维度太高,容易过拟合

  2. 后续模型参数量会暴涨(例如 Transformer 的 attention 要计算 h×h 矩阵);

  3. 不同特征源可能维度不同(ProtT5=1024,理化特征=34),需要统一到同一维度 h

所以这一层既是“降维层”,也是“特征对齐层”。

Positional Encoding

Positional Encoding 加到 Embedding 上(绝对位置编码)

Transformer 自身不感知序列顺序,
所以要在 embedding 上加上“位置信息”:

X′=X+PositionalEncodingX' = X + \text{PositionalEncoding}X′=X+PositionalEncoding

这样模型既知道“是什么氨基酸”,又知道“它在序列中的位置”

注意力机制(“相似度机制”)

🧩 一、从直觉出发:Q、K、V 的角色

Q、K、V 是三种不同的向量表示,分别表示“我要问的问题”“别人是谁”“别人能提供什么信息”。

名称 英文 含义 类比
Q Query “我要找什么样的信息” 提问
K Key “我是什么样的信息” 值得被查找的关键字
V Value “我能提供什么信息” 被提取的答案内容

Attention 的核心是:

每个位置的 Query(Q)去匹配所有位置的 Key(K),
看谁更相关(相似度高),

然后用对应的 Value(V)来加权求和生成新的表示。

🧠 二、举一个实际例子:抗炎肽序列

假设我们有一个短肽序列:A R N 这3 个氨基酸。

模型先经过 embedding 得到输入矩阵 XXX:
假设每个氨基酸是 2 维向量(简化表示):

维度是 3×2,其中:

  • 3 = 序列长度 (n)

  • 2 = embedding 维度 (h)

🧮 三、计算 Q, K, V

Transformer 会把输入 X 乘上三组不同的权重矩阵:(这篇论文使用的是自注意力机制,因为Q、K、V 全来自同一个 X)

当模型计算完损失(比如预测错误率)后,会进行反向传播:

  • 误差梯度从输出层往前传;

  • 计算出损失对每个参数的偏导;

  • 更新 WQ,WK,WVW_Q, W_K, W_VWQ​,WK​,WV​(以及模型的其他参数)。

所以,这三个矩阵是自动学习到的

假设:

(这里的WQ,WK,WV就是“头”,将原始的Q,K,V投影到另一个空间,最后算出来的O,在✖WO让他投影回去)

视频链接:【9.多头注意力-哔哩哔哩】 https://b23.tv/b2lojM8

(1) Q = XW_Q

(2) K = XW_K

(3) V = XW_V

⚙️ 四、计算注意力分数(QKᵀ)

每个元素 (i,j) 表示:第 i 个氨基酸对第 j 个的相关度。

d是一个标量,防止QK相乘后不会大的离谱

🧮 五、softmax 归一化(按行)

以第一个 Query 为例:

表示:

第 1 个残基 A 关注 R 的概率 0.33,关注 N 的概率 0.37。

对所有 Query 都做同样的 softmax,得到注意力权重矩阵 α:

🧮 六、计算输出 O = αV

以第一行举例:

即第一个残基更新后的表示是:

加权融合了所有残基的 Value(信息),
权重由“关注程度” α 决定。

结果是一个新的矩阵 O(3×2),每个位置的表示都整合了整个序列的上下文。

Transformer 的多头注意力会让每个残基的 embedding 更新成包含全局信息的表示:

“我现在不仅知道自己是谁(Ala),
还知道我左边是 Lys,右边是 Asp,它们都可能影响我。”

于是输出仍是 n×hn \times hn×h,但每个向量都更“聪明”了。

问:为啥这里的Input分成了两路,一路没有位置编码,一路有位置编码,然后再其中一个多头注意力汇合了?

🔍 直观理解(以抗炎肽为例)

假设肽序列是:K Q H N A S

  • 有些特征取决于序列顺序,比如:

    “K” 靠近 “Q” 可能影响氢键或构象;
    “K” 和 “H” 的相对位置可能决定电荷分布;
    → 这些就依赖 位置编码的注意力路径

  • 另一些特征是全局的,比如:

    “K” 和 “S” 虽然相隔远,但共同决定抗炎功能;
    → 这些由 不带位置编码的注意力路径 捕获。

最后两路输出在上层汇合,让模型既懂顺序局部性,又懂全局协同性

Average Pooling 过程

假设:K Q H N A S(这条肽)  n=6,h=4

残基 Transformer 输出特征向量(4维)
K [0.8, 0.1, 0.3, 0.6]
Q [0.6, 0.2, 0.5, 0.5]
H [0.5, 0.4, 0.4, 0.4]
N [0.4, 0.5, 0.5, 0.3]
A [0.3, 0.6, 0.4, 0.2]
S [0.2, 0.7, 0.3, 0.1]

它们代表每个残基在整个序列上下文中“扮演的角色”。

例如:

  • “K” 可能携带强正电信号;

  • “S” 和 “A” 代表疏水或极性残基;

  • 模型会自动学习它们的“协同模式”。

平均池化就是对所有残基的表示取平均,得到一个全局序列表示

这就是整条肽链的综合表征

  • 第1维可能对应“总体正电特征”

  • 第2维可能对应“整体极性”

  • 第3、4维可能对应“局部氢键倾向”“柔性”等
    这些含义不会直接给出,而是模型自己学到的。

送入分类器(MLP)

全连接层权重示意(隐藏层维度 2):

计算:

得到隐藏特征h=[0.44,0.53]。

再经过最后一层:

例如输出:       y=0.87

✅ 这代表模型认为该肽是“抗炎肽”的概率为 87%。

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐