雕刻大师不会凭空变出一尊雕像。他们先面对一整块大理石,用锤子和凿子一点一点去掉多余石料,让藏在石头里的生命逐渐显露。AI蛋白质设计领域的RFdiffusion,走的正是同一条路——只不过它的原料不是大理石,而是无数随机的原子坐标碎片;它的锤子凿子也不是钢铁,而是一套叫作“扩散模型”的神经网络。 RFdiffusion先把一个真实蛋白质结构逐步加噪,直到它变成一团随机点云(相当于把雕塑打碎成碎石);再训练网络学会“反向去噪”,从碎石堆里一步步把蛋白骨架拼回去。为了让这个过程符合物理规律,它引入了SE3等变网络——无论工作台怎么旋转,雕刻家都能认出蛋白的形状;它还继承了RoseTTAFold的三重信息流、精巧的时间步嵌入,以及多种推理加速技巧。整篇文章,我们就跟着这位“AI雕刻大师”的工作台转一圈。

岗位关联

掌握RFdiffusion网络架构,你就拿到了AI蛋白质设计的核心钥匙,能在药物研发、酶工程、蛋白纳米材料等热门方向真正动手实践。

目录
  1. 可视化演示
  2. 扩散模型基础:把雕塑打碎又拼回
  3. SE3等变网络:转动的工作台与不变的判断
  4. RoseTTAFold基础:老师傅的肌肉记忆
  5. 去噪网络设计:从粗凿到细錾的工具箱
  6. 训练策略优化:学徒的千锤百炼
  7. 推理加速方法:心中有图的快手
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

演示RoseTTAFold三轨信息流、余弦噪声调度去噪过程,以及IPA不变点注意力在局部帧中的计算机制。

本节配有交互动效(进入视口后自动加载,约 3KB)。

三轨网络信息流 序列/配对/结构三轨道并行 三轨注意力互通信息 RoseTTAFold主干处理几何

扩散模型基础:把雕塑打碎又拼回

想象一位雕刻大师带着学徒,不先教他们捏泥巴,反而把一尊完美的蛋白雕塑打碎成碎石,再让学徒凭手感一块块拼回去。RFdiffusion干的正是这件事:它把天然蛋白质结构彻底“打碎”成随机噪声,再训练一个神经网络从噪声里把结构“拼”回来——这正是扩散模型的基本功。

打碎这一步在数学上叫正向扩散过程。给定一个真实蛋白质坐标 \(x_0\),我们按预先设定的噪声调度表,逐步叠加高斯噪声,经过 T 步之后结构完全失去原貌、变成一团随机点云。而这个“逐渐加噪”的轨迹形成一条马尔可夫链——每一步只依赖前一步的状态,就像雕刻时每一锤只影响当下那一块石头,不追溯更早的碎屑。

每一步打碎可以写成如下的条件概率:

反向去噪则恰好反过来:网络学习在每个时间步去掉刚加入的噪声,一步往回走,最终从纯噪声中恢复出蛋白骨架。这里的 \(\beta_t\) 调度通常由小到大线性增长——开始轻敲,后面重锤,因为早期微小扰动就能让结构松动,后期必须大力才能打碎成纯噪声。

打碎只需几百锤,拼回却需要一步一步仔细拿捏。RFdiffusion把“拼回”这件难事训练成了网络的本能,这正是扩散模型生成蛋白质的核心逻辑。

