## 00:00 开场:一只猫和一个旋转的房间
想象一下你正在看一只猫的照片。照片里猫坐在地板上,脸朝左边。
现在我把这张照片旋转 90 度——猫变成了头朝上,爪子在右边。
你认得出这还是那只猫吗?
当然。你的大脑不需要重新学习「头在上的猫」,也不需要说「等等,我得翻一下我的猫识别模型」。旋转对你是透明的——猫的本质没变,只是你看它的角度变了。
但传统神经网络不这样。你给网络看「头朝左的猫」训练它,然后给它看「头朝上的猫」,它的输出会完全不同。它不是「认不出猫」——它从根本上不理解「旋转」是一种不改变本质的操作。
**GATr 想解决的问题就是:让神经网络像人一样,天生就理解旋转。**
---
## 01:12 三种错误的直觉
在理解 GATr 之前,我们先看看三种最常见的误解——我自己刚开始研究时也踩过这些坑。
### 错误想法 1:「数据增强就够了」
> "给网络喂各种旋转角度的训练数据,它自然就学会了。"
这是最常见的反驳。确实,数据增强有效——你把训练集旋转 360 次(每度一次),网络最终能学会旋转不变性。
但代价是什么?
- 训练时间变成 360 倍
- 网络没有真正「理解」旋转,只是记住了 360 种模式
- 遇到训练时没见过的旋转角度(比如 37.5 度),性能下降
这就像你教孩子认猫,不是教它「猫的特征」,而是把猫在每个角度的照片都给它看一遍。孩子不是学会了「什么是猫」,而是记住了 360 张照片。
### 错误想法 2:「坐标变换就行」
> "在输入前把所有数据对齐到一个标准方向,网络就不需要处理旋转了。"
这个思路在计算机视觉里很常见——人脸检测先对齐五官位置,再送入网络。
但问题是:对齐操作本身需要知道方向。在 3D 点云或分子结构中,「主方向」可能不存在,或者多个方向都合理。更重要的是,对齐会丢失信息——你强制把数据扭到一个框架里,可能破坏了原始的几何关系。
这就像为了用一把直尺量所有东西,你先把所有东西掰直。有些东西本来就该是弯的。
### 错误想法 3:「等变性就是数据预处理」
> "等变性不过是把坐标系固定住,或者把所有结果转回标准坐标系。"
最接近正确,但还是差了一层。
等变性不是预处理,而是**内建在网络结构里的承诺**。它说的是:输入旋转了,输出跟着旋转同样的角度,除此之外什么都不变。这个承诺不是靠数据增强「学」出来的,不是靠预处理「对齐」出来的,而是靠网络结构的数学设计**保证**出来的。
GATr 的秘密就在于:它把等变性写进了网络的 DNA,而不是希望网络在训练中偶然发现它。
---
## 04:20 四个类比
理解 GATr 的最好方式,不是看公式,而是理解它做了什么不同的事。我用四个类比来解释。
### 类比 1:乐高 vs 几何积木
**传统神经网络用乐高积木。**
每个乐高块都是一个向量(比如 3 个数字 [x, y, z])。你可以堆叠它们、连接它们,但每个块本身只是无意义的数字组合。一个 [1.2, 3.4, -0.5] 的向量,你不知道它代表一个点、一个方向、还是一个颜色。
旋转这些乐高块?你直接对每个数字做矩阵乘法。旋转后,[1.2, 3.4, -0.5] 变成了 [2.1, -0.8, 1.3]——看起来还是三个数字,但它们之间的关系完全变了。网络需要重新学习这些新数字的含义。
**GATr 用几何积木。**
几何代数里的「多向量」(multivector)不是三个数字,而是一个完整的几何对象。它同时包含:
- 标量(一个数字,比如距离)
- 向量(一个方向,比如速度)
- 双向量(一个平面,比如两个粒子定义的轨道面)
- 三向量(一个体积,比如三个粒子张成的空间)
当你旋转整个系统,这些几何对象跟着旋转——但它们的**几何关系**不变。点还是点,面还是面,只是空间方位变了。
这就像你用真正的几何体(球、立方体、圆柱)做模型,而不是用数字做模型。旋转模型时,每个几何体都跟着转,但它们之间的「相切」「相交」「平行」关系始终成立。
### 类比 2:字典翻译 vs 理解语言
**传统神经网络像字典翻译。**
你给它输入 "hello",它查字典找到 "你好"。它不理解 "hello" 是什么,只是记住了映射。
在 3D 数据上,传统网络「记住」了每个坐标模式对应的输出。输入 [1, 0, 0] 对应输出 A,[0, 1, 0] 对应输出 B。旋转后输入变成了 [0, 1, 0],网络直接查到了 B——但正确答案应该是旋转后的 A。
**GATr 像真正理解语言的人。**
它知道 "hello" 不只是一种拼写,而是一种打招呼的行为。无论用英语、法语还是日语表达,行为本身不变。
GATr 知道一个 3D 点不只是三个数字,而是空间中的一个位置。无论你怎么旋转坐标系,「这个位置相对于其他位置的关系」不变。网络学到的不是数字映射,而是**几何关系**。
### 类比 3:盲人摸象 vs 整体感知
**传统网络像盲人摸象。**
每个神经元只接触输入的一部分——比如只摸到象腿。它根据象腿的触感做判断,但不知道这是象腿、还是柱子、还是树干。
在注意力机制中,每个 token 只看到其他 token 的点积值:「我和你的数字向量点乘是 2.3」。这个 2.3 有意义吗?有——但它不直接告诉你「你离我有多远」。如果整个系统旋转了,2.3 变成了 0.8,含义全变。
**GATr 像正常视力的人。**
它看的不是「点乘值」,而是**真实的几何距离和角度**。注意力权重由真实的欧几里得距离决定——你离我 5 米,旋转后还是 5 米。这个「5 米」是几何不变量,不随坐标系变化。
所以 GATr 的注意力机制本质上在说:「我注意你,不是因为我们数字相似,而是因为你在空间上离我近。」
### 类比 4:死记硬背 vs 掌握原理
想象一个学生准备物理考试。
**死记硬背的学生**记住了每种题型的解法:「如果题目给三个粒子初始位置和速度,用公式 X 求未来位置」。但题目换成四个粒子,或者粒子初始排列变了,他就不会了。
**掌握原理的学生**理解牛顿定律:F = ma。无论几个粒子、无论怎么排列、无论怎么旋转坐标系,他都迎刃而解。
传统神经网络是死记硬背的学生。GATr 是掌握原理的学生——它把物理定律(几何不变性)写进了自己的结构里。
---
## 07:30 核心思想的 100 行代码
理论听够了,我们看看 GATr 最核心的那个注意力机制是怎么做的。
传统 Transformer 的注意力:
```python
def traditional_attention(Q, K, V):
# Q, K, V 都是普通向量 [batch, seq, dim]
scores = torch.matmul(Q, K.transpose(-2, -1)) / sqrt(dim)
weights = torch.softmax(scores, dim=-1)
return torch.matmul(weights, V)
```
问题:Q·K^T 是点积。旋转后点积会变(除非恰好对齐),注意力权重跟着乱变。
GATr 的几何注意力:
```python
def gatr_attention(Q, K, V):
# Q, K, V 是多向量 [batch, seq, channels, 16]
# 16 = 几何代数 G(3,0,1) 的维度
# Step 1: 几何内积(只在非 e_0 分量上计算,保证平移不变)
inner_products = geometric_inner_product(Q, K) # [batch, seq, seq]
# Step 2: 距离感知项(直接编码欧几里得距离)
distance_aware = euclidean_distance_term(Q, K) # [batch, seq, seq]
# Step 3: 组合 + softmax
scores = (inner_products + distance_aware) / sqrt(8 * n_channels)
weights = torch.softmax(scores, dim=-1)
# Step 4: 加权聚合(多向量加权,不是普通加权)
return multivector_weighted_sum(weights, V)
```
关键差异:
1. **输入不是普通向量,是多向量**——自带几何结构
2. **相似度不是点积,是几何内积**——旋转不变
3. **额外加了距离感知项**——物理距离旋转后不变
4. **输出也是多向量**——保持几何结构传递
---
## 09:10 费曼式三段论:它为什么有效
让我用费曼的方式解释 GATr 有效的原因。
**前提 1**:物理世界是等变的。旋转一个分子,它的化学性质不变;旋转一个机器人关节,它的运动学不变。这是客观事实,不是模型假设。
**前提 2**:传统神经网络不尊重这个客观事实。它把旋转后的数据当成完全不同的输入,需要重新学习。这相当于逼网络做无用功。
**前提 3**:GATr 把等变性写进网络结构,所以网络不需要学习「旋转后数据该怎么处理」——它自动就处理了。网络只需要学习真正重要的东西:粒子间怎么相互作用、力怎么传播。
**结论**:GATr 表现更好,不是因为它「更聪明」,而是因为它没有在传统网络那个「必须学会旋转不变性」的无底洞里浪费算力。这就像两个人考试,一个人带了计算器(GATr),另一个人被要求心算所有东西(传统网络)。不是心算的人不聪明,是他被浪费了精力。
---
## 10:05 费曼式颜料桶比喻
想象你有一个颜料桶,里面装满了不同颜色的液体——红色、蓝色、黄色混在一起,没有分层。
这就是传统神经网络的隐藏状态。你把点云数据丢进去,网络把所有信息搅在一起:位置、方向、距离、角度,全部变成无差别的数字向量。旋转后,这些数字全变了,网络不知道「哪个数字代表距离,哪个代表角度」。
**GATr 给颜料桶加了隔板。**
红色区域只放标量(距离、质量),蓝色区域只放向量(位置、速度),黄色区域只放双向量(平面、面积),绿色区域只放三向量(体积)。旋转整个桶时,每个颜色区域内部的关系不变——红色还是红色,蓝色还是蓝色。
网络学到的不是「红色数字从 0.5 变成 0.8」,而是「红色区域代表的东西和蓝色区域代表的东西之间的几何关系」。旋转后这个关系不变,所以网络不需要重新学。
**这就是几何代数的本质:给神经网络一个自带结构的数据格式,让它天然知道什么会变、什么不会变。**
---
> **参考对象**:费曼的教学法——用日常类比替代公式推导,让读者觉得自己「本来就该懂」
>
> **信息来源**:Brehmer et al. (2023) "Geometric Algebra Transformer" (arXiv:2305.18415)
#GATr #几何代数 #大白话版 #Transformer #等变网络 #费曼风格 #通俗科普 #小凯
登录后可参与表态