163 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			163 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
|   | # TTA-E参数优化算法对比
 | |||
|  | 
 | |||
|  | 本项目提供了两种强大的进化算法来优化TTA-E集成参数:**遗传算法(GA)**和**差分进化(DE)**。 | |||
|  | 
 | |||
|  | ## 🧬 遗传算法 (GA_optimize.py)
 | |||
|  | 
 | |||
|  | ### 算法特点
 | |||
|  | - **模拟生物进化**:选择、交叉、变异 | |||
|  | - **离散+连续优化**:适合混合参数空间 | |||
|  | - **多样性保持**:通过多种遗传操作维持种群多样性 | |||
|  | 
 | |||
|  | ### 配置参数
 | |||
|  | ```python | |||
|  | self.population_size = 20        # 种群大小 | |||
|  | self.num_generations = 20        # 迭代代数   | |||
|  | self.num_parents_mating = 5      # 父代数量 | |||
|  | self.mutation_percent_genes = 20 # 变异率(%) | |||
|  | keep_parents = 2                 # 保留最佳父代数 | |||
|  | ``` | |||
|  | 
 | |||
|  | ### 优势
 | |||
|  | - ✅ **成熟稳定**:PyGAD库经过充分测试 | |||
|  | - ✅ **参数控制**:丰富的参数调节选项 | |||
|  | - ✅ **并行支持**:内置多线程处理 | |||
|  | - ✅ **精英保留**:确保优秀解不丢失 | |||
|  | 
 | |||
|  | ### 适用场景
 | |||
|  | - 参数空间复杂,需要探索多样性 | |||
|  | - 对算法透明度要求高 | |||
|  | - 需要精细调节进化策略 | |||
|  | 
 | |||
|  | --- | |||
|  | 
 | |||
|  | ## 🔄 差分进化 (DE_optimize.py)
 | |||
|  | 
 | |||
|  | ### 算法特点
 | |||
|  | - **向量差分变异**:基于种群差异生成新解 | |||
|  | - **连续优化专家**:专为实数优化设计 | |||
|  | - **自适应收敛**:自动调节搜索策略 | |||
|  | 
 | |||
|  | ### 配置参数
 | |||
|  | ```python | |||
|  | self.population_size = 15        # 种群大小倍数(实际=15×6=90) | |||
|  | self.max_iterations = 50         # 最大迭代次数 | |||
|  | self.mutation_factor = 0.7       # 变异因子[0.5, 2.0]  | |||
|  | self.crossover_prob = 0.9        # 交叉概率[0, 1] | |||
|  | self.tolerance = 1e-6            # 收敛容忍度 | |||
|  | ``` | |||
|  | 
 | |||
|  | ### 优势  
 | |||
|  | - ✅ **收敛快速**:通常比GA更快找到全局最优 | |||
|  | - ✅ **参数少**:调节参数相对简单 | |||
|  | - ✅ **数学严谨**:基于向量运算,理论基础扎实 | |||
|  | - ✅ **内置精炼**:SciPy实现包含局部优化 | |||
|  | 
 | |||
|  | ### 适用场景
 | |||
|  | - 连续参数优化为主 | |||
|  | - 对收敛速度要求高 | |||
|  | - 喜欢简洁算法配置 | |||
|  | 
 | |||
|  | --- | |||
|  | 
 | |||
|  | ## 📊 性能对比
 | |||
|  | 
 | |||
|  | | 特性 | 遗传算法(GA) | 差分进化(DE) | | |||
|  | |------|-------------|-------------| | |||
|  | | **收敛速度** | 中等 | 较快 | | |||
|  | | **参数调节** | 复杂(7个主要参数) | 简单(4个主要参数) | | |||
|  | | **种群大小** | 固定20个体 | 自适应(15×6=90个体) | | |||
|  | | **内存使用** | 较低 | 中等 | | |||
|  | | **算法透明** | 高(详细日志) | 中等 | | |||
|  | | **局部优化** | 无 | 有(内置polish) | | |||
|  | | **随机性** | 高 | 中等 | | |||
|  | 
 | |||
|  | ## 🎯 优化目标对比
 | |||
|  | 
 | |||
|  | 两种算法都优化相同的6维参数空间: | |||
|  | 
 | |||