q(xt∣xt−1)=N(xt;1−βt xt−1,βtI)q(x_t|x_{t-1}) = \mathcal{N}\left(x_t; \sqrt{1-\beta_t}\,x_{t-1}, \beta_t \mathbf{I}\right)
这个公式刻画了“打碎”动作:新位置是原位置按比例缩小后,再叠上一团随机扰动。\(\beta_t\) 越大,扰动越强,砸得越碎。
  1. 条件分布\(q(x_t|x_{t-1})\) 表示给定上一时刻结构时,当前时刻结构的概率分布,是我们人为定义的“打碎规则”。
    q(xt∣xt−1)=N(xt;1−βt xt−1,βtI)q(x_t|x_{t-1}) = \mathcal{N}\left(x_t; \sqrt{1-\beta_t}\,x_{t-1}, \beta_t \mathbf{I}\right)
  2. 高斯核\(\mathcal{N}\left(x_t; \sqrt{1-\beta_t}\,x_{t-1}, \beta_t \mathbf{I}\right)\) 把打碎动作建模为“中心缩小的旧结构加随机噪声”。
    N(xt;1−βt xt−1,βtI)\mathcal{N}\left(x_t; \sqrt{1-\beta_t}\,x_{t-1}, \beta_t \mathbf{I}\right)
  3. 缩放系数\(\sqrt{1-\beta_t}\) 让上一时刻的结构缓慢收缩,避免整体尺度越加噪越大,保证数值稳定。
    1−βt\sqrt{1-\beta_t}
  4. 方差项\(\beta_t \mathbf{I}\) 决定当前步噪声强度,\(\mathbf{I}\) 是单位矩阵,表示每个坐标轴独立地加噪。
    βtI\beta_t \mathbf{I}

SE3等变网络:转动的工作台与不变的判断

雕刻师的工作台可以旋转,他绕着雕塑转一圈,从正面看到的鼻子不会因为转到侧面就变成眼睛。SE3等变网络学到的正是这种“你转我也转”的默契——蛋白整体旋转或平移,网络输出的坐标也跟着旋转或平移,而内部的折叠关系不变。

蛋白质的三维结构在物理上不受整体旋转和平移的影响:一个蛋白质平移到另一个细胞里,或者旋转180度,它的生物功能依然不变。因此,网络每一层的更新都必须满足等变性:先对输入做旋转再进网络,等价于先进网络再把输出做同样的旋转。这样网络学到的就不是某个固定朝向的“死记硬背”,而是结构本身的内在几何规律。

等变性可以写成如下等式:

实现上,网络在计算邻居残基的相对位移天然满足平移不变,再通过局部坐标系对齐与向量特征构造旋转等变;RFdiffusion的多层更新都沿着这一设计展开,相当于无论工作台怎么转,雕刻刀始终在正确的角度下刀。正是这种“转台不转心”的几何保证,让模型可以在随机朝向的残基坐标上反复扩散、去噪,最终落回物理合理、功能一致的骨架。

f(g⋅x)=g⋅f(x)f(g \cdot x) = g \cdot f(x)
这个等式是说:先把蛋白骨架 \(x\) 旋转/平移得到 \(g\cdot x\),再让网络 \(f\) 处理,与先让网络处理再对输出做同样变换,结果完全一样。
  1. SE(3) 群元素\(g \in SE(3)\) 表示三维空间中的旋转或平移动作,其中 SE(3) 是刚体变换群。
    g∈SE(3)g \in SE(3)
  2. 变换输入\(g \cdot x\) 表示对残基坐标 \(x\) 整体施加旋转或平移,得到一个新坐标系下的结构。
    g⋅xg \cdot x
  3. 网络函数\(f(\cdot)\) 是去噪网络对结构坐标的更新操作,例如一次残基坐标的等变刷新。
    f:RN×3→RN×3f: \mathbb{R}^{N \times 3} \to \mathbb{R}^{N \times 3}
  4. 等式成立\(f(g \cdot x) = g \cdot f(x)\) 意味着先变换再进网络,与先进网络再变换,结果完全一致。
    f(g⋅x)=g⋅f(x)f(g \cdot x) = g \cdot f(x)

RoseTTAFold基础:老师傅的肌肉记忆

老雕刻师不只看石头,还要看图纸、量比例、参考立体小样。RoseTTAFold就是这位老师傅,它从氨基酸序列、残基距离图、三维坐标三条通道同时读取信息,像眼睛、皮尺和手型三者配合,随时判断该在哪里下刀。

序列是蛋白质的“图纸”,距离图是“比例尺”,坐标是“当前毛坯”。三条轨道交替更新:序列信息引导结构预测,结构坐标又反过来修正序列与距离图的估计。RFdiffusion在RoseTTAFold骨架上,把原本预测结构的模块改造成“去噪器”,因此它完整继承了这套肌肉记忆,让每个残基都知道自己在全局中的位置。

