文章

CMA-ES 协方差矩阵自适应进化策略

CMA-ES 协方差矩阵自适应进化策略

参考论文:Nikolaus Hansen, The CMA Evolution Strategy: A Tutorial, arXiv:1604.00772,2023 年 3 月修订版。

引言:为什么需要学习搜索分布

在连续黑箱优化(black-box optimization)中,我们通常只能查询目标函数的数值,而无法可靠获取梯度、Hessian 矩阵,甚至无法假定目标函数连续、光滑或凸。优化问题可以表述为:

\[\min_{\boldsymbol{x}\in\mathbb{R}^{n}} f(\boldsymbol{x}),\]

其中 $f:\mathbb{R}^{n}\to\mathbb{R}$ 是待最小化的目标函数,$n$ 是决策变量维度。与梯度下降沿局部导数确定搜索方向不同,协方差矩阵自适应进化策略(Covariance Matrix Adaptation Evolution Strategy,CMA-ES)维护一个多元正态分布,从该分布中抽取候选解,再根据候选解的相对优劣更新分布参数。它不是试图直接拟合目标函数,而是通过重复采样和排序,让搜索分布逐步适应有利的移动方向、变量之间的耦合结构以及合适的搜索尺度。

CMA-ES 特别针对非可分(non-separable)、病态条件数(ill-conditioned)的连续优化问题设计。其核心并非“把随机搜索做得更随机”,而是把搜索分布本身视作需要学习的对象:均值决定搜索位置,协方差矩阵决定搜索形状与方向,整体步长决定搜索尺度。本文依次建立这些量的几何和统计含义,解释秩 $\mu$ 更新、演化路径、累积步长控制与 active CMA 的负权重机制,最后给出可以直接运行的 NumPy 实现及旋转椭球测试。论文并未给出一般非凸黑箱问题的全局最优保证,因此以下讨论侧重算法机制、适用条件和可复现实现。

搜索分布的几何基础

CMA-ES 在第 $g$ 代维护均值 $\boldsymbol{m}^{(g)}\in\mathbb{R}^{n}$、全局步长 $\sigma^{(g)}>0$ 和对称正定形状矩阵 $\boldsymbol{C}^{(g)}\in\mathbb{R}^{n\times n}$。真正用于采样的协方差矩阵是 $\bigl(\sigma^{(g)}\bigr)^2\boldsymbol{C}^{(g)}$,因此整体尺度和形状矩阵不能混为一谈。在当前代,搜索分布写作:

\[\boldsymbol{x}^{(g+1)}\sim \mathcal{N}\!\left( \boldsymbol{m}^{(g)}, \bigl(\sigma^{(g)}\bigr)^2\boldsymbol{C}^{(g)} \right).\]

为了理解协方差矩阵如何影响采样,考虑对称正定矩阵的特征分解:

\[\boldsymbol{C} =\boldsymbol{B}\boldsymbol{D}^{2}\boldsymbol{B}^{\mathsf T}, \qquad \boldsymbol{B}^{\mathsf T}\boldsymbol{B}=\boldsymbol{I}, \qquad \boldsymbol{D}=\operatorname{diag}(d_1,\ldots,d_n).\]

矩阵 $\boldsymbol{B}$ 的列向量是协方差椭球的主轴方向,$d_i>0$ 是对应主轴上的标准差,而 $d_i^2$ 是协方差矩阵的特征值。若 $\boldsymbol{z}\sim\mathcal{N}(\boldsymbol{0},\boldsymbol{I})$,就可以先生成各向同性的标准正态向量,再通过缩放和旋转得到实际候选解:

\[\boldsymbol{y}=\boldsymbol{B}\boldsymbol{D}\boldsymbol{z}, \qquad \boldsymbol{x}=\boldsymbol{m}+\sigma\boldsymbol{y}.\]

由线性变换的协方差公式可直接验证:

\[\operatorname{Cov}(\boldsymbol{y}) =\boldsymbol{B}\boldsymbol{D} \operatorname{Cov}(\boldsymbol{z}) \boldsymbol{D}\boldsymbol{B}^{\mathsf T} =\boldsymbol{C}.\]

论文第 5 页的图 1 对比了球形分布、轴对齐椭球分布和旋转椭球分布。当变量互不相关时,对角协方差可以分别控制各坐标方向的搜索尺度;当目标函数存在变量耦合时,仅使用对角矩阵就不足以描述倾斜的狭长谷地。完整协方差矩阵能够同时调整主轴长度与方向,这也是 CMA-ES 处理旋转型、非可分优化问题的关键。这里的协方差椭球由等马氏距离曲面定义:

\[(\boldsymbol{x}-\boldsymbol{m})^{\mathsf T} \boldsymbol{C}^{-1} (\boldsymbol{x}-\boldsymbol{m})=r^2.\]

协方差矩阵与逆 Hessian 的关系

对局部正定的二次目标函数,考虑 $f_H(\boldsymbol{x})=\frac12\boldsymbol{x}^{\mathsf T}\boldsymbol{H}\boldsymbol{x}$,其中 $\boldsymbol{H}\succ\boldsymbol{0}$。若选择 $\boldsymbol{C}$ 与 $\boldsymbol{H}^{-1}$ 成正比,那么优化目标中的椭球等值线就会在适当的坐标变换下接近球形:

\[\boldsymbol{C}\propto\boldsymbol{H}^{-1}.\]

这一关系解释了为什么协方差学习可以被理解为一种不直接计算导数的度量学习(metric adaptation):算法不断修正搜索空间的局部几何,使不同方向的有效搜索尺度更接近。但是,论文明确指出,将“最优协方差等于逆 Hessian 的常数倍”作为一般结论仍缺少严格证明;在非二次、非凸或远离局部最优点的情形下,更合适的表述是协方差矩阵尝试适应已选择成功步的统计结构,而非总能估计真正的 Hessian 逆矩阵。

采样、排序与加权重组

每一代独立生成 $\lambda$ 个候选解,并按照目标函数值从小到大排序。设 $\boldsymbol{x}_{i:\lambda}^{(g+1)}$ 表示第 $i$ 优的候选解,则其排序满足:

\[f\!\left(\boldsymbol{x}_{1:\lambda}^{(g+1)}\right) \leq\cdots\leq f\!\left(\boldsymbol{x}_{\lambda:\lambda}^{(g+1)}\right).\]

在排序后,从前 $\mu$ 个候选解构造新的分布均值。令正权重 $w_i$ 满足 $w_1\geq\cdots\geq w_\mu>0$ 且 $\sum_{i=1}^{\mu}w_i=1$,均值更新公式为:

\[\boldsymbol{m}^{(g+1)} =\boldsymbol{m}^{(g)} +c_m\sum_{i=1}^{\mu}w_i \left( \boldsymbol{x}_{i:\lambda}^{(g+1)}-\boldsymbol{m}^{(g)} \right).\]

论文默认采用 $c_m=1$,此时新均值就是被选择候选解的加权平均。与只保留最优个体的方式相比,加权重组综合利用多个方向上的有利信息,降低单个随机样本对搜索轨迹的影响;但它仍然只根据排序来选择候选解,不直接依赖函数值之间的数值距离。换言之,目标函数值差距非常大并不意味着对应候选点会获得更大的重组权重,这种基于次序的选择机制直接带来了目标函数严格单调变换下的不变性。

为了衡量不等权重平均实际整合了多少独立样本的信息,论文引入方差有效选择质量(variance-effective selection mass):

\[\mu_{\mathrm{eff}} =\frac{\left(\sum_{i=1}^{\mu}w_i\right)^2} {\sum_{i=1}^{\mu}w_i^2} =\frac{1}{\sum_{i=1}^{\mu}w_i^2}, \qquad 1\leq\mu_{\mathrm{eff}}\leq\mu.\]

其统计解释非常明确:若 $\boldsymbol{y}i$ 是独立同分布、协方差为 $\boldsymbol{C}$ 的随机向量,那么加权平均的协方差为 $\boldsymbol{C}/\mu{\mathrm{eff}}$。因此,当所有权重相同,$\mu_{\mathrm{eff}}=\mu$;当较大权重集中在少数样本时,$\mu_{\mathrm{eff}}$ 就会下降。它随后不仅控制均值更新的统计尺度,还进入演化路径的归一化系数、协方差学习率以及整体步长的默认参数,因而是整个 CMA-ES 参数体系中的核心量。

协方差自适应:从单代估计到跨代学习

假设当前代的标准化采样步为 $\boldsymbol{y}{i:\lambda}^{(g+1)}=\bigl(\boldsymbol{x}{i:\lambda}^{(g+1)}-\boldsymbol{m}^{(g)}\bigr)/\sigma^{(g)}$。如果只利用当前代的优秀候选解,一个直接的协方差估计是对这些步向量的外积进行加权求和:

\[\boldsymbol{C}_{\mu}^{(g+1)} =\sum_{i=1}^{\mu}w_i \boldsymbol{y}_{i:\lambda}^{(g+1)} \bigl(\boldsymbol{y}_{i:\lambda}^{(g+1)}\bigr)^{\mathsf T}.\]

参考点必须是采样前的旧均值,而不是选择之后的新均值。 这一区别容易被忽略,却是论文第 10–12 页的重要论证。若以新均值为中心计算选中个体的离散程度,那么分布会倾向于收缩到被选出的局部小簇;若以旧均值为中心计算成功移动的外积,则会保留均值整体移动的方向信息。当 $c_m=1$ 时,记加权选中点均值为 $\boldsymbol{m}^{+}$,旧均值为 $\boldsymbol{m}$,可以用以下恒等式看出差异:

\[\begin{aligned} &\sum_{i=1}^{\mu}w_i (\boldsymbol{x}_i-\boldsymbol{m}) (\boldsymbol{x}_i-\boldsymbol{m})^{\mathsf T}\\ &\quad= \sum_{i=1}^{\mu}w_i (\boldsymbol{x}_i-\boldsymbol{m}^{+}) (\boldsymbol{x}_i-\boldsymbol{m}^{+})^{\mathsf T} +(\boldsymbol{m}^{+}-\boldsymbol{m}) (\boldsymbol{m}^{+}-\boldsymbol{m})^{\mathsf T}. \end{aligned}\]

