# TTA-E遗传算法参数优化系统 ## 概述 这个系统使用遗传算法(Genetic Algorithm)来优化TTA-E(Test Time Augmentation + Ensemble)模型的集成参数,目标是最小化音素错误率(PER)。 ## 核心特性 ### 🚀 高效缓存机制 - **预计算策略**: 先生成所有GRU和LSTM在5种增强方式下的预测结果 - **智能缓存**: 避免重复计算,大幅提升遗传算法搜索速度 - **磁盘持久化**: 缓存保存到磁盘,支持断点续传 ### 🧬 遗传算法优化 - **PyGAD实现**: 使用成熟的遗传算法库 - **并行处理**: 利用25个CPU核心进行并行评估 - **自适应搜索**: 自动探索最优参数组合 ### 🎯 优化参数 1. **GRU权重** (`gru_weight`): [0, 1] - GRU模型在集成中的权重 2. **TTA权重** (`tta_weights`): [0, 5] × 5 - 五种增强方式的权重 - `original`: 原始数据 - `noise`: 噪声增强 - `scale`: 幅度缩放 - `shift`: 时间位移 - `smooth`: 平滑变化 ### ⚡ 性能优化 - **GPU加速**: 使用4090 GPU进行模型推理 - **混合精度**: 使用bfloat16减少显存占用 - **多线程**: 并行评估多个参数组合 - **内存管理**: 智能缓存管理,避免内存溢出 ## 文件结构 ``` TTA-E/ ├── GA_optimize.py # 主要优化模块 ├── test_ga.py # 快速测试脚本 ├── tta_cache/ # 缓存目录 │ ├── gru_predictions.pkl │ └── lstm_predictions.pkl ├── ga_optimization_result_*.pkl # 优化结果 └── README_GA.md # 本文档 ``` ## 使用方法 ### 1. 快速测试 ```bash conda activate b2txt25 cd /root/autodl-tmp/nejm-brain-to-text/TTA-E python test_ga.py ``` ### 2. 运行完整优化 ```bash conda activate b2txt25 cd /root/autodl-tmp/nejm-brain-to-text/TTA-E python GA_optimize.py ``` ### 3. 自定义参数优化 ```python import GA_optimize # 创建优化器 optimizer = GA_optimize.TTAEGeneticOptimizer() # 自定义遗传算法参数 optimizer.population_size = 50 # 种群大小 optimizer.num_generations = 100 # 迭代代数 optimizer.num_parents_mating = 20 # 父代数量 optimizer.mutation_percent_genes = 20 # 变异率 # 运行优化 result = optimizer.optimize() ``` ## 核心算法 ### 缓存策略 ``` 对于每个(session, trial, augmentation_type): 1. 应用数据增强 2. 通过GRU和LSTM模型获取预测 3. 缓存概率分布结果 4. 保存到磁盘 ``` ### 参数评估 ``` 对于给定的参数组合(gru_weight, tta_weights): 1. 从缓存加载预测结果 2. 按权重融合TTA样本 3. 使用几何平均集成GRU和LSTM 4. 计算音素错误率(PER) 5. 返回-PER作为适应度 ``` ### 遗传算法流程 ``` 1. 初始化随机种群 2. 并行评估所有个体的适应度 3. 选择优秀个体作为父代 4. 交叉产生子代 5. 变异引入多样性 6. 重复2-5直到收敛 ``` ## 优化结果 优化完成后,系统会输出: ``` Best GRU weight: 0.6234 Best LSTM weight: 0.3766 Best TTA weights: - original: 2.1245 - noise: 1.3456 - scale: 0.7834 - shift: 0.0000 - smooth: 0.5621 Best PER: 18.45% ``` 结果保存在 `ga_optimization_result_YYYYMMDD_HHMMSS.pkl` 文件中。 ## 性能基准 ### 测试环境 - GPU: NVIDIA RTX 4090 - CPU: 25核心 - 内存: 足够容纳所有缓存数据 ### 预期性能 - **缓存生成**: ~20-30分钟(1426个验证样本 × 5种增强 × 2个模型) - **单次评估**: ~0.1-0.5秒 - **完整优化**: ~2-4小时(50个体 × 100代) ### 内存使用 - **GPU显存**: ~8-12GB - **系统内存**: ~16-32GB(用于缓存) - **磁盘空间**: ~5-10GB(持久化缓存) ## 高级功能 ### 1. 断点续传 如果优化过程中断,缓存文件会保留,重新启动时会自动加载: ```python # 系统会自动检测并加载现有缓存 optimizer.generate_all_predictions() # 只生成缺失的预测 ``` ### 2. 自定义评估函数 可以修改评估函数来优化其他指标: ```python def custom_fitness_function(self, ga_instance, solution, solution_idx): # 自定义评估逻辑 # 例如:同时考虑PER和推理速度 per = self.evaluate_parameters(solution[0], solution[1:6]) speed_penalty = calculate_speed_penalty(solution) return -(per + speed_penalty) ``` ### 3. 多目标优化 ```python # 可以扩展为多目标优化 # 例如:最小化PER的同时最大化推理速度 def multi_objective_fitness(self, solution): per = self.evaluate_parameters(solution[0], solution[1:6]) speed = self.evaluate_inference_speed(solution) return [-per, speed] # 返回多个目标值 ``` ## 故障排除 ### 常见问题 1. **显存不足** ```bash # 解决方案:降低批处理大小或使用梯度累积 export CUDA_VISIBLE_DEVICES=0 ``` 2. **缓存损坏** ```bash # 删除缓存重新生成 rm -rf tta_cache/ ``` 3. **进程被杀死** ```bash # 检查系统资源 nvidia-smi htop ``` ### 性能调优 1. **减少评估时间**:使用更少的验证样本进行快速测试 2. **增加并行度**:调整 `parallel_processing` 参数 3. **优化内存使用**:使用更小的数据类型或分批处理 ## 扩展指南 ### 添加新的增强方式 ```python def new_augmentation(self, x): # 实现新的数据增强 return augmented_x # 在_apply_augmentation中添加新分支 elif aug_type == 'new_aug': x_augmented = self.new_augmentation(x_augmented) ``` ### 集成其他模型 ```python # 扩展为三模型集成 def load_third_model(self): # 加载第三个模型 pass def ensemble_three_models(self, gru_probs, lstm_probs, third_probs, weights): # 三模型集成逻辑 pass ``` ## 引用和致谢 本系统基于以下技术: - PyGAD: 遗传算法库 - PyTorch: 深度学习框架 - CUDA: GPU加速计算 - NumPy: 数值计算 ## 联系信息 如有问题或建议,请查看代码注释或联系开发团队。 --- **版本**: 1.0 **更新日期**: 2025年9月17日 **兼容性**: Python 3.10+, PyTorch 2.0+, CUDA 11.8+