注意力机制是这套肌肉记忆的核心动作。每个残基通过查询与全局所有残基“对暗号”,找到跟自己最相关的伙伴,再按权重交换信息:

学徒最缺的不是力气,而是老师傅那种“一眼扫过去就知道该找谁配合”的直觉。三重信息流让扩散模型在每一步去噪时,都同时看着图纸、比例尺和毛坯,所以拼回来的蛋白才真正“有模有样”。

Attn(Q,K,V)=softmax(QK⊤dk)V\text{Attn}(Q,K,V) = \text{softmax}\left(\frac{QK^{\top}}{\sqrt{d_k}}\right)V
这个公式描述“对暗号”三步曲:先计算两两残基的亲密度,再归一化成注意力权重,最后按权重把伙伴的信息取回来。
  1. 查询/键/值\(Q,K,V\) 三个矩阵把每个残基映射成“问题、索引、内容”,是注意力的三个基本角色。
    Q,K,V∈RN×dQ,K,V \in \mathbb{R}^{N \times d}
  2. 相似度打分\(QK^{\top}\) 计算残基两两之间的匹配程度,得到一个 \(N \times N\) 的关系表。
    QK⊤∈RN×NQK^{\top} \in \mathbb{R}^{N \times N}
  3. 缩放稳定除以 \(\sqrt{d_k}\) 防止内积过大导致 softmax 饱和、梯度消失。
    QK⊤dk\frac{QK^{\top}}{\sqrt{d_k}}
  4. 归一化权重\(\text{softmax}(\cdot)\) 把分数变为总和为 1 的注意力权重,突出最相关的伙伴。
    softmax(QK⊤dk)\text{softmax}\left(\frac{QK^{\top}}{\sqrt{d_k}}\right)
  5. 加权汇总乘以 \(V\) 后,按权重把各残基信息聚合,完成一次“全局目光扫视”。
    softmax(QK⊤dk)V\text{softmax}\left(\frac{QK^{\top}}{\sqrt{d_k}}\right)V

去噪网络设计:从粗凿到细錾的工具箱

雕刻家在每个阶段用不同的工具:粗凿去除大块石料,细錾刻出轮廓,砂纸打磨细节。去噪网络也必须知道“现在拼到哪一步了”,从而决定更新力度——这正是时间步嵌入(time embedding)的作用。

网络的每一层都注入当前噪声级别 \(t\) 的编码,经过 MLP 映射成一组条件特征,指导注意力与坐标更新。时间步越大、噪声越强时,网络倾向于大范围重整结构,类似粗凿;时间步越小、越接近成品时,更新幅度收窄,类似细錾打磨。这种“看步数下菜碟”的设计,让同一个网络在不同阶段都能恰如其分地工作。

每次坐标更新可以概括为如下等变叠加:

手艺人换工具不是心情使然,而是因为阶段不同。时间嵌入让网络“心里有数”——知道该用粗凿还是细錾,这正是去噪网络比普通结构预测网络更擅长设计全新折叠骨架的原因。

x~i=xi+∑j∈N(i)wij(t) (xj−xi)\tilde{x}_i = x_i + \sum_{j \in \mathcal{N}(i)} w_{ij}(t)\,(x_j - x_i)
这个公式是说:残基 \(i\) 的新位置,是它自己的旧位置加上一圈邻居残基按权重给出的“相对位移”——权重由时间步和特征相似性共同决定。
  1. 残基坐标\(x_i \in \mathbb{R}^{3}\) 是第 \(i\) 个残基当前的 3D 坐标,也就是雕刻中的“锚点”。
    xi∈R3x_i \in \mathbb{R}^{3}
  2. 邻居集合\(\mathcal{N}(i)\) 是残基 \(i\) 的局部空间邻居,只与邻近残基交换信息。
    N(i)={j:∥xj−xi∥<r}\mathcal{N}(i) = \{ j : \|x_j - x_i\| < r \}
  3. 相对位移\(x_j - x_i\) 是邻居相对自身的向量,天然满足平移不变性。
    xj−xix_j - x_i
  4. 注意力权重\(w_{ij}(t)\) 由时间步和节点特征决定,控制“这一刀往哪偏、用多大力”。
    wij(t)=exp⁡(aij(t))∑kexp⁡(aik(t))w_{ij}(t) = \frac{\exp(a_{ij}(t))}{\sum_{k} \exp(a_{ik}(t))}
  5. 迭代更新\(\tilde{x}_i\) 为更新后的新坐标,叠加相对位移完成一次 SE(3) 等变的坐标刷新。
    x~i=xi+∑j∈N(i)wij(t) (xj−xi)\tilde{x}_i = x_i + \sum_{j \in \mathcal{N}(i)} w_{ij}(t)\,(x_j - x_i)