等式右侧多出的外积正是“群体向前移动”携带的方向信息;如果只关注选中点之间的离散程度,就丢失了这部分信息。论文图 3 用线性目标函数说明:以旧均值作为参考的估计能够增加进步方向的方差,而以新均值作为参考的估计往往使该方向快速收缩。需要注意的是,前述外积本身仍不是对目标函数曲率的直接测量,它只是把被选择的有利移动编码进后续采样分布。

秩 $\mu$ 更新:低样本条件下的指数平滑

在实际 CMA-ES 中,$\lambda$ 往往远小于可靠估计一个完整 $n\times n$ 协方差矩阵所需的样本数量,所以不能每一代都用少量样本重新覆盖整个矩阵。解决方式是引入较小的学习率 $c_\mu$,让当前代的成功步信息与历史协方差进行指数平滑。只考虑正重组权重时,其更新公式为:

\[\boldsymbol{C}^{(g+1)} =(1-c_\mu)\boldsymbol{C}^{(g)} +c_\mu\sum_{i=1}^{\mu}w_i \boldsymbol{y}_{i:\lambda}^{(g+1)} \bigl(\boldsymbol{y}_{i:\lambda}^{(g+1)}\bigr)^{\mathsf T}.\]

右侧的样本外积和的秩至多为 $\min(\mu,n)$,因此称为 rank-$\mu$ update。这里的“秩”描述的是新增外积项的秩,并不意味着完整的 $\boldsymbol{C}^{(g+1)}$ 只能是低秩矩阵;只要历史矩阵正定且旧矩阵的系数为正,整体仍可保持正定。指数平滑还使协方差具备跨代统计记忆:当 $c_\mu$ 较小时,大约 $1/c_\mu$ 代构成一个典型的历史时间尺度,而不是只依靠本代的少数采样点。

秩一更新:利用演化路径保留时间相关性

单代的外积 $\boldsymbol{y}\boldsymbol{y}^{\mathsf T}$ 无法区分 $\boldsymbol{y}$ 和 $-\boldsymbol{y}$,因而无法判断连续两代是沿同一方向前进,还是发生方向反转。CMA-ES 使用演化路径(evolution path)累积多个相邻世代的均值移动,从而将时间相关性纳入协方差更新。首先定义本代选中步的加权平均:

\[\boldsymbol{y}_w^{(g+1)} =\sum_{i=1}^{\mu}w_i\boldsymbol{y}_{i:\lambda}^{(g+1)}.\]

协方差演化路径 $\boldsymbol{p}_c$ 采用指数递推构造,暂不考虑后面介绍的保护开关时有:

\[\boldsymbol{p}_c^{(g+1)} =(1-c_c)\boldsymbol{p}_c^{(g)} +\sqrt{c_c(2-c_c)\mu_{\mathrm{eff}}} \,\boldsymbol{y}_w^{(g+1)}.\]

系数中的 $\sqrt{\mu_{\mathrm{eff}}}$ 用于抵消加权平均造成的方差降低,而 $\sqrt{c_c(2-c_c)}$ 用于抵消指数平滑造成的路径方差变化:在独立、无选择偏差且协方差固定的理想情况下,归一化后的路径在平稳状态下具有与基础步相匹配的协方差。若连续几代沿相近方向移动,路径中的分量会相互强化;若连续移动方向反复改变,分量则相互抵消。于是,外积 $\boldsymbol{p}_c\boldsymbol{p}_c^{\mathsf T}$ 能够比单一世代外积更有效地表达跨代的持续成功方向:

\[\boldsymbol{C}^{(g+1)} =(1-c_1)\boldsymbol{C}^{(g)} +c_1\boldsymbol{p}_c^{(g+1)} \bigl(\boldsymbol{p}_c^{(g+1)}\bigr)^{\mathsf T}.\]

将这一秩一更新与秩 $\mu$ 更新相结合,可以同时利用单代群体中的多个成功样本,以及不同世代间的方向相关性。对正权重的基础版本,联合更新写作:

\[\begin{aligned} \boldsymbol{C}^{(g+1)} ={}&(1-c_1-c_\mu)\boldsymbol{C}^{(g)}\\ &+c_1\boldsymbol{p}_c^{(g+1)} \bigl(\boldsymbol{p}_c^{(g+1)}\bigr)^{\mathsf T}\\ &+c_\mu\sum_{i=1}^{\mu}w_i \boldsymbol{y}_{i:\lambda}^{(g+1)} \bigl(\boldsymbol{y}_{i:\lambda}^{(g+1)}\bigr)^{\mathsf T}. \end{aligned}\]

这种分工也解释了为什么 CMA-ES 通常可以使用较小的群体规模:它不要求每一代从头估计稳定的完整协方差,而是通过受学习率控制的跨代积累来更新高维统计结构。不过,这并不意味着所有场景都应使用尽可能小的群体;论文指出,增加 $\lambda$ 往往有利于全局搜索和多峰问题的鲁棒性,代价则是以函数评价次数计的收敛速度降低。

累积步长自适应:为什么还需要独立的尺度控制

协方差矩阵与整体步长虽然都影响候选点的扩散范围,却不承担相同的职责。协方差学习率通常较小,不能足够迅速地控制搜索分布的整体尺度,因此 CMA-ES 使用累积步长自适应(Cumulative Step-size Adaptation,CSA)单独更新 $\sigma$。其直观依据是:若接连的均值移动方向相近,说明当前搜索步可能过短;若路径频繁折返,说明搜索步可能过长。算法通过比较实际路径长度和无偏随机搜索下的基准长度,把这种方向相关性转换为尺度调整信号。

为了使路径长度在不同协方差椭球形状下可比,CSA 在计算步长路径前先进行白化(whitening)。由特征分解可以得到对称的逆平方根:

\[\boldsymbol{C}^{-1/2} =\boldsymbol{B}\boldsymbol{D}^{-1}\boldsymbol{B}^{\mathsf T}.\]

白化将原始椭球采样步映射为单位协方差坐标,故步长演化路径 $\boldsymbol{p}_\sigma$ 的定义为:

\[\boldsymbol{p}_\sigma^{(g+1)} =(1-c_\sigma)\boldsymbol{p}_\sigma^{(g)} +\sqrt{c_\sigma(2-c_\sigma)\mu_{\mathrm{eff}}} \,\bigl(\boldsymbol{C}^{(g)}\bigr)^{-1/2} \boldsymbol{y}_w^{(g+1)}.\]

设 $\boldsymbol{z}\sim\mathcal{N}(\boldsymbol{0},\boldsymbol{I})$,其欧氏范数的期望为:

\[\chi_n =\mathbb{E}\!\left[\lVert\boldsymbol{z}\rVert\right] =\sqrt{2}\, \frac{\Gamma\!\left((n+1)/2\right)} {\Gamma\!\left(n/2\right)} \approx\sqrt{n}\left(1-\frac{1}{4n}+\frac{1}{21n^2}\right).\]

于是整体步长通过指数更新保持为正数:

\[\sigma^{(g+1)} =\sigma^{(g)}\exp\!\left[ \frac{c_\sigma}{d_\sigma} \left( \frac{\lVert\boldsymbol{p}_\sigma^{(g+1)}\rVert}{\chi_n}-1 \right) \right].\]

如果实际路径长度高于 $\chi_n$,指数中的校正量为正,搜索步长增大;如果实际路径长度低于该基准,搜索步长减小;两者接近时,步长在对数尺度上基本保持稳定。这里 $c_\sigma$ 控制路径记忆长度,$d_\sigma$ 是步长变化的阻尼系数。论文还强调,该机制在随机选择假设下使 $\log\sigma$ 的更新无偏,而不是要求 $\sigma$ 的算术期望严格不变;这一区分来自指数变换的非线性,也是不应随意把指数更新替换为线性增减的重要原因。

Active CMA:利用较差样本收缩无效方向

上述基础公式只使用排序靠前的正权重样本,但论文附录 A 给出的完整算法还支持 active covariance matrix adaptation:对于部分排序靠后的候选点赋予负权重,用来减少在不利方向上的采样方差。需要强调,负权重仅用于协方差矩阵更新,不用于均值的正权重重组。这样,优秀样本负责增强值得探索的方向,较差样本则提供压缩不利搜索方向的证据。与只增添成功方向的外积相比,active 更新可以更直接地改变分布椭球的形状。

由于负外积可能破坏正定性,不能直接把任意负权重代入普通协方差更新。论文附录 A 通过两层机制控制风险:其一,限制负权重总质量;其二,针对负权重样本按白化后的马氏长度重新缩放外积贡献。记 $w_i$ 为可正可负的最终协方差权重,定义:

\[w_i^{\circ} =\begin{cases} w_i, & w_i\geq 0,\\[4pt] w_i\dfrac{n} {\left\lVert \bigl(\boldsymbol{C}^{(g)}\bigr)^{-1/2} \boldsymbol{y}_{i:\lambda}^{(g+1)}\right\rVert^2}, & w_i<0. \end{cases}\]

此外,完整算法用布尔变量 $h_\sigma$ 检测步长演化路径是否异常偏长,避免在整体步长严重偏小等情况下,协方差演化路径过度强化某一方向。其判断规则可表述为:

\[h_\sigma =\begin{cases} 1, & \displaystyle \frac{\left\lVert\boldsymbol{p}_\sigma^{(g+1)}\right\rVert} {\chi_n\sqrt{1-(1-c_\sigma)^{2(g+1)}}} <1.4+\dfrac{2}{n+1},\\[8pt] 0, & \text{其他情况}. \end{cases}\]

将演化路径定义修改为在 $h_\sigma=0$ 时不注入新的均值移动,同时引入 $\delta(h_\sigma)=(1-h_\sigma)c_c(2-c_c)$,得到论文附录 A 的统一协方差更新式:

\[\begin{aligned} \boldsymbol{p}_c^{(g+1)} ={}&(1-c_c)\boldsymbol{p}_c^{(g)} +h_\sigma\sqrt{c_c(2-c_c)\mu_{\mathrm{eff}}} \,\boldsymbol{y}_w^{(g+1)},\\[6pt] \boldsymbol{C}^{(g+1)} ={}&\left[ 1+c_1\delta(h_\sigma)-c_1-c_\mu\sum_{i=1}^{\lambda}w_i \right]\boldsymbol{C}^{(g)}\\ &+c_1\boldsymbol{p}_c^{(g+1)} \bigl(\boldsymbol{p}_c^{(g+1)}\bigr)^{\mathsf T}\\ &+c_\mu\sum_{i=1}^{\lambda}w_i^{\circ} \boldsymbol{y}_{i:\lambda}^{(g+1)} \bigl(\boldsymbol{y}_{i:\lambda}^{(g+1)}\bigr)^{\mathsf T}. \end{aligned}\]

对学习目的而言,可以先把负权重置零以获得较易理解的基础 CMA-ES;但如果希望实现论文附录 A 的默认 active 版本,就必须同时纳入负权重归一化、负权重长度校正和 $h_\sigma$ 机制。论文附录 C 提供的简洁 MATLAB 代码明确不包含负权重,所以不应将它与附录 A 的默认 active 更新误认为完全等价。下文的 Python 教学实现采用附录 A 的 active 参数设置,并为可读性每代重新计算特征分解。

默认参数与完整迭代流程

论文表 1 给出一组面向广泛连续优化问题的经验性默认参数。种群规模和父代个数首先设为:

\[\lambda=4+\left\lfloor 3\ln n\right\rfloor, \qquad \mu=\left\lfloor\frac{\lambda}{2}\right\rfloor.\]

定义排序权重的原始形状 $w_i’=\ln!\bigl((\lambda+1)/2\bigr)-\ln i$,将正权重归一化到和为一,并使用这些正权重计算 $\mu_{\mathrm{eff}}$。步长与协方差学习参数采用以下默认值,其中 $c_m=1$:

\[\begin{aligned} c_\sigma&=\frac{\mu_{\mathrm{eff}}+2}{n+\mu_{\mathrm{eff}}+5},\\[4pt] d_\sigma&=1+2\max\!\left(0,\sqrt{\frac{\mu_{\mathrm{eff}}-1}{n+1}}-1\right)+c_\sigma,\\[4pt] c_c&=\frac{4+\mu_{\mathrm{eff}}/n}{n+4+2\mu_{\mathrm{eff}}/n},\\[4pt] c_1&=\frac{2}{(n+1.3)^2+\mu_{\mathrm{eff}}},\\[4pt] c_\mu&=\min\!\left( 1-c_1, \frac{2\bigl(1/4+\mu_{\mathrm{eff}}+1/\mu_{\mathrm{eff}}-2\bigr)} {(n+2)^2+\mu_{\mathrm{eff}}} \right). \end{aligned}\]

若采用 active 更新,负权重还必须由其原始质量和三项上界共同决定。先计算负权重的有效质量,再计算负权重可使用的缩放系数:

\[\begin{aligned} \mu_{\mathrm{eff}}^{-} &=\frac{\left(\sum_{i=\mu+1}^{\lambda}w_i'\right)^2} {\sum_{i=\mu+1}^{\lambda}(w_i')^2},\\[4pt] \alpha_{\mu}^{-} &=1+\frac{c_1}{c_\mu},\\[4pt] \alpha_{\mathrm{eff}}^{-} &=1+\frac{2\mu_{\mathrm{eff}}^{-}}{\mu_{\mathrm{eff}}+2},\\[4pt] \alpha_{\mathrm{pd}}^{-} &=\frac{1-c_1-c_\mu}{nc_\mu},\\[4pt] \alpha^{-}&=\min\!\left(\alpha_\mu^{-},\alpha_{\mathrm{eff}}^{-},\alpha_{\mathrm{pd}}^{-}\right). \end{aligned}\]

最终正权重与负权重分别按照对应原始权重的正质量与负质量归一化:

\[w_i =\begin{cases} \displaystyle \frac{w_i'}{\sum_{j:w_j'>0}w_j'}, & w_i'>0,\\[10pt] \displaystyle \alpha^{-}\frac{w_i'}{\sum_{j:w_j'<0}\lvert w_j'\rvert}, & w_i'<0,\\[10pt] 0, & w_i'=0. \end{cases}\]

上述公式完整体现了论文表 1(2016 年默认参数)的设定,其中负权重总质量受正定性约束。算法在每一代遵循“采样候选点、评价并排序、正权重更新均值、更新白化演化路径和步长、更新协方差演化路径与协方差矩阵”的步骤;计算时必须保证所有候选点、标准化步和排序索引严格对应,否则会把函数值排序与实际移动方向错配。更重要的是,对同一代更新应使用该代旧的 $\boldsymbol{C}^{(g)}$ 和 $\sigma^{(g)}$ 来形成采样步与路径归一化,不能在更新了协方差后再回头使用新矩阵重新解释旧样本。

NumPy 实现:与论文 active 更新对应的教学版本

下面的代码实现无约束、有限函数值、实数变量的最小化,并返回搜索过程中的历史最优解。为使数学与代码能够逐行对应,它每代都执行对称矩阵特征分解,而不是使用论文附录 B 的延迟特征分解优化;同时不包含重启策略、带约束惩罚、噪声处理或论文列出的全部终止准则。因此,这是一份结构完整且便于审阅的教学实现,尚不能取代成熟优化库中经过充分测试的工程实现。代码中的负权重、马氏长度修正、路径阈值与表 1 参数直接对应前面的推导。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
"""Educational active CMA-ES, following Hansen (2023), Algorithm 6 and Table 1.
For unconstrained, finite-valued, deterministic objectives; minimization only.
"""
from dataclasses import dataclass
from typing import Callable
import numpy as np


@dataclass
class CMAResult:
    x: np.ndarray
    fun: float
    evaluations: int
    history: list[float]


def cma_es(
    objective: Callable[[np.ndarray], float],
    x0: np.ndarray,
    sigma0: float,
    max_evals: int = 20000,
    target: float = 1e-10,
    seed: int = 42,
) -> CMAResult:
    m = np.asarray(x0, dtype=float).copy()
    n = m.size
    if n < 2 or sigma0 <= 0 or max_evals < 4:
        raise ValueError("Require dimension >= 2, sigma0 > 0, max_evals >= 4")
    rng = np.random.default_rng(seed)
    lam = 4 + int(np.floor(3 * np.log(n)))
    mu = lam // 2

    # The 2016 default active weights, paper Eqs. (48)-(53).
    i = np.arange(1, lam + 1)
    raw = np.log((lam + 1) / 2) - np.log(i)
    pos = raw > 0
    neg = raw < 0
    weights = np.zeros(lam)
    weights[pos] = raw[pos] / raw[pos].sum()
    mueff = raw[pos].sum() ** 2 / np.sum(raw[pos] ** 2)
    mueff_neg = (raw[neg].sum() ** 2 / np.sum(raw[neg] ** 2)) if np.any(neg) else 0.0

    # Table 1; do not replace c_mu with the older Appendix C formula.
    cs = (mueff + 2) / (n + mueff + 5)
    ds = 1 + 2 * max(0, np.sqrt((mueff - 1) / (n + 1)) - 1) + cs
    cc = (4 + mueff / n) / (n + 4 + 2 * mueff / n)
    c1 = 2 / ((n + 1.3) ** 2 + mueff)
    cmu = min(1 - c1, 2 * (0.25 + mueff + 1 / mueff - 2) / ((n + 2) ** 2 + mueff))
    if np.any(neg):
        alpha_neg = min(
            1 + c1 / cmu,
            1 + 2 * mueff_neg / (mueff + 2),
            (1 - c1 - cmu) / (n * cmu),
        )
        weights[neg] = alpha_neg * raw[neg] / np.abs(raw[neg]).sum()

    sigma = float(sigma0)
    C = np.eye(n)
    pc = np.zeros(n)
    ps = np.zeros(n)
    chi_n = np.sqrt(n) * (1 - 1 / (4 * n) + 1 / (21 * n * n))
    best_x = m.copy()
    best_f = float("inf")
    evals = 0
    generation = 0
    history: list[float] = []

    while evals + lam <= max_evals:
        # Exact eigendecomposition each generation: simple but O(n^3) per generation.
        eigvals, B = np.linalg.eigh(C)
        if np.min(eigvals) <= 0:
            raise FloatingPointError("Covariance matrix lost positive definiteness")
        D = np.sqrt(eigvals)
        A = B * D[np.newaxis, :]
        invsqrtC = (B * (1 / D)[np.newaxis, :]) @ B.T

        z = rng.standard_normal((lam, n))
        y = z @ A.T
        x = m[np.newaxis, :] + sigma * y
        values = np.array([objective(candidate) for candidate in x], dtype=float)
        if not np.all(np.isfinite(values)):
            raise ValueError("Objective must be finite for all sampled candidates")
        evals += lam
        order = np.argsort(values)
        y_sorted, z_sorted, x_sorted = y[order], z[order], x[order]
        if values[order[0]] < best_f:
            best_f = float(values[order[0]])
            best_x = x_sorted[0].copy()
        history.append(best_f)
        if best_f <= target:
            break

        # Selection/recombination, Eqs. (41)-(42), c_m = 1.
        y_w = weights[:mu] @ y_sorted[:mu]
        m = m + sigma * y_w

        # Cumulative step-size adaptation, Eq. (43)-(44).
        ps = (1 - cs) * ps + np.sqrt(cs * (2 - cs) * mueff) * (invsqrtC @ y_w)
        generation += 1
        hsig = (
            np.linalg.norm(ps) / np.sqrt(1 - (1 - cs) ** (2 * generation)) / chi_n
            < 1.4 + 2 / (n + 1)
        )
        sigma *= np.exp((cs / ds) * (np.linalg.norm(ps) / chi_n - 1))

        # Rank-one path and active rank-mu covariance update, Eqs. (45)-(47).
        pc = (1 - cc) * pc + float(hsig) * np.sqrt(cc * (2 - cc) * mueff) * y_w
        w_effective = weights.copy()
        if np.any(neg):
            squared_mahalanobis = np.sum(z_sorted[neg] ** 2, axis=1)
            w_effective[neg] *= n / np.maximum(squared_mahalanobis, 1e-30)
        old_factor = 1 + c1 * (1 - float(hsig)) * cc * (2 - cc) - c1 - cmu * weights.sum()
        rank_mu = np.einsum("i,ij,ik->jk", w_effective, y_sorted, y_sorted)
        C = old_factor * C + c1 * np.outer(pc, pc) + cmu * rank_mu
        C = 0.5 * (C + C.T)

    return CMAResult(best_x, best_f, evals, history)


if __name__ == "__main__":
    n = 10
    rng = np.random.default_rng(7)
    Q, _ = np.linalg.qr(rng.standard_normal((n, n)))
    scales = np.power(1e6, np.linspace(0, 1, n))

    def rotated_ellipsoid(x: np.ndarray) -> float:
        u = Q @ x
        return float(np.sum(scales * u * u))

    result = cma_es(rotated_ellipsoid, 2 * np.ones(n), 0.5, 25000, 1e-10)
    print(f"best f={result.fun:.3e}, evaluations={result.evaluations}")
    print(f"norm(x)={np.linalg.norm(result.x):.3e}")

可复现实验:旋转椭球目标函数

为了检验协方差学习是否真正利用了变量之间的相关结构,可以使用论文讨论的病态二次椭球思想构造可重复实验。令 $\boldsymbol{Q}$ 为正交矩阵,考虑旋转椭球目标函数:

\[f(\boldsymbol{x}) =\sum_{i=1}^{n} 10^{6(i-1)/(n-1)} \bigl(\boldsymbol{Q}\boldsymbol{x}\bigr)_i^2.\]

这类测试的条件数为 $10^6$,最优点位于原点,搜索难点是不同曲率方向的尺度差异以及正交旋转产生的变量耦合。上面的 Python 文件已包含一个 $n=10$ 的测试实例:使用固定随机种子构造 $\boldsymbol{Q}$,从 $2\boldsymbol{1}$ 出发,初始步长设为 $0.5$,目标阈值为 $10^{-10}$,函数评价预算为 $25\,000$ 次。对此给定实现和随机种子,实测在约 $4\,320$ 次函数评价后达到 $7.98\times10^{-11}$ 的最佳函数值,返回点的欧氏范数约为 $4.55\times10^{-6}$。这只是单次教学运行结果,并非统计意义上的性能基准;严谨的算法比较应在多个旋转矩阵、初始点和随机种子上报告函数评价次数的分布,并包含没有达到阈值的试验。

建议在自己的实验中除了记录最佳函数值,还跟踪整体步长、形状矩阵的条件数以及主要特征向量与目标函数曲率主轴的对齐情况。如果协方差学习正常进行,搜索分布的方向和各向异性程度应逐渐与目标函数等值线的几何结构相协调;但有限样本的统计噪声、不同初始化与有限评价预算都可能影响轨迹。评价性能时应优先使用函数评价次数而非仅用迭代代数,因为扩大 $\lambda$ 虽然可能降低代际噪声,也会增加每一代的函数调用成本。

数值实现、约束处理与终止条件

完整协方差矩阵包含 $n(n+1)/2$ 个独立参数,单次矩阵特征分解一般需要 $O(n^3)$ 的计算量,而一个候选点的高斯线性变换通常需要 $O(n^2)$ 运算。在目标函数评价十分昂贵时,后者往往不是主要成本;在高维且评价函数很廉价的情况下,完整协方差算法的开销就会变得显著。论文附录 B 指出,不必在每一代重算全部特征分解:可以适当间隔更新 $\boldsymbol{B}$ 和 $\boldsymbol{D}$,将分解开销摊销到较低的平均代价;但若使用缓存分解,必须谨慎处理白化矩阵与负权重马氏长度修正所对应的时点,保证数值一致性。简单的 Cholesky 因子可以用于生成高斯样本,却不能直接替代对称逆平方根在 CSA 路径中的作用。

协方差矩阵应在数值上维持对称与正定。教学实现用矩阵与其转置的平均抵消浮点运算引入的微小非对称性,并在特征分解时检查特征值是否为正;若出现明显负特征值,说明算法参数、负权重校正或数值过程值得排查,而不是简单地忽略异常。原文还给出了协方差条件数过大、加上微小轴向扰动后均值不再变化、目标函数值长时间相等等终止指标。例如,论文建议在协方差条件数超过 $10^{14}$ 时停止当前搜索,考虑重启、重新缩放变量或修订问题参数化,而不必始终把“达到预设最优函数值”作为唯一停止条件。

对于边界约束与一般非线性约束,原文并不推荐不加区分地把候选点裁剪回可行域后,直接将裁剪后的点代入全部分布更新公式,因为这会破坏高斯采样步骤所依赖的统计结构,进而引发步长失稳。在最优解距离边界较远时,可考虑对不可行样本重采样;在存在盒约束时,可以在修复后的候选点上评价目标函数,并将修复距离作为惩罚项,但更新分布时仍须谨慎处理原始采样点与实际评价点之间的区别。对于强噪声、多峰问题或经常出现完全相同目标函数值的目标函数,论文也指出 CSA、选择机制和终止判断可能面临困难,应结合重启、目标函数重构与问题特定的约束策略,而不是期待默认参数适用于所有极端情形。

不变性、适用边界与实践建议

CMA-ES 的一个根本优点是排序不变性:对目标函数施加任何严格递增变换,候选解的排序不变,因而在相同随机采样轨迹下,算法的选择与更新机制也不变。它还具有相应的旋转、平移与仿射坐标变换不变性,但需要连同初始均值、协方差及相关状态进行一致变换。必须强调,“仿射不变”并不代表可以随意改变变量量纲而不调整初始化;论文明确指出,初始坐标缩放需要反映在协方差等初始参数中。对于变量尺度相差多个数量级的实际问题,事先进行合理参数化仍然很有价值。

从方法选择的角度看,CMA-ES 适合目标函数求导困难、变量间耦合显著、存在不规则局部几何且评估预算允许重复采样的连续优化。其相对优势来自对搜索分布形状的自适应,而不是来自对全局最优解的形式化保证。对于维度很高、函数评价极其便宜或可用解析梯度且目标足够光滑的情形,完整协方差学习所需的内存、数值分解和函数评价可能并非最经济的选择。对于多峰性突出的任务,增大种群以及独立重启通常比过度手工调节全部学习率更直接;论文亦建议通常保留默认参数,优先考虑调整种群规模,并在需要时使用逐渐增大种群的重启策略。

结语

CMA-ES 可以被看作一个在黑箱反馈下不断学习局部搜索度量的随机优化系统。加权重组移动均值,秩 $\mu$ 更新积累当前代的成功方向,秩一演化路径提取跨代的时间相关性,CSA 在白化坐标中比较路径长度并调整整体搜索尺度,而 active covariance adaptation 进一步利用较差样本压缩不利方向。所有模块共同服务于同一个目标:在不显式访问梯度和 Hessian 的前提下,让高斯搜索分布在位置、方向、形状和尺度上持续适应优化问题的局部结构。掌握这些模块之间的因果联系,比把 CMA-ES 记成一组更新公式更有价值,也为调试搜索行为、设计重启策略和扩展到带约束场景提供了清晰的技术基础。

附录:核心公式推导、设计依据与假设边界

本附录按照正文公式的出现顺序展开,并将论证区分为三类:严格恒等式(如高斯线性变换、加权方差、外积展开)、在明确随机模型下成立的统计推导(如演化路径的平稳方差、CSA 的随机选择基准),以及受理论约束启发但依赖经验校准的设计选择(如种群规模、学习率中的常数、路径异常阈值)。

主要来源是 Hansen, The CMA Evolution Strategy: A Tutorial, arXiv:1604.00772v2,2023 年 3 月修订版。下文注明的“式(编号)”和“表 1”均指该版本;推导中的中间等式是为解释原理补写,并非全部逐字出自论文。为简洁起见,未特别说明时省略世代上标,并将采样前的参数记作旧参数。

A.1 优化问题、搜索分布和特征分解(正文“搜索分布的几何基础”)

连续黑箱最小化的定义是从可行域中寻找函数值最小的点:

\[\boldsymbol{x}^{\star}\in \operatorname*{arg\,min}_{\boldsymbol{x}\in\mathbb{R}^{n}} f(\boldsymbol{x}).\]

这是问题定义,不是由 CMA-ES 推导出的公式。CMA-ES 将每代的待评价点建模为随机向量。对对称正定矩阵 $\boldsymbol{C}$,谱定理保证存在正交矩阵 $\boldsymbol{B}$ 和严格正的特征值 $d_i^2$,使得

\[\boldsymbol{C}\boldsymbol{b}_i=d_i^2\boldsymbol{b}_i, \qquad \boldsymbol{C}=\boldsymbol{B}\boldsymbol{D}^2\boldsymbol{B}^{\mathsf T}, \qquad \boldsymbol{D}=\operatorname{diag}(d_1,\ldots,d_n).\]

定义 $\boldsymbol{A}=\boldsymbol{B}\boldsymbol{D}$。对标准正态变量 $\boldsymbol{z}\sim\mathcal{N}(\boldsymbol{0},\boldsymbol{I})$,构造

\[\boldsymbol{x}=\boldsymbol{m}+\sigma\boldsymbol{A}\boldsymbol{z}, \qquad \sigma>0.\]

利用线性变换的期望与协方差恒等式可得

\[\begin{aligned} \mathbb{E}[\boldsymbol{x}] &=\boldsymbol{m}+\sigma\boldsymbol{A}\mathbb{E}[\boldsymbol{z}] =\boldsymbol{m},\\ \operatorname{Cov}(\boldsymbol{x}) &=\sigma^2\boldsymbol{A}\operatorname{Cov}(\boldsymbol{z})\boldsymbol{A}^{\mathsf T}\\ &=\sigma^2\boldsymbol{B}\boldsymbol{D}^2\boldsymbol{B}^{\mathsf T} =\sigma^2\boldsymbol{C}. \end{aligned}\]

仿射变换保持正态分布的性质,于是得到正文的采样公式 $\boldsymbol{x}\sim\mathcal{N}(\boldsymbol{m},\sigma^2\boldsymbol{C})$,其直接来源是论文第 1 节及附录 A 的式(38)—(40)。分离 $\sigma$ 与 $\boldsymbol{C}$ 并非线性代数所必需,而是算法上的设计:让 $\sigma$ 快速适应整体搜索距离,$\boldsymbol{C}$ 较慢地学习相对轴长和相关结构。二者有尺度冗余,只有乘积 $\sigma^2\boldsymbol{C}$ 决定当前代的采样协方差。

A.2 等马氏距离椭球、白化以及逆 Hessian 的几何来源

对非退化高斯分布,其密度中与位置有关的指数项是

\[\exp\!\left( -\frac{1}{2\sigma^2} (\boldsymbol{x}-\boldsymbol{m})^{\mathsf T} \boldsymbol{C}^{-1} (\boldsymbol{x}-\boldsymbol{m}) \right).\]

固定密度等价于固定该二次型。令

\[\boldsymbol{u}=\boldsymbol{D}^{-1}\boldsymbol{B}^{\mathsf T} (\boldsymbol{x}-\boldsymbol{m}),\]

则

\[\begin{aligned} \lVert\boldsymbol{u}\rVert^2 &=(\boldsymbol{x}-\boldsymbol{m})^{\mathsf T} \boldsymbol{B}\boldsymbol{D}^{-2}\boldsymbol{B}^{\mathsf T} (\boldsymbol{x}-\boldsymbol{m})\\ &=(\boldsymbol{x}-\boldsymbol{m})^{\mathsf T} \boldsymbol{C}^{-1} (\boldsymbol{x}-\boldsymbol{m}). \end{aligned}\]

因此,正文的等马氏距离曲面就是白化坐标中的半径为 $r$ 的球面。沿第 $i$ 条特征轴的原始空间半轴长为 $r d_i$;若固定的是完整采样分布的密度等值面,其尺度还要乘 $\sigma$。采用对称白化矩阵

\[\boldsymbol{C}^{-1/2} =\boldsymbol{B}\boldsymbol{D}^{-1}\boldsymbol{B}^{\mathsf T}\]

同样满足

\[\boldsymbol{C}^{-1/2}\boldsymbol{C}\boldsymbol{C}^{-1/2} =\boldsymbol{I}.\]

它与 $\boldsymbol{D}^{-1}\boldsymbol{B}^{\mathsf T}$ 都能白化;前者是对称逆平方根,正是 CSA 公式所采用的形式,来源见论文第 0.1 节和附录 A。

对于局部严格凸二次函数,可写为

\[f_H(\boldsymbol{x})= \frac12(\boldsymbol{x}-\boldsymbol{x}^{\star})^{\mathsf T} \boldsymbol{H} (\boldsymbol{x}-\boldsymbol{x}^{\star}), \qquad \boldsymbol{H}\succ\boldsymbol{0}.\]

取 $\boldsymbol{C}=a\boldsymbol{H}^{-1}$,其中 $a>0$,并令 $\boldsymbol{x}-\boldsymbol{x}^{\star}=\boldsymbol{C}^{1/2}\boldsymbol{v}$,便有

\[\begin{aligned} f_H(\boldsymbol{x}) &=\frac12\boldsymbol{v}^{\mathsf T} \boldsymbol{C}^{1/2}\boldsymbol{H}\boldsymbol{C}^{1/2} \boldsymbol{v}\\ &=\frac{a}{2}\lVert\boldsymbol{v}\rVert^2. \end{aligned}\]

所以选择与 $\boldsymbol{H}^{-1}$ 成比例的协方差,相当于在采样坐标中把二次目标的等值椭球变成球。这是逆 Hessian 关系的几何推导,不是一般黑箱问题中 CMA-ES 必然收敛到真实逆 Hessian 的证明。 论文第 0.4 节也将其作为几何动机而非普适保证。

A.3 排序、加权重组和均值公式(正文“采样、排序与加权重组”)

给定 $\lambda$ 次独立采样,按照函数值定义顺序统计量 $\boldsymbol{x}{1:\lambda},\ldots,\boldsymbol{x}{\lambda:\lambda}$,满足

\[f(\boldsymbol{x}_{1:\lambda})\leq\cdots \leq f(\boldsymbol{x}_{\lambda:\lambda}).\]

排序不等式是下标的定义,而不是目标函数的数学性质。设前 $\mu$ 名的非负权重和为一,则它们的加权重组中心为

\[\boldsymbol{m}_{\mathrm{sel}} =\sum_{i=1}^{\mu}w_i\boldsymbol{x}_{i:\lambda}.\]

引入均值学习率 $c_m$,在旧均值与这个重组中心之间插值:

\[\begin{aligned} \boldsymbol{m}^{+} &=(1-c_m)\boldsymbol{m}+c_m\boldsymbol{m}_{\mathrm{sel}}\\ &=\boldsymbol{m}+c_m\sum_{i=1}^{\mu}w_i (\boldsymbol{x}_{i:\lambda}-\boldsymbol{m})\\ &=\boldsymbol{m}+c_m\sigma\boldsymbol{y}_w, \end{aligned}\]

其中

\[\boldsymbol{y}_w =\sum_{i=1}^{\mu}w_i\boldsymbol{y}_{i:\lambda}, \qquad \boldsymbol{y}_{i:\lambda} =\frac{\boldsymbol{x}_{i:\lambda}-\boldsymbol{m}}{\sigma}.\]

当 $c_m=1$ 时,$\boldsymbol{m}^{+}=\boldsymbol{m}_{\mathrm{sel}}$;当 $c_m$ 较小时,单代变化较平滑。选择只使用名次,因此任意严格递增函数 $\phi$ 都满足

\[f(\boldsymbol{x}_a)<f(\boldsymbol{x}_b) \Longleftrightarrow \phi(f(\boldsymbol{x}_a))<\phi(f(\boldsymbol{x}_b)).\]

这解释了严格单调目标变换下的排序不变性,来源是论文第 2 节及附录 A 式(41)—(42)。同值样本的具体排序仍取决于实现中的并列处理规则。

A.4 有效选择质量为什么是权重平方和的倒数

先考虑一个用于归一化的假设模型:$\boldsymbol{y}1,\ldots,\boldsymbol{y}\mu$ 独立同分布,均值为零,协方差同为 $\boldsymbol{C}$。此时不同样本之间的交叉协方差为零,所以

\[\begin{aligned} \operatorname{Cov}\!\left(\sum_{i=1}^{\mu}w_i\boldsymbol{y}_i\right) &=\sum_{i=1}^{\mu}w_i^2\operatorname{Cov}(\boldsymbol{y}_i)\\ &=\left(\sum_{i=1}^{\mu}w_i^2\right)\boldsymbol{C}. \end{aligned}\]

而 $k$ 个等权独立样本的平均值的协方差是 $\boldsymbol{C}/k$。令这两种方差相等,便得到

\[\mu_{\mathrm{eff}} =\frac{1}{\sum_{i=1}^{\mu}w_i^2} =\frac{\left(\sum_{i=1}^{\mu}w_i\right)^2} {\sum_{i=1}^{\mu}w_i^2}.\]

由 $w_i\geq0$ 和 $\sum_iw_i=1$,有

\[\sum_{i=1}^{\mu}w_i^2\leq \left(\sum_{i=1}^{\mu}w_i\right)^2=1.\]

再由柯西—施瓦茨不等式,

\[1=\left(\sum_{i=1}^{\mu}w_i\right)^2 \leq\mu\sum_{i=1}^{\mu}w_i^2.\]

联立便证明 $1\leq\mu_{\mathrm{eff}}\leq\mu$。在真实 CMA-ES 中,排名后的样本并不独立同分布,故这里是在随机选择基准模型下定义统计尺度,不是声称精英样本的真实协方差必为 $\boldsymbol{C}/\mu_{\mathrm{eff}}$。来源是论文第 2 节式(8)。

A.5 为什么协方差用相对旧均值的外积,而不是新均值的样本方差

令 $\overline{\boldsymbol{x}}=\sum_iw_i\boldsymbol{x}_i$、$\boldsymbol{d}=\overline{\boldsymbol{x}}-\boldsymbol{m}$,并记 $\boldsymbol{e}_i=\boldsymbol{x}_i-\overline{\boldsymbol{x}}$。有

\[\boldsymbol{x}_i-\boldsymbol{m}=\boldsymbol{e}_i+\boldsymbol{d}, \qquad \sum_i w_i\boldsymbol{e}_i=\boldsymbol{0}.\]

将外积逐项展开:

\[\begin{aligned} &\sum_iw_i(\boldsymbol{x}_i-\boldsymbol{m}) (\boldsymbol{x}_i-\boldsymbol{m})^{\mathsf T}\\ &=\sum_iw_i\bigl( \boldsymbol{e}_i\boldsymbol{e}_i^{\mathsf T} +\boldsymbol{e}_i\boldsymbol{d}^{\mathsf T} +\boldsymbol{d}\boldsymbol{e}_i^{\mathsf T} +\boldsymbol{d}\boldsymbol{d}^{\mathsf T} \bigr)\\ &=\sum_iw_i\boldsymbol{e}_i\boldsymbol{e}_i^{\mathsf T} +\boldsymbol{d}\boldsymbol{d}^{\mathsf T}. \end{aligned}\]

交叉项消失的原因正是 $\sum_iw_i\boldsymbol{e}_i=0$。在 $c_m=1$ 时,$\overline{\boldsymbol{x}}=\boldsymbol{m}^{+}$,这就严格证明了正文的分解式。额外的 $\boldsymbol{d}\boldsymbol{d}^{\mathsf T}$ 保留了选中群体整体移动方向,而只计算新均值周围的离散程度会丢弃它。来源是论文第 3.1 节及图 3。

对标准化选中步,定义关于旧均值的二阶矩

\[\boldsymbol{S}_\mu =\sum_{i=1}^{\mu}w_i\boldsymbol{y}_{i:\lambda} \boldsymbol{y}_{i:\lambda}^{\mathsf T}.\]

还可从固定均值的高斯拟合来理解它:若暂时忽略精英选择带来的偏差,并假设数据来自零均值高斯,则加权负对数似然去掉常数后为

\[L(\boldsymbol{C}) =\frac12\log\det\boldsymbol{C} +\frac12\operatorname{tr}\!\left( \boldsymbol{C}^{-1}\boldsymbol{S}_\mu\right).\]

当 $\boldsymbol{S}\mu\succ0$ 时,该目标在正定矩阵上的最优解为 $\boldsymbol{C}=\boldsymbol{S}\mu$;例如用精度矩阵 $\boldsymbol{K}=\boldsymbol{C}^{-1}$ 求导即可得到

\[\nabla_{\boldsymbol{K}}L =\frac12\left(-\boldsymbol{K}^{-1}+\boldsymbol{S}_\mu\right) =\boldsymbol{0}.\]

这仅说明外积矩具有固定中心高斯矩拟合的解释。少量被选择的样本通常使 $\boldsymbol{S}_\mu$ 低秩,真实的精英选择也破坏了未截断高斯似然模型,因此不能将此论证误读为“精英样本外积是真实目标曲率的无偏最大似然估计”。

A.6 秩 $\mu$ 更新、指数平滑及正定性

如果直接设 $\boldsymbol{C}^{+}=\boldsymbol{S}_\mu$,由于

\[\operatorname{rank}(\boldsymbol{S}_\mu) \leq\min(\mu,n),\]

在 $\mu<n$ 时矩阵必然奇异。故引入学习率 $c_\mu$,得到

\[\boldsymbol{C}^{+} =(1-c_\mu)\boldsymbol{C}+c_\mu\boldsymbol{S}_\mu.\]

这是对旧模型与新样本二阶矩的凸组合,而不是从高斯采样定律唯一推出来的系数选择。若 $0<c_\mu<1$、$\boldsymbol{C}\succ0$,则对任意非零 $\boldsymbol{v}$,

\[\boldsymbol{v}^{\mathsf T}\boldsymbol{C}^{+}\boldsymbol{v} =(1-c_\mu)\boldsymbol{v}^{\mathsf T}\boldsymbol{C}\boldsymbol{v} +c_\mu\sum_iw_i (\boldsymbol{v}^{\mathsf T}\boldsymbol{y}_i)^2>0.\]

由此得到正权重版本的正定性保证。固定学习率并连续展开递推,得到

\[\boldsymbol{C}^{(g+1)} =(1-c_\mu)^{g+1}\boldsymbol{C}^{(0)} +c_\mu\sum_{t=0}^{g}(1-c_\mu)^{g-t} \boldsymbol{S}_\mu^{(t+1)}.\]

最近 $k$ 代带来的总权重为 $1-(1-c_\mu)^k$。令它接近 $1-e^{-1}$,利用 $\ln(1-c_\mu)\approx-c_\mu$ 可得 $k\approx1/c_\mu$。这解释了为何小学习率对应长记忆时间。来源是论文第 3.2 节式(16)—(17)。

A.7 秩一演化路径为什么需要 $\sqrt{c_c(2-c_c)\mu_{\mathrm{eff}}}$

外积对符号不敏感:

\[\boldsymbol{y}\boldsymbol{y}^{\mathsf T} =(-\boldsymbol{y})(-\boldsymbol{y})^{\mathsf T}.\]

所以仅依靠一代的外积无法区分持续向前和往返折返。令 $\rho_c=1-c_c$,构造跨代路径

\[\boldsymbol{p}_c^{+} =\rho_c\boldsymbol{p}_c+a_c\boldsymbol{y}_w.\]

现在通过随机选择、固定 $\boldsymbol{C}$、跨代独立的基准模型求 $a_c$。根据 A.4 节,

\[\operatorname{Cov}(\boldsymbol{y}_w) =\frac{\boldsymbol{C}}{\mu_{\mathrm{eff}}}.\]

稳态时,记 $\operatorname{Cov}(\boldsymbol{p}_c)=\boldsymbol{V}$。路径与本代独立,故

\[\boldsymbol{V} =\rho_c^2\boldsymbol{V} +\frac{a_c^2}{\mu_{\mathrm{eff}}}\boldsymbol{C}.\]

希望基准稳态恰有 $\boldsymbol{V}=\boldsymbol{C}$,需要

\[\frac{a_c^2}{\mu_{\mathrm{eff}}} =1-\rho_c^2 =1-(1-c_c)^2 =c_c(2-c_c),\]

从而唯一确定非负归一化系数

\[a_c=\sqrt{c_c(2-c_c)\mu_{\mathrm{eff}}}.\]

这正是正文的 $\boldsymbol{p}_c$ 公式,来源是论文第 3.3.2 节式(24)—(27)。若 $\boldsymbol{p}_c^{(0)}=0$,有限世代的基准协方差为

\[\operatorname{Cov}(\boldsymbol{p}_c^{(g+1)}) =\bigl[1-(1-c_c)^{2(g+1)}\bigr]\boldsymbol{C},\]

因而只有在记忆充分展开后才接近稳态。把路径写成加权历史和,还可以看出它怎样编码时间相关性:

\[\boldsymbol{p}_c^{(g+1)} =a_c\sum_{k=0}^{g}(1-c_c)^k \boldsymbol{y}_w^{(g+1-k)}.\]

当相邻步方向一致时,展开 $\boldsymbol{p}_c\boldsymbol{p}_c^{\mathsf T}$ 会出现同向交叉项;当相邻步相互抵消时,交叉项削弱相应方向。这是跨代演化路径相比单代外积的增益。

A.8 秩一更新与秩 $\mu$ 更新为什么相加

理想随机选择下,A.7 节给出稳态 $\mathbb{E}[\boldsymbol{p}c\boldsymbol{p}_c^{\mathsf T}]=\boldsymbol{C}$,A.4 节的模型也给出 $\mathbb{E}[\boldsymbol{S}\mu]=\boldsymbol{C}$。因此构造

\[\boldsymbol{C}^{+} =(1-c_1-c_\mu)\boldsymbol{C} +c_1\boldsymbol{p}_c^{+}(\boldsymbol{p}_c^{+})^{\mathsf T} +c_\mu\boldsymbol{S}_\mu\]

时,若 $c_1+c_\mu\leq1$,旧协方差项非负,且在上述稳态基准下满足

\[\mathbb{E}[\boldsymbol{C}^{+}] =(1-c_1-c_\mu+c_1+c_\mu)\boldsymbol{C} =\boldsymbol{C}.\]

所以系数相加的设计同时满足两点:单代成功步与跨代相关方向分别进入更新,以及在无选择信号的理想条件下不系统性放大或缩小协方差。前者是信息来源的互补,后者是系数归一化的动机。来源是论文第 3.4 节式(30);在实际存在选择压力时,更新显然不要求维持该期望恒定。

A.9 CSA 的白化路径、标准长度与指数步长更新

若不白化,长度 $\lVert\boldsymbol{y}_w\rVert$ 会随着 $\boldsymbol{C}$ 的轴向伸缩而变化,无法单独测量跨代步的相关程度。令

\[\boldsymbol{v}_w =\boldsymbol{C}^{-1/2}\boldsymbol{y}_w.\]

在随机选择基准模型下,

\[\operatorname{Cov}(\boldsymbol{v}_w) =\boldsymbol{C}^{-1/2} \frac{\boldsymbol{C}}{\mu_{\mathrm{eff}}} \boldsymbol{C}^{-1/2} =\frac{\boldsymbol{I}}{\mu_{\mathrm{eff}}}.\]

完全重复 A.7 节的稳态方差计算,便得到

\[\boldsymbol{p}_\sigma^{+} =(1-c_\sigma)\boldsymbol{p}_\sigma +\sqrt{c_\sigma(2-c_\sigma)\mu_{\mathrm{eff}}} \,\boldsymbol{C}^{-1/2}\boldsymbol{y}_w.\]

在固定协方差、跨代独立且路径达到平稳状态的理想模型下,这条路径服从 $\mathcal{N}(\boldsymbol{0},\boldsymbol{I})$。于是其基准长度不是 $\sqrt n$ 的精确值,而是 $n$ 维标准正态向量的范数期望

\[\chi_n=\mathbb{E}[\lVert\boldsymbol{z}\rVert], \qquad \boldsymbol{z}\sim\mathcal{N}(\boldsymbol{0},\boldsymbol{I}).\]

令 $R=\lVert\boldsymbol{z}\rVert$,则 $R^2$ 服从自由度为 $n$ 的卡方分布,而 $R$ 服从卡分布,其密度为

\[p_R(r)= \frac{r^{n-1}e^{-r^2/2}} {2^{n/2-1}\Gamma(n/2)}, \qquad r\geq0.\]

直接积分并作变量代换 $t=r^2/2$,得到

\[\begin{aligned} \chi_n &=\int_0^{\infty}r\,p_R(r)\,\mathrm{d}r\\ &=\sqrt2\, \frac{\Gamma((n+1)/2)}{\Gamma(n/2)}. \end{aligned}\]

论文附录 A 使用便于实现的近似式

\[\chi_n\approx \sqrt n\left(1-\frac{1}{4n}+\frac{1}{21n^2}\right).\]

其中 $1/(21n^2)$ 是该教程采用的数值近似修正项,不要将它说成 Gamma 比值的严格渐近展开系数;严格展开在该阶的系数是 $1/32$。由于

\[\mathbb{E}[R^2]=n, \qquad \bigl(\mathbb{E}[R]\bigr)^2\leq\mathbb{E}[R^2],\]

可以看出为何通常只用 $\sqrt n$ 会略微高估基准长度。

对步长选择使用对数参数化:

\[\Delta\log\sigma =\log\sigma^{+}-\log\sigma =\frac{c_\sigma}{d_\sigma} \left(\frac{\lVert\boldsymbol{p}_\sigma^{+}\rVert}{\chi_n}-1\right).\]

两端指数化即得到正文的 CSA 公式。在前述平稳随机选择模型下,

\[\mathbb{E}[\Delta\log\sigma] =\frac{c_\sigma}{d_\sigma} \left(\frac{\mathbb{E}[\lVert\boldsymbol{p}_\sigma\rVert]}{\chi_n}-1\right)=0.\]

这说明无偏性针对的是 $\log\sigma$,不是 $\sigma$:由指数函数凸性,随机增量满足 $\mathbb{E}[e^{\Delta\log\sigma}]\geq e^{\mathbb{E}[\Delta\log\sigma]}=1$。$c_\sigma$ 规定记忆长度,$d_\sigma$ 限制对数步长的单代变化速度。来源是论文第 4 节式(31)—(37)及附录 A 式(43)—(44)。

A.10 $h_\sigma$ 的有限世代修正与 $\delta(h_\sigma)$ 补偿

路径从零初始化时,即使完全没有选择偏差,也不会立刻具有单位协方差。以 $\boldsymbol{p}_\sigma^{(0)}=0$ 为初值,重复 A.7 节的方差递推,得到

\[\operatorname{Cov}(\boldsymbol{p}_\sigma^{(g+1)}) =\left[1-(1-c_\sigma)^{2(g+1)}\right]\boldsymbol{I}.\]

所以要在早期世代与平稳参考长度比较,应除以方差比例的平方根,形成

\[T_g= \frac{\lVert\boldsymbol{p}_\sigma^{(g+1)}\rVert} {\chi_n\sqrt{1-(1-c_\sigma)^{2(g+1)}}}.\]

论文设置

\[h_\sigma= \begin{cases} 1, & T_g<1.4+\dfrac{2}{n+1},\\[4pt] 0, & \text{其他情况}. \end{cases}\]

阈值 $1.4+2/(n+1)$ 是防止异常长的步长路径同时放大协方差路径的经验保护阈值,不是由卡分布计算出的固定显著性水平。它在 $h_\sigma=0$ 时暂停向 $\boldsymbol{p}_c$ 注入本代步:

\[\boldsymbol{p}_c^{+} =(1-c_c)\boldsymbol{p}_c +h_\sigma\sqrt{c_c(2-c_c)\mu_{\mathrm{eff}}} \boldsymbol{y}_w.\]

当注入项被暂停,在理想基准条件下仅保留项带来的协方差是 $(1-c_c)^2\boldsymbol{C}$,相比正常的 $\boldsymbol{C}$ 少了

\[\boldsymbol{C}-(1-c_c)^2\boldsymbol{C} =c_c(2-c_c)\boldsymbol{C}.\]

因此在秩一更新的旧矩阵系数中补回

\[\delta(h_\sigma)=(1-h_\sigma)c_c(2-c_c).\]

完整公式中的 $c_1\delta(h_\sigma)\boldsymbol{C}$ 正是这一缺失方差的补偿项,目的是避免保护开关触发时出现额外的系统性收缩;它并不意味着在所有选择情形中都能严格保持期望不变。来源是论文附录 A 对 $h_\sigma$、$\delta(h_\sigma)$ 的定义和式(45)、(47)。

A.11 Active CMA 的带符号外积从哪里来

基本秩 $\mu$ 更新可以写为“新信息与旧信息之差”:

\[\boldsymbol{C}^{+} =\boldsymbol{C} +c_\mu\sum_{i=1}^{\mu}w_i \left( \boldsymbol{y}_{i:\lambda}\boldsymbol{y}_{i:\lambda}^{\mathsf T} -\boldsymbol{C}\right),\]

这里使用了 $\sum_{i=1}^{\mu}w_i=1$。把求和拓展到 $\lambda$ 个名次,并允许后排样本具有负权重,形式上得到

\[\boldsymbol{C}^{+} =\left(1-c_\mu\sum_{i=1}^{\lambda}w_i\right) \boldsymbol{C} +c_\mu\sum_{i=1}^{\lambda}w_i \boldsymbol{y}_{i:\lambda}\boldsymbol{y}_{i:\lambda}^{\mathsf T}.\]

它表达的是正权重增加成功方向的方差,负权重减小不利方向的方差。但负外积可能把特征值减到零以下,因而实际的 active CMA 不能停留在这一形式。

记本代旧协方差下的白化样本

\[\boldsymbol{z}_i^{\mathrm{white}} =\boldsymbol{C}^{-1/2}\boldsymbol{y}_{i:\lambda}, \qquad q_i=\lVert\boldsymbol{z}_i^{\mathrm{white}}\rVert^2.\]

当 $w_i<0$ 时,用

\[w_i^{\circ}=w_i\frac{n}{q_i}\]

替换原权重;当 $w_i\geq0$ 时不变。于是负外积可改写为

\[w_i^{\circ}\boldsymbol{y}_i\boldsymbol{y}_i^{\mathsf T} =w_i n\boldsymbol{C}^{1/2} \frac{\boldsymbol{z}_i^{\mathrm{white}} (\boldsymbol{z}_i^{\mathrm{white}})^{\mathsf T}}{q_i} \boldsymbol{C}^{1/2}.\]

中间的矩阵是一个单位方向向量的外积,范数为一且秩为一;因此负样本的作用取决于方向,而不再随其马氏长度平方无界增长。在随机选择的各向同性基准下,方向的旋转对称性还给出

\[\mathbb{E}\!\left[ n\frac{\boldsymbol{z}\boldsymbol{z}^{\mathsf T}} {\lVert\boldsymbol{z}\rVert^2} \right]=\boldsymbol{I},\]

因为括号内期望必为标量单位阵,而其迹恒等于 $n$。这解释了为何长度校正既能控制负更新的强度,又能保持随机选择基准下的平均尺度。来源是论文第 3.2 节式(16)及附录 A 式(46)。

A.12 完整 active 协方差更新式及正定性的保守证明

把 A.10 节的秩一路径补偿、A.11 节的带符号外积和旧矩阵的平衡系数合并,可得

\[\begin{aligned} \boldsymbol{C}^{+} ={}&a\boldsymbol{C} +c_1\boldsymbol{p}_c^{+}(\boldsymbol{p}_c^{+})^{\mathsf T}\\ &+c_\mu\sum_{i=1}^{\lambda}w_i^{\circ} \boldsymbol{y}_{i:\lambda}\boldsymbol{y}_{i:\lambda}^{\mathsf T},\\[4pt] a={}&1+c_1\delta(h_\sigma)-c_1 -c_\mu\sum_{i=1}^{\lambda}w_i. \end{aligned}\]

这就是正文的统一式,对应论文附录 A 式(47)。说明负权重边界时,定义其绝对总质量为

\[\alpha=\sum_{i:w_i<0}\lvert w_i\rvert, \qquad \sum_{i=1}^{\lambda}w_i=1-\alpha.\]

在旧协方差白化坐标中,每个校正后的负外积均形如 $-n\lvert w_i\rvert\boldsymbol{u}_i\boldsymbol{u}_i^{\mathsf T}$,其中 $\lVert\boldsymbol{u}_i\rVert=1$。由于

\[\boldsymbol{0}\preceq \boldsymbol{u}_i\boldsymbol{u}_i^{\mathsf T} \preceq\boldsymbol{I},\]

所有负外积造成的最坏方向缩减满足

\[\sum_{i:w_i<0}n\lvert w_i\rvert \boldsymbol{u}_i\boldsymbol{u}_i^{\mathsf T} \preceq n\alpha\boldsymbol{I}.\]

忽略非负的秩一项与所有正权重外积,可得保守下界

\[\boldsymbol{C}^{-1/2}\boldsymbol{C}^{+} \boldsymbol{C}^{-1/2} \succeq\left(a-nc_\mu\alpha\right)\boldsymbol{I}.\]

代入 $a$ 后有

\[\begin{aligned} a-nc_\mu\alpha &=1-c_1-c_\mu -(n-1)c_\mu\alpha +c_1\delta(h_\sigma). \end{aligned}\]

因此在 $n>1$、$c_\mu>0$、$1-c_1-c_\mu>0$ 时,限制

\[\alpha\leq\alpha_{\mathrm{pd}}^{-} =\frac{1-c_1-c_\mu}{nc_\mu}\]

就足以使下界严格为正:把右端代入,至少仍余下 $(1-c_1-c_\mu)/n$。这是一项保守的充分条件,不是可能采取的最宽松界。若直接从 $a-nc_\mu\alpha>0$ 求解,会出现分母 $n-1$;论文以 $n$ 代替 $n-1$ 来使用略严的统一上界。来源是论文附录 A 式(52)、(59)—(60)。

A.13 负权重质量的三个上界与归一化公式

定义正权重和为一,负权重绝对质量为 $\alpha$,则 $\sum_iw_i=1-\alpha$。设计上希望联合更新的旧协方差系数在常态 $h_\sigma=1$ 时尽量接近一:

\[1-c_1-c_\mu(1-\alpha)=1.\]

解得

\[\alpha_\mu^{-}=1+\frac{c_1}{c_\mu}.\]

这是第一个上界的代数来源:负权重与正更新在随机基准下大体平衡,使旧矩阵不被额外衰减。但如果任意增大负权重,可能引入过强的噪声和非正定风险,因此还需要第二和第三个上界。

对负的原始权重 $w_i’<0$,令

\[a_i=\frac{\lvert w_i'\rvert} {\sum_{j:w_j'<0}\lvert w_j'\rvert}.\]

于是 $\sum_i a_i=1$,负样本的有效质量为

\[\mu_{\mathrm{eff}}^{-} =\frac{1}{\sum_{i:w_i'<0}a_i^2} =\frac{\left(\sum_{i:w_i'<0}w_i'\right)^2} {\sum_{i:w_i'<0}(w_i')^2}.\]

这与正样本的有效质量有同样的方差解释。论文引入

\[\alpha_{\mathrm{eff}}^{-} =1+\frac{2\mu_{\mathrm{eff}}^{-}} {\mu_{\mathrm{eff}}+2}\]

以免负样本群体的有效信息量与负更新强度失配。这一具体有理式属于论文的默认经验设计;有效质量定义可由方差推出,但公式中的 $1$、$2$ 和分母中的常数不能仅从有效质量定义唯一求得。第三个正定性上界 $\alpha_{\mathrm{pd}}^{-}$ 已在 A.12 节推导。因此最终采用

\[\alpha^{-} =\min\!\left( \alpha_\mu^{-}, \alpha_{\mathrm{eff}}^{-}, \alpha_{\mathrm{pd}}^{-} \right).\]

令 $S_+=\sum_{j:w_j’>0}w_j’$、$S_-=\sum_{j:w_j’<0}\lvert w_j’\rvert$,最终权重为

\[w_i=\begin{cases} \dfrac{w_i'}{S_+}, & w_i'>0,\\[8pt] \alpha^{-}\dfrac{w_i'}{S_-}, & w_i'<0,\\[8pt] 0, & w_i'=0. \end{cases}\]

由此立刻验证 $\sum_{w_i>0}w_i=1$ 和 $\sum_{w_i<0}w_i=-\alpha^{-}$。负权重仅进入协方差更新,均值仍使用前 $\mu$ 个正权重。对应论文附录 A 表 1 式(49)—(53)及其后关于负权重的解释。

A.14 默认种群规模、排序权重和学习率:哪些能推导,哪些只能解释

论文表 1 给出

\[\lambda=4+\lfloor3\ln n\rfloor, \qquad \mu=\lfloor\lambda/2\rfloor, \qquad w_i'=\ln\!\left(\frac{\lambda+1}{2}\right)-\ln i.\]

其中 $\lambda$ 随 $\ln n$ 缓慢增长,旨在使每代函数评价开销保持较小;$\mu$ 取约半数候选点,使选择有一定压力,同时用多个样本降低重组噪声。对数权重随排名递减,并使正负权重在种群中间附近切换。这些是策略设计,不是优化问题本身可以推导出的唯一种群规模或唯一权重函数。对于奇数 $\lambda$,恰好可能存在一个 $w_i’=0$ 的中间名次,按正文公式将其权重置零。

对 $c_m=1$,表 1 中的路径和步长参数为

\[\begin{aligned} c_\sigma&=\frac{\mu_{\mathrm{eff}}+2}{n+\mu_{\mathrm{eff}}+5},\\[4pt] d_\sigma&=1+2\max\!\left(0, \sqrt{\frac{\mu_{\mathrm{eff}}-1}{n+1}}-1\right)+c_\sigma,\\[4pt] c_c&=\frac{4+\mu_{\mathrm{eff}}/n} {n+4+2\mu_{\mathrm{eff}}/n}. \end{aligned}\]

它们的设计约束与量纲可解释为:$0<c_\sigma<1$ 和 $0<c_c<1$ 保证路径递推稳定;在 $\mu_{\mathrm{eff}}$ 相对 $n$ 较小的典型情形,

\[c_\sigma\approx\frac{\mu_{\mathrm{eff}}+2}{n}, \qquad c_c\approx\frac{4}{n},\]

因此两个记忆时间尺度通常随维度增大。$d_\sigma\geq1+c_\sigma$,并在 $\mu_{\mathrm{eff}}$ 相对较大时增加额外阻尼,避免大父代有效规模下的步长调整过激。上述结构有统计动机,但分子和分母中的 $2$、$4$、$5$ 以及附加阻尼的具体形式主要通过理论量级分析与实践校准确定,不能由 A.7—A.9 节的方差恒等式推出。

协方差学习率使用

\[\begin{aligned} c_1&=\frac{2}{(n+1.3)^2+\mu_{\mathrm{eff}}},\\[4pt] c_\mu&=\min\!\left( 1-c_1, \frac{2\left(\frac14+\mu_{\mathrm{eff}}+\frac{1}{\mu_{\mathrm{eff}}}-2\right)} {(n+2)^2+\mu_{\mathrm{eff}}} \right). \end{aligned}\]

当 $n$ 明显大于 $\mu_{\mathrm{eff}}$ 时,其主导量级为

\[c_1=O(n^{-2}), \qquad c_\mu=O(\mu_{\mathrm{eff}}n^{-2}).\]

这种规模反映了完整协方差包含约 $n^2/2$ 个自由参数、学习速度必须远慢于均值更新的设计原则。$c_\mu\leq1-c_1$ 是为了避免基础正权重更新中旧矩阵系数变成负数;但具体的 $1.3$、$1/4$、$2$ 等常数并非从正定性约束唯一计算得到。特别地,正文和教学代码中的 $1/4$ 项对应 2023 年修订版的表 1 式(58);较早版本的公式可能不含此项,不能在引用不同版本时混用。

A.15 旋转椭球实验:条件数与变量耦合的推导

正文测试函数中,记

\[a_i=10^{6(i-1)/(n-1)}, \qquad \boldsymbol{A}=\operatorname{diag}(a_1,\ldots,a_n).\]

则

\[\begin{aligned} f(\boldsymbol{x}) &=\sum_{i=1}^{n}a_i (\boldsymbol{Q}\boldsymbol{x})_i^2\\ &=\boldsymbol{x}^{\mathsf T}\boldsymbol{Q}^{\mathsf T} \boldsymbol{A}\boldsymbol{Q}\boldsymbol{x}, \end{aligned}\]

因而有

\[\nabla f(\boldsymbol{x}) =2\boldsymbol{Q}^{\mathsf T}\boldsymbol{A}\boldsymbol{Q}\boldsymbol{x}, \qquad \nabla^2 f =2\boldsymbol{Q}^{\mathsf T}\boldsymbol{A}\boldsymbol{Q}.\]

由于 $\boldsymbol{Q}^{\mathsf T}\boldsymbol{Q}=\boldsymbol{I}$,正交相似变换不改变特征值,故 Hessian 的特征值是 $2a_i$。其二范数条件数为

\[\kappa_2(\nabla^2f) =\frac{\max_i 2a_i}{\min_i 2a_i} =\frac{10^6}{1} =10^6.\]

所有 $a_i>0$,因此 $f(\boldsymbol{x})\geq0$,且等号仅在 $\boldsymbol{x}=0$ 时成立。若 $\boldsymbol{Q}$ 非坐标置换形式,矩阵 $\boldsymbol{Q}^{\mathsf T}\boldsymbol{A}\boldsymbol{Q}$ 通常存在非零非对角元素,从而在原始变量中产生耦合。适配该函数的理想搜索形状满足

\[\boldsymbol{C}\propto (\nabla^2 f)^{-1} =\frac12\boldsymbol{Q}^{\mathsf T} \boldsymbol{A}^{-1}\boldsymbol{Q}.\]

这把 A.2 节的逆 Hessian 几何动机与旋转椭球实验直接联系起来。它是测试函数的线性代数结论,不代表 CMA-ES 在有限预算内必然精确学得此矩阵。

A.16 维度复杂度、坐标变换与实现一致性

对称矩阵的对角线上有 $n$ 个自由元素,严格上三角有 $n(n-1)/2$ 个,因此总数为

\[n+\frac{n(n-1)}{2} =\frac{n(n+1)}{2}.\]

这说明完整协方差的存储量为 $O(n^2)$。密集对称特征分解一般需要 $O(n^3)$ 运算;用密集矩阵对一个标准正态向量作线性变换需要 $O(n^2)$ 运算,每代生成 $\lambda$ 个候选点的相应乘法成本为 $O(\lambda n^2)$。这些量级来自标准线性代数运算分析,支持正文中使用延迟特征分解的工程建议,参见论文附录 B。

对于固定的可逆线性坐标变换 $\boldsymbol{x}’=\boldsymbol{T}\boldsymbol{x}+\boldsymbol{b}$,相应变换均值与协方差:

\[\boldsymbol{m}'=\boldsymbol{T}\boldsymbol{m}+\boldsymbol{b}, \qquad \boldsymbol{C}'=\boldsymbol{T}\boldsymbol{C}\boldsymbol{T}^{\mathsf T}.\]

于是

\[\begin{aligned} \operatorname{Cov}(\boldsymbol{x}') &=\boldsymbol{T}\operatorname{Cov}(\boldsymbol{x}) \boldsymbol{T}^{\mathsf T}\\ &=\sigma^2\boldsymbol{C}'. \end{aligned}\]

同时,选中步的外积满足

\[(\boldsymbol{T}\boldsymbol{y}) (\boldsymbol{T}\boldsymbol{y})^{\mathsf T} =\boldsymbol{T}\boldsymbol{y}\boldsymbol{y}^{\mathsf T} \boldsymbol{T}^{\mathsf T}.\]

这给出了采样分布与协方差矩更新在一致变换初态时的仿射协变性;完整算法的不变性还涉及路径、排序和步长状态的对应初始化,不能仅变换变量而保留不相容的旧状态。尤其每代计算马氏长度时,必须使用采样该代样本的旧协方差,因为

\[\lVert\boldsymbol{C}^{-1/2}\boldsymbol{y}\rVert^2 =\boldsymbol{y}^{\mathsf T}\boldsymbol{C}^{-1}\boldsymbol{y}\]

度量的是样本相对于其原始采样分布的长度。如果先更新 $\boldsymbol{C}$ 再对白化样本使用新矩阵,以上解释和 active 正定性论证都不再对应同一个时点。论文第 5 节讨论不变性,附录 A、B 给出计算次序和数值实现要求。

A.17 推导结论的适用范围与来源索引

严格成立的部分包括:正定矩阵的谱分解及协方差线性变换、马氏椭球与二次函数的坐标变换、加权平均的外积分解、有效质量在独立样本模型下的方差定义、指数平滑的权重展开、旋转椭球的 Hessian 和条件数,以及在明确假设下的正定性下界。

依赖随机基准模型的部分包括:路径归一化系数、路径稳态协方差、随机选择下协方差与对数步长的平均不漂移。这些推导假设独立或近似独立的零均值步、固定协方差与适当的稳态条件;真实带选择的优化过程不满足所有假设,恰恰需要通过偏离基准来获得学习信号。

主要属于经验设计的部分包括:对数排序权重、种群大小与父代比例、$c_c$、$c_\sigma$、$d_\sigma$、$c_1$、$c_\mu$ 中的具体常数、$h_\sigma$ 的阈值以及 $\alpha_{\mathrm{eff}}^{-}$ 的具体表达式。其设计动机可以从稳定性、统计信息量和学习时间尺度解释,但不能伪称为唯一的闭式最优解。

论文对应关系如下:

  • 第 0.1—0.4 节解释谱分解、高斯分布与 Hessian 几何;
  • 第 1—2 节对应采样、排序、均值更新及 $\mu_{\mathrm{eff}}$;
  • 第 3.1—3.4 节对应外积估计、rank-$\mu$、rank-one 与演化路径;
  • 第 4 节对应 CSA;
  • 附录 A 的式(38)—(58)与表 1 对应完整 active 算法及默认参数;
  • 附录 A 的式(59)—(60)解释负权重正定性上界;
  • 附录 B 对应计算复杂度与数值实现。

warning

本文由作者按照 CC BY 4.0 进行授权