Thanks to visit codestin.com
Credit goes to github.com

Skip to content

「光谱对齐构造法:通过预计算的低维子空间进行高效的神经网络参数构造」的官方实现。

License

Notifications You must be signed in to change notification settings

Chunjiang-Intelligence/SAC

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 

Repository files navigation

光谱对齐构造法:通过预计算的低维子空间进行高效的神经网络参数构造

Python 3.8+ PyTorch Scikit-learn License: MIT

目录

项目简介

本项目探索并实现了一种新颖的神经网络参数构造方法——光谱对齐构造法 (Spectral Alignment Construction, SAC)。传统神经网络(如多层感知机 MLP)中的全连接层通常包含大量可训练参数,导致巨大的计算和存储开销。SAC 方法通过将权重矩阵分解为一个固定的、预计算的基矩阵和一个可学习的、低维的表示向量的乘积,从而在保持模型性能的同时,显著减少可训练参数的数量。

此代码在 CIFAR-10 数据集上实现了一个简单的 MLP,并系统地比较了:

  1. 标准 MLP (基线):所有参数均可训练。
  2. SAC-MLP:仅第一层的权重矩阵通过 SAC 方法构造,并对比了多种基矩阵(PCA, LDA, 随机正交)的效果。
  3. 不同子空间维度对 SAC-MLP 性能的影响。

核心思想

传统全连接层的权重矩阵 W(维度为 out_features x in_features)被分解为:

W = L @ B.T

其中:

  • B (Base Matrix):一个维度为 in_features x d固定基矩阵。这个矩阵是根据训练数据的内在结构(如主成分、类别判别方向等)预先计算好的,在模型训练过程中保持不变。它定义了一个低维子空间。
  • L (Learner Matrix):一个维度为 out_features x d可学习矩阵。这是模型在训练过程中唯一需要优化的部分。每一行代表一个输出神经元在该低维子空间中的表示。
  • d (d_components):子空间的维度(或秩),通常远小于 in_featuresout_features (d << in_features)。

通过这种方式,我们将优化一个巨大的 W 矩阵(out_features * in_features 个参数)的问题,转化为了优化一个更小的 L 矩阵(out_features * d 个参数)的问题,从而实现了参数效率。

主要特点

  • 参数高效:通过低秩分解,大幅减少模型的可训练参数量,降低过拟合风险。
  • 训练加速:更少的参数通常意味着更快的梯度计算和更新,缩短训练时间。
  • 即插即用SAC_Linear 模块可以方便地替换标准 nn.Linear 层,易于集成到现有模型中。
  • 可解释性:基矩阵 B 捕捉了数据的内在结构(如PCA捕获方差,LDA捕获类别区分度),为模型行为提供了潜在的解释。
  • 模块化设计:代码结构清晰,分为数据管理、模型定义和实验运行三大模块,易于理解和扩展。

环境要求

你需要安装 Python 和以下库。建议使用 pip 进行安装:

pip install torch torchvision pandas numpy scikit-learn
  • torch & torchvision: 核心深度学习框架及数据集工具。
  • numpy & pandas: 用于数据处理和结果展示。
  • scikit-learn: 用于计算 PCA 和 LDA 基矩阵。

本项目代码已在 CUDA 环境下测试,但也可在 CPU 上运行(只需将 USE_CUDA 设置为 False 或让代码自动检测)。

如何运行

  1. 克隆或下载本项目。

  2. 确保已安装所有必要的依赖库。

  3. 直接运行 Python 脚本:

    python your_script_name.py

脚本将自动执行以下步骤:

  1. 下载并加载 CIFAR-10 数据集。
  2. 预计算 PCA、LDA 和随机正交基矩阵。
  3. 运行所有设计的实验(基线模型、不同基矩阵的 SAC 模型、不同秩的 SAC 模型)。
  4. 在控制台打印出格式化的最终结果对比表格。