训练策略优化:学徒的千锤百炼

学徒每天要做的功课是:老师把雕塑打碎成各种程度的碎石,学徒闭眼猜“这一锤砸得有多狠”,猜得越准,拼回的速度越快。RFdiffusion训练时做的事与此惊人相似:随机挑一个噪声级别,往结构上砸噪声,再让网络把噪声“吐出来”。

损失函数直接用预测噪声与真实噪声的均方误差。网络不看最终拼好的雕塑像不像,只评价“你猜的这团噪声准不准”。当它在每个噪声级别都能精确猜中噪声时,它自然知道怎么反着走,把结构一步步还原。

训练目标可以写成:

训练中还配合数据增强(随机旋转、平移输入结构)与超参数调度,让网络在等变条件下见过更多“朝向不同、砸法不同”的练习,梯度优化不断修正网络参数,逐步收敛到稳定的噪声预测器。

台上一分钟,台下十年功。经过海量“碎石—噪声”样本的千锤百炼,网络把蛋白质折叠的深层规律内化成了参数里的肌肉记忆。这份功夫,靠的不是天才灵感,而是精心设计的损失函数与训练策略。

L=Et,ϵ[∥ϵ−ϵθ(αˉtx0+1−αˉt ϵ, t)∥2]L = \mathbb{E}_{t,\epsilon}\left[\left\| \epsilon - \epsilon_\theta\left(\sqrt{\bar{\alpha}_t}x_0 + \sqrt{1-\bar{\alpha}_t}\,\epsilon,\ t\right) \right\|^2\right]
这个公式的含义是:在所有噪声级别上,不断比较模型预测的噪声与真实注入噪声的差异,并让这个差异越来越小。
  1. 真实噪声\(\epsilon\) 是训练时人为注入的噪声,是“标准答案”。
    ϵ∼N(0,I)\epsilon \sim \mathcal{N}(0, \mathbf{I})
  2. 加噪结构\(\sqrt{\bar{\alpha}_t}x_0 + \sqrt{1-\bar{\alpha}_t}\epsilon\) 混合干净结构与噪声,得到第 \(t\) 步的带噪坐标。
    αˉtx0+1−αˉt ϵ\sqrt{\bar{\alpha}_t}x_0 + \sqrt{1-\bar{\alpha}_t}\,\epsilon
  3. 网络预测\(\epsilon_\theta(\cdot, t)\) 输入带噪结构与时间步,输出对噪声的估计。
    ϵθ(αˉtx0+1−αˉt ϵ, t)\epsilon_\theta\left(\sqrt{\bar{\alpha}_t}x_0 + \sqrt{1-\bar{\alpha}_t}\,\epsilon,\ t\right)
  4. 均方误差\(\left\|\cdot\right\|^2\) 度量预测噪声与真实噪声的误差平方。
    ∥ϵ−ϵθ(⋅)∥2\left\| \epsilon - \epsilon_\theta(\cdot) \right\|^2
  5. 期望\(\mathbb{E}_{t,\epsilon}\) 对所有时间步与噪声样本取平均,使模型在每个噪声级别都被充分训练。
    Et,ϵ[⋅]\mathbb{E}_{t,\epsilon}\left[\cdot\right]

推理加速方法:心中有图的快手

老手雕刻不需要每一步都拿尺子量,看几眼轮廓就能连跳十几个细节直接下刀。经典扩散模型要一步步走几百次去噪,而推理加速方法让模型“跳着走”,打造出老手那样的连跳动作。

