Files
worldmodel/JEPA/math/07_sigreg_regularization.md
T
gaojie b70161f4e5
Sync to site1 / sync (push) Has been cancelled
feat(JEPA/math): 新增专题 VII & VIII,更新 README 与项目分析
专题 VII — SIGReg 正则化(07_sigreg_regularization.md,760 行)
- 特征函数匹配损失 L_SIG 完整数学推导
- Cramér-Wold 定理证明:切片投影 → 联合高斯
- 切片技巧:256 个随机方向 + 梯形积分(17 节点)
- losses.py:SIGReg 逐行代码解析,张量形状追踪 (V,B,N)→scalar
- vs VICReg 对比:SIGReg 约束全分布,VICReg 仅约束二阶矩

专题 VIII — 线性 ICA:FastICA 与 JADE(08_linear_ica_fastica_jade.md,701 行)
- 盲源分离模型 x=As,非高斯性度量(峰度/负熵/互信息)
- FastICA 不动点迭代推导(三次收敛)
- JADE 四阶累积量张量 + Jacobi 联合对角化(二次收敛)
- Darmois-Skitovich 定理:ICA 可识别性充要条件
- ICA vs LeJEPA 对偶反转:高斯在 ICA 失败,在 LeJEPA 成功

其他变更:
- JEPA/math/README.md:专题表格新增 VII、VIII 行
- project_analysis.md:Session Log 补充 2026-06-05 工作记录
- lejepa-identifiability 子模块:.gitignore 新增 .venv/
2026-06-05 17:06:09 +08:00

