三维几何对称性与等变神经网络

读分子、材料方向的模型论文或代码,总会撞上同一串词:invariant / equivariant、SO(3) / O(3) / SE(3) / E(3)、irreps、parity、frame。它们看着像数学装饰,其实每一个都对应一个具体的工程后果:模型能不能区分对映体、要不要做旋转数据增强、坐标要不要先去质心、加一层能不能提高体数。

这篇笔记把这串词串起来:先说清每个词指什么,再看主流架构分别用哪条路线把它编进网络,以及各自的代价。

1. 为什么用坐标做输入就必须考虑对称性

同一个分子,换一个坐标系写出来就是另一组数字,但它的能量、力、电荷一个都没变。坐标带的信息比结构本身多,多出来的那部分(放在哪、朝哪转)是任意的。直接把 [N,3][N,3] 的坐标喂进网络,网络就得先自己把这部分多余的自由度学掉,才谈得上学真正的结构与性质之间的关系。对称性要解决的就是这件事。

物理上的说法是:对体系施加某些空间变换后,物理规律保持不变。把一个分子整体旋转,xiRxix_i \rightarrow R x_i,它的能量不变,力的方向跟着转,电荷不变。一个直接以 (x,y,z)(x, y, z) 为输入的网络,需要从数据里自己学会这些规律;等变神经网络(equivariant neural network)的思路是反过来,把对称性直接写进模型结构,让网络天然满足这些规律。

2. 群:一组可以组合的变换

群(group)描述的是一组可以连续组合的变换操作。所有三维旋转合在一起就构成旋转群,其中一个具体的元素 gg 就是一次具体的操作,比如 g=Rz(90)g = R_z(90^\circ) 表示绕 zz 轴转 90°。下面讨论的所有对称性,都是在问「对输入做一个群元素 gg 的操作,输出会怎么变」。

3. 不变与等变

不变性(invariance)

f(gX)=f(X)f(gX) = f(X)

输入变了,输出不动。能量就是典型:E(RX)=E(X)E(RX) = E(X),旋转不改变分子能量。适用于 energy、formation energy、adsorption energy 这类标量性质。

等变性(equivariance)

f(gX)=gf(X)f(gX) = g\, f(X)

输入怎么变,输出按同样的规律跟着变。力是典型:F(RX)=RF(X)F(RX) = R\,F(X),把结构转过去,力的方向也转过去。适用于 force、velocity 以及一般的矢量、张量性质。

不变性可以看成等变性的特例:输出上的 gg 恰好什么都不做。

4. SO(3)、O(3)、SE(3)、E(3)

这四个都是三维空间里的变换群,区别只在于包含哪几种操作。

SO(3),三维特殊正交群(special orthogonal group):所有三维旋转。数学上是满足 RTR=IR^\mathsf{T} R = IdetR=1\det R = 1 的矩阵。只有旋转,不含镜像。

O(3),三维正交群(orthogonal group):同样要求 RTR=IR^\mathsf{T} R = I,但允许 detR=±1\det R = \pm 1det=1\det = 1 是旋转,det=1\det = -1 是镜像。所以 SO(3)O(3)SO(3) \subset O(3)

SE(3),三维特殊欧氏群(special Euclidean group):旋转加平移,x=Rx+tx' = Rx + t,也就是刚体运动。分子、蛋白、任何三维物体在空间里挪动都属于这一类。

E(3),三维欧氏群(Euclidean group):旋转、平移、镜像全包含,E(3)=O(3)+translationE(3) = O(3) + \text{translation},是最完整的三维欧氏变换群。

旋转平移镜像
SO(3)
SE(3)
O(3)
E(3)

5. 行列式在这里管什么

上面反复出现的 det\det 是区分旋转和镜像的开关,值得单独说清楚。

detA|\det A| 是体积缩放,符号是空间方向。3×33\times 3 的展开式按第一行余子式展开:

detA=a11(a22a33a23a32)a12(a21a33a23a31)+a13(a21a32a22a31)\det A = a_{11}(a_{22}a_{33} - a_{23}a_{32}) - a_{12}(a_{21}a_{33} - a_{23}a_{31}) + a_{13}(a_{21}a_{32} - a_{22}a_{31})

它等价于把三个行向量做标量三重积:

detA=a1(a2×a3)\det A = \mathbf a_1 \cdot (\mathbf a_2 \times \mathbf a_3)

这个形式最有用,因为它一次性解释了「模是体积、符号是方向」这两句断言:a2×a3\mathbf a_2 \times \mathbf a_3 的模是两向量张成的平行四边形面积,再点乘 a1\mathbf a_1 得到高乘底面积,就是平行六面体的体积;点乘的正负取决于 a1\mathbf a_1 落在 a2×a3\mathbf a_2 \times \mathbf a_3 的哪一侧,就是三个向量的左右手性。所以这两条不是独立的性质,是同一个式子的模和符号。

回到群:det=1\det = 1 保持空间方向,是旋转;det=1\det = -1 翻转空间,是镜像。SO(3) 只允许前者,O(3) 两者都允许。

6. 手性

如果一个结构无法通过旋转和平移变成自己的镜像,它就是手性的。写成式子:镜像为 MXMX,若不存在任何 RRtt 使 MX=RX+tMX = RX + t,则 XX 具有手性。

7. E(3) 还是 SE(3):取决于任务

两者的区别只有一条:是否包含镜像。看起来像是数学上的细节,实际是任务决定的。

