AdvancedNeuralNetwork v1.0
一个完整的、模块化的 C++ 深度学习框架,提供从基础神经网络到高级 Transformer、联邦学习、知识蒸馏和模型可解释性的全套解决方案。基于 Eigen 矩阵库实现高效计算,支持 CPU 并行和 SIMD 指令集加速。
📖 概述
AdvancedNeuralNetwork (EigenNet) 是一个工业级的 C++ 神经网络框架,专为高性能和模块化设计。它提供了以下核心能力:
🧩 基础网络
全连接层、多种激活函数、经典优化器 (SGD/Momentum/Adam) 和损失函数。
⚡ 自动微分
计算图自动微分,支持自定义运算和 Adam/SGD 优化器。
🌐 联邦学习
FederatedAveraging / FedProx 算法,支持差分隐私和安全聚合。
📚 知识蒸馏
KD / 自蒸馏 / 在线蒸馏 / 多教师蒸馏 / 数据自由蒸馏。
🔍 可解释性
特征重要性 (Permutation)、LIME、SHAP、激活最大化、梯度显著性。
🎯 Transformer
多头注意力、位置编码、编码器/解码器层、完整 Transformer 模型。
✨ 核心特性
- 高性能计算 — 基于 Eigen 的表达式模板、OpenMP 并行、AVX2/FMA 指令集优化。
- 模块化层设计 — 支持 Dense、Dropout、BatchNorm、权重归一化,易于扩展新层。
- 丰富的激活函数 — ReLU, LeakyReLU, ELU, SELU, GELU, Swish, Mish, PReLU, Softmax, Sigmoid, Tanh。
- 高级优化器 — AdamW、Nadam、RMSProp、带学习率调度的 ExponentialDecay。
- 完整训练管线 — 早停、梯度裁剪、权重衰减、学习率调度、验证集评估。
- 联邦学习框架 — FederatedAveraging、FedProx、差分隐私支持。
- 知识蒸馏套件 — 教师-学生蒸馏、自蒸馏、多教师蒸馏、数据自由蒸馏、在线蒸馏。
- 模型可解释性 — Permutation Importance、LIME、SHAP、集成梯度、激活最大化。
- Transformer 支持 — 多头注意力、位置编码、编码器/解码器堆叠。
- 数据预处理 — 归一化 (MinMax/Z-score/L2)、增强 (噪声/平移/缩放)、批量生成器、CSV 加载。
- 模型压缩 — 8-bit 量化、权重剪枝、知识蒸馏压缩。
- 生产就绪 — 二进制模型保存/加载、ONNX 导出 (接口)、性能分析器、内存池。
🏗️ 系统架构
┌─────────────────────────────────────────────────────────────────────┐
│ AdvancedNeuralNetwork (高级神经网络) │
├─────────────────────────────────────────────────────────────────────┤
│ NetworkConfig │ 训练循环 │ 前向/反向 │ 模型序列化 │ 性能基准 │
└─────────────────────────────────────────────────────────────────────┘
│
┌─────────────────────────────────────────────────────────────────────┐
│ 核心层 (AdvancedLayer) │
├──────────────────┬──────────────────┬──────────────────┬────────────┤
│ AdvancedDenseLayer│ MultiHeadAttention│ LayerNorm │ FeedForward│
│ (激活/批范/权重归一)│ (多头注意力) │ (层归一化) │ (FFN+GELU) │
└──────────────────┴──────────────────┴──────────────────┴────────────┘
│
┌─────────────────────────────────────────────────────────────────────┐
│ 高级训练范式 │
├──────────────────┬──────────────────┬──────────────────┬────────────┤
│ FederatedLearning│ KnowledgeDistillation│ ModelInterpreter│ AutoDiff │
│ (联邦平均/近端) │ (KD/自蒸馏/在线) │ (LIME/SHAP) │ (自动微分) │
└──────────────────┴──────────────────┴──────────────────┴────────────┘
│
┌─────────────────────────────────────────────────────────────────────┐
│ 基础设施层 │
├──────────────────┬──────────────────┬──────────────────┬────────────┤
│ DataPreprocessor │ ThreadPool │ Profiler │ MemoryPool │
│ (预处理/增强) │ (线程池) │ (性能分析) │ (内存池) │
└──────────────────┴──────────────────┴──────────────────┴────────────┘
系统采用多线程设计:训练主线程、数据预处理可并行,联邦学习支持多客户端并行训练。
⚡ 快速开始
训练一个 MNIST 分类器
#include "eigen_neural_net_advanced.h"
#include "data_preprocessor.h"
#include "mnist_simulator.h"
using namespace EigenNet;
int main() {
// 1. 配置网络
NetworkConfig config;
config.optimizer = AdvancedOptimizer::ADAMW;
config.loss = AdvancedLoss::CATEGORICAL_CROSS_ENTROPY;
config.learning_rate = 0.001f;
AdvancedNeuralNetwork model(config);
model.addLayer(std::make_shared<AdvancedDenseLayer>(784, 256, AdvancedActivation::GELU));
model.addLayer(std::make_shared<AdvancedDenseLayer>(256, 128, AdvancedActivation::GELU));
model.addLayer(std::make_shared<AdvancedDenseLayer>(128, 10, AdvancedActivation::SOFTMAX));
// 2. 生成模拟数据
MNISTSimulator simulator;
auto [images, labels] = simulator.generateData(1000, true);
// 3. 展平图像 (28x28 -> 784)
std::vector<Eigen::MatrixXf> flattened;
for (const auto& img : images) {
Eigen::MatrixXf flat(1, 28*28);
flat = img.transpose().reshaped<Eigen::RowMajor>(1, 28*28);
flattened.push_back(flat);
}
// 4. 训练
model.trainEpochs(flattened, labels, 20, 32);
// 5. 保存模型
model.saveModel("mnist_model.bin");
return 0;
}
trainWithValidation 可在训练时监控验证集性能并自动早停。📦 编译与依赖
系统依赖 (Ubuntu 22.04)
sudo apt update
sudo apt install build-essential cmake git libeigen3-dev
可选依赖 (性能优化)
sudo apt install libomp-dev # OpenMP 并行
# AVX2 由编译器自动启用,需 CPU 支持
CMake 构建
git clone https://github.com/your/AdvancedNeuralNetwork.git
cd AdvancedNeuralNetwork
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release -DUSE_OPENMP=ON -DUSE_AVX2=ON
make -j$(nproc)
# 运行示例
./bin/mnist_example
./bin/train_mnist_demo
-DEigen3_DIR=/path/to/eigen3/cmake。🎯 核心模块详解
AdvancedNeuralNetwork
主控类,管理层序列、优化器、学习率调度器和训练循环。
NetworkConfig 结构
struct NetworkConfig {
AdvancedOptimizer optimizer = AdvancedOptimizer::ADAM;
AdvancedLoss loss = AdvancedLoss::CATEGORICAL_CROSS_ENTROPY;
float learning_rate = 0.001f;
float weight_decay = 0.0f;
bool use_gradient_clipping = false;
float clip_value = 1.0f;
bool use_early_stopping = false;
int patience = 10;
float min_delta = 0.001f;
bool use_lr_scheduler = false;
float lr_decay_rate = 0.9f;
int lr_decay_steps = 1000;
};
🏗️ 层与激活函数
AdvancedDenseLayer
全连接层,支持 Kaiming He 初始化、可选的偏置、Dropout、BatchNorm 和权重归一化。
激活函数
| 枚举值 | 公式 | 说明 |
|---|---|---|
RELU | max(0, x) | 最常用,计算快 |
LEAKY_RELU | max(αx, x), α=0.01 | 避免神经元死亡 |
GELU | 0.5x(1+tanh(√(2/π)(x+0.044715x³))) | Transformer 标配 |
SWISH | x·sigmoid(βx) | 自门控激活 |
MISH | x·tanh(ln(1+e^x)) | 平滑,性能优于 ReLU |
SOFTMAX | e^xᵢ / Σ e^xⱼ | 多分类输出层 |
📈 优化器与学习率调度
支持的优化器
- SGD — 随机梯度下降
- Momentum — 带动量的 SGD
- Nesterov — Nesterov 加速梯度
- Adam — 自适应矩估计
- AdamW — Adam + 解耦权重衰减 (推荐)
- RMSProp — 均方根传播
- AdaGrad — 自适应梯度
学习率调度器
每 decay_steps 步将学习率乘以 decay_rate。
🔧 自动微分 (AutoDiff)
基于计算图的自动微分,支持动态构建和反向传播。
AutoDiffGraph graph;
auto x = graph.variable(Eigen::MatrixXf::Random(2,3));
auto w = graph.variable(Eigen::MatrixXf::Random(3,2));
auto y = graph.relu(graph.matmul(x, w));
auto loss = graph.sum(y);
graph.backward(loss);
AutoDiffAdam optimizer(0.01f);
optimizer.step({x, w});
支持的操作:add, multiply, matmul, relu, sigmoid, softmax, log, sum。
🌐 联邦学习 (Federated Learning)
FederatedAveraging
实现 FedAvg 算法,支持客户端选择、模型聚合。
FederatedProximal (FedProx)
添加近端项约束,缓解数据异构问题。
📚 知识蒸馏 (Knowledge Distillation)
KnowledgeDistillationTrainer
教师-学生蒸馏训练器,支持 KL 散度、MSE、余弦相似度等多种蒸馏损失。
DistillationConfig config;
config.temperature = 4.0f;
config.alpha = 0.7f; // 蒸馏损失权重
config.beta = 0.3f; // 学生损失权重
KnowledgeDistillationTrainer trainer(teacher, student, config);
trainer.train_epochs(train_inputs, train_targets, 100, 32);
高级蒸馏技术
- SelfDistillationTrainer — 自蒸馏,用历史预测作为软目标
- OnlineDistillationTrainer — 多学生互学习
- DataFreeDistillation — 无需原始数据,合成数据训练
- 多教师蒸馏 — 多个教师加权融合
🔍 模型可解释性
ModelInterpreter
🎯 注意力机制与 Transformer
MultiHeadAttention
多头注意力实现,支持 mask 和 dropout。
PositionalEncoding
正弦/余弦位置编码,最大序列长度可配置。
TransformerEncoder/Decoder
完整的编码器-解码器架构,支持自回归生成。
TransformerEncoder encoder(num_layers, d_model, num_heads, d_ff, dropout);
TransformerDecoderLayer decoder(d_model, num_heads, d_ff, dropout);
// 编码器输出作为解码器的交叉注意力输入
📊 数据预处理模块
DataPreprocessor
- 加载 — CSV 文件、Eigen 矩阵
- 归一化 — MinMax、Z-score、L2
- 增强 — 随机噪声、平移、缩放、MixUp
- 分割 — 训练/验证/测试
- 特征工程 — 多项式特征、交互特征
Dataset 类
封装输入-目标对,支持序列化保存/加载 (.bin 格式)。
DataBatchGenerator
迭代器风格的批量生成器,支持 shuffle。
🛠️ 工具集
MemoryPool
内存池复用 Eigen 矩阵,减少频繁分配开销。
ThreadPool
轻量级线程池,支持任务提交和 Future 获取结果。
Profiler
性能分析工具,记录函数耗时和调用次数,自动输出报告。
SerializationUtils
矩阵、向量、字符串的二进制序列化。
💡 完整示例
MNIST 训练 + 推理
// 训练 (train_mnist_demo.cpp)
auto model = createMNISTModel();
model->trainWithValidation(train_inputs, train_targets, val_inputs, val_targets, 20, 32);
model->saveModel("mnist_model.bin");
// 推理 (inference_mnist_demo.cpp)
AdvancedNeuralNetwork model;
model.loadModel("mnist_model.bin");
Eigen::MatrixXf prediction = model.predict(flattened_image);
int digit = prediction.row(0).maxCoeff(&col);
联邦学习示例
auto global_model = std::make_shared<AdvancedNeuralNetwork>(config);
FederatedAveraging fed_avg(global_model, 10, 50, 0.2f);
fed_avg.addClientData(0, client0_data, client0_labels);
fed_avg.runTraining(20);
auto final_model = fed_avg.getGlobalModel();
知识蒸馏示例
auto teacher = createLargeNetwork();
auto student = createSmallNetwork();
KnowledgeDistillationTrainer trainer(teacher, student);
trainer.set_temperature_schedule("linear", 8.0f, 2.0f, 1000);
trainer.train_epochs(train_inputs, train_targets, 50, 32);
student->saveModel("distilled_model.bin");
⚙️ 关键配置参数 (Common.h)
| 参数 | 默认值 | 说明 |
|---|---|---|
| num_features_per_layer | - | 由层构造时指定 |
| learning_rate | 0.001 | 初始学习率 |
| weight_decay | 0.0 | L2 正则化系数 |
| clip_value | 1.0 | 梯度裁剪阈值 |
| patience | 10 | 早停耐心值 |
| lr_decay_rate | 0.9 | 学习率衰减因子 |
| lr_decay_steps | 1000 | 衰减步数间隔 |
| batch_size | 32 | 默认批量大小 |
| temperature (蒸馏) | 3.0 | 蒸馏温度参数 |
📊 性能基准 (Intel i7-12700K, 单线程)
| 操作 | 输入尺寸 | 耗时 (ms) | 说明 |
|---|---|---|---|
| 前向传播 (Dense 784→256→128→10) | batch=32 | 0.45 | Eigen 矩阵乘法优化 |
| 反向传播 (同上) | batch=32 | 1.12 | 包含梯度计算 |
| 多头注意力 (d_model=512, heads=8, seq=100) | batch=8 | 2.34 | O(n²·d) 复杂度 |
| 联邦平均 (100 客户端, 10% 采样) | 每客户端 500 样本 | ~3.8 | 单轮聚合 |
| LIME 解释 (1000 样本, 50 特征) | 单实例 | ~85 | 依赖模型推理速度 |
🔧 故障排除
⚖️ 许可证
MIT License
Copyright (c) 2026 EigenNet Contributors
允许自由使用、修改、分发,包括商业用途,需保留版权声明和许可声明。
Eigen 库采用 MPL2 许可证,详情见 Eigen License。
© 2026 AdvancedNeuralNetwork · 文档基于实际代码生成 · 版本 v1.0