|  | ```python | |||
|  | 参数维度: | |||
|  | - gru_weight: [0, 1]           # GRU模型权重 | |||
|  | - tta_weights[0]: [0, 5]       # Original增强权重   | |||
|  | - tta_weights[1]: [0, 5]       # Noise增强权重 | |||
|  | - tta_weights[2]: [0, 5]       # Scale增强权重 | |||
|  | - tta_weights[3]: [0, 5]       # Shift增强权重 | |||
|  | - tta_weights[4]: [0, 5]       # Smooth增强权重 | |||
|  | 
 | |||
|  | 目标函数: | |||
|  | minimize PER (Phoneme Error Rate) | |||
|  | ``` | |||
|  | 
 | |||
|  | ## 🚀 使用建议
 | |||
|  | 
 | |||
|  | ### 选择遗传算法(GA)的情况:
 | |||
|  | - 🔍 **探索阶段**:初次优化,需要探索参数空间 | |||
|  | - ⚙️ **精细控制**:需要调节具体的进化策略 | |||
|  | - 📈 **渐进改进**:可以接受较慢但稳定的优化过程 | |||
|  | - 🧪 **实验研究**:需要分析优化过程的详细信息 | |||
|  | 
 | |||
|  | ### 选择差分进化(DE)的情况:
 | |||
|  | - ⚡ **快速收敛**:需要尽快找到优秀解 | |||
|  | - 🎯 **精度优先**:追求最终解的质量 | |||
|  | - 🔧 **简单配置**:希望算法参数调节简单 | |||
|  | - 🏁 **生产应用**:追求稳定可靠的优化结果 | |||
|  | 
 | |||
|  | ## 📝 运行示例
 | |||
|  | 
 | |||
|  | ### 运行遗传算法:
 | |||
|  | ```bash | |||
|  | conda activate b2txt25 | |||
|  | cd /root/autodl-tmp/nejm-brain-to-text/TTA-E | |||
|  | python GA_optimize.py | |||
|  | ``` | |||
|  | 
 | |||
|  | ### 运行差分进化:
 | |||
|  | ```bash | |||
|  | conda activate b2txt25   | |||
|  | cd /root/autodl-tmp/nejm-brain-to-text/TTA-E | |||
|  | python DE_optimize.py | |||
|  | ``` | |||
|  | 
 | |||
|  | ## 📈 预期结果
 | |||
|  | 
 | |||
|  | ### 遗传算法输出:
 | |||
|  | ``` | |||
|  | Generation 15 | |||
|  | Best solution: GRU weight=0.989, TTA weights=[2.297, 1.438, 3.661, 2.911, 0.156] | |||
|  | Best fitness (negative PER): -10.130 | |||
|  | Best PER: 10.130% | |||
|  | ``` | |||
|  | 
 | |||
|  | ### 差分进化输出:
 | |||
|  | ``` | |||
|  | 🎯 Eval 145: New best PER = 9.874% | |||
|  |    GRU weight = 0.8234, TTA weights = [1.892, 2.156, 3.445, 1.234, 0.891] | |||
|  | 📊 Progress: 150 evaluations, Best PER = 9.874% | |||
|  | ``` | |||
|  | 
 | |||
|  | ## 🔧 高级配置
 | |||
|  | 
 | |||
|  | ### 并行运行对比:
 | |||
|  | 可以同时运行两种算法,最后比较结果: | |||
|  | 
 | |||
|  | ```bash | |||
|  | # 终端1:运行GA
 | |||
|  | python GA_optimize.py & | |||
|  | 
 | |||
|  | # 终端2:运行DE  
 | |||
|  | python DE_optimize.py & | |||
|  | 
 | |||
|  | # 等待两者完成,比较结果
 | |||
|  | ``` | |||
|  | 
 | |||
|  | ### 结果分析:
 | |||
|  | 优化完成后,检查生成的结果文件: | |||
|  | - `ga_optimization_result_YYYYMMDD_HHMMSS.pkl` | |||
|  | - `de_optimization_result_YYYYMMDD_HHMMSS.pkl` | |||
|  | 
 | |||
|  | 选择PER最低的方案作为最终配置。 | |||
|  | 
 | |||
|  | --- | |||
|  | 
 | |||
|  | **建议**:对于TTA-E参数优化,推荐先使用**差分进化(DE)**快速找到优秀解,然后可选择性地使用**遗传算法(GA)**进行精细调节或验证结果的稳定性。 |