ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

AIDD - A.3 统一的蛋白质结构预测与从头设计框架

AIDD - A.3 统一的蛋白质结构预测与从头设计框架 欢迎关注我的CSDNhttps://spike.blog.csdn.net/本文地址https://spike.blog.csdn.net/article/details/164255598免责声明本文来源于个人知识与公开资料仅用于学术交流欢迎讨论不支持转载。把结构预测和条件式 从头设计(de novo design) 都看成分子三维坐标补全问题已知部分保持不动未知部分加噪后由同一个扩散模型恢复。类似于图像修复结构预测整张图都被噪声覆盖模型恢复整张图。条件设计保留图像的一部分只让模型补全被遮住的区域。1. 已知 Mask 与 目标 Mask对每个原子a aa定义m a k n o w n ∈ { 0 , 1 } , m a t a r g e t ∈ { 0 , 1 } m_a^{known}\in\{0,1\},\qquad m_a^{target}\in\{0,1\}maknown​∈{0,1},matarget​∈{0,1}Mask为 1 时表示m k n o w n m^{known}mknown这个原子的真实三维坐标提供给模型作为固定条件m t a r g e t m^{target}mtarget这个原子的坐标需要模型预测或生成m r e s o l v e d m^{resolved}mresolved实验结构中确实有坐标的原子普通结构预测没有任何已知三维结构m k n o w n 0 , m t a r g e t m r e s o l v e d m^{known}0,\qquad m^{target}m^{resolved}mknown0,mtargetmresolved即所有有实验坐标的原子都是监督目标。条件设计例如固定受体链 A生成与之结合的链 Bm k n o w n 链 A 的原子 , m t a r g e t m r e s o l v e d − m k n o w n m^{known}\text{链 A 的原子},\qquad m^{target}m^{resolved}-m^{known}mknown链A的原子,mtargetmresolved−mknown直观上链 Aknown1,target0→ 固定受体 链 Bknown0,target1→ 需要生成工程上一般不要直接做整数减法而写成target_maskresolved_mask~known_mask这样能明确保证两个 mask 不重叠。2. 相同刚体变换报告先对完整真实结构做X ˉ 0 R X 0 t \bar X_0 RX_0tXˉ0​RX0​t这里R RR是随机旋转t tt是随机平移。这不会改变分子的内部结构只是把整个复合物换一个朝向和位置。两个目的模型不能依赖实验结构在文件中的绝对坐标。known 和 target 必须一起旋转、一起平移否则受体和待生成部分的相对位置会被破坏。当前仓库已经有对应实现protenix/model/utils.py。其中x_augment_coordsR x_input_coords translation训练入口在protenix/model/generator.py。3. 条件扩散普通结构预测对所有原子加噪X t X ˉ 0 σ t ϵ X_t\bar X_0\sigma_t\epsilonXt​Xˉ0​σt​ϵ条件设计只对 target 原子加噪X t m k n o w n ⊙ X ˉ 0 m t a r g e t ⊙ ( X ˉ 0 σ t ϵ ) X_t m^{known}\odot \bar X_0 m^{target}\odot(\bar X_0\sigma_t\epsilon)Xt​mknown⊙Xˉ0​mtarget⊙(Xˉ0​σt​ϵ)因此known 原子输入仍然是真实坐标target 原子输入是真实坐标加噪声噪声越大target 原始结构信息越少模型必须参考固定结构、序列和其他特征把 target 恢复出来。例如固定抗原、生成抗体结合部分时模型看到的是抗原清晰且固定的三维结构抗体被噪声破坏的原子坐标任务根据抗原表面形状恢复/生成抗体结构⊙ \odot⊙通常表示逐元素乘法element-wise multiplication也叫 Hadamard 积。4. 同一个模型实现两种任务去噪网络写成X ^ 0 D θ ( X t , t ∣ S s , Z s , I , m k n o w n ) \hat X_0 D_\theta(X_t,t\mid S^s,Z^s,I,m^{known})X^0​Dθ​(Xt​,t∣Ss,Zs,I,mknown)输入包括当前含噪坐标X t X_tXt​噪声强度t tt单体/残基表示S s S^sSs成对关系表示Z s Z^sZs序列、MSA、模板、原子特征等I II哪些原子是已知条件m k n o w n m^{known}mknown模型架构没有改变只改变数据的 maskknown 全为 0 → 全结构预测 known 有一部分为 1 → 围绕固定结构进行条件生成5. Loss 主要计算目标结构(Target)报告给出的核心 loss 是L d i f f E t , ϵ [ ∥ m t a r g e t ⊙ ( X ^ 0 − X ˉ 0 ) ∥ 2 ] L_{\mathrm{diff}} \mathbb E_{t,\epsilon} \left[ \left\| m^{target}\odot(\hat X_0-\bar X_0) \right\|^2 \right]Ldiff​Et,ϵ​[​mtarget⊙(X^0​−Xˉ0​)​2]即squared_error((x_pred-x_gt)**2).sum(dim-1)loss(squared_error*target_mask).sum()/target_mask.sum()known 原子已经作为答案提供给模型再强烈监督它们意义不大真正需要学习的是如何根据 known 部分正确生成 target 部分尤其是二者之间的相对位置和界面形状。6. 核心逻辑这是概念性改造示例不是仓库现有代码# coordinate_mask 表示实验结构中哪些原子具有有效坐标转为 bool 后便于使用 、~ 等布尔运算。形状通常为 [..., N_atom]。resolvedlabel_dict[coordinate_mask].bool()# asym_id 是 token 级链 ID[N_token]atom_to_token_idx 指明每个原子所属 token[N_atom]。用后者索引前者得到原子级链 ID atom_asym_id[N_atom]。atom_asym_idinput_feature_dict[asym_id][input_feature_dict[atom_to_token_idx]]# 随机选择一条链作为已知结构条件。known 只包含“坐标有效且属于已知链”的原子target 包含“坐标有效但不属于已知链”的原子。# 因此 known 与 target 不重叠且 known | target resolvedunresolved 原子既不属于 known也不属于 target。known_chain_idsampled_chain_id knownresolved(atom_asym_idknown_chain_id)targetresolved~known# 对完整复合物执行同一个中心化、随机旋转和平移保证 known 与 target 的相对空间关系不被破坏。# coordinate 通常为 [N_atom, 3]输出 x_gt 通常为 [..., N_sample, N_atom, 3]。maskresolved 用于忽略无有效坐标的原子。x_gtcentre_random_augmentation(label_dict[coordinate],N_sampleN_sample,maskresolved,)# 生成与 x_gt 同形状的标准高斯噪声 epsilon并乘以当前扩散噪声强度 sigma。# sigma[..., None, None] 在原子维和 xyz 维增加广播维度使同一样本内所有坐标使用对应的 sigma。noisetorch.randn_like(x_gt)*sigma[...,None,None]# 将原子级 mask 扩展成可与坐标广播的形状例如 [N_atom] - [1, N_atom, 1]# 其中新增的 sample 维让同一 mask 作用于全部扩散样本最后的单例维让 mask 同时作用于 x、y、z。known_bknown[...,None,:,None]target_btarget[...,None,:,None]# 构造条件式含噪坐标known 原子保留干净真实坐标target 原子使用真实坐标加噪声# unresolved 原子因 known_b 和 target_b 都为 0 而被清零。数学上对应 m_known⊙X0 m_target⊙(X0σε)。x_noisy(known_b*x_gttarget_b*(x_gtnoise))# 去噪网络根据含噪坐标、噪声等级及序列/结构特征预测干净坐标。# 原始 input_feature_dict 通过 ** 展开后额外加入 known/target 原子 mask 和条件任务标志# 这些字段只有在 denoise_net 内部被显式读取和编码时才会真正影响模型行为。x_preddenoise_net(x_noisyx_noisy,t_hat_noise_levelsigma,input_feature_dict{**input_feature_dict,known_atom_mask:known,target_atom_mask:target,is_conditioned:torch.tensor(True),},...)# 计算逐原子三维坐标平方误差先得到每个坐标分量的平方误差再沿最后的 xyz 维求和。# 若 x_pred/x_gt 为 [..., N_sample, N_atom, 3]则 per_atom_error 为 [..., N_sample, N_atom]。per_atom_error((x_pred-x_gt)**2).sum(dim-1)# target[..., None, :] 插入 sample 广播维只保留 target 原子的误差known 和 unresolved 原子的误差均乘 0。# 分母使用 target 原子数进行归一化clamp_min(1) 防止 target 为空时除以 0。注意 N_sample1 时该写法没有再除以样本数。loss(per_atom_error*target[...,None,:]).sum()/target.sum().clamp_min(1)推理阶段还必须在每个扩散步之后重新钳制 known 坐标x_nextknown_b * x_known target_b * x_next否则即使 known 原子最初没有加噪它们也可能被后续去噪更新移动。当前严格证明的是p θ ( X t a r g e t ∣ I , X k n o w n ) p_\theta(X^{target}\mid I,X^{known})pθ​(Xtarget∣I,Xknown)也就是“在已知结构周围生成目标三维坐标”。输入I II中仍然包含sequence。报告这一节没有说明如何生成新的氨基酸序列也没有定义 residue-type mask 或序列采样目标。更准确地说这一节描述的是条件式三维结构生成/补全框架如果目标序列已经给定就是给定序列的条件结构生成。真正的序列 de novo design 还需要额外的序列生成、inverse folding 或联合序列—结构建模机制。所以最有价值的思想不是“发明了另一个设计模型”而是把设计重新定义成在固定受体、motif 或 pocket 的情况下对剩余分子区域做 masked coordinate diffusion。
返回列表