毕设记录:用CMA-ES进化算法自动优化损失函数——为什么不用梯度?
介绍毕设的核心创新点:用CMA-ES进化策略在外层自动搜索最优损失函数权重,解决手工调参的缺陷,以及四种不同的进化模式设计。
注: 本文由 AI 助手(夜河阳)协助整理,基于项目实际代码和文档生成。
问题起点:损失函数权重为什么难调?
无人机导航的损失函数通常长这样:
loss = w1 * L_goal + w2 * L_collision + w3 * L_smooth + w4 * L_velocity
w1, w2, w3, w4 这几个权重参数,决定了训练的优先级。
问题是:这些权重只能手工调。每次改一个,要重新跑十几个小时的实验才能知道效果好不好。调参本身比写代码还累。
更深层的问题是:训练早期和后期,合适的权重可能完全不同。早期需要大 w1(先学会接近目标),后期需要大 w2(精细化避障)。静态权重没法适应这种变化。
为什么不直接用梯度来学权重?
可以,但有个根本问题:
损失函数权重是元参数,不是模型参数。
如果把权重也加进计算图里做梯度下降,优化目标会退化——权重会自然滑向让当前 loss 最小的方向,而不是真正让无人机飞得更好的方向。本质上是在优化一个代理指标,而不是真实任务性能。
而 CMA-ES(协方差矩阵自适应进化策略) 是一种无梯度的黑盒优化算法:
- 不需要目标函数可微
- 全局搜索能力强,不容易陷入局部最优
- 对高维连续参数空间效果好
双层优化框架
外层(CMA-ES):
采样 N 个损失函数配置 (w1, w2, ..., wn)
↓
内层(梯度下降,每个配置独立):
用该权重配置训练策略网络 T 步
评估任务性能(到达率、无碰撞率等)
↓
外层(CMA-ES):
根据评估结果更新分布
采样下一代配置
↓
重复直到收敛
外层 CMA-ES 搜索「什么样的损失权重配置能让无人机飞得最好」,内层梯度下降负责「给定这个配置,把策略网络训练到位」。
四种进化模式
Mode 1: CMA-DECAY
搜索目标: 单一参数 grad_decay
grad_decay 控制视觉梯度的衰减速率。这个参数很关键但极难手调,是 CMA-ES 的理想候选。
搜索空间 1 维,收敛最快,适合作为 CMA-ES 引入效果的基线验证。
Mode 2: CMA-GUIDE
搜索目标: 12 个损失系数向量
直接搜索损失函数里所有权重参数的最优组合。这是最直觉的做法。
12 维搜索空间,需要较大 population size(pop=20)来维持种群多样性。
Mode 3: CMA-META
搜索目标: MetaController 网络 A 的参数
MetaController 是一个小网络,输入当前训练状态(step、指标等),输出动态调整的损失权重。
CMA-ES 在外层进化这个 MetaController 的参数,让它学会「根据训练进度自动调权重」的策略。
Mode 4: CMA-LOSSNET(核心创新)
搜索目标: LossNetwork 的参数
LossNetwork 是一个更复杂的 A-网络,直接参数化整个损失函数的形状,不只是权重。
这是四种模式里最激进的一个:让进化算法搜索「什么形状的损失函数让无人机学得最好」,而不只是「什么权重的线性组合最好」。
查新结果
类似的思路(CMA-ES 进化损失函数)在图像分类领域有先例(Gonzalez & Miikkulainen 2020,GLO),但:
- 没有人把它用在无人机/机器人控制领域
- 没有人把它和可微分物理仿真结合
- 没有人同时设计四种对比模式来系统研究
所以这个创新点是安全的,不存在直接撞车。
当前状态
CMA-DECAY 实验已经跑完(checkpoints 有 4100 步的),效果看起来比手调的基线好,但要等其他组实验跑完才能做完整对比。