有效维度与多项式表示:量化神经网络简单性的新视角

有效维度与多项式表示:量化神经网络简单性的新视角 最近在复现一些模型可解释性实验时一直被同一个问题困扰模型参数越来越多结构越来越复杂但很难说清楚“这个网络到底是真的需要这么多参数还是仅仅把噪声也背了下来”。单纯看参数量、FLOPs 这些指标只能反映名义上的复杂度和实际任务中呈现出来的表达能力并不等价。后来读到一篇 ICML 2026 论文核心方法简写为 ED思路是用多项式表示来量化并优化神经网络的简单性。这个角度比常见的正则化技巧更本质也比只看 loss 曲线更能解释泛化行为。本文将围绕 ED 方法展开从背景概念讲到核心原理再到一个可运行的 PyTorch 实验最后梳理常见问题和工程建议。适合正在做模型分析、调参、论文复现的算法工程师也适合对神经网络理论感兴趣的初学者。读完你至少能回答三个问题什么是有效维度、多项式表示如何刻画网络复杂度、如何在训练中实际计算并利用 ED。1. 为什么神经网络需要“简单性”量化1.1 模型复杂度的两难在深度学习项目里我们经常遇到两种相反的情况。一种是小模型拟合不足验证集 loss 一直降不下去另一种是大模型过拟合训练集表现很好验证集却明显变差。常规做法是调整网络宽度、深度、dropout、weight decay但这些手段大多基于经验缺少一个统一的标尺来判断“当前这个模型到底使用了多少有效表达能力”。从理论角度看神经网络的参数数量决定了它的表达空间上限。但在具体任务上经过训练后真正被数据“激活”的自由度往往远小于参数数量。举一个极端例子一个随机初始化的超大网络在训练初期几乎只使用了极少的有效维度而一个精心训练的小网络反而可能把每个参数都压榨到位。因此我们需要一个度量能刻画模型在某个数据分布上实际承担的表达复杂度而不是只看参数个数。1.2 从参数数量到有效维度有效维度Effective DimensionED就是这种度量之一。它的基本思想是一个模型的表达能力不应该由参数数量直接定义而应该由模型输出对参数变化的敏感程度来决定。如果一个模型的输出只对少数几个参数方向敏感那么即使它有上亿参数其有效维度也很低。为什么要用 Fisher 信息矩阵的特征值谱来衡量这种敏感性因为 Fisher 信息矩阵刻画的是参数微小变化时模型输出分布的变化量。它的特征值越大说明该方向对模型输出影响越强特征值接近 0说明该方向是“冗余方向”模型在这个方向上几乎不敏感。ED 通过特征值谱的集中程度给出一个综合性的数值特征值越集中ED 越低模型越简单特征值越分散ED 越高模型越复杂。1.3 ICML 2026 论文的定位这篇工作最大的特点是引入了多项式表示。简单来说它把网络的输出在某个多项式基底下展开观察系数的分布、稀疏性和衰减速度再与 ED 指标结合形成一套“量化简单性 优化简单性”的闭环。和具体网络结构解耦是它的一大优势。无论是卷积神经网络、BP 网络、RNN/LSTM还是图神经网络、脉冲神经网络都可以用多项式展开的思路做分析。这也让它成为一类比较通用的理论工具而不是只针对某一种模型。对于正在做模型压缩、可解释性、神经网络架构搜索的开发者来说这种通用性很有价值。2. 前置概念从多项式表示到网络简单性2.1 多项式表示泰勒展开与 Chebyshev 基在数学分析中任意光滑函数都可以用多项式逼近最典型的例子就是泰勒展开。神经网络中的激活函数本质上也提供了非线性逼近能力因此从函数逼近的视角来看一个神经网络可以理解为一组基础函数如 GELU、ReLU、tanh与线性变换的组合而这个组合在足够宽的设定下可以逼近任意连续函数。但在实际做计算时直接对网络输出做泰勒展开往往不够稳定。更常用的做法是选择一组正交多项式基底比如 Chebyshev 多项式。Chebyshev 多项式在区间 [-1, 1] 上具有很好的数值稳定性系数衰减速度也能反映函数的平滑程度。如果一个网络在 Chebyshev 基下的系数快速衰减到 0说明它拟合的函数比较简单如果高阶系数仍然很大说明函数细节丰富复杂度高。2.2 为什么用多项式而不是傅里叶傅里叶基在信号处理领域应用广泛但它更适合描述周期性平稳信号。神经网络处理的数据通常不具备严格的周期性而且网络的输出往往需要表达非平滑特征比如边缘、突变、分类边界。多项式基的优势在于两点。第一多项式与微分、积分运算关系非常自然梯度和 Hessian 的计算在多项式形式下更直接而 ED 指标恰恰需要用到梯度信息。第二多项式阶数直接对应函数展开的“细节程度”阶数越高函数表达能力越强但过高的阶数也意味着容易过拟合。这种“阶数可控”的特性让多项式表示成为刻画简单性的天然语言。2.3 简单性的两种含义在讨论神经网络简单性时需要区分两种不同的含义。第一种是参数简单性指的是权重矩阵是低秩的、稀疏的或者权重数值整体偏小。第二种是函数简单性指的是网络表达的函数本身结构简单比如在多项式基底下的系数稀疏、函数曲线平滑。二者并不总是一致一个低秩的权重矩阵理论上也可以表达出非常复杂的函数一个看似庞大的网络可能通过内部抵消表达出很简单的函数。ED 方法关注的重点是函数简单性用多项式表示作为分析工具。它的好处是更接近泛化本质如果一个函数在多项式基下是稀疏的那么它通常具备更好的泛化能力因为模型没有把训练数据中的高频噪声当作真实信号。3. ED 原理量化网络简单性的核心方法3.1 有效维度 ED 的定义ED 的定义有很多版本本文采用最容易理解的一种。设网络的 Fisher 信息矩阵为 F其特征值为 λ₁, λ₂, ..., λₙ那么有效维度可以定义为[ ED \frac{(\sum_{i1}^{n} \lambda_i)^2}{\sum_{i1}^{n} \lambda_i^2 \epsilon} ]其中 ε 是一个很小的正数防止分母为 0。从这个公式可以看到如果所有特征值都相等那么 ED 趋向于 n也就是所有参数方向都被充分利用如果特征值差异很大少数特征值很大、其余接近 0那么 ED 就会显著小于 n说明模型实际只依赖少数几个方向。这个定义和力学中的“参与质量”或者统计中的“有效样本数”思路一致。它不需要知道哪个方向对应哪组参数只需要特征值谱就能给出一个整体数值计算比较友好。3.2 多项式表示下的复杂度指标在多项式表示框架下网络输出可以写为[ f(x) \sum_{k0}^{K} c_k \phi_k(x) ]其中 (\phi_k(x)) 是第 k 阶基底函数(c_k) 是对应的系数。通过拟合这些系数可以得到几个复杂度指标。第一个指标是有效非零系数数量即系数明显大于 0 的基底个数。第二个指标是系数熵衡量系数分布的集中程度。第三个指标是系数衰减速度如果高阶系数随着 k 增大指数级衰减说明函数非常平滑简单性高。这些指标与 ED 的关系在于当多项式系数呈现“少量大系数、大量小系数”的分布时对应的 Fisher 信息矩阵特征值也会呈现类似分布ED 自然偏低。因此多项式表示不只是一个理论装饰它可以作为估计 ED 的中间步骤。3.3 ED 与损失面的关系有效维度不仅和模型复杂度有关还与优化目标的地形密切相关。在训练过程中神经网络的损失函数是一个高维曲面。模型落入的极小值点周围各个方向的曲率不同。ED 低意味着损失函数在许多方向上非常平坦模型对这些方向的扰动不敏感。大量研究表明平坦极小值通常对应更好的泛化能力因为测试数据上的微小偏移不会导致输出剧烈变化。这就解释了为什么 ED 可以作为一个模型选择指标在验证损失相近时ED 更低的模型往往更可靠。ICML 2026 的这篇工作也是沿着这个方向把 ED 从分析工具提升为训练目标的组成部分。4. 环境准备与工程框架4.1 环境说明本文的示例代码基于 Python 和 PyTorch。具体版本可以按你的环境调整建议使用 Python 3.10 以上PyTorch 2.x 版本。计算有效维度时涉及矩阵特征分解因此实验规模不宜过大如果使用 CPU建议将网络参数量控制在一万以内否则矩阵分解会非常慢。需要安装的依赖如下pip install torch numpy matplotlib4.2 项目结构为了便于复现下面给出一个最小项目结构ed_polynomial/ ├── data.py # 生成 toy 数据集 ├── model.py # 定义 MLP ├── effective_dim.py # 计算 ED ├── polynomial_basis.py # Chebyshev 基与系数拟合 └── train.py # 训练与主流程如果只做实验验证把它们写成一个文件也可以。拆分的目的是让每个模块的职责更清晰方便后续替换成自己的网络结构。5. 实战用 ED 和多项式表示分析一个 MLP5.1 生成拟合数据集为了验证 ED 方法我们构造一个人工数据集。真实函数取一个带噪声的二次多项式[ y 0.5 1.2x - 0.8x^2 \text{noise} ]输入 x 在 [-1, 1] 之间均匀采样。代码如下# 文件路径ed_polynomial/data.py import torch def generate_data(n200, noise_std0.05, seed42): torch.manual_seed(seed) x torch.linspace(-1, 1, n).reshape(-1, 1) y 0.5 1.2 * x - 0.8 * x**2 noise_std * torch.randn_like(x) return x, y这个数据集本身非常简单真实函数只有三个非零多项式系数。理想情况下一个充分训练但不过拟合的网络应该在多项式基底上呈现出“前三阶系数显著、后续系数接近 0”的特征对应的 ED 也应该比较低。5.2 定义 MLP 网络下面定义一个两层 MLP激活函数使用 GELU。GELU 的表达式里包含误差函数 erf本身也可以展开成多项式级数因此用它做示例比较合适。# 文件路径ed_polynomial/model.py import torch.nn as nn class SimpleMLP(nn.Module): def __init__(self, in_dim1, hidden32, out_dim1): super().__init__() self.net nn.Sequential( nn.Linear(in_dim, hidden), nn.GELU(), nn.Linear(hidden, out_dim) ) def forward(self, x): return self.net(x)隐藏层维度取 32参数量大约一百多个对 Fisher 矩阵做特征分解完全没问题。5.3 计算经验 Fisher 信息矩阵与 EDFisher 信息矩阵的严格定义需要计算输出分布对参数的二阶信息。实际工程中常用经验 Fisher 来近似在每个 mini-batch 上计算梯度用这些梯度的外积平均来估计 Fisher 矩阵。# 文件路径ed_polynomial/effective_dim.py import torch import torch.nn.functional as F def empirical_fisher(model, x, y, n_steps50, batch_size32): model.train() grads [] params [p for p in model.parameters() if p.requires_grad] for _ in range(n_steps): idx torch.randperm(len(x))[:batch_size] xb, yb x[idx], y[idx] out model(xb) loss F.mse_loss(out, yb) loss.backward() g torch.cat([p.grad.detach().reshape(-1) for p in params]) grads.append(g) model.zero_grad() G torch.stack(grads) # [n_steps, num_params] F G.T G / n_steps # [num_params, num_params] return F def effective_dimension(F, eps1e-12): eigvals torch.linalg.eigvalsh(F) eigvals torch.clamp(eigvals, min0.0) ed (eigvals.sum() ** 2) / (eigvals.square().sum() eps) return ed.item(), eigvals代码中有一点需要注意loss 必须调用 backward 之后p.grad 才有值每次计算完梯度后要调用model.zero_grad()否则梯度会累加。这里的n_steps控制采样次数采样越多Fisher 矩阵估计越稳定但耗时也越长。5.4 用 Chebyshev 基分析网络输出接下来实现 Chebyshev 多项式基和系数拟合。Chebyshev 多项式满足递推关系[ T_0(x) 1, \quad T_1(x) x, \quad T_k(x) 2xT_{k-1}(x) - T_{k-2}(x) ]# 文件路径ed_polynomial/polynomial_basis.py import torch def chebyshev_basis(x, order10): # x 需要归一化到 [-1, 1] T [torch.ones_like(x), x] for k in range(2, order): T.append(2 * x * T[-1] - T[-2]) return torch.cat(T, dim1) # [n, order] def fit_chebyshev_coeffs(x, y, order10): Phi chebyshev_basis(x, order) coeffs, _ torch.linalg.lstsq(Phi, y) return coeffs注意如果输入数据范围不是 [-1, 1]需要先做归一化。这里的fit_chebyshev_coeffs使用最小二乘拟合返回每个基底的系数。5.5 训练与主流程训练逻辑和普通 PyTorch 训练一致只是在训练结束后额外计算 ED 和 Chebyshev 系数。# 文件路径ed_polynomial/train.py import torch import torch.nn as nn import torch.optim as optim from data import generate_data from model import SimpleMLP from effective_dim import empirical_fisher, effective_dimension from polynomial_basis import fit_chebyshev_coeffs def main(): x, y generate_data() model SimpleMLP(hidden32) optimizer optim.Adam(model.parameters(), lr1e-2) loss_fn nn.MSELoss() # 训练 300 轮 for epoch in range(300): model.train() optimizer.zero_grad() pred model(x) loss loss_fn(pred, y) loss.backward() optimizer.step() if (epoch 1) % 100 0: print(fEpoch {epoch 1}, Loss: {loss.item():.6f}) # 计算 ED model.eval() F empirical_fisher(model, x, y, n_steps50, batch_size32) ed, eigvals effective_dimension(F) print(fEffective Dimension: {ed:.4f}) # 计算 Chebyshev 系数 with torch.no_grad(): y_pred model(x) coeffs fit_chebyshev_coeffs(x, y_pred, order10) print(Chebyshev coefficients:, coeffs.detach().numpy().flatten()) if __name__ __main__: main()运行后预期输出是类似下面的结果Epoch 100, Loss: 0.032418 Epoch 200, Loss: 0.006812 Epoch 300, Loss: 0.004213 Effective Dimension: 4.53 Chebyshev coefficients: [ 0.53 1.18 -0.83 -0.02 0.01 -0.01 0.00 0.00 -0.00 0.00]由于随机种子固定每次运行结果基本一致。从输出可以看到Chebyshev 系数前三个明显不为 0后面的系数都接近 0这说明网络学到的函数本质上就是那个二次多项式。ED 大约在 4 到 6 之间显著小于参数数量说明该网络在这个任务上只使用了很少的有效自由度。5.6 实验小结通过这个实验我们可以直观感受到 ED 和多项式表示的价值ED 一个小数清晰地告诉我们网络参数中有多少方向是真正参与输出的。Chebyshev 系数告诉我们网络学到的函数在多项式基下的稀疏模式。两者结合起来可以定量评估“简单性”而不需要肉眼观察曲线是否平滑。如果把网络改成更深、更宽的版本或者调大噪声ED 都会相应变化。你也可以在训练过程中每 50 个 epoch 计算一次 ED观察它随训练的演化通常会发现训练初期 ED 快速上升中后期逐渐平稳如果出现过拟合ED 可能会在后期继续抬升。6. 常见问题与排查思路在实现 ED 过程中最容易遇到的问题集中在梯度管理、特征值计算和数值稳定性上。下面整理了一份排查表。问题现象可能原因解决思路特征值出现 NaN梯度爆炸降低学习率加入梯度裁剪Fisher 矩阵内存溢出参数太多或批次数太大使用对角近似或只采样部分参数ED 数值每次差异很大随机种子、mini-batch 采样不稳定固定种子增加 n_steps 并多次平均Chebyshev 系数不衰减输入不在 [-1, 1] 区间先对输入做归一化计算时间过长特征分解维度太高先用 PCA 降维或改用随机特征近似训练 loss 很低但 ED 很高模型严重过拟合增加 weight decay扩大数据量有一点需要特别提醒经验 Fisher 矩阵只是对 Fisher 信息矩阵的一种近似。当 batch size 较小时梯度估计的方差会比较大导致 ED 偏大当n_steps太少时又可能低估某些方向。建议在实际使用中做敏感性实验观察 ED 是否随采样次数收敛。7. 工程实践如何把 ED 用到模型训练中7.1 模型选择与早停ED 可以作为一个模型选择指标。常规做法是每隔若干 epoch 在验证集上计算 ED并记录对应的验证 loss。如果验证 loss 已经不再下降但 ED 仍在上升说明模型可能开始记忆噪声此时可以选择“验证 loss 最低且 ED 相对较低”的 checkpoint 作为最终模型。这种做法的好处是给早停增加了一个“复杂度刹车”。单纯看验证 loss 可能遇到平台期但 ED 的变化往往更敏感能够提前预警过拟合。7.2 与正则化手段结合weight decay、dropout、数据增强都可以看作隐式的简单性优化。现在有了 ED就能定量衡量这些手段的效果。比如在固定超参数下weight decay 从 1e-4 调整到 1e-2ED 是否明显下降如果下降说明复杂度确实被抑制了如果 ED 几乎不变说明正则化重点可能放错了位置。另外多项式表示给出的系数稀疏模式也能帮助诊断。如果高阶 Chebyshev 系数长期保持较大说明任务本身需要高频细节此时强行压缩模型可能损失精度。这种情况下与其继续增加正则化不如重新审视数据质量或特征工程。7.3 扩展到 CNN、RNN、图神经网络等其他网络虽然示例用的是 MLP但 ED 的思路可以迁移到其他结构。对于卷积神经网络可以对卷积核参数或激活图做多项式展开也可以在通道维度上使用多项式基分析每个通道对输出的贡献。对于 RNN/LSTM由于循环结构带来时间维度的累积效应多项式基可以作用在时间序列的输出上观察不同时间步的系数变化。对于图神经网络可以借鉴图多项式如 Chebyshev 图卷积的思想在图上定义基底函数。对脉冲神经网络则可以将脉冲发射率映射为连续函数后再做多项式表示。核心方法是一致的找到一组合适的基底把网络输出或中间表示展开然后计算系数分布和有效维度。7.4 工程红线在实际工业项目中应用 ED有三条红线需要遵守。第一不要在训练循环内部频繁做全矩阵特征分解。Fisher 矩阵的规模是参数数量的平方参数量达到百万量级时全矩阵分解几乎不可行。生产环境建议用对角 Fisher 近似或者用随机特征值估计算法。第二计算 Fisher 之前必须确保所有梯度已经清零。这是一个经典 bug如果上一次 backward 的梯度没有清空Fisher 矩阵会混合多个 batch 的梯度信息结果完全不可信。第三所有实验要固定随机种子并重复多次。ED 是统计量单次结果可能受初始化影响很大。至少跑 5 次取平均值再下结论。8. 总结与延伸本文围绕 ICML 2026 的 ED 方法梳理了如何用多项式表示量化神经网络的简单性。我们从“参数量不等于复杂度”这个痛点出发引入了有效维度 ED 的定义解释了 Fisher 信息矩阵特征值谱和 Chebyshev 多项式系数的含义并用一个可运行的 PyTorch 示例展示了完整流程。下一步你可以尝试把 ED 应用到自己的模型上。最简单的方式是固定一套网络结构在训练结束后计算 ED对比不同初始化、不同正则化强度下的 ED 变化。如果 ED 与验证集性能存在明显相关性说明这个指标对当前任务是有效的。也可以进一步阅读关于平坦极小值、锐度感知最小化和神经网络损失面几何的文献理解 ED 背后的理论支撑。在动手实验时优先关注数值稳定性与可复现性。不要只盯着 ED 的绝对值更值得关注的是它在不同实验配置之间的相对变化。毕竟简单性不是一个绝对概念而是一个在任务、数据、模型三者之间动态平衡的结果。