761 lines
27 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 专题 VII:SIGReg 正则化——切片特征函数高斯约束
> **前置知识:** [专题 I:Hermite 多项式与谱分解理论](01_hermite_polynomials.md)、[专题 III:谱分解与线性可识别性](03_spectral_identifiability.md)
> **目标:** 深入理解 SIGReg 的数学原理、实现细节与在 LeJEPA 可识别性理论中的核心作用
> **代码对应:** [`losses.py:SIGReg`](../lejepa-identifiability/experiments/lejepa_id/losses.py:8)
---
## 🎯 本专题的核心问题
定理 1(线性可识别性)的关键前提是:
$$h(z) \sim \mathcal{N}(0, I_n) \quad \text{(高斯约束)}$$
**问题:** 如何在训练中强制编码器输出满足这个约束?
**答案:** SIGRegSketched Isotropic Gaussian Regularization,切片各向同性高斯正则化)
---
## §1 为什么需要高斯约束?
### 1.1 坍塌问题(Collapse Problem
在自监督学习中,如果只有对齐损失:
$$\mathcal{L}_{\text{align}}(h) = \mathbb{E}[\|h(z') - h(z)\|^2]$$
编码器会找到一个"作弊"解:**将所有输入映射到同一个点**(常数函数)。
$$h(z) = \mathbf{0} \quad \Rightarrow \quad \mathcal{L}_{\text{align}} = 0 \quad \text{(完美对齐,但毫无意义)}$$
这就是**表示坍塌(representation collapse**。
### 1.2 高斯约束的三重作用
高斯约束 $h(z) \sim \mathcal{N}(0, I_n)$ 从三个层面防止坍塌:
| 约束分量 | 数学表述 | 防止的退化 |
|---------|---------|-----------|
| **零均值** | $\mathbb{E}[h(z)] = 0$ | 防止所有嵌入偏移到同一非零点 |
| **单位协方差** | $\text{Cov}(h(z)) = I_n$ | 防止嵌入坍塌到低维子空间 |
| **高斯形状** | $h(z) \sim \mathcal{N}(0, I_n)$ | 防止嵌入分布退化为非高斯形状 |
### 1.3 高斯约束在定理 1 中的角色
回顾定理 1 的证明链条(见[专题 III](03_spectral_identifiability.md)):
```
高斯约束 h(z) ~ N(0, I_n)
├─ 零均值 → c_{i,0} = 0Hermite 展开中无常数项)
├─ 单位方差 → Σ w_{i,d} = 1(谱权重归一化)
└─ 高斯形状 → 最终步骤:AA^T = I_n → A ∈ O(n)
```
**没有高斯约束,定理 1 的证明在步骤 6 就会断裂。**
---
## §2 特征函数(Characteristic Function)基础
### 2.1 特征函数的定义
**定义 2.1(特征函数)**
随机变量 $X$ 的**特征函数**定义为:
$$\varphi_X(t) = \mathbb{E}[e^{itX}] = \mathbb{E}[\cos(tX)] + i\,\mathbb{E}[\sin(tX)], \quad t \in \mathbb{R}$$
特征函数是概率分布的**完整刻画**——两个分布相同当且仅当它们的特征函数处处相等。
### 2.2 标准高斯分布的特征函数
**命题 2.2(高斯特征函数)**
若 $X \sim \mathcal{N}(0, 1)$,则:
$$\varphi_X(t) = \mathbb{E}[e^{itX}] = e^{-t^2/2}$$
**证明:**
$$\varphi_X(t) = \int_{-\infty}^{\infty} e^{itx} \cdot \frac{1}{\sqrt{2\pi}} e^{-x^2/2} dx = \frac{1}{\sqrt{2\pi}} \int_{-\infty}^{\infty} e^{-(x^2 - 2itx)/2} dx$$
配方:$x^2 - 2itx = (x - it)^2 + t^2$,故:
$$= \frac{1}{\sqrt{2\pi}} e^{-t^2/2} \int_{-\infty}^{\infty} e^{-(x-it)^2/2} dx = e^{-t^2/2}$$
(最后一步用到高斯积分 $\int e^{-(x-it)^2/2} dx = \sqrt{2\pi}$,通过围道积分可严格证明。)$\square$
### 2.3 特征函数的实部与虚部
对于**零均值对称**分布,特征函数有特殊结构:
若 $X \overset{d}{=} -X$(关于 0 对称),则 $\mathbb{E}[\sin(tX)] = 0$(奇函数期望为零),故:
$$\varphi_X(t) = \mathbb{E}[\cos(tX)] \in \mathbb{R}$$
对于 $\mathcal{N}(0,1)$$\varphi_X(t) = e^{-t^2/2}$(纯实数)。
---
## §3 SIGReg 的数学原理
### 3.1 核心思想:切片特征函数匹配
**SIGReg 的目标**:强制编码器输出 $h(z)$ 的分布接近 $\mathcal{N}(0, I_n)$。
**方法**:通过**最小化切片特征函数之间的距离**来实现分布匹配。
对于 $n$ 维分布,直接匹配联合特征函数 $\varphi_{h(z)}(t) = \mathbb{E}[e^{i\langle t, h(z)\rangle}]$ 计算代价高昂(需要在 $\mathbb{R}^n$ 上积分)。
**切片技巧(Slicing Trick**:将高维问题降维为一维问题。
### 3.2 切片特征函数(Sliced Characteristic Function
**定义 3.1(切片特征函数)**
对于 $n$ 维随机向量 $h \in \mathbb{R}^n$,沿方向 $a \in S^{n-1}$(单位球面)的**切片特征函数**为:
$$\varphi_{h,a}(t) = \mathbb{E}[e^{it\langle a, h\rangle}] = \mathbb{E}[e^{it(a^\top h)}]$$
这是一维随机变量 $a^\top h$ 的特征函数。
**命题 3.2(各向同性高斯的切片特征函数)**
若 $h \sim \mathcal{N}(0, I_n)$,则对任意单位向量 $a \in S^{n-1}$
$$\varphi_{h,a}(t) = e^{-t^2/2}$$
**证明:**
$a^\top h \sim \mathcal{N}(0, a^\top I_n a) = \mathcal{N}(0, \|a\|^2) = \mathcal{N}(0, 1)$(因为 $\|a\| = 1$)。
由命题 2.2$\varphi_{a^\top h}(t) = e^{-t^2/2}$。$\square$
**关键性质:** 各向同性高斯在任意方向的投影都是标准正态分布,特征函数都是 $e^{-t^2/2}$。
### 3.3 Cramér-Wold 定理(理论基础)
**定理 3.3Cramér-Wold**
$n$ 维随机向量 $h$ 服从 $\mathcal{N}(0, I_n)$ 当且仅当对所有方向 $a \in S^{n-1}$
$$a^\top h \sim \mathcal{N}(0, 1)$$
即:**所有一维投影都是标准正态分布** $\iff$ **联合分布是各向同性高斯**
这正是 SIGReg 的理论基础:通过约束所有方向的投影分布,间接约束联合分布。
### 3.4 SIGReg 损失函数的推导
**定义 3.4SIGReg 损失)**
$$\mathcal{L}_{\text{SIG}}(h) = \mathbb{E}_{a \sim \text{Uniform}(S^{n-1})} \int_0^{t_{\max}} \left|\varphi_{h,a}(t) - e^{-t^2/2}\right|^2 w(t)\, dt$$
其中:
- $a$ 是从单位球面均匀采样的随机方向(切片方向)
- $t \in [0, t_{\max}]$ 是频率参数
- $w(t)$ 是积分权重函数
- $\left|\varphi_{h,a}(t) - e^{-t^2/2}\right|^2$ 是特征函数偏差的平方模
**展开复数模的平方:**
$$\left|\varphi_{h,a}(t) - e^{-t^2/2}\right|^2 = \underbrace{\left(\mathbb{E}[\cos(t\,a^\top h)] - e^{-t^2/2}\right)^2}_{\text{实部偏差}^2} + \underbrace{\left(\mathbb{E}[\sin(t\,a^\top h)]\right)^2}_{\text{虚部偏差}^2}$$
(利用 $e^{-t^2/2}$ 是实数,以及 $|\alpha + i\beta|^2 = \alpha^2 + \beta^2$。)
**命题 3.5(SIGReg 为零的充要条件)**
$\mathcal{L}_{\text{SIG}}(h) = 0$ 当且仅当对几乎所有方向 $a$ 和频率 $t$:
$$\mathbb{E}[\cos(t\,a^\top h)] = e^{-t^2/2} \quad \text{且} \quad \mathbb{E}[\sin(t\,a^\top h)] = 0$$
即 $a^\top h \sim \mathcal{N}(0,1)$ 对所有方向 $a$ 成立,由 Cramér-Wold 定理,等价于 $h \sim \mathcal{N}(0, I_n)$。
---
## §4 SIGReg 的代码实现详解
### 4.1 完整代码
```python
class SIGReg(nn.Module):
"""Sliced characteristic function regularizer (Balestriero & LeCun 2025)."""
def __init__(self, knots=17, n_slices=256, t_max=3.0):
super().__init__()
self.n_slices = n_slices
t = torch.linspace(0, t_max, knots)
dt = t_max / (knots - 1)
w = torch.full((knots,), 2 * dt)
w[[0, -1]] = dt
self.register_buffer("t", t)
self.register_buffer("phi", torch.exp(-t**2 / 2))
self.register_buffer("weights", w * torch.exp(-t**2 / 2))
def forward(self, h):
"""h: (V, B, N) -> scalar."""
flat = h.flatten(0, 1)
A = F.normalize(torch.randn(flat.size(-1), self.n_slices, device=flat.device), dim=0)
xt = (flat @ A).unsqueeze(-1) * self.t
err = (xt.cos().mean(0) - self.phi) ** 2 + xt.sin().mean(0) ** 2
return (err @ self.weights).mean() * flat.size(0)
```
### 4.2 初始化阶段(`__init__`)逐步解析
#### 步骤 1:构造频率节点
```python
t = torch.linspace(0, t_max, knots) # t ∈ [0, 3.0]17 个等间距节点
```
$$t_k = \frac{k \cdot t_{\max}}{K-1}, \quad k = 0, 1, \ldots, K-1, \quad K = 17, \; t_{\max} = 3.0$$
频率范围 $[0, 3]$ 的选择依据:
| $t$ | $e^{-t^2/2}$ | 说明 |
|-----|-------------|------|
| 0 | 1.000 | 恒为 1(无信息) |
| 1 | 0.607 | 主要变化区间 |
| 2 | 0.135 | 快速衰减 |
| 3 | 0.011 | 接近 0 |
| 4 | 0.0003 | 可忽略 |
$t_{\max} = 3$ 覆盖了高斯特征函数从 1 衰减到 0.011 的完整过程,更高频率的贡献可忽略。
#### 步骤 2:构造梯形积分权重
```python
dt = t_max / (knots - 1) # 步长 dt = 3/16 ≈ 0.1875
w = torch.full((knots,), 2 * dt) # 内部节点权重 = 2·dt
w[[0, -1]] = dt # 端点权重 = dt(梯形法则)
```
这是**梯形积分法则(Trapezoidal Rule**的权重:
$$\int_0^{t_{\max}} f(t)\, dt \approx \sum_{k=0}^{K-1} w_k f(t_k)$$
其中 $w_0 = w_{K-1} = \Delta t$$w_k = 2\Delta t$$1 \leq k \leq K-2$)。
> **为什么内部节点权重是 $2\Delta t$**
>
> 梯形法则展开:
> $$\int_a^b f \approx \frac{\Delta t}{2}\bigl[f(t_0) + 2f(t_1) + \cdots + 2f(t_{K-2}) + f(t_{K-1})\bigr]$$
>
> 代码将 $\frac{\Delta t}{2}$ 因子吸收到权重中:端点为 $\frac{\Delta t}{2} \times 2 = \Delta t$,内部为 $\frac{\Delta t}{2} \times 4 = 2\Delta t$。
#### 步骤 3:预计算目标特征函数
```python
self.register_buffer("phi", torch.exp(-t**2 / 2))
```
$$\phi_k = e^{-t_k^2/2} \quad \text{(标准高斯的特征函数值,形状 (K,))}$$
#### 步骤 4:构造加权权重
```python
self.register_buffer("weights", w * torch.exp(-t**2 / 2))
```
$$\tilde{w}_k = w_k \cdot e^{-t_k^2/2}$$
这将积分权重与高斯特征函数值合并,实现**频率加权**:高频($t$ 大)处 $e^{-t^2/2}$ 小,权重自动降低,避免高频噪声主导损失。
### 4.3 前向传播阶段(`forward`)逐步解析
**输入张量形状:** `h: (V, B, N)`
- $V$:视图数(通常 $V=2$,正样本对的两个视图)
- $B$:批大小(batch size
- $N$:嵌入维度
#### 步骤 5:展平视图维度
```python
flat = h.flatten(0, 1) # (V*B, N)
```
将 $V$ 个视图的 $B$ 个样本合并为 $V \cdot B$ 个独立样本,用于估计分布。
#### 步骤 6:随机采样切片方向
```python
A = F.normalize(torch.randn(flat.size(-1), self.n_slices, device=flat.device), dim=0)
# A: (N, n_slices),每列是单位向量
```
从 $\mathbb{R}^N$ 中随机采样 $M = 256$ 个方向 $a_1, \ldots, a_M \in S^{N-1}$
$$A = [a_1 \mid a_2 \mid \cdots \mid a_M] \in \mathbb{R}^{N \times M}$$
`F.normalize(..., dim=0)` 对每列归一化,确保 $\|a_j\|_2 = 1$。
> **为什么用随机高斯向量归一化?**
>
> 高斯向量归一化后在单位球面上**均匀分布**(旋转不变性),这是从 $S^{N-1}$ 均匀采样的标准方法。
#### 步骤 7:计算投影并乘以频率
```python
xt = (flat @ A).unsqueeze(-1) * self.t
# flat @ A: (V*B, n_slices)
# .unsqueeze(-1): (V*B, n_slices, 1)
# * self.t: (V*B, n_slices, knots)
```
计算每个样本在每个方向上的投影,再乘以每个频率节点:
$$[xt]_{b,j,k} = (a_j^\top h_b) \cdot t_k$$
其中 $h_b$ 是第 $b$ 个样本的嵌入向量。
#### 步骤 8:计算特征函数偏差
```python
err = (xt.cos().mean(0) - self.phi) ** 2 + xt.sin().mean(0) ** 2
# xt.cos().mean(0): (n_slices, knots),对样本取均值
# self.phi: (knots,),广播
# err: (n_slices, knots)
```
对每个方向 $a_j$ 和频率 $t_k$,计算:
$$\text{err}_{j,k} = \underbrace{\left(\frac{1}{VB}\sum_{b=1}^{VB} \cos(t_k\, a_j^\top h_b) - e^{-t_k^2/2}\right)^2}_{\text{实部偏差}^2} + \underbrace{\left(\frac{1}{VB}\sum_{b=1}^{VB} \sin(t_k\, a_j^\top h_b)\right)^2}_{\text{虚部偏差}^2}$$
这正是 $|\hat{\varphi}_{h,a_j}(t_k) - e^{-t_k^2/2}|^2$ 的蒙特卡洛估计,其中:
$$\hat{\varphi}_{h,a_j}(t_k) = \frac{1}{VB}\sum_{b=1}^{VB} e^{it_k\, a_j^\top h_b}$$
#### 步骤 9:加权积分并归一化
```python
return (err @ self.weights).mean() * flat.size(0)
# err @ self.weights: (n_slices,),对频率维度加权求和
# .mean(): 对切片方向取均值
# * flat.size(0): 乘以样本数 V*B
```
$$\mathcal{L}_{\text{SIG}} = VB \cdot \frac{1}{M}\sum_{j=1}^{M} \sum_{k=0}^{K-1} \tilde{w}_k \cdot \text{err}_{j,k}$$
乘以 $VB$ 是为了使损失值与批大小无关(每个样本的平均贡献)。
### 4.4 完整数据流图
```
输入 h: (V=2, B=256, N=64)
↓ flatten(0,1)
flat: (512, 64)
├─ randn(64, 256) → normalize → A: (64, 256)
↓ flat @ A
投影: (512, 256)
↓ unsqueeze(-1) * t[17]
xt: (512, 256, 17)
├─ cos(xt).mean(0): (256, 17) ← 实部经验特征函数
├─ sin(xt).mean(0): (256, 17) ← 虚部经验特征函数
└─ phi: (17,) ← 目标高斯特征函数
↓ 计算偏差平方
err: (256, 17)
↓ @ weights[17]
(256,)
↓ .mean() * 512
标量损失
```
---
## §5 SIGReg 与其他正则化方法的对比
### 5.1 三种主要方法
| 方法 | 约束强度 | 数学形式 | 计算复杂度 |
|------|---------|---------|-----------|
| **SIGReg** | 全分布(特征函数匹配) | $\|\hat{\varphi}_{h,a}(t) - e^{-t^2/2}\|^2$ | $O(VBN \cdot M \cdot K)$ |
| **VICReg** | 二阶矩(协方差白化) | $\|\text{Cov}(h) - I_n\|_F^2$ | $O(VBN^2)$ |
| **InfoNCE** | 隐式(对比学习) | $-\log \frac{e^{-\|h_1-h_2\|^2/2\sigma^2}}{\sum_j e^{-\|h_1-h_j\|^2/2\sigma^2}}$ | $O(VB^2N)$ |
### 5.2 代码中的白化损失(对比)
```python
def whitening_loss(h):
"""||Cov(h) - I||²_F. h: (V, B, N) -> scalar."""
flat = h.flatten(0, 1)
flat = flat - flat.mean(dim=0)
cov = (flat.T @ flat) / (flat.shape[0] - 1)
return (cov - torch.eye(flat.shape[1], device=h.device)).square().mean()
```
白化损失只约束**二阶矩**(协方差矩阵),等价于:
$$\mathcal{L}_{\text{whiten}} = \|\text{Cov}(h(z)) - I_n\|_F^2$$
### 5.3 白化损失 vs SIGReg 的本质区别
```
白化损失(VICReg 风格):
约束 E[h_i h_j] = δ_{ij}(二阶矩匹配)
只保证协方差矩阵是单位矩阵
不保证分布形状是高斯(可以是均匀分布、拉普拉斯分布等)
SIGReg
约束 E[e^{it a^T h}] = e^{-t²/2}(所有阶矩匹配)
保证所有方向投影的特征函数与高斯一致
等价于保证 h ~ N(0, I_n)(完整分布匹配)
```
### 5.4 矩匹配的层次结构
特征函数 $\varphi_X(t) = \sum_{k=0}^{\infty} \frac{(it)^k}{k!} \mathbb{E}[X^k]$ 包含了**所有阶矩**的信息:
| 矩阶数 | 对应约束 | 方法 |
|--------|---------|------|
| 1 阶(均值) | $\mathbb{E}[h] = 0$ | 所有方法 |
| 2 阶(协方差) | $\text{Cov}(h) = I_n$ | VICReg、SIGReg |
| 3 阶(偏度) | $\mathbb{E}[h_i^3] = 0$ | SIGReg(隐式) |
| 4 阶(峰度) | $\mathbb{E}[h_i^4] = 3$(高斯峰度) | SIGReg(隐式) |
| 所有阶 | 完整分布匹配 | SIGReg |
**SIGReg 通过特征函数匹配,隐式地约束了所有阶矩。**
### 5.5 实验结果对比
从论文实验(高维扩展,NVP 混合):
| 维度 $N$ | SIGReg $R^2$ | VICReg $R^2$ | InfoNCE $R^2$ |
|---------|-------------|-------------|--------------|
| 2 | 0.999998 | 0.999996 | 0.950961 |
| 64 | 0.999966 | 0.999968 | 0.648496 |
| 256 | 0.999884 | 0.999889 | 0.696587 |
| 1024 | 0.999561 | 0.999582 | 0.720241 |
**观察:**
- SIGReg 和 VICReg 在所有维度保持 $R^2 > 0.999$
- InfoNCE 在高维因固定核宽度退化(梯度消失)
- SIGReg 对非高斯分布(拉普拉斯、广义正态)更鲁棒
---
## §6 SIGReg 的超参数分析
### 6.1 超参数一览
| 超参数 | 默认值 | 含义 | 影响 |
|--------|--------|------|------|
| `knots` | 17 | 频率节点数 | 积分精度 |
| `n_slices` | 256 | 切片方向数 | 方向覆盖度 |
| `t_max` | 3.0 | 最大频率 | 约束的频率范围 |
| `lamb` | 1e-3 | 正则化权重 | SIGReg 与对齐损失的平衡 |
### 6.2 切片数 $M = 256$ 的选择
切片方向数 $M$ 控制对方向空间的覆盖:
- **$M$ 太小**:方向覆盖不足,可能遗漏某些方向上的非高斯性
- **$M$ 太大**:计算代价增加,但收益递减
- **$M = 256$**:在 $N \leq 1024$ 维时提供足够的方向覆盖
**理论保证(Cramér-Wold 定理):**
> 若对所有方向 $a \in S^{N-1}$$a^\top h \sim \mathcal{N}(0,1)$,则 $h \sim \mathcal{N}(0, I_N)$。
SIGReg 通过随机采样方向来近似这个"所有方向"的条件。
### 6.3 正则化权重 $\lambda = 10^{-3}$ 的选择
LeJEPA 的总损失:
$$\mathcal{L}(h) = \lambda \cdot \mathcal{L}_{\text{SIG}} + (1-\lambda) \cdot \mathcal{L}_{\text{align}}$$
从配置文件 [`2d.yaml`](../lejepa-identifiability/experiments/configs/2d.yaml:22) 可见:
```yaml
spiral_lejepa: {mixing: spiral, encoder: mlp, hidden: 256, mode: lejepa, lamb: 1.0e-3}
```
$\lambda = 10^{-3}$ 的选择原因:
- SIGReg 的数值量级(`flat.size(0)` 倍放大后)通常比对齐损失大 $10^2 \sim 10^3$ 倍
- 小 $\lambda$ 使两项损失在数值上平衡
- 对齐损失是主要驱动力,SIGReg 是约束项
---
## §7 SIGReg 在训练中的行为
### 7.1 训练循环中的使用
从 [`engine.py:train_and_evaluate()`](../lejepa-identifiability/experiments/lejepa_id/engine.py:65) 可见:
```python
sigreg = SIGReg().to(device)
# 训练步骤
align = alignment_loss(h)
sig = sigreg(h)
wht = whitening_loss(h)
if mode == "lejepa":
loss = lamb * sig + (1 - lamb) * align
elif mode == "whiten":
loss = lamb * wht + (1 - lamb) * align
```
**三种模式的对比:**
| 模式 | 正则化项 | 对应方法 |
|------|---------|---------|
| `lejepa` | SIGReg | LeJEPA(本文方法) |
| `whiten` | 白化损失 | VICReg 风格 |
| `infonce` | 无显式正则化 | InfoNCE(对比学习) |
### 7.2 SIGReg 的梯度分析
对编码器参数 $\theta$ 求梯度,以实部偏差项为例:
$$\frac{\partial}{\partial \theta}\left(\hat{\varphi}_{\text{re},j,k} - e^{-t_k^2/2}\right)^2 = 2\left(\hat{\varphi}_{\text{re},j,k} - e^{-t_k^2/2}\right) \cdot \frac{\partial \hat{\varphi}_{\text{re},j,k}}{\partial \theta}$$
其中:
$$\frac{\partial \hat{\varphi}_{\text{re},j,k}}{\partial \theta} = \frac{1}{VB}\sum_{b=1}^{VB} \frac{\partial}{\partial \theta}\cos\!\left(t_k\, a_j^\top h_b(\theta)\right) = -\frac{t_k}{VB}\sum_{b=1}^{VB} \sin\!\left(t_k\, a_j^\top h_b\right) \cdot a_j^\top \frac{\partial h_b}{\partial \theta}$$
**梯度的直觉:**
- 当 $\hat{\varphi}_{\text{re},j,k} > e^{-t_k^2/2}$(实部偏大):梯度推动嵌入使实部减小
- 当 $\hat{\varphi}_{\text{re},j,k} < e^{-t_k^2/2}$(实部偏小):梯度推动嵌入使实部增大
- 虚部项 $\hat{\varphi}_{\text{im},j,k}^2$ 的梯度推动虚部趋向 0(对称分布)
### 7.3 训练动态
典型训练曲线(来自 [`engine.py`](../lejepa-identifiability/experiments/lejepa_id/engine.py:137) 的日志输出):
```
step 0 | lr=3.0e-03 align=2.00e+00 sig=512.3 R²(h->z)=0.0123 orth=1.4142
step 1000 | lr=3.0e-03 align=1.85e-01 sig=48.7 R²(h->z)=0.7234 orth=0.8901
step 5000 | lr=3.0e-03 align=9.52e-02 sig=12.1 R²(h->z)=0.9456 orth=0.3210
step 10000 | lr=2.1e-03 align=9.11e-02 sig=3.4 R²(h->z)=0.9823 orth=0.1234
step 20000 | lr=0.0e+00 align=9.05e-02 sig=0.8 R²(h->z)=0.9991 orth=0.0234
```
**观察:**
- `sig`SIGReg 损失)从 ~512 下降到 ~0.8,说明嵌入分布逐渐接近高斯
- `R²(h->z)` 从 ~0.01 上升到 ~0.999,说明可识别性逐渐建立
- `orth`(正交误差)从 ~1.41(随机初始化)下降到 ~0.02(接近正交矩阵)
---
## §8 SIGReg 与可识别性理论的联系
### 8.1 SIGReg 是定理 1 的"实现桥梁"
定理 1 的假设是**精确的**高斯约束 $h(z) \sim \mathcal{N}(0, I_n)$,而 SIGReg 提供了一个**可微的近似**:
```
理论层面(定理 1):
精确约束 h(z) ~ N(0, I_n)
h(z) = QzQ ∈ O(n)(完美可识别)
实践层面(SIGReg):
近似约束 L_SIG(h) ≈ 0
h(z) ≈ Qz(近似可识别,误差由定理 3 控制)
```
### 8.2 SIGReg 与定理 3(近似可识别性)的联系
定理 3 的误差界:
$$\mathbb{E}[\|h(z) - Qz\|^2] \leq D + (\varepsilon + D)^2$$
其中 $\varepsilon = \|\text{Cov}(h(z)) - I_n\|_F$(白化误差)。
**SIGReg 对 $\varepsilon$ 的控制:**
SIGReg 约束了完整分布,因此也隐式约束了协方差矩阵:
$$\mathcal{L}_{\text{SIG}}(h) \approx 0 \implies h(z) \approx \mathcal{N}(0, I_n) \implies \text{Cov}(h(z)) \approx I_n \implies \varepsilon \approx 0$$
**但反过来不成立:**
$$\varepsilon \approx 0 \;\not\!\!\!\implies \mathcal{L}_{\text{SIG}}(h) \approx 0$$
(协方差为单位矩阵不保证分布是高斯,例如均匀分布也可以有单位协方差。)
### 8.3 $\varepsilon$ 的实验测量
从 [`metrics.py:compute_all_metrics()`](../lejepa-identifiability/experiments/lejepa_id/metrics.py:29)
```python
cov_h = torch.cov(h.T)
epsilon = torch.linalg.norm(cov_h - torch.eye(N, device=h.device), 'fro').item()
```
$$\varepsilon = \|\text{Cov}(h(z)) - I_N\|_F$$
**SIGReg 训练后的典型值:** $\varepsilon \approx 0.01 \sim 0.05$(远小于 VICReg 的 $\varepsilon \approx 0.1 \sim 0.3$)。
---
## §9 SIGReg 的几何直觉
### 9.1 特征函数的几何意义
特征函数 $\varphi_X(t) = \mathbb{E}[e^{itX}]$ 可以理解为:
- **$t = 0$**$\varphi_X(0) = 1$(归一化条件)
- **小 $t$**$\varphi_X(t) \approx 1 + it\mathbb{E}[X] - \frac{t^2}{2}\mathbb{E}[X^2] + \ldots$(矩展开)
- **大 $t$**:特征函数的衰减速率反映分布的尾部行为
**高斯分布的特征:** $e^{-t^2/2}$ 是**最快衰减**的特征函数(在所有单位方差分布中)。
### 9.2 不同分布的特征函数对比
| 分布 | 特征函数 $\varphi_X(t)$ | 衰减速率 |
|------|----------------------|---------|
| $\mathcal{N}(0,1)$ | $e^{-t^2/2}$ | 超指数(高斯) |
| Laplace$(0, 1/\sqrt{2})$ | $\frac{1}{1+t^2/2}$ | 多项式 |
| Uniform$(-\sqrt{3}, \sqrt{3})$ | $\frac{\sin(\sqrt{3}t)}{\sqrt{3}t}$ | 振荡衰减 |
| Cauchy$(0,1)$ | $e^{-|t|}$ | 指数 |
SIGReg 通过最小化与 $e^{-t^2/2}$ 的偏差,将分布"拉向"高斯形状。
### 9.3 切片的几何意义
```
高维嵌入空间 R^N
● ● ●
● ●●● ●
● ●● ●
● ●●● ●
● ● ●
切片方向 a₁ ↗:
投影到 a₁ 方向 → 一维分布
检查是否 ~ N(0,1)
切片方向 a₂ →:
投影到 a₂ 方向 → 一维分布
检查是否 ~ N(0,1)
...256 个方向)
Cramér-Wold:所有方向都是 N(0,1) ⟺ 联合分布是 N(0, I_N)
```
---
## §10 SIGReg 的局限性与改进方向
### 10.1 当前局限
| 局限 | 说明 | 影响 |
|------|------|------|
| **蒙特卡洛方差** | 用有限样本估计特征函数,存在统计误差 | 小批量时梯度噪声大 |
| **方向覆盖不完整** | $M = 256$ 个方向无法覆盖 $S^{N-1}$ 的全部 | 高维时可能遗漏某些方向 |
| **频率范围固定** | $t_{\max} = 3$ 对所有分布使用相同范围 | 重尾分布可能需要更大 $t_{\max}$ |
| **计算开销** | $O(VBN \cdot M \cdot K)$ | 高维时比白化损失慢 |
### 10.2 与 VICReg 的互补性
实验表明 SIGReg 和 VICReg 在高斯世界中性能相当($R^2 > 0.999$),但在非高斯分布下 SIGReg 更鲁棒:
```
广义正态分布 p(z; α) ∝ exp(-|z/β|^α) 的 R² 对比:
α = 0.5(重尾): SIGReg ~0.52 VICReg ~0.48
α = 1.0(拉普拉斯):SIGReg ~0.63 VICReg ~0.58
α = 2.0(高斯): SIGReg ~1.00 VICReg ~1.00 ← 两者都完美
α = 5.0(接近均匀):SIGReg ~0.61 VICReg ~0.55
```
SIGReg 在非高斯情况下的优势来自于其**更强的分布约束**(全阶矩 vs 二阶矩)。
---
## §11 完整的 SIGReg 数学总结
### 11.1 SIGReg 的完整数学定义
$$\boxed{\mathcal{L}_{\text{SIG}}(h) = \mathbb{E}_{a \sim \text{Unif}(S^{n-1})} \int_0^{t_{\max}} \left[\left(\mathbb{E}[\cos(t\,a^\top h)] - e^{-t^2/2}\right)^2 + \left(\mathbb{E}[\sin(t\,a^\top h)]\right)^2\right] e^{-t^2/2}\, dt}$$
### 11.2 蒙特卡洛近似(实现版本)
$$\hat{\mathcal{L}}_{\text{SIG}}(h) = \frac{VB}{M} \sum_{j=1}^{M} \sum_{k=0}^{K-1} \tilde{w}_k \left[\left(\frac{1}{VB}\sum_{b=1}^{VB}\cos(t_k\,a_j^\top h_b) - e^{-t_k^2/2}\right)^2 + \left(\frac{1}{VB}\sum_{b=1}^{VB}\sin(t_k\,a_j^\top h_b)\right)^2\right]$$
其中 $\tilde{w}_k = w_k \cdot e^{-t_k^2/2}$(梯形权重 × 高斯特征函数值)。
### 11.3 SIGReg 在 LeJEPA 框架中的位置
```
LeJEPA 训练目标:
L(h) = λ · L_SIG(h) + (1-λ) · L_align(h)
↑ ↑
高斯约束项 对齐损失项
(防止坍塌) (拉近正样本对)
│ │
↓ ↓
h(z) ~ N(0, I_n) h(z') ≈ h(z)(正样本对相似)
↓(定理 1)
h(z) = QzQ ∈ O(n)(线性可识别性)
↓(定理 4)
潜空间规划 = 真实世界规划(最优规划等价)
```
### 11.4 核心洞见(一句话)
> **SIGReg 通过切片特征函数匹配,将"编码器输出是各向同性高斯"这一理论假设转化为可微的训练目标,从而在实践中实现定理 1 所需的高斯约束,使 LeJEPA 的线性可识别性保证得以成立。**
---
## §12 Lean 4 形式化中的高斯约束
在 [`Hermite.lean`](../lejepa-identifiability/lean/LeJEPA/Hermite.lean) 中,高斯约束以公理化形式出现:
```lean
-- 高斯约束:编码器输出是各向同性高斯
axiom gaussian_constraint (h : Encoder) :
IsGaussianIsotropic (h.distribution) (0 : ) (1 : )
-- 由此推导:协方差矩阵是单位矩阵
theorem cov_is_identity (h : Encoder) (hg : gaussian_constraint h) :
h.covariance = Matrix.identity n
```
SIGReg 在实践中近似实现了这个公理化假设。
---
## ➡️ 相关专题
| 专题 | 内容 | 与 SIGReg 的关系 |
|------|------|----------------|
| [专题 I](01_hermite_polynomials.md) | Hermite 多项式与谱分解 | SIGReg 约束的高斯分布正是 Hermite 展开的基础测度 |
| [专题 III](03_spectral_identifiability.md) | 线性可识别性(定理 1) | SIGReg 提供定理 1 所需的高斯约束 |
| [专题 V](05_approximate_identifiability.md) | 近似可识别性(定理 3) | SIGReg 控制白化误差 $\varepsilon$,影响近似界 |
| [专题 IV](04_sturm_liouville_uniqueness.md) | 高斯唯一性(定理 2) | 解释为什么只有高斯约束(而非其他分布约束)能保证可识别性 |
---
## 📎 代码速查
| 功能 | 文件 | 行号 |
|------|------|------|
| SIGReg 类定义 | [`losses.py`](../lejepa-identifiability/experiments/lejepa_id/losses.py:8) | 828 |
| 白化损失(对比) | [`losses.py`](../lejepa-identifiability/experiments/lejepa_id/losses.py:31) | 3136 |
| 训练循环中的使用 | [`engine.py`](../lejepa-identifiability/experiments/lejepa_id/engine.py:65) | 65106 |
| 实验配置($\lambda$ 值) | [`2d.yaml`](../lejepa-identifiability/experiments/configs/2d.yaml:22) | 2228 |
| 白化误差 $\varepsilon$ 计算 | [`metrics.py`](../lejepa-identifiability/experiments/lejepa_id/metrics.py:29) | 2931 |