# 专题 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{(高斯约束)}$$ **问题:** 如何在训练中强制编码器输出满足这个约束? **答案:** SIGReg(Sketched 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} = 0(Hermite 展开中无常数项) ├─ 单位方差 → Σ 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.3(Cramé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.4(SIGReg 损失)** $$\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) = Qz,Q ∈ 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) = Qz,Q ∈ 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) | 8–28 | | 白化损失(对比) | [`losses.py`](../lejepa-identifiability/experiments/lejepa_id/losses.py:31) | 31–36 | | 训练循环中的使用 | [`engine.py`](../lejepa-identifiability/experiments/lejepa_id/engine.py:65) | 65–106 | | 实验配置($\lambda$ 值) | [`2d.yaml`](../lejepa-identifiability/experiments/configs/2d.yaml:22) | 22–28 | | 白化误差 $\varepsilon$ 计算 | [`metrics.py`](../lejepa-identifiability/experiments/lejepa_id/metrics.py:29) | 29–31 |