# AutoMoE **Repository Path**: knifecms/auto-moe ## Basic Information - **Project Name**: AutoMoE - **Description**: 自组织MoE模型 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-12-22 - **Last Updated**: 2025-12-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 递归MoE模型设计与实现 ## 1. 设计背景 本项目实现了一个基于自组织原理的递归MoE(Mixture of Experts)模型,该模型能够根据样本的loss自动筛选难样本,并递归生成新的MoE层来处理这些难样本,从而提高模型的整体性能。 ## 2. 自组织模型特点 结合当前最有效的自组织模型特点,本设计具有以下特性: - **自适应结构演化**:根据数据自动调整模型结构,生成新的MoE层 - **基于数据动态组织**:通过loss筛选机制识别难样本,针对性地优化 - **局部与全局优化平衡**:每一层MoE专注于特定难度的数据,同时保持全局优化 - **稀疏激活与计算效率**:每个样本只激活部分专家,提高计算效率 - **递归生成机制**:支持多层递归生成,逐步提高模型复杂度 ## 3. 模型架构 ### 3.1 核心组件 - **Expert**:基础专家网络,由全连接层组成 - **GatingNetwork**:门控网络,负责为每个样本分配专家权重 - **MoELayer**:MoE层,包含多个Expert和一个GatingNetwork - **RecursiveMoE**:递归MoE模型,支持多层MoE结构 ### 3.2 递归生成机制 1. 训练初始MoE层 2. 计算每个样本的loss 3. 根据loss阈值筛选难样本 4. 为筛选出的难样本生成新的MoE层 5. 在难样本上微调新生成的MoE层 6. 重复步骤2-5,直到达到最大深度或没有足够的难样本 ## 4. 实现细节 ### 4.1 模型文件 (`model.py`) - **RecursiveMoE**:递归MoE模型类,支持动态添加MoE层 - **MoELayer**:MoE层实现,包含专家网络和门控网络 - **get_loss_per_sample**:计算每个样本的loss - **select_hard_samples**:根据loss阈值筛选难样本 ### 4.2 数据处理 (`data.py`) - 支持MNIST和CIFAR-10数据集 - 自动下载和预处理数据 - 划分训练集、验证集和测试集 ### 4.3 训练流程 (`train.py`) - **RecursiveMoETrainer**:递归MoE训练器 - **train_recursive_moe**:递归训练主函数 - **select_hard_samples**:难样本筛选 - **plot_results**:结果可视化 ## 5. 使用方法 ### 5.1 Anaconda环境配置 #### 1. 激活Anaconda环境 ```bash conda activate ``` #### 2. 安装依赖 ```bash conda install pytorch torchvision matplotlib numpy -c pytorch ``` 或使用pip安装: ```bash pip install torch torchvision numpy matplotlib ``` ### 5.2 运行实验 ```bash python train.py ``` ### 5.3 推荐使用更有区分度的数据集 由于MNIST和CIFAR-10数据集相对简单,主流算法准确率已能达到99%左右,推荐使用以下更具挑战性的数据集: - **FashionMNIST**:包含10类时尚物品图像,比MNIST更具区分度 - **SVHN**:真实世界中的街景数字图像,具有更多变化和噪声 - **CIFAR-100**:包含100个细分类别的彩色图像,难度更大 修改`train.py`中的`dataset_name`参数即可切换数据集。 ### 5.3 配置参数 在`train.py`的`main`函数中可以调整以下参数: - `dataset_name`:数据集名称,可选 "mnist", "fashionmnist", "svhn", "cifar10" 或 "cifar100" - `initial_num_experts`:初始专家数量 - `max_depth`:最大递归深度 - `hidden_dim`:隐藏层维度 - `threshold_factor`:难样本筛选阈值因子 - `new_experts_per_depth`:每层新增专家数量 ## 6. 预期结果 - 随着递归深度增加,模型性能逐步提升 - 难样本数量逐渐减少,说明模型对难样本的处理能力增强 - 不同深度的MoE层专注于不同难度的数据 - 模型能够自适应地根据数据复杂度调整结构 ## 7. 扩展方向 - 支持卷积神经网络作为专家网络 - 实现更复杂的门控机制(如层次化门控) - 支持动态调整专家数量 - 实现更高效的稀疏激活策略 - 在更大规模的数据集上测试 ## 8. 项目结构 ``` auto-moe/ ├── model.py # 模型定义 ├── data.py # 数据处理 ├── train.py # 训练流程 ├── README.md # 项目说明 └── requirements.txt # 依赖列表 ```