DDIM 把随机采样改成确定性采样:每一步先用网络预测噪声、反推“当前最可能的干净结构”,再把它缩放到更早的噪声水平,于是可以每 10 步一跳,甚至 30 步内完成原本需要 200 步的生成。RFdiffusion 推理时同样采用这种策略,大幅降低新蛋白结构设计的等待时间。

DDIM 的单步更新公式如下:

此外还有知识蒸馏:把多步大模型学到的能力压缩到少步小模型;并行推理与内存优化则让大批量残基计算充分利用 GPU。等待就是成本,从几百步到几十步,推理加速让“从想法到蛋白骨架”的反馈闭环大大缩短,AI 蛋白质设计真正进入快车道。

xt−1=αˉt−1(xt−1−αˉt ϵθ(xt,t)αˉt)+1−αˉt−1 ϵθ(xt,t)x_{t-1} = \sqrt{\bar{\alpha}_{t-1}}\left(\frac{x_t - \sqrt{1-\bar{\alpha}_t}\,\epsilon_\theta(x_t, t)}{\sqrt{\bar{\alpha}_t}}\right) + \sqrt{1-\bar{\alpha}_{t-1}}\,\epsilon_\theta(x_t, t)
这个公式的妙处在于:它先用网络预测噪声反推出当前最可能的干净骨架,再把它缩放到更早的噪声级别,从而可以跳过中间大量时间步。
  1. 带噪输入\(x_t\) 是当前第 \(t\) 步的残基坐标,相当于“拼到一半的毛坯”。
    xtx_t
  2. 预测噪声\(\epsilon_\theta(x_t, t)\) 是网络对当前步骤噪声的估计。
    ϵθ(xt,t)\epsilon_\theta(x_t, t)
  3. 重建估计\(\dfrac{x_t - \sqrt{1-\bar{\alpha}_t}\,\epsilon_\theta(x_t, t)}{\sqrt{\bar{\alpha}_t}}\) 从带噪坐标反推“当前最可能的干净结构”。
    xt−1−αˉt ϵθ(xt,t)αˉt\frac{x_t - \sqrt{1-\bar{\alpha}_t}\,\epsilon_\theta(x_t, t)}{\sqrt{\bar{\alpha}_t}}
  4. 回缩乘以 \(\sqrt{\bar{\alpha}_{t-1}}\) 把重建结果缩放到更靠前的噪声水平。
    αˉt−1(⋅)\sqrt{\bar{\alpha}_{t-1}}\left(\cdot\right)
  5. 重组完成加上 \(\sqrt{1-\bar{\alpha}_{t-1}}\epsilon_\theta\) 让 \(x_{t-1}\) 保持在该水平的合理波动范围。
    1−αˉt−1 ϵθ(xt,t)\sqrt{1-\bar{\alpha}_{t-1}}\,\epsilon_\theta(x_t, t)

AI 应用场景

抗体从头设计

阶段:结构生成(反向去噪 + SE3等变)

解决的问题:传统抗体筛选依赖动物免疫或噬菌体展示库,周期长达数月,且能探索的序列空间十分有限。RFdiffusion 基于扩散模型随机采样,可以快速生成大量结构多样、结合位点合理的候选蛋白骨架,再交给序列设计器回译成 DNA 序列,大幅缩短早期发现周期。

具体案例:某计算制药团队针对流感病毒表面蛋白设计结合蛋白,用 RFdiffusion 生成数百个骨架候选,湿实验验证后约半数成功表达,且与靶标的亲和力达到纳摩尔级。

酶的热稳定性改造

阶段:骨架重构 + 训练策略优化

解决的问题:天然酶在高温或有机溶剂中容易失活,传统定向进化需要多轮随机突变和筛选,效率低。RFdiffusion 可以在保留活性位点关键残基不变的前提下,重新设计整个支撑骨架,使整体构象更稳固。

具体案例:科研人员对 PET 塑料降解酶做骨架重设计,获得的变体在 60℃ 下仍保持活性,热稳定性较野生型提升约 15℃,为塑料回收提供了更温和的工艺窗口。

蛋白纳米材料按需设计

阶段:对称结构生成 + SE3等变保证

