返回博客
research

毕设记录:用CMA-ES进化算法自动优化损失函数——为什么不用梯度?

介绍毕设的核心创新点:用CMA-ES进化策略在外层自动搜索最优损失函数权重,解决手工调参的缺陷,以及四种不同的进化模式设计。

By Arnold Kirk

注: 本文由 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),但:

  1. 没有人把它用在无人机/机器人控制领域
  2. 没有人把它和可微分物理仿真结合
  3. 没有人同时设计四种对比模式来系统研究

所以这个创新点是安全的,不存在直接撞车。

当前状态

CMA-DECAY 实验已经跑完(checkpoints 有 4100 步的),效果看起来比手调的基线好,但要等其他组实验跑完才能做完整对比。


上一篇:毕设记录:基于PyTorch3D的可微分无人机仿真平台架构
下一篇:毕设记录:那些让我痛苦的梯度爆炸问题