群和表示#
什么是群?#
想象一下可以对对象执行的一组操作——例如旋转 3D 模型、翻转二进制字符串中的位或打乱列表中的元素。这些操作可以组合:一个接一个地执行等同于某个单一操作。在数学中,尤其是在抽象代数中,具有组合律的这样一组(操作)称为群。
群是元素的集合(可以是数字、函数、变换等),与满足某些规则的组合律(如加法或乘法)相结合
封闭性:组合任意两个元素会产生群中的另一个元素。
结合性:操作分组的方式不会改变结果。
单位元素:存在一个元素,当与其他元素组合时,不会改变其他元素。
逆元素:对于每个元素,都存在另一个元素可以逆转其效果。
什么是群表示?#
群在向量空间上的作用。
群表示是一种将这个抽象群的每个元素映射或“表示”为具体对象的方式,通常是作用于向量空间的矩阵或线性变换。本质上,它用矩阵乘法来表达抽象群运算。
为什么要这样做?矩阵和线性代数是强大的工具,具有成熟的计算和解决问题的方法。通过将群元素表示为矩阵,可以利用线性代数来研究和处理群。
不可约表示#
群表示可以分解为更简单的、不可约的部分。不可约表示 (irrep) 是一种不能进一步分解为更小表示的表示。用数学术语来说,irrep 是一种没有非平凡不变子空间的表示。
因此,任何表示都可以表示为不可约表示的直和。这种分解被称为表示的不可约分解。
\(SO(3)\) 的 Irreps#
群 \(SO(3)\) 是 3D 空间中的旋转群。它有可数个不可约表示,每个表示都用一个非负整数标记。\(SO(3)\) 的 irreps 由非负整数 \(l = 0, 1, 2, \ldots\) 索引。第 \(l\) 个 irrep 的维度是 \(2l + 1\)。\(SO(3)\) 的一些 irreps 是众所周知的,并且有特殊的名称
平凡表示 (\(l = 0\)) 是一维的,对应于在旋转下不变换的标量 (例如,质量、电荷等)。
向量表示 (\(l = 1\)) 是三维的,对应于 3D 空间中的向量 (例如,位置、速度、力等)。
更高维度的 irreps 不太常见,但在物理学和数学中仍然很重要。当我们考虑向量表示的张量积时,它们就会出现。例如,\(l = 2\) irrep 是一个五维表示,对应于秩 2 对称无迹张量。秩 2 张量中剩余的自由度由 \(l = 0\) (迹) 和 \(l = 1\) (反对称部分) irreps 捕获。
\(O(3)\) 的 Irreps#
群 \(O(3)\) 是 3D 空间中的旋转和反射群。它可以等效地描述为 \(SO(3)\) 和 \(Z_2\) 的直积。群 \(Z_2\) 是由两个元素组成的群,单位元和反演。它是最小的非平凡群。它有两个不可约表示,维度均为 1,分别称为偶表示和奇表示。偶表示对应于平凡表示,奇表示对应于符号:单位元映射到 1,反演映射到 -1。\(O(3)\) 的 irreps 由一对整数 \((l, p)\) 标记,其中 \(l\) 是非负整数,\(p\) 是 1 或 -1。第 \((l, p)\) 个 irrep 的维度是 \(2l + 1\)。
示例:将应力张量分解为不可约表示#
让我们在群表示的背景下探讨应力张量的例子。应力张量 \(\sigma\) 是一个 \(3 \times 3\) 矩阵,表示作用于材料内部的内力。该矩阵的每个元素描述了力如何在材料内部某一点的不同方向上传输。为什么是矩阵?材料会经历各种类型的机械应力:张力、压力、剪切等。应力张量在一个对象中捕获所有这些力。
在坐标系旋转下,应力张量变换为
其中 \(\sigma\) 是应力张量,\(R\) 是旋转矩阵。它可以分解为对应于 \(SO(3)\) 的不同不可约表示 (irreps) 的不可约分量。
迹部分:\(l = 0\) irrep (标量)
反对称部分:\(l = 1\) irrep (向量)
对称无迹部分:\(l = 2\) irrep
让我们看看表示如何在 cuEquivariance 中编码。
Irreps
类#
Irreps
类旨在描述给定群表示中存在的不可约表示以及存在的数量。
假设你有一个维度为 80 的向量,并且你知道前 32 个分量不受旋转 (标量) 的影响,接下来的 48 个分量可以重新组合成 16 个三元组,这些三元组在旋转下像向量一样变换。你可以这样描述
import cuequivariance as cue
cue.Irreps("SO3", "32x0 + 16x1")
32x0+16x1
上面的对象表示群 \(SO(3)\) (3D 空间中的旋转) 的群表示。这个例子有两个“段”。第一个段 32x0
表示 32 份平凡表示 (0
),第二个段 16x1
表示 16 份向量表示 (1
)。
段由 +
符号分隔。每个段由一个数字后跟 x
,然后是 irrep 标签(在本例中为 0
和 1
)组成。x
前面的数字表示表示中存在多少份 irrep。irrep 标签的解释取决于群。
为方便起见,可以省略 1 的重数:1x2
可以写成 2
。
cuEquivariance 为以下群提供 irreps:\(SO(3)\)、\(O(3)\) 和 \(SU(2)\)。Irreps
构造函数的第一个参数是群名称,它是 cue.SO3
、cue.O3
和 cue.SU2
的简写。这是一个关于群 \(SU(2)\) 的示例
cue.Irreps("SU2", "6x1/2")
6x1/2
顺序很重要#
Irreps
类在大多数情况下用于“标记”数据。因此,通常情况下,你将有一个与 PyTorch 张量或 NumPy 数组关联的 Irreps
对象。你声明 irreps 的顺序将是数据存储在张量或数组中的顺序。例如,假设你有一个包含 4 个数字的张量 [1.0, 2.0, 3.0, 4.0]
。如果你将 irreps 声明为 "1x0 + 1x1"
,则第一个数字 (1.0
) 将与标量表示关联,最后一个数字 ([2.0, 3.0, 4.0]
) 将与向量表示关联。但是,如果你将 irreps 声明为 "1x1 + 1x0"
,则前三个数字 ([1.0, 2.0, 3.0]
) 将与向量表示关联,最后一个数字 (4.0
) 将与标量表示关联。
如果你以错误的顺序输入数据,变换会误解它。下游任务(例如,神经网络中的等变层)依赖于特定的结构。
设置默认群组#
你可以使用 cue.assume
为你创建的所有 irreps 设置默认群组。当你使用单个群组并且不想每次都指定它时,这非常有用。
with cue.assume(cue.SU2):
irreps = cue.Irreps("6x1/2")
print(irreps)
6x1/2