对普通材料的能量,E(X)=E(MX)E(X) = E(MX),镜像不影响能量,用 E(3) 对称是合理的,而且多一条对称约束等于多一条免费的先验。

对手性催化、手性分子的性质,左右手结构的行为不同,S(X)S(MX)S(X) \neq S(MX),就不能强制 E(3),只能保留 SE(3),让模型有能力区分对映体。

8. 从 SchNet 到 LEFTNet:对称性是怎么被编进网络的

早期的机器学习势函数(MLIP)不知道旋转和平移对称性,只能靠大量数据把它学出来。之后的每一代模型,本质上都是在回答同一个问题:怎么把对称性做进结构里,同时尽量少损失表达力。

SchNet 只用原子间距离 dijd_{ij} 作输入。距离天然是旋转不变量,所以模型自动满足不变性。代价是丢掉了方向信息。

DimeNet 在距离之外加入角度 θ\theta,几何信息多了一层,但仍然走的是「输入就是不变量」的路线。

PaiNN 开始让隐藏特征带方向:每个原子同时有标量特征(l=0l = 0)和矢量特征(l=1l = 1),矢量特征在旋转下跟着转。

NequIP 把这条路推到底:特征按 SO(3) 的不可约表示分解成 l=0,1,2,l = 0, 1, 2, \dots,分别对应标量、矢量、张量,层与层之间用张量积传递。

MACE 在 NequIP 的基础上引入 Atomic Cluster Expansion 的思想。两点值得单独记住:

  • 它的默认配置是 O(3) 不变,不是 SO(3)。源码里球谐函数默认用 p=1,所有 ll 都标成偶宇称,反演下什么都不翻号;只有 hidden_irreps 里出现 0o 时才切换到追踪宇称的球谐。能量读出头是 0e(真标量),所以能量在镜像下必然不变。这是对的,对映体能量严格相等。
  • 它数据效率高的原因是多体correlation=ν 让一层就得到 (ν+1)(\nu + 1) 体相互作用,而代价仍是 O(N)O(N)(先求和再取幂,交叉项就是高阶体)。叠层数只扩感受野,每层仍是两体,替代不了这个。

LEFTNet 换了一条完全不同的路。前面从 SchNet 到 MACE,等变性都来自限制运算:MACE 只能做张量积,PaiNN / EGNN 只能做「标量乘矢量」。LEFTNet(Du et al., NeurIPS 2023,前身 ClofNet)反过来,限制坐标系

code
1. 从局部几何造正交框  F = (e1, e2, e3)       F 本身等变
2. 标量化    = (v·e1, v·e2, v·e3)
3. 对标量做【任意】神经网络                     无任何对称性约束
4. 张量化   v = v̄₁e1 + v̄₂e2 + v̄₃e3

等变性由框在第 1、4 步扛住,中间随便怎么算。这是它能声称万有逼近的原因,MACE / NequIP 那一路做不到这种声称。

框由差矢量和叉乘构成:

e1=pipjpipj,e2=pi×pjpi×pj,e3=e1×e2e_1 = \frac{p_i - p_j}{\|p_i - p_j\|}, \qquad e_2 = \frac{p_i \times p_j}{\|p_i \times p_j\|}, \qquad e_3 = e_1 \times e_2

两个后果值得记住:

  • 手性只在 e2e_2 分量的符号里e2e_2 是伪矢量,所以 ve2v \cdot e_2 是伪标量。框本身恒为右手(detF+1\det \mathcal F \equiv +1),手性不在行列式里。代码里一个 torch.abs() 就能把它抹掉。在 irreps 路线里丢不掉的东西,这里是一行代码的事。
  • 框会退化:当 pipjp_i \parallel p_j,也就是两原子与质心共线时,e2=0e_2 = 0。线性分子(CO₂、炔烃)去质心后每一对都共线,框塌成秩 1,而代码里的 +EPS 只防 NaN,信息是静默丢掉的

9. 四条路线的对照

到这里第 8 节走过的其实是四条不同的技术路线:

路线等变性来自代表表达力上限手性
① 只用不变量输入就是不变量(距离、角度)SchNet, DimeNet无法自然输出矢量;几何区分力有限区分不了
② irreps + 张量积CG 规则限制允许的运算NequIP, MACE, EquiformerV2/V3lmaxcorrelation 控制parity 标签,是类型系统的一部分
③ 笛卡尔标量×矢量隐藏矢量只能被标量缩放、被相对位置相加PaiNN, EGNN实质只有 l=0,1l = 0, 1区分不了
④ 局部框 + 标量化框本身等变;标量化后运算无约束ClofNet, LEFTNet万有逼近一个开关(reflect_equiv

选择的实质是**「约束运算」还是「约束坐标系」**:

  • ②③ 约束运算:对称性是结构性的,丢不掉;代价是表达力,以及 ② 的计算量。
  • ④ 约束坐标系:表达力放开了,但框的良定性成为新的失效点,而且对称性变成可开关的软性质。

② 的计算量问题有专门的解法,EquiformerV2 的 SO(2) 技巧把 O(L6)O(L^6) 降到 O(L3)O(L^3);④ 的框退化问题目前只有 +EPS 和加 dummy 原子两种权宜之计。irreps 的记账方式、MACE 的逐模块拆解、LEFTNet 框的数值验证、EquiformerV2 的 SO(2) 技巧,后面会分别单独整理。