AdvancedNeuralNetwork v1.0

C++17 Eigen3 OpenMP AVX2 联邦学习 知识蒸馏
最后更新: 2026-03-21 · 基于 Eigen 的高性能深度学习框架

一个完整的、模块化的 C++ 深度学习框架,提供从基础神经网络到高级 Transformer、联邦学习、知识蒸馏和模型可解释性的全套解决方案。基于 Eigen 矩阵库实现高效计算,支持 CPU 并行和 SIMD 指令集加速。

📖 概述

AdvancedNeuralNetwork (EigenNet) 是一个工业级的 C++ 神经网络框架,专为高性能和模块化设计。它提供了以下核心能力:

🧩 基础网络

全连接层、多种激活函数、经典优化器 (SGD/Momentum/Adam) 和损失函数。

⚡ 自动微分

计算图自动微分,支持自定义运算和 Adam/SGD 优化器。

🌐 联邦学习

FederatedAveraging / FedProx 算法,支持差分隐私和安全聚合。

📚 知识蒸馏

KD / 自蒸馏 / 在线蒸馏 / 多教师蒸馏 / 数据自由蒸馏。

🔍 可解释性

特征重要性 (Permutation)、LIME、SHAP、激活最大化、梯度显著性。

🎯 Transformer

多头注意力、位置编码、编码器/解码器层、完整 Transformer 模型。

✨ 核心特性

🏗️ 系统架构

┌─────────────────────────────────────────────────────────────────────┐
│                    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
⚠️ 如果 Eigen3 未在系统路径,可设置 -DEigen3_DIR=/path/to/eigen3/cmake

🎯 核心模块详解

AdvancedNeuralNetwork

主控类,管理层序列、优化器、学习率调度器和训练循环。

void addLayer(std::shared_ptr<AdvancedLayer> layer)
float train(const Eigen::MatrixXf& input, const Eigen::MatrixXf& target)
void trainEpochs(const std::vector<Eigen::MatrixXf>& inputs, const std::vector<Eigen::MatrixXf>& targets, int epochs, int batch_size=32)
Eigen::MatrixXf predict(const Eigen::MatrixXf& input)
void saveModel(const std::string& filename) / void loadModel(const std::string& filename)

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 和权重归一化。

AdvancedDenseLayer(int input_size, int output_size, AdvancedActivation activation, bool use_bias=true, const std::string& name="dense")

激活函数

枚举值公式说明
RELUmax(0, x)最常用,计算快
LEAKY_RELUmax(αx, x), α=0.01避免神经元死亡
GELU0.5x(1+tanh(√(2/π)(x+0.044715x³)))Transformer 标配
SWISHx·sigmoid(βx)自门控激活
MISHx·tanh(ln(1+e^x))平滑,性能优于 ReLU
SOFTMAXe^xᵢ / Σ e^xⱼ多分类输出层

📈 优化器与学习率调度

支持的优化器

学习率调度器

ExponentialDecayScheduler(float decay_rate, int decay_steps)

每 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 算法,支持客户端选择、模型聚合。

FederatedAveraging(std::shared_ptr<AdvancedNeuralNetwork> model_template, int num_clients, int rounds=100, float client_fraction=0.1f)
void addClientData(int client_id, const std::vector<Eigen::MatrixXf>& data, const std::vector<Eigen::MatrixXf>& labels)
void runTraining(int total_rounds)

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);

高级蒸馏技术

🔍 模型可解释性

ModelInterpreter

Eigen::MatrixXf computeFeatureImportance(const Eigen::MatrixXf& input, const Eigen::MatrixXf& target, int num_permutations=100)
Eigen::MatrixXf limeExplanation(const Eigen::MatrixXf& instance, int num_samples=1000, float kernel_width=0.75f)
Eigen::MatrixXf computeSHAP(const Eigen::MatrixXf& instance, int num_samples=1000)
Eigen::MatrixXf activationMaximization(int target_class, int iterations=100, float learning_rate=0.1f)
Eigen::MatrixXf integratedGradients(const Eigen::MatrixXf& input, const Eigen::MatrixXf& baseline, int target_class, int steps=50)
LIME 和 SHAP 实现采用近似采样,适用于中小规模特征维度。

🎯 注意力机制与 Transformer

MultiHeadAttention

多头注意力实现,支持 mask 和 dropout。

MultiHeadAttention(int d_model, int num_heads, float dropout_rate=0.1f)

PositionalEncoding

正弦/余弦位置编码,最大序列长度可配置。

TransformerEncoder/Decoder

完整的编码器-解码器架构,支持自回归生成。

TransformerEncoder encoder(num_layers, d_model, num_heads, d_ff, dropout);
TransformerDecoderLayer decoder(d_model, num_heads, d_ff, dropout);
// 编码器输出作为解码器的交叉注意力输入

📊 数据预处理模块

DataPreprocessor

Dataset 类

封装输入-目标对,支持序列化保存/加载 (.bin 格式)。

DataBatchGenerator

迭代器风格的批量生成器,支持 shuffle。

🛠️ 工具集

MemoryPool

内存池复用 Eigen 矩阵,减少频繁分配开销。

ThreadPool

轻量级线程池,支持任务提交和 Future 获取结果。

Profiler

性能分析工具,记录函数耗时和调用次数,自动输出报告。

PROFILE_SCOPE("section_name") // RAII 风格计时

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_rate0.001初始学习率
weight_decay0.0L2 正则化系数
clip_value1.0梯度裁剪阈值
patience10早停耐心值
lr_decay_rate0.9学习率衰减因子
lr_decay_steps1000衰减步数间隔
batch_size32默认批量大小
temperature (蒸馏)3.0蒸馏温度参数

📊 性能基准 (Intel i7-12700K, 单线程)

操作输入尺寸耗时 (ms)说明
前向传播 (Dense 784→256→128→10)batch=320.45Eigen 矩阵乘法优化
反向传播 (同上)batch=321.12包含梯度计算
多头注意力 (d_model=512, heads=8, seq=100)batch=82.34O(n²·d) 复杂度
联邦平均 (100 客户端, 10% 采样)每客户端 500 样本~3.8单轮聚合
LIME 解释 (1000 样本, 50 特征)单实例~85依赖模型推理速度
开启 OpenMP 和 AVX2 可提升 1.5~3x 性能。

🔧 故障排除

训练损失不下降 — 检查学习率是否过大/过小,尝试降低学习率或使用学习率调度器;确认数据归一化正确。
Eigen 维度不匹配错误 — 确保输入维度与第一层 input_size 一致,输出与目标维度匹配。
联邦学习客户端训练失败 — 确认每个客户端模型克隆成功,层参数维度一致。
LIME/SHAP 计算慢 — 减少 num_samples 参数,或使用更小的模型进行解释。
模型保存/加载失败 — 检查文件路径权限,确认层类型与保存时一致。

⚖️ 许可证

MIT License

Copyright (c) 2026 EigenNet Contributors

允许自由使用、修改、分发,包括商业用途,需保留版权声明和许可声明。

Eigen 库采用 MPL2 许可证,详情见 Eigen License

© 2026 AdvancedNeuralNetwork · 文档基于实际代码生成 · 版本 v1.0