Optuna 中的 CMA-ES:超参数优化的进化策略逐步解析
CMA-ES 算法是一种无导数优化方法,能够有效解决复杂、多模态或噪声搜索空间中的超参数调优任务。与基于梯度的优化方法不同,它不需要目标函数可微分,并且对局部最小值具有鲁棒性。本文将以 2D Rosenbrock 函数为例,详细剖析其工作原理,清晰展示算法如何调整步长和搜索方向。
初始化:初始搜索条件
在 CMA-ES 开始之前,需要设置三个关键参数:
- 初始均值 (m) — 搜索空间中起始点的坐标。在我们的例子中为 (0, -1)。
- 协方差矩阵 (C) — 定义搜索区域的形状和方向。初始时为单位矩阵,在中心周围形成圆形对称。
- 全局步长 (σ) — 搜索尺度。设置为 0.8,对应 95% 概率点落入内的置信椭圆半径 ≈1.96。
这些参数构成了初始正态分布,用于生成候选点。重要的是:即使起始点远离最优解,算法也能通过其进化机制进行适应。
候选点的生成与评估
在每一轮迭代中,使用公式生成 λ 个候选点(示例中为 15 个):
x_k ~ m + σ · N(0, C)
其中 N(0, C) 是均值为零、协方差矩阵为 C 的多变量正态分布。每个候选点是一组超参数,输入模型以评估目标函数(例如损失值)。计算函数值后,选择 μ 个最佳候选点(示例中为 7 个),作为更新分布的基础。
通过加权平均更新搜索中心
新分布的中心通过最佳点的加权和计算:
m_new = Σ w_i · x_i
权重 w_i 按对数尺度计算:
w_i = [ln((λ+1)/2) - ln(i)] / Σ[ln((λ+1)/2) - ln(j)]
这确保了最佳候选点贡献指数级更大。例如,第一个点的权重是第七个点的几倍。这种方法模拟“自然选择”:成功的解对下一代影响更大。
调整搜索的形状与尺度
CMA-ES 的核心优势在于它能动态适应目标函数的拓扑结构。这通过两种机制实现:
更新协方差矩阵
更新公式:
C_new = (1 - c_μ) · C_old + c_μ · C_μ
其中 C_μ 是基于最佳点相对于旧中心的归一化偏移构建的协方差矩阵。参数 c_μ(学习率,例如 0.9)控制历史数据与新数据间的平衡。如果最佳点沿特定方向对齐(例如 Rosenbrock 函数的“谷”方向),C 矩阵会将搜索区域变形为沿该方向拉长的椭圆,从而加速收敛。
调整全局步长 (σ)
步长使用以下公式更新:
σ_new = σ_old · exp( (c_σ / d_σ) · (||p_σ|| / E[||N(0,I)||] - 1) )
其中:
p_σ— 进化路径,累积中心移动方向,跨越多轮迭代。E[||N(0,I)||]— 随机步长的参考长度(n 维空间中 ≈√n)。c_σ、d_σ— 学习率和阻尼参数。
如果范数 ||p_σ|| 超过参考值,表示持续朝一个方向移动——步长增大。如果较低,则移动不稳定,步长减小以精细定位。
CMA-ES 在机器学习实践中的优势与局限
CMA-ES 特别适用于以下场景:
- 不可微、噪声或不连续的目标函数。
- 存在众多局部最小值的搜索空间。
- 超参数敏感度差异大(例如 learning_rate 与 batch_size)。
不过,它也有局限:
- 计算复杂度随维度增长(存储 C 需要 O(n²))。
- 在平滑函数上需要比 TPE 更多的迭代。
- 评估预算很小时(< 20)效果不佳。
在 Optuna 中的使用建议:
- 对于 >5 个超参数或复杂景观的任务,使用
CmaEsSampler。 - 设置
restart_strategy='ipop',在卡住时自动重启并增大 σ。 - 对于离散参数,使用
CategoricalCmaEsSampler。 - 始终在验证数据集上与 TPE 和 RandomSearch 进行比较。
关键要点
- CMA-ES 不使用梯度——适用于任何黑盒函数。
- 协方差矩阵适应使沿目标函数“谷底”的进展高效。
- 动态步长防止过早收敛并加速最终精炼。
- 在中等至大量迭代(>50)和高维空间中表现出色。
- 在 Optuna 中,只需更换采样器即可启用——无需修改模型代码。
该算法特别适用于标准方法(如网格搜索或贝叶斯优化)失效的任务:不稳定指标、复杂参数交互、缺乏平滑性。其进化特性使其成为研究人员应对真实世界“棘手”机器学习问题的强大、通用工具。
— Editorial Team
暂无评论。