解决的问题:设计能自组装成二十面体、纤维等规则结构的蛋白材料,极度依赖对称性计算。SE3 等变网络天然编码“旋转后输出同步旋转”的性质,便于描述多个亚基沿对称轴的组装关系。

具体案例:有团队用 RFdiffusion 设计出能自组装成二十面体蛋白笼的亚基,用于靶向药物递送和疫苗展示,从计算设计到晶体结构确认仅用时数月。

Python 演示

python74 行
"""Mini DDPM: reconstruct protein ring from pure noise.""" import numpy as npimport torchimport torch.nn as nn  class NoisePredictor(nn.Module):    """Residue denoiser: takes noisy coords + timestep, predicts noise."""     def __init__(self, dim=2, hidden=32):        super().__init__()        self.net = nn.Sequential(            nn.Linear(dim + 1, hidden),            nn.ReLU(),            nn.Linear(hidden, hidden),            nn.ReLU(),            nn.Linear(hidden, dim),        )     def forward(self, xt, t):        return self.net(torch.cat([xt, t / 100.0], dim=1))  def make_data(n_residues=16):    """Build target: C-alpha atoms forming a ring."""    ang = 2 * np.pi * np.arange(n_residues) / n_residues    return np.stack([np.cos(ang), np.sin(ang)], axis=1).astype(np.float32)  def train(model, x0, num_t=100, steps=300):    """Train: add noise and let model predict the injected noise back."""    opt = torch.optim.Adam(model.parameters(), lr=0.01)    x0_t = torch.tensor(x0)    betas = torch.linspace(0.0005, 0.02, num_t)    alpha_cum = torch.cumprod(1 - betas, dim=0)    for _ in range(steps):        t = np.random.randint(0, num_t)        eps = torch.randn_like(x0_t)        xt = torch.sqrt(alpha_cum[t]) * x0_t + torch.sqrt(1 - alpha_cum[t]) * eps        pred = model(xt, torch.full((x0.shape[0], 1), float(t)))        loss = ((pred - eps) ** 2).mean()        opt.zero_grad()        loss.backward()        opt.step()    return loss.item()  def sample(model, num_t=100, steps=20):    """DDIM fast sampling: from pure noise back to the protein ring."""    model.eval()    with torch.no_grad():        x = torch.randn(16, 2)        betas = torch.linspace(0.0005, 0.02, num_t)        alpha_cum = torch.cumprod(1 - betas, dim=0)        ts = np.linspace(num_t - 1, 0, steps).astype(int)        for i, t in enumerate(ts):            eps = model(x, torch.full((16, 1), float(t)))            x0_hat = (x - torch.sqrt(1 - alpha_cum[t]) * eps) / torch.sqrt(alpha_cum[t])            if i < len(ts) - 1:                t_next = ts[i + 1]                x = torch.sqrt(alpha_cum[t_next]) * x0_hat + torch.sqrt(1 - alpha_cum[t_next]) * eps        return x0_hat.numpy()  if __name__ == "__main__":    torch.manual_seed(42)    model = NoisePredictor()    x0 = make_data()    loss = train(model, x0)    result = sample(model)    err = ((result - x0) ** 2).mean()    print("Training loss:", round(loss, 4))    print("MSE to ring:", round(float(err), 4))
目的:用迷你 DDPM(Denoising Diffusion Probabilistic Model)演示“打碎—拼回”全过程——训练一个简单 MLP 从加噪坐标中预测噪声,再用 DDIM 快速采样还原一个简化的蛋白质环。
  1. betas = torch.linspace(0.0005, 0.02, num_t)定义线性噪声调度,对应“轻敲到重锤”的渐进打碎力度。
  2. xt = torch.sqrt(alpha_cum[t]) * x0_t + torch.sqrt(1 - alpha_cum[t]) * eps正向加噪:按累积噪声水平混合干净结构与噪声。
  3. pred = model(xt, torch.full((x0.shape[0], 1), float(t)))把带噪坐标和时间步编码一起送入网络。
  4. loss = ((pred - eps) ** 2).mean()用均方误差比较预测噪声与真实噪声,驱动梯度更新。
  5. x0_hat = (x - torch.sqrt(1 - alpha_cum[t]) * eps) / torch.sqrt(alpha_cum[t])DDIM 反推当前最可能的干净结构。
  6. x = torch.sqrt(alpha_cum[t_next]) * x0_hat + torch.sqrt(1 - alpha_cum[t_next]) * eps跳步重组,快速回到更早的噪声级别。

