Ch12 §01 几何深度学习 · 讲解稿¶
章节定位: Ch12 总入口, 教"为什么 CNN / Transformer / GNN 都是同一个原理 — 群等变性"。先有"对称性"心智模型, 再谈具体架构。 承接: Ch07 Transformer + Ch08 CNN + Ch11 RL → Ch12 GDL 统一视角 走向: §02 图论基础 → §03 GNN 三件套 → §04 图注意力 → §05 3D 图 篇幅: ~4200 字 / 阅读 12 分钟 / 讲解 25-30 分钟
一 · 一句话总览¶
几何深度学习 (Geometric Deep Learning, GDL) = "识别数据对称性, 然后构建等变/不变网络"。CNN (平移)、Transformer (置换)、GNN (节点置换)、DeepSets (集合置换) 都是这条原理的实例。
二 · 三维心智模型¶
我们要从三个维度去理解 GDL:
- 数学层 (群论): 对称性 = 群, 模型 = 群上的等变/不变函数
- 结构层 (五大域): 网格 / 集合 / 序列 / 图 / 流形, 每域对应一种对称群
- 工程层 (架构): CNN / DeepSets / Transformer / GNN / 谱方法, 都是群等变的具体实现
三 · 章节主线 (5 段)¶
第 1 段 · 对称性 = 群 (10 分钟)¶
起点问题: 为什么有些模型特别擅长处理某些数据? CNN 为什么天生适合图像?
答案: 因为它们"尊重"了数据的对称性。
3.1.1 什么是对称性¶
定义: 一个变换如果让对象的"本质"不变, 它就是对称性。 - 正方形有 8 种对称 (4 旋转 + 4 反射) - 圆形有无穷多 (任意角度旋转都是) - 猫图像: 平移、缩放、轻微旋转都不会改变"是猫"
机器学习启示: 如果任务有对称性, 模型应该对对称变换不敏感。猫检测器对猫在左上还是右下, 都应该输出"猫"。
3.1.2 群的四条公理¶
对称性用群 \(G\) 严格描述。群有四条公理:
| 公理 | 含义 | 例子 |
|---|---|---|
| Closure | 两个变换复合还是群内变换 | 旋转 90° + 旋转 90° = 旋转 180° |
| Associativity | \((g_1 g_2) g_3 = g_1 (g_2 g_3)\) | 矩阵乘法结合律 |
| Identity | 存在"啥也不做"的 \(e\) | 单位旋转 0° |
| Inverse | 每个 \(g\) 有逆 \(g^{-1}\) | 旋转 +30° 配旋转 -30° |
回忆 Ch02 §04 矩阵乘法 — 这些公理和向量空间公理同源。区别是: 群作用于"变换", 向量空间作用于"向量"。
3.1.3 深度学习里的关键群¶
| 群 | 符号 | 作用于 | 对应架构 |
|---|---|---|---|
| 平移群 | \(\mathbb{R}^n, +\) | 图像/信号平移 | CNN |
| 置换群 | \(S_n\) | 节点/词 token 重排 | GNN / Transformer |
| 旋转群 | \(SO(n)\) | 2D / 3D 旋转 | 等变网络 |
| 欧氏群 | \(E(n)\) | 旋转 + 反射 + 平移 | 物理建模 |
| 特殊欧氏群 | \(SE(n)\) | 旋转 + 平移 (刚体) | 机器人 / 分子 |
群作用 (group action) \(\rho: G \times X \to X\) 描述"群如何变换数据"。例如: 平移群作用于图像 = 像素坐标偏移; 置换群作用于图 = 节点重编号。
第 2 段 · 不变性 vs 等变性 (8 分钟)¶
核心: 这两个概念是 GDL 的语言, 必须分清。
3.2.1 不变性 (Invariance)¶
含义: 输入怎么变, 输出都不变。
例子: - 图像分类: 猫在左上/右下都是"猫" → 分类输出不变 - 图像亮度: 整体亮度调整, 平均亮度不变 - 图性质: 节点编号重排, 图的连通性不变
3.2.2 等变性 (Equivariance)¶
含义: 输入怎么变, 输出"对应地变"。
例子: - CNN 卷积: 图像右移 5 像素 → 特征图也右移 5 像素 - 目标检测: 猫移动 → 边界框跟着移动 - GNN 节点分类: 节点排列 → 输出跟着排列
3.2.3 何时用哪个¶
| 位置 | 选择 | 理由 |
|---|---|---|
| 中间层 | 等变 | 保留结构给下游用 |
| 最终输出 | 不变 | 答案不应依赖变换 |
CNN 典型套路: 卷积层 (等变) 堆叠 → 全局池化 (不变) → 分类。
3.2.4 等变性的工程价值¶
定理 (GDL 第一性原理): 把对称性"烧进"架构, 比从数据"学出来"指数级高效。
例如: 平移等变 CNN 用权重共享, 比全连接网络"猫在 (10,10) 与 (200,150) 都要学" 节省指数级参数。
第 3 段 · 五大几何域 (12 分钟)¶
GDL 识别出五大基础数据域, 每个有专属对称群。
3.3.1 网格 (Grids) — CNN¶
- 数据: 图像、音频频谱、体数据
- 对称: 平移 (可选: 旋转 + 反射)
- 架构: CNN
- 关键: 卷积 = 平移等变算子, 权重共享是平移等变的具体实现
# CNN 卷积: 平移等变
import torch.nn as nn
conv = nn.Conv2d(3, 64, kernel_size=3, padding=1)
# 图像平移 → 输出对应平移
3.3.2 集合 (Sets) — DeepSets / PointNet¶
- 数据: 点云、粒子系统
- 对称: 置换不变
- 架构: DeepSets / PointNet (Ch08)
- 公式: \(f(\{x_1, \dots, x_n\}) = \phi\left(\sum_i \psi(x_i)\right)\)
# DeepSets: 共享函数 + 置换不变聚合
import torch
def deepsets(x):
# x: [n, d]
h = torch.relu(torch.nn.Linear(d, 64)(x)) # psi
g = h.sum(dim=0) # sum = 置换不变
return torch.nn.Linear(64, 10)(g) # phi
3.3.3 序列 (Sequences) — Transformer / RNN¶
- 数据: 文本、时间序列
- 对称: 复杂 — 绝对位置可重要 / 可不重要
- 架构: RNN (自回归) / Transformer (全连接注意力)
- 关键: 自注意力置换等变 (在加入位置编码前)
3.3.4 图 (Graphs) — GNN (本章重点)¶
- 数据: 社交网络、分子、知识图谱
- 对称: 节点置换
- 架构: GNN — 消息传递
- 关键: 邻居聚合, 共享函数, 与节点顺序无关
3.3.5 流形 (Manifolds) — 谱方法 / 几何深度¶
- 数据: 表面、3D 形状
- 对称: 微分同胚 (smooth deformation)
- 架构: Laplace-Beltrami 算子、内蕴表示
- 应用: 形状分析、球面气候建模、蛋白表面
3.3.6 统一视角¶
graph LR
A[CNN 网格] -->|平移等变| D[统一: 群等变]
B[DeepSets 集合] -->|置换不变| D
C[Transformer 序列] -->|置换等变| D
E[GNN 图] -->|置换等变| D
F[谱方法 流形] -->|微分同胚| D
金句: CNN = 网格图上的 GNN, Transformer = 完全图上的 GNN, DeepSets = 无边图 GNN。
第 4 段 · 尺度分离与粗化 (8 分钟)¶
3.4.1 多尺度结构¶
真实数据有多尺度: - 图像: 像素 → 边缘 → 部件 → 整体场景 - 分子: 原子 → 官能团 → 整体形状 - 文本: 字 → 词 → 句 → 段 → 文档
3.4.2 尺度分离原则¶
核心: 分层处理, 从细到粗, 每一层学一个抽象级别。
每一层 \(h^{(l)}\) 对当前尺度的对称群等变, 最终全局表征 \(y\) 不变。
3.4.3 各架构实例¶
| 架构 | 粗化方式 |
|---|---|
| CNN | Max/Avg Pooling |
| GNN | DiffPool / TopK Pool |
| Transformer | 池化注意力 / Swin Window |
| PointNet++ | KNN + 分层 max |
3.4.4 深度网络的胜利¶
定理 (深度 ≈ 抽象级别数): 更深的网络 = 更多层抽象 = 更好性能。每一层学一个尺度, 多层叠加构成复杂不变特征。
第 5 段 · 实践: 验证对称性 (8 分钟)¶
三个 Python 实验验证三条原理。
3.5.1 实验 1: 卷积平移等变¶
import jax.numpy as jnp
# 1D 信号
signal = jnp.array([0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0], dtype=float)
kernel = jnp.array([1, 0, -1], dtype=float)
# Convolve then shift
conv_result = jnp.convolve(signal, kernel, mode="same")
shifted_signal = jnp.roll(signal, 3)
conv_shifted = jnp.convolve(shifted_signal, kernel, mode="same")
shifted_conv = jnp.roll(conv_result, 3)
# Equivariant: shift(conv(x)) == conv(shift(x))
assert jnp.allclose(shifted_conv, conv_shifted, atol=1e-5)
print("CNN is translation-equivariant ✓")
3.5.2 实验 2: DeepSets 置换不变¶
import jax
import jax.numpy as jnp
x = jnp.array([[1.0, 2.0], [3.0, 4.0], [5.0, 6.0], [7.0, 8.0]])
psi = lambda v: v ** 2
def deepsets(points):
return jnp.sum(jax.vmap(psi)(points), axis=0)
result1 = deepsets(x)
perm = jnp.array([2, 0, 3, 1])
result2 = deepsets(x[perm])
assert jnp.allclose(result1, result2)
print("DeepSets is permutation-invariant ✓")
3.5.3 实验 3: 旋转矩阵的群公理¶
import jax.numpy as jnp
def rot2d(theta):
return jnp.array([[jnp.cos(theta), -jnp.sin(theta)],
[jnp.sin(theta), jnp.cos(theta)]])
R1 = rot2d(jnp.pi / 6)
R2 = rot2d(jnp.pi / 4)
R3 = rot2d(jnp.pi / 3)
# Closure: 旋转的积还是旋转
R12 = R1 @ R2
assert jnp.allclose(R12.T @ R12, jnp.eye(2), atol=1e-5)
assert jnp.isclose(jnp.linalg.det(R12), 1.0)
# Identity
assert jnp.allclose(rot2d(0), jnp.eye(2))
# Inverse
assert jnp.allclose(R1 @ R1.T, jnp.eye(2))
print("SO(2) satisfies all group axioms ✓")
四 · 易错点 (5 条)¶
- 混淆不变与等变: 不变 = 输出不变; 等变 = 输出跟着变。目标检测要等变, 分类要不変。
- 群 ≠ 群作用: 群是变换的集合, 群作用是"变换如何作用于数据"。
- SE(3) ≠ E(3): SE(3) 含旋转+平移, E(3) 还含反射。物理常用 SE(3), 化学分子考虑 E(3)。
- CNN 是 GDL 的特例: 平移是它的对称群, 但 CNN 也可以加旋转等变 (e.g., group equivariant CNN)。
- 五大域可重叠: 图可以是流形上的图 (流形上的节点); 序列是 1D 网格。所有域互相渗透。
五 · 跨章连接¶
| 章节 | 关联 |
|---|---|
| Ch02 §04 矩阵论 | 群 = 满足四条公理的变换集合, 矩阵乘法是常见实现 |
| Ch06 §03 CNN | 平移等变, 网格数据 |
| Ch07 §04 Transformer | 置换等变 (无位置编码时) |
| Ch08 §04 Diffusion | 扩散方程满足旋转/平移等变 |
| Ch11 §05 VLA | 状态空间是图 (机器人/物体), GNN 可编码 |
| Ch14 §04 图算法 | 邻接/拉普拉斯/Dijkstra 的数学基础 |
六 · 自测 5 题¶
- 群的四条公理是什么?
- 不变与等变的区别? 举两个例子。
- SO(3) 与 SE(3) 的差别?
- CNN 是平移等变, 还是平移不变? 目标检测呢?
- 五大几何域分别是什么? 各自的对称群?
七 · 一句话总结¶
几何深度学习 = "识别数据对称性 → 构建群等变/不变网络"。它把 CNN / Transformer / GNN 统一在同一个框架下, 并指导新架构设计。Ch12 接下来 §02-§05 都建立在 GDL 的"群等变"地基上。
八 · 板书建议¶
[板书 1: 群公理]
G, closure, associativity, identity, inverse
[板书 2: 不变 vs 等变]
f(g·x) = f(x) ← 不变
f(g·x) = g·f(x) ← 等变
[板书 3: 五大域]
网格 (平移) → CNN
集合 (置换) → DeepSets
序列 (置换) → Transformer
图 (置换) → GNN
流形 (微分) → 谱方法
[板书 4: 尺度分离]
x → h⁽¹⁾ → h⁽²⁾ → ... → y
细 → 粗 → 全局
九 · 参考资料¶
- Bronstein, Bruna, Cohen, Velickovic, "Geometric Deep Learning: Grids, Groups, Graphs, Geodesics, and Gauges", 2021
- Michael Bronstein YouTube 系列: GDL 教程
- Ch07 Transformer (本套书)
- Ch08 CNN (本套书)
- PyTorch Geometric 文档 (GNN 实现)