Frame

文章目录

    • [1. 引入 Frame](#1. 引入 Frame)
    • [2. Gram-Schmidt 正交化](#2. Gram-Schmidt 正交化)
    • [3. 坐标系的升降维](#3. 坐标系的升降维)
      • [3.1 局部化 (Localize / Global-to-Local)](#3.1 局部化 (Localize / Global-to-Local))
      • [3.2 全局化 (Globalize / Local-to-Global)](#3.2 全局化 (Globalize / Local-to-Global))
    • [4. 残基气体 (Residue Gas) 与黑洞初始化](#4. 残基气体 (Residue Gas) 与黑洞初始化)
    • [5. S E ( 3 ) SE(3) SE(3) 流形上的更新](#5. S E ( 3 ) SE(3) SE(3) 流形上的更新)

在处理蛋白质这种具有复杂约束的生物大分子时,如果你还停留在"点云(Point Cloud)"的思维模型里,那算法的搜索空间就太大了。在 OpenFold 和 AF2 的架构中,核心的直觉是将残基建模为 S E ( 3 ) SE(3) SE(3) 空间中的刚体。

这一章我们重点讨论:如何从混乱的原子坐标中抽象出标准的局部框架(Local Frames)。

1. 引入 Frame

在第一章我们提到了 S E ( 3 ) SE(3) SE(3) 不变性。直接回归 N N N 个原子的 ( x , y , z ) (x, y, z) (x,y,z) 坐标会面临两个致命问题:

  1. 自由度冗余:原子间的键长和键角在物理上基本是锁死的,直接回归坐标会导致化学结构的畸变。
  2. 参考系缺失:没有局部坐标系,模型很难学习到诸如"侧链相对于骨架的偏转"这种相对几何信息。

因此,我们给每个残基 i i i 定义一个变换矩阵 T i = ( R i , t i ) T_i = (R_i, \mathbf{t}_i) Ti=(Ri,ti)。

  • t i \mathbf{t}i ti (Translation):通常定位于 C α C\alpha Cα 的位置,承载了位置信息。
  • R i R_i Ri (Rotation):承载了残基骨架的指向信息。

2. Gram-Schmidt 正交化

我们需要从三个骨架原子 x N , x C a , x C \mathbf{x}N, \mathbf{x}{Ca}, \mathbf{x}_C xN,xCa,xC 中"搓"出一个标准正交基 R = [ e x , e y , e z ] R = [\mathbf{e}_x, \mathbf{e}_y, \mathbf{e}_z] R=[ex,ey,ez]。

注意,由于真实的原子位置存在热振动或模型预测偏差, N − C α N-C_\alpha N−Cα 和 C − C α C-C_\alpha C−Cα 两个向量通常不是严格垂直的。为了构建直角坐标系,我们必须使用 Gram-Schmidt 过程:

  1. 确定 x x x 轴:我们人为规定 C α → C C_\alpha \rightarrow C Cα→C 为主轴。

    v 1 = x C − x C a , e x = v 1 ∥ v 1 ∥ \mathbf{v}_1 = \mathbf{x}C - \mathbf{x}{Ca}, \quad \mathbf{e}_x = \frac{\mathbf{v}_1}{\|\mathbf{v}_1\|} v1=xC−xCa,ex=∥v1∥v1

  2. 构建平面的辅助向量:取 N → C α N \rightarrow C_\alpha N→Cα 方向的向量 v 2 = x N − x C a \mathbf{v}_2 = \mathbf{x}N - \mathbf{x}{Ca} v2=xN−xCa。

  3. 计算 z z z 轴(法向量):通过叉乘直接得到垂直于 N − C α − C N-C_\alpha-C N−Cα−C 平面的向量。

    e z = unit ( e x × v 2 ) \mathbf{e}_z = \text{unit}(\mathbf{e}_x \times \mathbf{v}_2) ez=unit(ex×v2)

  4. 补全 y y y 轴:再通过一次叉乘,确保三者构成右手系。

    e y = e z × e x \mathbf{e}_y = \mathbf{e}_z \times \mathbf{e}_x ey=ez×ex

这样得到的 R i = [ e x , e y , e z ] R_i = [\mathbf{e}_x, \mathbf{e}_y, \mathbf{e}_z] Ri=[ex,ey,ez] 是一个完美的正交矩阵。在 OpenFold 的代码实现中,这个逻辑被封装在 Rigid.from_3_points 函数里。

3. 坐标系的升降维

在动力学算法中,会频繁用到以下两个数学操作,这是所有 IPA 注意力和力场计算的基石:

3.1 局部化 (Localize / Global-to-Local)

将空间中任意一点 x \mathbf{x} x 投影到残基 i i i 的视角下:

x l o c a l = R i T ( x − t i ) x_{local} = R_i^T (\mathbf{x} - \mathbf{t}_i) xlocal=RiT(x−ti)

注:由于 R i R_i Ri 是正交阵,其逆变换就是转置。

3.2 全局化 (Globalize / Local-to-Global)

将残基内部定义的理想原子坐标映射回实验室坐标系:

x g l o b a l = R i x l o c a l + t i x_{global} = R_i x_{local} + \mathbf{t}_i xglobal=Rixlocal+ti

4. 残基气体 (Residue Gas) 与黑洞初始化

在深度学习训练的初始阶段,我们其实并不知道蛋白质长什么样。OpenFold 采用了一个非常激进的策略:Residue Gas。

  • 物理状态:所有残基在初始时刻都是独立的,互不连接,就像一团气体。
  • 黑洞初始化 (Black Hole Initialization):我们将所有的 T i T_i Ti 都初始化为 ( I , 0 ) (I, \mathbf{0}) (I,0)。
    • 这意味着最初所有的残基都重叠在坐标原点。
    • 随着 Structure Module 层数的加深,模型通过 IPA(下一节内容) 预测出 Δ T i \Delta T_i ΔTi,逐渐将这些残基"推"到它们该去的位置。

这种设计强制模型去学习如何从零构建全局拓扑,而不是依赖输入的初始坐标偏置。

5. S E ( 3 ) SE(3) SE(3) 流形上的更新

这里有个细节:我们能不能直接对 R i R_i Ri 做加法更新?绝对不行。

旋转矩阵 R R R 属于 S O ( 3 ) SO(3) SO(3) 李群,普通的加法会破坏其正交性。在每一层更新中,模型会预测一个李代数元素(通常是一个增量旋转向量 ω ⃗ \vec{\omega} ω 和位移向量 v ⃗ \vec{v} v ),然后通过指数映射将其映射回 S E ( 3 ) SE(3) SE(3)。

T n e w = T o l d ∘ exp ⁡ ( Δ ξ ) T_{new} = T_{old} \circ \exp(\Delta \xi) Tnew=Told∘exp(Δξ)

这种在流形上更新姿态的做法,保证了蛋白质结构在迭代过程中永远不会出现"化学键拉断"或"原子变形"的数值误差。

下一章预告:

既然每个残基都有了自己的 Frame,它们该如何"交流"?下一章我们将拆解最难的点:IPA (Invariant Point Attention),看看它是如何在不破坏 S E ( 3 ) SE(3) SE(3) 不变性的前提下,让两个 Frame 产生跨越空间的吸引力。

相关推荐
Python私教1 小时前
Pure-Admin-Thin 深度解析:完整版和精简版到底怎么选?
vue.js·人工智能·开源
星马梦缘1 小时前
强化学习实战8.3——用PPO打赢星际争霸【编写自定义环境GYM】
人工智能·强化学习·gymnasium·星际争霸·sc2·starcraft2·sb3
翔云1234561 小时前
大模型部署全流程深度解析
人工智能·ai·大模型
BU摆烂会噶1 小时前
【LangGraph】持久化实现的三大能力——人机交互
数据库·人工智能·python·langchain·人机交互
沐风老师1 小时前
开发AI机器人操作系统用什么编程语言?
人工智能·ai编程·机器人操作系统
念威1 小时前
弹幕互动游戏AI无人直播方案 - 可遇AI无人直播助手
人工智能·游戏
BizViewStudio1 小时前
甄选方法:2026 企业新媒体代运营的短视频精细化运营与流量转化技巧
大数据·网络·人工智能·媒体
咖啡星人k1 小时前
Vibe Coding 实践观察:从概念到云端开发工具的探索
人工智能
qq_283720051 小时前
Python+LangChain 入门到实战全教程+ 企业级案例
人工智能·langchain·#大模型·#llm·#rag·#ai 应用开发·#智能体