常见误区

误区以为 RFdiffusion 输入几个参数后几十毫秒就能“变”出一个蛋白质,就像生成图片那样一步到位。

正解扩散模型是循序渐进的迭代去噪。RFdiffusion 先从随机噪声骨架出发,用 SE3 等变网络判断每一步该去除多少噪声,经历几十到几百次精修才能得到稳定结构。就像雕塑大师必须一锤一锤凿,不是施咒变出来的,每一步都在与蛋白质几何规律做“对话”。

为何常见:扩散模型生成图像的流畅演示给人“瞬间出图”的错觉,容易忽略背后大量的迭代计算。

误区以为“等变”意味着网络只认识对称结构,遇到非对称蛋白就失效。

正解等变不是“只识别对称”,而是“识别结果随坐标系同步变化”。无论蛋白是否对称,整体旋转或平移都不改变其内在功能;网络保证输出坐标跟着输入一起转,而非硬编码某个朝向。这与晶体的空间群对称性是两码事。

为何常见:SE3 等变听起来抽象,容易联想到化学里的分子对称群,从而误以为它和服务对称对象绑定。

误区既然网络很强大,噪声强度 \(\beta_t\) 就随便设个固定值,不需要精心设计。

正解噪声调度决定了模型在每个时间步看到的“清晰—噪声”混合比例。如果一直用大噪声,大多数步的输入过于相似,模型难以区分时间;太平缓则后期噪声不足以覆盖结构。RFdiffusion 采用精心设计的线性或余弦调度,让模型在全部噪声级别都能学到有效的梯度信号。

为何常见:超参数太多,初学者容易把 \(\beta_t\) 当成无关紧要的常数忽略。

误区跑完 RFdiffusion 就拿到能直接送去表达、做实验的完整蛋白质序列。

正解RFdiffusion 输出的是 Cα 原子骨架的三维坐标,通常不直接给出侧链和氨基酸序列。得到的骨架还要交给序列设计器(如 ProteinMPNN)逆翻译成氨基酸序列,再经实验验证。这就像雕塑只完成了毛坯,上色、装框是后续工序。

为何常见:看到“蛋白质设计”的演示 demo,容易默认输出就是可以直接使用的成品。

面试题

Q1. RFdiffusion 生成蛋白质结构时,网络在反向过程中主要做什么?

单选题 · easy

  • A.逐步把噪声还原成结构骨架← 正确答案
  • B.逐步把结构打碎成随机噪声
  • C.直接预测目标氨基酸序列
  • D.直接搜索最低能量构象

答案:A。反向过程是“拼回”阶段,网络从纯噪声出发,逐步预测并去除噪声,还原出结构骨架。打碎成噪声是正向过程;直接预测序列或能量搜索都不是扩散模型的职责。用雕塑比喻来说,反向就是学徒把碎石拼回雕塑的过程。

Q2. 正向扩散过程中,噪声调度 \(\beta_t\) 通常采用什么策略?

单选题 · easy

  • A.全程固定同一个噪声值
  • B.小到大渐变噪声强度← 正确答案
  • C.大到小递减噪声强度
  • D.完全随机选择噪声强度

答案:B。标准做法是让噪声从比较小逐渐增大,对应“先轻敲后重锤”。这样模型在初期可以看到结构细节,在后期又能彻底变成噪声。全程固定会让各时间步区分度差;递减或随机都会破坏渐进式“打碎”的节奏。

Q3. SE3 等变网络最核心的性质是什么?

单选题 · mid

  • A.输入旋转输出同步旋转← 正确答案
  • B.输入旋转输出保持不动
  • C.只对对称蛋白输出有效
  • D.输出永远与输入朝向无关

答案:A。等变性的关键是“先变换再进网络”与“先进网络再变换”结果相同,即输入旋转时输出也跟着旋转,而不是不变或无关。这保证了模型学习的是结构内在几何,而不是某个固定朝向。保持不动是“不变性”,不是“等变性”。