代码结构解析

  • Config: 集中管理所有超参数,如批量大小、学习率、训练轮数、子空间维度列表等。
  • DataAndBaseManager:
    • _load_data(): 负责下载、预处理 CIFAR-10 数据集并创建 DataLoader
    • _generate_bases(): 核心预计算模块。它加载整个训练集,执行 SVD (用于PCA)、QR分解 (用于随机正交基) 和 LDA,生成并存储三种基矩阵。
  • 模型定义 (SAC_Linear, SAC_MLP, StandardMLP):
    • SAC_Linear: 实现了 SAC 方法的核心层。它接收一个固定的 base_matrix 并将其注册为 buffer(不参与梯度更新)。learner 是唯一的可学习参数。
    • SAC_MLP: 使用 SAC_Linear 作为第一层构建的 MLP 模型。
    • StandardMLP: 标准的全连接 MLP,作为性能基线。
  • ExperimentRunner:
    • _train_and_evaluate(): 封装了完整的训练和评估流程,包括模型训练循环、测试、计时和参数统计。
    • run_all(): 组织并执行所有预设的消融实验。
    • report_results(): 将所有实验结果汇总到 pandas.DataFrame 中,并以美观的表格形式打印。
  • main 执行块:
    • 初始化配置、设置随机种子、选择设备。
    • 实例化 DataAndBaseManagerExperimentRunner
    • 启动实验并报告结果。

实验设计

本项目通过一系列控制变量实验来验证 SAC 方法的有效性:

  1. 基线模型:

    • Baseline (Full Rank): 一个标准的 MLP,其第一层是全尺寸的 nn.Linear。用于衡量性能上限和参数基准。
  2. 消融研究 1: 基矩阵类型的影响

    • SAC (Base=PCA): 使用主成分分析(PCA)提取的基向量。这些基向量最大化了数据的方差。
    • SAC (Base=LDA): 使用线性判别分析(LDA)提取的基向量。这些基向量最大化了类间距离与类内距离之比,理论上更适合分类任务。
    • SAC (Base=RANDOM): 使用随机生成的正交基向量。作为一个对比组,检验数据驱动的基矩阵是否优于随机选择的子空间。 此研究中,子空间维度 d 固定为 128。
  3. 消融研究 2: 子空间维度的影响

    • 使用效果最佳的 PCA 基,探索不同秩 d(32, 64, 128)对模型性能和参数量的影响。这有助于找到性能与效率之间的最佳平衡点。

结果分析

运行脚本后,你将看到一个类似下面的结果表格:

Experiment Best Accuracy (%) Trainable Params Param Reduction Training Time (s)
Baseline (Full Rank) 45.50 1,577,482 - 60.12
SAC (Base=LDA, d=9) 38.20 4,618 99.7% 45.23
SAC (Base=PCA, d=128) 44.80 66,058 95.8% 48.50
SAC (Base=RANDOM, d=128) 42.10 66,058 95.8% 47.98
SAC (Base=PCA, d=32) 42.50 16,906 98.9% 46.11
SAC (Base=PCA, d=64) 43.90 33,290 97.9% 47.05

(注:以上为示例数据,实际结果可能因硬件和库版本而异)

从结果可以得出以下结论

  • 有效性: SAC-PCA 模型在使用极少参数(例如,减少95%以上)的情况下,达到了与基线模型非常接近的准确率。
  • 基矩阵的重要性: 数据驱动的基(PCA, LDA)性能显著优于随机基,证明了利用数据先验知识来构建子空间的正确性。PCA 通常表现最好,因为它捕获了数据的主要变化模式。LDA 受限于其秩(类别数-1),在多类别、高维数据上可能无法提供足够丰富的子空间。
  • 秩-性能权衡: 随着子空间维度 d 的增加,模型准确率通常会提升,但参数量和训练时间也会相应增加。这表明我们可以在模型性能和计算成本之间做出灵活的权衡。

未来工作与展望

  • 应用于更深、更复杂的模型: 将 SAC 方法应用于卷积神经网络(CNN)的卷积层或全连接层,或 Transformer 模型的注意力机制中。
  • 动态基矩阵: 研究在训练过程中微调(fine-tune)基矩阵 B 的可能性,而不是使其完全固定。
  • 更先进的基: 探索使用非线性方法(如核PCA、自编码器)来生成基矩阵。
  • 自适应秩选择: 开发一种能根据任务和数据自动确定最佳子空间维度 d 的算法。

About

「光谱对齐构造法:通过预计算的低维子空间进行高效的神经网络参数构造」的官方实现。

Topics

Resources

License

Stars

Watchers

Forks

Contributors 2

  •  
  •  

Languages