Q4. 蛋白质整体旋转 180 度后,RFdiffusion 输出的骨架坐标应该怎样?

单选题 · mid

  • A.跟随整体做相同旋转← 正确答案
  • B.保持不变原地不动
  • C.沿镜像翻转而非旋转
  • D.重新随机生成新的构象

答案:A。在 SE3 等变网络中,输入坐标经旋转后,输出坐标也同步旋转,保持两者相对关系不变。蛋白质的生物功能不依赖整体朝向,所以网络不能输出一个与朝向无关的固定结构,而是要严格跟随输入变换。

Q5. RoseTTAFold 三重信息流使用的三种表示是什么?

单选题 · mid

  • A.序列、距离图、三维坐标← 正确答案
  • B.序列、能量、溶剂可及性
  • C.距离图、二面角、质量中心
  • D.坐标、速度、加速度向量

答案:A。RoseTTAFold 同时处理 1D 氨基酸序列、2D 残基距离图和 3D 坐标,三者在网络层间交替更新。这就像雕刻师同时看图纸、比例尺和毛坯。能量、溶剂可及性、速度等都不是它的核心表示。

Q6. 关于 RFdiffusion 去噪网络设计,以下哪些说法正确?

多选题 · mid

  • A.时间步被编码进网络各层← 正确答案
  • B.邻居相对位移保证平移不变← 正确答案
  • C.每一层更新强制破坏等变性
  • D.注意力权重可以依赖时间步← 正确答案

答案:ABD。时间步嵌入让网络知道当前噪声级别;邻居相对位移天然满足平移不变;注意力权重可受时间调制。破坏等变性是错误说法,网络所有更新都必须严格保持 SE3 等变,否则生成的骨架会依赖于整体坐标系。

Q7. 训练 RFdiffusion 时,损失函数直接比较的是哪两个量?

单选题 · hard

  • A.预测噪声与真实注入噪声← 正确答案
  • B.预测结构与真实蛋白距离
  • C.输出能量与实验观测能量
  • D.生成序列与天然序列相似度

答案:A。简化训练目标是用均方误差让网络预测的噪声逼近真实噪声。当每个时间步的噪声都猜得准,反向去噪自然能还原结构。直接比较坐标距离、能量或序列都不符合扩散模型的损失定义。

Q8. 以下哪些属于推理加速策略?

多选题 · hard

  • A.DDIM 跨越式步长采样← 正确答案
  • B.知识蒸馏压缩采样模型← 正确答案
  • C.增加训练数据提升精度
  • D.并行化多个片段计算← 正确答案

答案:ABD。DDIM 跳过中间步、蒸馏用少步小模型替代多步大模型、并行化计算都能加快推理。增加训练数据提升的是模型精度,不直接加快推理速度,因此不属于推理加速策略。

Q9. DDIM 采样中,“反推干净结构”这一步的作用是什么?

单选题 · hard

  • A.从带噪坐标估计当前最可能的 x0← 正确答案
  • B.从干净结构直接预测下一步噪声
  • C.把结构旋转到标准方向再比较
  • D.用序列信息补充缺失的残基

答案:A。DDIM 利用网络预测的噪声,从带噪坐标 \(x_t\) 反推出当前最可能的干净估计 \(\hat{x}_0\),然后把它缩放到更早的噪声级别。它不是预测噪声本身,也不是旋转对齐或序列补全。

Q10. 关于 RFdiffusion 架构传承自 RoseTTAFold,以下哪些描述正确?

多选题 · extreme

  • A.继承三重信息流交替更新机制← 正确答案
  • B.用扩散过程替换原始结构模块← 正确答案
  • C.完全丢弃序列特征只用坐标训练
  • D.结构模块升级为 SE3 等变版本← 正确答案

答案:ABD。RFdiffusion 保留了 RoseTTAFold 的 1D/2D/3D 三重信息流,把它原来的结构预测模块改造成去噪过程,并让坐标更新满足 SE3 等变。它没有丢弃序列特征——序列信息依然是引导去噪的重要输入。