(CMA-ES源码)协方差自适应进化策略(Covariance Matrix Adaptation Evolution Strategy,CMA-ES)——最好的单目标进化算法?

获取更多资讯,赶快关注公众号(名称:智能制造与智能调度,公众号:deeprlscheduler)吧!


关于此算法,我有点几点要说明:

  1. 我没有花太多时间去整理这些公式的推导过程,这个还需要自己对数学基础有个基本的了解;
  2. 源代码可关注公众号后,回复”CMA-ES“或”自适应协方差“获取链接;
  3. 只要掌握几个关键的公式,然后再对照源码学习,就很快能理解算法了。

缩写

CMA:Covariance Matrix Adaptation,协方差自适应

EMNA:Estimation of Multivariate Normal Algorithm,多元正态估计算法

ES:Evolution Strategy,进化策略

( μ / μ { I , W } , λ ) − E S \left(\mu / \mu_{\{\mathrm{I}, \mathrm{W}\}}, \lambda\right)-\mathrm{ES} (μ/μ{I,W},λ)ES:进化策略中存在 μ \mu μ个父代, λ \lambda λ个子代,且所有 μ \mu μ个父代都重组。

希腊符号

λ ≥ 2 \lambda \geq 2 λ2:种群大小,样本大小,子代数量

μ ≤ λ \mu \leq \lambda μλ:父代数量,在种群中选择的搜索点的数量

μ e f f = ( ∑ i = 1 μ w i 2 ) − 1 = 1 / ∥ w ∥ 2 \mu_{\mathrm{eff}}=\left(\sum_{i=1}^{\mu} w_{i}^{2}\right)^{-1}=1 /\|\boldsymbol{w}\|^{2} μeff=(i=1μwi2)1=1/w2:the variance effective selection mass,方差有效选择质量

σ ( g ) ∈ R + \sigma^{(g)} \in \mathbb{R}_{+} σ(g)R+:step-size,步长

拉丁符号

B ∈ R n \boldsymbol{B} \in \mathbb{R}^{n} BRn:正交矩阵, B \boldsymbol{B} B的列为 C \boldsymbol{C} C的单位长度特征向量,对应于 D \boldsymbol{D} D的对角元素

C ( g ) ∈ R n × n \boldsymbol{C}^{(g)} \in \mathbb{R}^{n \times n} C(g)Rn×n:第 g g g代的协方差矩阵

c i i c_{i i} cii C \boldsymbol{C} C的对象元素

c c ≤ 1 c_{\mathrm{c}} \leq 1 cc1:协方差矩阵的秩一更新的累积学习率

c 1 ≤ 1 − c μ c_{1} \leq 1-c_{\mu} c11cμ:协方差矩阵秩一更新的学习率

c μ ≤ 1 − c 1 c_{\mu} \leq 1-c_{1} cμ1c1:协方差矩阵秩 μ \mu μ更新的学习率

c σ < 1 c_{\sigma}<1 cσ<1:步长控制的累积学习率

D ∈ R n D \in \mathbb{R}^{n} DRn:对角矩阵, D D D的对焦元素为 C C C的特征值的平方根,对应于 B B B的各列

d i > 0 d_{i}>0 di>0:对角矩阵 D D D的对角元素, d i 2 d_{i}^{2} di2 C C C的特征值

d σ ≈ 1 d_{\sigma} \approx 1 dσ1:步长更新的衰减参数

E E E:期望值

f : R n → R , x ↦ f ( x ) f: \mathbb{R}^{n} \rightarrow \mathbb{R}, \boldsymbol{x} \mapsto f(\boldsymbol{x}) f:RnR,xf(x):待最小化的目标函数(适应度函数)

f sphere  : R n → R , x ↦ ∥ x ∥ 2 = x T x = ∑ i = 1 n x i 2 f_{\text {sphere }}: \mathbb{R}^{n} \rightarrow \mathbb{R}, \boldsymbol{x} \mapsto\|\boldsymbol{x}\|^{2}=\boldsymbol{x}^{\mathrm{T}} \boldsymbol{x}=\sum_{i=1}^{n} x_{i}^{2} fsphere :RnR,xx2=xTx=i=1nxi2

g ∈ N 0 g \in \mathbb{N}_{0} gN0:代数计数器,迭代次数

I ∈ R n × n \mathbf{I} \in \mathbb{R}^{n \times n} IRn×n:单位矩阵

m ( g ) ∈ R n \boldsymbol{m}^{(g)} \in \mathbb{R}^{n} m(g)Rn:第 g g g代搜索分布的均值

n ∈ N n \in \mathbb{N} nN:搜索空间维度

N ( 0 , I ) \mathcal{N}(\mathbf{0}, \mathbf{I}) N(0,I):0均值和单位协方差矩阵的多元正太分布,按照该分布生成的向量,其元素是独立且服从 N ( 0 , 1 ) \mathcal{N}(0,1) N(0,1)标准正太分布

N ( m , C ) ∼ m + N ( 0 , C ) \mathcal{N}(\boldsymbol{m}, \boldsymbol{C}) \sim \boldsymbol{m}+\mathcal{N}(\mathbf{0}, \boldsymbol{C}) N(m,C)m+N(0,C):均值为 m ∈ R n \boldsymbol{m} \in \mathbb{R}^{n} mRn,协方差矩阵为 C ∈ R n × n \boldsymbol{C} \in \mathbb{R}^{n \times n} CRn×n的多元正太分布, C \boldsymbol{C} C为对称正定矩阵

p ∈ R n \boldsymbol{p} \in \mathbb{R}^{n} pRn:进化路径,即策略经过多代所采取的一系列连续步

w i , w_{i}, wi, where i = 1 , … , μ i=1, \ldots, \mu i=1,,μ:重组权重

x k ( g + 1 ) ∈ R n \boldsymbol{x}_{k}^{(g+1)} \in \mathbb{R}^{n} xk(g+1)Rn:第 g + 1 g+1 g+1代中的第 k k k个子代或个体,也将 x ( g + 1 ) \boldsymbol{x}^{(g+1)} x(g+1)称为搜索点或对象参数/变量,与候选解或设计变量同义

x i : λ ( g + 1 ) \boldsymbol{x}_{i: \lambda}^{(g+1)} xi:λ(g+1) x 1 ( g + 1 ) , … , x λ ( g + 1 ) \boldsymbol{x}_{1}^{(g+1)}, \ldots, \boldsymbol{x}_{\lambda}^{(g+1)} x1(g+1),,xλ(g+1)中第 i i i个最优个体, i : λ i: \lambda i:λ表示排名第 i i i的个体索引,且 f ( x 1 : λ ( g + 1 ) ) ≤ f ( x 2 : λ ( g + 1 ) ) ≤ ⋯ ≤ f ( x λ : λ ( g + 1 ) ) f\left(\boldsymbol{x}_{1: \lambda}^{(g+1)}\right) \leq f\left(\boldsymbol{x}_{2: \lambda}^{(g+1)}\right) \leq \cdots \leq f\left(\boldsymbol{x}_{\lambda: \lambda}^{(g+1)}\right) f(x1:λ(g+1))f(x2:λ(g+1))f(xλ:λ(g+1))

y k ( g + 1 ) = ( x k ( g + 1 ) − m ( g ) ) / σ ( g ) \boldsymbol{y}_{k}^{(g+1)}=\left(\boldsymbol{x}_{k}^{(g+1)}-\boldsymbol{m}^{(g)}\right) / \sigma^{(g)} yk(g+1)=(xk(g+1)m(g))/σ(g):相当于 x k = m + σ y k \boldsymbol{x}_{k}=\boldsymbol{m}+\sigma \boldsymbol{y}_{k} xk=m+σyk

CMA-ES是一种用于求解非线性非凸函数实值参数(连续域)优化的随机方法,相信很多读者在看了原作者的论文后会感到无助和绝望,有那么多公式,那么多符号,不知如何下手,不用慌,今天这篇文章将给你总结出最主要的核心点和算法思想,直接跳过前面那些让人头疼的数学基础,基础给出算法,然后再逐步分析算法中关键步骤

0 ( μ / μ W , λ ) \left(\mu / \mu_{\mathrm{W}}, \lambda\right) (μ/μW,λ)-CMA-ES

其实对进化算法ES稍微有一些了解的童鞋,应该知道ES的大概思路,之前这篇文章(进化计算-进化策略(Evolutionary Strategies,ES)前世今生与代码共享)我们也有所介绍,那么本文介绍的CMA-ES其实是ES的自适应版本,它会记录一定迭代次数的种群历史,计算目标变量之间的协方差和方差信息,随后的搜索工作受到这些方差值的影响。只要记住一点,不论基因发生何种变化,产生的结果(性状)总遵循这零均值,某一方差的高斯分布。下面给出了CMA-ES算法的精简伪代码,是不是看起来没有那么复杂呢?

参数设置,包括 λ , μ , w i = 1 … μ , c σ , d σ , c c , c 1 , \lambda, \mu, w_{i=1 \ldots \mu}, c_{\sigma}, d_{\sigma}, c_{c}, c_{1}, λ,μ,wi=1μ,cσ,dσ,cc,c1, and c μ c_{\mu} cμ,这些参数含义见最开始的符号描述。

初始化,设置进化路径,协方差矩阵,当前代数,选择分布平均值和步长。

循环直到达到终止条件,从搜索点中采样新的种群,然后进行选择和重组,控制步长大小和协方差自适应。

那么接下来就分别看看这三步中具体是怎么实现的。

1 Set parameters参数设置

这一步中设置的参数主要是指策略参数,包括子代数量 λ \lambda λ,父代数量 μ \mu μ,重组权重 w i = 1 … μ w_{i=1 \ldots \mu} wi=1μ,步长控制的累积学习率 c σ c_{\sigma} cσ,步长更新的衰减参数 d σ d_{\sigma} dσ,协方差矩阵的秩一更新的累积学习率 c c c_{\mathrm{c}} cc,协方差矩阵秩一更新的学习率$c_{1} , 协 方 差 矩 阵 秩 ,协方差矩阵秩 ,\mu 更 新 的 学 习 率 更新的学习率 c_{\mu}$。这些参数具体干什么用这里暂时不介绍,后面用到的时候自然会解释。

这些参数往往都有自己的默认值,文中也给出了它们的计算公式,其中 μ e f f = 1 ∑ i = 1 μ w i 2 ≥ 1 \mu_{\mathrm{eff}}=\frac{1}{\sum_{i=1}^{\mu} w_{i}^{2}} \geq 1 μeff=i=1μwi211 and ∑ i = 1 μ w i = 1 \sum_{i=1}^{\mu} w_{i}=1 i=1μwi=1

选择和重组

λ = 4 + ⌊ 3 ln ⁡ n ⌋ , μ = ⌊ μ ′ ⌋ , μ ′ = λ 2 (44) \lambda=4+\lfloor 3 \ln n\rfloor, \quad \mu=\left\lfloor\mu^{\prime}\right\rfloor, \quad \mu^{\prime}=\frac{\lambda}{2} \tag{44} λ=4+3lnn,μ=μ,μ=2λ(44)

其中 ⌊ ⌋ \left\lfloor \quad \right\rfloor 表示floor操作,即不大于某值得最大整数。由于 n n n为搜索空间维度,是由问题决定的且已知,所以 λ \lambda λ可求,然后就可求得 μ ′ \mu^{\prime} μ,进而求得 μ \mu μ

w i = w i ′ ∑ j = 1 μ w j ′ , w i ′ = ln ⁡ ( μ ′ + 0.5 ) − ln ⁡ i  for  i = 1 , … , μ (45) w_{i}=\frac{w_{i}^{\prime}}{\sum_{j=1}^{\mu} w_{j}^{\prime}}, \quad w_{i}^{\prime}=\ln \left(\mu^{\prime}+0.5\right)-\ln i \quad \text { for } i=1, \ldots, \mu \tag{45} wi=j=1μwjwi,wi=ln(μ+0.5)lni for i=1,,μ(45)

有了 μ ′ \mu^{\prime} μ μ \mu μ就可求得 w j ′ w_{j}^{\prime} wj,进而求得 w i w_{i} wi

步长控制

c σ = μ e f f + 2 n + μ e f f + 5 , d σ = 1 + 2 max ⁡ ( 0 , μ e f f − 1 n + 1 − 1 ) + c σ (46) c_{\sigma}=\frac{\mu_{\mathrm{eff}}+2}{n+\mu_{\mathrm{eff}}+5}, \quad d_{\sigma}=1+2 \max \left(0, \sqrt{\frac{\mu_{\mathrm{eff}}-1}{n+1}}-1\right)+c_{\sigma} \tag{46} cσ=n+μeff+5μeff+2,dσ=1+2max(0,n+1μeff1 1)+cσ(46)

有了 w i w_{i} wi后,就可以计算出$\mu_{\mathrm{eff}}=\frac{1}{\sum_{i=1}^{\mu} w_{i}^{2}} , 进 而 得 到 ,进而得到 c_{\sigma} 和 和 d_{\sigma}$。

协方差自适应

c c = 4 + μ e f f / n n + 4 + 2 μ e f f / n (47) c_{\mathrm{c}}=\frac{4+\mu_{\mathrm{eff}} / n}{n+4+2 \mu_{\mathrm{eff}} / n}\tag{47} cc=n+4+2μeff/n4+μeff/n(47)

c 1 = 2 ( n + 1.3 ) 2 + μ e f f (48) c_{1}=\frac{2}{(n+1.3)^{2}+\mu_{\mathrm{eff}}}\tag{48} c1=(n+1.3)2+μeff2(48)

c μ = min ⁡ ( 1 − c 1 , α μ μ e f f − 2 + 1 / μ e f f ( n + 2 ) 2 + α μ μ e f f / 2 )  with  α μ = 2 (49) c_{\mu}=\min \left(1-c_{1}, \alpha_{\mu} \frac{\mu_{\mathrm{eff}}-2+1 / \mu_{\mathrm{eff}}}{(n+2)^{2}+\alpha_{\mu} \mu_{\mathrm{eff}} / 2}\right) \quad \text { with } \alpha_{\mu}=2 \tag{49} cμ=min(1c1,αμ(n+2)2+αμμeff/2μeff2+1/μeff) with αμ=2(49)

根据 μ e f f \mu_{\mathrm{eff}} μeff n n n可以计算出 c c c_{\mathrm{c}} cc, c 1 c_{1} c1 c μ c_{\mu} cμ

说明

式(46)~(49)所计算的默认参数通常是比较鲁棒的,因此根据经验,可以广泛地适用于不同的优化问题,这些参数通常不必进行修改。而子代数量 λ \lambda λ,父代数量 μ \mu μ,重组权重 w i = 1 … μ w_{i=1 \ldots \mu} wi=1μ相对而言不是很关键,可以在较大范围内进行选择而不影响自适应,一般推荐选择 μ ≤ λ / 2 \mu \leq \lambda / 2 μλ/2,以及根据 w 1 ≥ ⋯ ≥ w μ w_{1} \geq \cdots \geq w_{\mu} w1wμ选择重组权重,种群大小 λ \lambda λ可以适当增大,如果 μ \mu μ w i w_{i} wi使用了与 λ \lambda λ有关的默认值,种群大小 λ \lambda λ会对全局搜索性能有显著影响,增加 λ \lambda λ通常会提高CMA-ES的全局搜索能力和鲁棒性,但会降低其收敛速度,收敛速度最多随 λ \lambda λ线性下降。

2 Initialization初始化

设置进化路径 p σ = 0 , p c = 0 p_{\sigma}=0, p_{c}=0 pσ=0,pc=0,相当于清除了路径,设置协方差矩阵 C = I C=\mathbf{I} C=I,当前迭代次数 g = 0 g=0 g=0

选择分布均值 m ∈ R n \boldsymbol{m} \in \mathbb{R}^{n} mRn和步长大小 σ ∈ R + \sigma \in \mathbb{R}_{+} σR+,这两个值其实是和问题相关的,最优解大致是应该位于 m ± 3 σ ( 1 , … , 1 ) T \boldsymbol{m} \pm 3 \sigma(1, \ldots, 1)^{\mathrm{T}} m±3σ(1,,1)T内的,如果最优解期望位于初始搜索间隔 [ a , b ] n [a, b]^{n} [a,b]n,我们可以在 [ a , b ] n [a, b]^{n} [a,b]n内均匀随机选择初始搜索点 m \boldsymbol{m} m,且 σ = 0.3 ( b − a ) \sigma=0.3(b-a) σ=0.3(ba)。针对不同变量的不同搜索间隔 Δ s i \Delta s_{i} Δsi可以通过 C C C的不同初始化来体现,其中 C C C的对角元素满足 c i i = ( Δ s i ) 2 c_{i i}=\left(\Delta s_{i}\right)^{2} cii=(Δsi)2。注意 Δ s i \Delta s_{i} Δsi不能在数量级上差距很大,否则就需要进行缩放。

3 迭代优化过程

3.1 采样新种群

在CMA-ES中,新搜索点(个体,子代)的种群是通过多元正态分布采样(回顾:给定方差或协方差,正太分布的交叉熵在所有分布中是最大的)生成的,在第 g g g代采样搜索点的公式如下:
x k ( g + 1 ) ∼ m ( g ) + σ ( g ) N ( 0 , C ( g ) )  for  k = 1 , … , λ (5) \boldsymbol{x}_{k}^{(g+1)} \sim \boldsymbol{m}^{(g)}+\sigma^{(g)} \mathcal{N}\left(\mathbf{0}, \boldsymbol{C}^{(g)}\right) \quad \text { for } k=1, \ldots, \lambda\tag{5} xk(g+1)m(g)+σ(g)N(0,C(g)) for k=1,,λ(5)

其中:

∼ \sim 表示左右分布相同。

N ( 0 , C ( g ) ) \mathcal{N}\left(\mathbf{0}, \boldsymbol{C}^{(g)}\right) N(0,C(g)):是均值为0,协方差为 C ( g ) \boldsymbol{C}^{(g)} C(g)的多元正太分布,其满足 m ( g ) + σ ( g ) N ( 0 , C ( g ) ) ∼ N ( m ( g ) , ( σ ( g ) ) 2 C ( g ) ) \boldsymbol{m}^{(g)}+\sigma^{(g)} \mathcal{N}\left(\mathbf{0}, \boldsymbol{C}^{(g)}\right) \sim \mathcal{N}\left(\boldsymbol{m}^{(g)},\left(\sigma^{(g)}\right)^{2} \boldsymbol{C}^{(g)}\right) m(g)+σ(g)N(0,C(g))N(m(g),(σ(g))2C(g))

x k ( g + 1 ) ∈ R n \boldsymbol{x}_{k}^{(g+1)} \in \mathbb{R}^{n} xk(g+1)Rn:第 g + 1 g+1 g+1代中的第 k k k个子代(个体,搜索点)。

m ( g ) ∈ R n \boldsymbol{m}^{(g)} \in \mathbb{R}^{n} m(g)Rn:第 g g g代搜索分布的均值。

σ ( g ) ∈ R + \sigma^{(g)} \in \mathbb{R}_{+} σ(g)R+:第 g g g代整体标准差,步长。

C ( g ) ∈ R n × n C^{(g)} \in \mathbb{R}^{n \times n} C(g)Rn×n:第 g g g代的协方差矩阵

λ ≥ 2 \lambda \geq 2 λ2:种群大小,采样大小,子代数量。

为了定义完整的迭代步骤,剩下的问题就是如何计算第 g + 1 g+1 g+1代的 m ( g + 1 ) , \boldsymbol{m}^{(g+1)}, m(g+1), C ( g + 1 ) \boldsymbol{C}^{(g+1)} C(g+1) σ ( g + 1 ) \sigma^{(g+1)} σ(g+1)

3.2 选择和重组:均值移动

搜索分布新的均值 m ( g + 1 ) \boldsymbol{m}^{(g+1)} m(g+1)就是从样本 x 1 ( g + 1 ) , … , x λ ( g + 1 ) \boldsymbol{x}_{1}^{(g+1)}, \ldots, \boldsymbol{x}_{\lambda}^{(g+1)} x1(g+1),,xλ(g+1)中选择的 μ \mu μ个点的加权平均值:

m ( g + 1 ) = ∑ i = 1 μ w i x i : λ ( g + 1 ) (6) \boldsymbol{m}^{(g+1)}=\sum_{i=1}^{\mu} w_{i} \boldsymbol{x}_{i: \lambda}^{(g+1)\tag{6}} m(g+1)=i=1μwixi:λ(g+1)(6)

∑ i = 1 μ w i = 1 , w 1 ≥ w 2 ≥ ⋯ ≥ w μ > 0 (7) \sum_{i=1}^{\mu} w_{i}=1, \quad w_{1} \geq w_{2} \geq \cdots \geq w_{\mu}>0\tag{7} i=1μwi=1,w1w2wμ>0(7)

其中

  • μ ≤ λ \mu \le \lambda μλ为父代种群大小,即选择点的个数。
  • w i = 1 … μ ∈ R + w_{i=1 \ldots \mu} \in \mathbb{R}_{+} wi=1μR+:用于重组的正权重系数。如果 w i = 1 … μ = 1 / μ w_{i=1 \ldots \mu}=1 / \mu wi=1μ=1/μ,等式(6)相当于计算了 μ \mu μ个选择点的均值。
  • x i : λ ( g + 1 ) \boldsymbol{x}_{i: \lambda}^{(g+1)} xi:λ(g+1):根据式(5)计算得到的 x 1 ( g + 1 ) , … , x λ ( g + 1 ) \boldsymbol{x}_{1}^{(g+1)}, \ldots, \boldsymbol{x}_{\lambda}^{(g+1)} x1(g+1),,xλ(g+1)中第 i i i个最优个体, i : λ i: \lambda i:λ表示排名第 i i i的个体索引,且 f ( x 1 : λ ( g + 1 ) ) ≤ f ( x 2 : λ ( g + 1 ) ) ≤ ⋯ ≤ f ( x λ : λ ( g + 1 ) ) f\left(\boldsymbol{x}_{1: \lambda}^{(g+1)}\right) \leq f\left(\boldsymbol{x}_{2: \lambda}^{(g+1)}\right) \leq \cdots \leq f\left(\boldsymbol{x}_{\lambda: \lambda}^{(g+1)}\right) f(x1:λ(g+1))f(x2:λ(g+1))f(xλ:λ(g+1))

等式(6)通过从 λ \lambda λ个子代中选择 μ < λ \mu \lt\lambda μ<λ个实现截断选择(truncation selection),其实分配不同的权重 w i w_i wi也相当于一种选择机制。等式(6)实现了加权中间重组(weighted intermediate recombination),考虑了 μ > 1 \mu \gt 1 μ>1个个体以获得一个加权平均值。

μ e f f = ( ∥ w ∥ 1 ∥ w ∥ 2 ) 2 = ∥ w ∥ 1 2 ∥ w ∥ 2 2 = 1 ∥ w ∥ 2 2 = ( ∑ i = 1 μ w i 2 ) − 1 (8) \mu_{\mathrm{eff}}=\left(\frac{\|\boldsymbol{w}\|_{1}}{\|\boldsymbol{w}\|_{2}}\right)^{2}=\frac{\|\boldsymbol{w}\|_{1}^{2}}{\|\boldsymbol{w}\|_{2}^{2}}=\frac{1}{\|\boldsymbol{w}\|_{2}^{2}}=\left(\sum_{i=1}^{\mu} w_{i}^{2}\right)^{-1}\tag{8} μeff=(w2w1)2=w22w12=w221=(i=1μwi2)1(8)

上式会在后面重复使用到,可以解释为方差有效选择质量( variance effective selection mass)。根据(7)中 w i w_i wi的定义,可以推导出 1 ≤ μ e f f ≤ μ 1 \leq \mu_{\mathrm{eff}} \leq \mu 1μeffμ,且当重组权重相等即对于所有 i = 1 … μ i=1 \ldots \mu i=1μ都有 w i = 1 / μ w_{i}=1 / \mu wi=1/μ,则 μ e f f = μ \mu_{\mathrm{eff}}= \mu μeff=μ。通常, μ e f f ≈ λ / 4 \mu_{\mathrm{eff}} \approx \lambda / 4 μeffλ/4表明 w i w_i wi的设置比较合理,典型的设置是 w i ∝ μ − i + 1 , w_{i} \propto \mu-i+1, wiμi+1, and μ ≈ λ / 2 \mu \approx \lambda / 2 μλ/2

3.3 自适应协方差矩阵

这一节将推导协方差矩阵的更新过程。将从某一代的单个总体开始估计协方差矩阵(3.3.1),对于小种群,这种估计是不可靠的,必须提出一种自适应方法(3.3.2的秩 μ \mu μ更新),在极限情况下,每一代只能使用一个单点来更新(调整)协方差矩阵(3.3.3的秩1更新),适应性可以通过利用连续步骤之间的累积依赖性来增强(3.3.3.1),最后结合秩 μ \mu μ和秩1更新方法(3.3.4)。

3.3.1 估计协方差矩阵

现在假设种群包含足够的信息,可以可靠地估计协方差矩阵。为了方便起见,在本节中假设 σ ( g ) = 1 \sigma^{(g)}=1 σ(g)=1,对于 σ ( g ) ≠ 1 \sigma^{(g)} \neq 1 σ(g)=1时,除了常数因子外,这个公式是仍然成立。

为了根据 N ( 0 , I ) \mathcal{N}(\mathbf{0}, \mathbf{I}) N(0,I)分布的样本重新估计协方差矩阵且保证 C \boldsymbol{C} C的条件数 cond ⁡ ( C ) < 10 \operatorname{cond}\boldsymbol{(C)}<10 cond(C)<10,应该保证采样大小 λ ≥ 4 n \lambda \geq 4 n λ4n

我们可以使用根据(5)采样的种群重新评估原始的协方差矩阵 C ( g ) \boldsymbol{C}^{(g)} C(g),通过下面的经验协方差矩阵:
C e m p ( g + 1 ) = 1 λ − 1 ∑ i = 1 λ ( x i ( g + 1 ) − 1 λ ∑ j = 1 λ x j ( g + 1 ) ) ( x i ( g + 1 ) − 1 λ ∑ j = 1 λ x j ( g + 1 ) ) T (9) \boldsymbol{C}_{\mathrm{emp}}^{(g+1)}=\frac{1}{\lambda-1} \sum_{i=1}^{\lambda}\left(\boldsymbol{x}_{i}^{(g+1)}-\frac{1}{\lambda} \sum_{j=1}^{\lambda} \boldsymbol{x}_{j}^{(g+1)}\right)\left(\boldsymbol{x}_{i}^{(g+1)}-\frac{1}{\lambda} \sum_{j=1}^{\lambda} \boldsymbol{x}_{j}^{(g+1)}\right)^{\mathrm{T}}\tag{9} Cemp(g+1)=λ11i=1λ(xi(g+1)λ1j=1λxj(g+1))(xi(g+1)λ1j=1λxj(g+1))T(9)

经验协方差矩阵 C e m p ( g + 1 ) \boldsymbol{C}_{\mathrm{emp}}^{(g+1)} Cemp(g+1) C ( g ) \boldsymbol{C}^{(g)} C(g)的无偏估计:假设 x i ( g + 1 ) , i = 1 … λ \boldsymbol{x}_{i}^{(g+1)}, i=1 \ldots \lambda xi(g+1),i=1λ为随机变量(而不是已完成的采样),那么就有 E [ C e m p ( g + 1 ) C ( g ) ] = C ( g ) \mathrm{E}\left[\begin{array}{l|l}\boldsymbol{C}_{\mathrm{emp}}^{(g+1)} & \boldsymbol{C}^{(g)}\end{array}\right]=\boldsymbol{C}^{(g)} E[Cemp(g+1)C(g)]=C(g)。现在考虑一种稍微不同的获取 C ( g ) \boldsymbol{C}^{(g)} C(g)估计量的方法。

C λ ( g + 1 ) = 1 λ ∑ i = 1 λ ( x i ( g + 1 ) − m ( g ) ) ( x i ( g + 1 ) − m ( g ) ) T (10) \boldsymbol{C}_{\lambda}^{(g+1)}=\frac{1}{\lambda} \sum_{i=1}^{\lambda}\left(\boldsymbol{x}_{i}^{(g+1)}-\boldsymbol{m}^{(g)}\right)\left(\boldsymbol{x}_{i}^{(g+1)}-\boldsymbol{m}^{(g)}\right)^{\mathrm{T}}\tag{10} Cλ(g+1)=λ1i=1λ(xi(g+1)m(g))(xi(g+1)m(g))T(10)

同样 C λ ( g + 1 ) \boldsymbol{C}_{\lambda}^{(g+1)} Cλ(g+1)也是 C ( g ) \boldsymbol{C}^{(g)} C(g)的无偏估计,式(9)和(10)之间的明显不同在于参考均值不同, C e m p ( g + 1 ) \boldsymbol{C}_{\mathrm{emp}}^{(g+1)} Cemp(g+1)中使用的是实际采样的均值,而 C λ ( g + 1 ) \boldsymbol{C}_{\lambda}^{(g+1)} Cλ(g+1)使用的则是使用采样分布的真实均值 m ( g ) \boldsymbol{m}^{(g)} m(g),因此估计 C e m p ( g + 1 ) \boldsymbol{C}_{\mathrm{emp}}^{(g+1)} Cemp(g+1) C λ ( g + 1 ) \boldsymbol{C}_{\lambda}^{(g+1)} Cλ(g+1)可以有不同的理解:前者估计了采样点内的分布方差,后者估计了采样步 x i ( g + 1 ) − m ( g ) \boldsymbol{x}_{i}^{(g+1)}-\boldsymbol{m}^{(g)} xi(g+1)m(g)的方差。

公式(10)对原始协方差矩阵进行评估,为了评估更好的协方差矩阵,对(10)进行了改进,同样采用(6)中的“加权选择机制”:

C μ ( g + 1 ) = ∑ i = 1 μ w i ( x i : λ ( g + 1 ) − m ( g ) ) ( x i : λ ( g + 1 ) − m ( g ) ) T (11) \boldsymbol{C}_{\mu}^{(g+1)}=\sum_{i=1}^{\mu} w_{i}\left(\boldsymbol{x}_{i: \lambda}^{(g+1)}-\boldsymbol{m}^{(g)}\right)\left(\boldsymbol{x}_{i: \lambda}^{(g+1)}-\boldsymbol{m}^{(g)}\right)^{\mathrm{T}}\tag{11} Cμ(g+1)=i=1μwi(xi:λ(g+1)m(g))(xi:λ(g+1)m(g))T(11)

C μ ( g + 1 ) \boldsymbol{C}_{\mu}^{(g+1)} Cμ(g+1)是对选择步上分布的估计,如同 C λ ( g + 1 ) \boldsymbol{C}_{\lambda}^{(g+1)} Cλ(g+1)为选择之前所有步上的原始分布的估计。从 C μ ( g + 1 ) \boldsymbol{C}_{\mu}^{(g+1)} Cμ(g+1)中采样往往会再生出选择的即成功的步,从而给出一个“更好的”协方差矩阵的解释。

为了保证使用(5)、(6)h和(11)时 C μ ( g + 1 ) \boldsymbol{C}_{\mu}^{(g+1)} Cμ(g+1)是可靠的估计量,方差有效选择质量 μ e f f \mu_{\mathrm{eff}} μeff必须足够大: C μ ( g ) \boldsymbol{C}_{\mu}^{(g)} Cμ(g) f sphere  ( x ) = ∑ i = 1 n x i 2 f_{\text {sphere }}(\boldsymbol{x})=\sum_{i=1}^{n} x_{i}^{2} fsphere (x)=i=1nxi2的条件数小于10就需要 μ e f f ≈ 10 n \mu_{\mathrm{eff}} \approx 10 n μeff10n。下一步就来说明如何规避对 μ e f f \mu_{\mathrm{eff}} μeff的这种限制。

3.3.2 秩 μ \mu μ更新

为了实现快速搜索,种群大小 λ \lambda λ必须尽量小,由于 μ e f f ≈ λ / 4 \mu_{\mathrm{eff}} \approx \lambda / 4 μeffλ/4,所以 μ e f f \mu_{\mathrm{eff}} μeff肯定也会很小,例如假设 μ e f f ≤ 1 + ln ⁡ n \mu_{\mathrm{eff}} \leq 1+\ln n μeff1+lnn,那么根据式(11)不可能得到好的协方差矩阵的可靠估计,作为补救措施,将额外使用前几代的信息,例如经过足够多代之后,估计协方差矩阵在所有代上的均值为:
C ( g + 1 ) = 1 g + 1 ∑ i = 0 g 1 σ ( i ) 2 C μ ( i + 1 ) (13) \boldsymbol{C}^{(g+1)}=\frac{1}{g+1} \sum_{i=0}^{g} \frac{1}{\sigma^{(i)^{2}}} \boldsymbol{C}_{\mu}^{(i+1)}\tag{13} C(g+1)=g+11i=0gσ(i)21Cμ(i+1)(13)

使用改均值就可以得到选择步上的可靠估计,为了使得不同代之间的 C μ ( g ) \boldsymbol{C}_{\mu}^{(g)} Cμ(g)可比较,结合了不同的 σ ( i ) \sigma^{(i)} σ(i).

在(13)中,所有的代的步上都有相同的权重,为了分配最近几代更高的权重,引入了指数平滑。取 C ( 0 ) = I \boldsymbol{C}^{(0)}=\mathbf{I} C(0)=I且学习率$0<c_{\mu} \leq 1 , 那 么 ,那么 \boldsymbol{C}^{(g+1)}$取值为:
C ( g + 1 ) = ( 1 − c μ ) C ( g ) + c μ 1 σ ( g ) 2 C μ ( g + 1 ) = ( 1 − c μ ) C ( g ) + c μ ∑ i = 1 μ w i y i : λ ( g + 1 ) y i : λ ( g + 1 ) T = C ( g ) 1 / 2 ( I + c μ ∑ i = 1 μ w i ( z i : λ ( g + 1 ) z i : λ ( g + 1 ) T − I ) ) C ( g ) 1 / 2 (14) \begin{aligned} \boldsymbol{C}^{(g+1)} &=\left(1-c_{\mu}\right) \boldsymbol{C}^{(g)}+c_{\mu} \frac{1}{\sigma^{(g)^{2}}} \boldsymbol{C}_{\mu}^{(g+1)} \\ &=\left(1-c_{\mu}\right) \boldsymbol{C}^{(g)}+c_{\mu} \sum_{i=1}^{\mu} w_{i} \boldsymbol{y}_{i: \lambda}^{(g+1)} \boldsymbol{y}_{i: \lambda}^{(g+1)^{\mathrm{T}}} \\ &=\boldsymbol{C}^{(g)^{1 / 2}}\left(\mathbf{I}+c_{\mu} \sum_{i=1}^{\mu} w_{i}\left(\boldsymbol{z}_{i: \lambda}^{(g+1)} \boldsymbol{z}_{i: \lambda}^{(g+1)^{\mathrm{T}}}-\mathbf{I}\right) \right)\boldsymbol{C}^{(g)^{1 / 2}} \end{aligned} \tag{14} C(g+1)=(1cμ)C(g)+cμσ(g)21Cμ(g+1)=(1cμ)C(g)+cμi=1μwiyi:λ(g+1)yi:λ(g+1)T=C(g)1/2(I+cμi=1μwi(zi:λ(g+1)zi:λ(g+1)TI))C(g)1/2(14)

其中

  • c μ ≤ 1 c_{\mu}\le 1 cμ1:协方差矩阵更新的学习率,对于 c μ = 1 c_{\mu}= 1 cμ=1,则没有保留先验信息, C ( g + 1 ) = 1 σ ( g ) 2 C μ ( g + 1 ) \boldsymbol{C}^{(g+1)}=\frac{1}{\sigma^{(g)^{2}}} \boldsymbol{C}_{\mu}^{(g+1)} C(g+1)=σ(g)21Cμ(g+1),而对于 c μ = 0 c_{\mu}= 0 cμ=0,则没有进行学习, C ( g + 1 ) = C 0 \boldsymbol{C}^{(g+1)}=\boldsymbol{C}_{0} C(g+1)=C0。因此 c μ ≈ min ⁡ ( 1 , μ e f f / n 2 ) c_{\mu} \approx \min \left(1, \mu_{\mathrm{eff}} / n^{2}\right) cμmin(1,μeff/n2)式合理的选择。
  • y i : λ ( g + 1 ) = ( x i : λ ( g + 1 ) − m ( g ) ) / σ ( g ) \boldsymbol{y}_{i: \lambda}^{(g+1)}=\left(\boldsymbol{x}_{i: \lambda}^{(g+1)}-\boldsymbol{m}^{(g)}\right) / \sigma^{(g)} yi:λ(g+1)=(xi:λ(g+1)m(g))/σ(g)
  • z i : λ ( g + 1 ) = C ( g ) − 1 / 2 y i : λ ( g + 1 ) \boldsymbol{z}_{i: \lambda}^{(g+1)}=\boldsymbol{C}^{(g)^{-1 / 2}} \boldsymbol{y}_{i: \lambda}^{(g+1)} zi:λ(g+1)=C(g)1/2yi:λ(g+1)为变异向量。

这个协方差矩阵更新称为秩 μ \mu μ更新,因为(14)中外积和的秩为 m i n ( μ , n ) min(\mu,n) min(μ,n)。其实下面几段可以不用关心的!!!

1 / c μ 1/c_{\mu} 1/cμ是backward time horizon,约占总体权重的63%。由于式(14)可以扩展为加权和:
C ( g + 1 ) = ( 1 − c μ ) g + 1 C ( 0 ) + c μ ∑ i = 0 g ( 1 − c μ ) g − i 1 σ ( i ) 2 C μ ( i + 1 ) (15) \boldsymbol{C}^{(g+1)}=\left(1-c_{\mu}\right)^{g+1} \boldsymbol{C}^{(0)}+c_{\mu} \sum_{i=0}^{g}\left(1-c_{\mu}\right)^{g-i} \frac{1}{\sigma^{(i)^{2}}} \boldsymbol{C}_{\mu}^{(i+1)}\tag{15} C(g+1)=(1cμ)g+1C(0)+cμi=0g(1cμ)giσ(i)21Cμ(i+1)(15)

backward time horizon Δ g \Delta g Δg约占总体权重的63%,定义为:
c μ ∑ i = g + 1 − Δ g g ( 1 − c μ ) g − i ≈ 0.63 ≈ 1 − 1 e (16) c_{\mu} \sum_{i=g+1-\Delta g}^{g}\left(1-c_{\mu}\right)^{g-i} \approx 0.63 \approx 1-\frac{1}{\mathrm{e}}\tag{16} cμi=g+1Δgg(1cμ)gi0.631e1(16)
分解求和得到
( 1 − c μ ) Δ g ≈ 1 e (17) \left(1-c_{\mu}\right)^{\Delta g} \approx \frac{1}{\mathrm{e}}\tag{17} (1cμ)Δge1(17)
然后使用泰勒近似分解得到 Δ g \Delta g Δg
Δ g ≈ 1 c μ (18) \Delta g \approx \frac{1}{c_{\mu}}\tag{18} Δgcμ1(18)

c μ c_{\mu} cμ的选择很关键,小值导致学习慢,大值导致失败,因为协方差矩阵退化。幸运的是,一个好的设置似乎在很大程度上独立于要优化的函数。一个好的一阶近似是 c μ ≈ μ e f f / n 2 c_{\mu} \approx \mu_{\mathrm{eff}} / n^{2} cμμeff/n2,因此(14)的特征时域约等于$n^{2}/\mu_{\mathrm{eff}} $.

即使学习率 c μ = 1 c_{\mu}=1 cμ=1,适应协方差矩阵也不能在一代之内完成,原始样本分布的影响直到足够的代数才会消失。假设搜索代价固定(函数评估的次数),较小的种群规模 λ \lambda λ允许较大的代数,因此通常会导致协方差矩阵更快的自适应。

3.3.3 秩1更新

在3.1节,使用从单代中所有选择的步从零开始估计了完整的协方差矩阵,现在采取恰恰相反的视角,只使用一个选定的步骤来重复更新代序列中的协方差矩阵,即使上一代最好的样本出现的几率更高。首先,这一视角将给出适应规则(14)的正当性,其次引入所谓的进化路径,最终用于协方差矩阵的秩1更新。

3.3.3.1 不同的视角

考虑一种特殊的方法来产生均值为零的n维正态分布,令向量 y 1 , … , y g 0 ∈ R n , g 0 ≥ n , \boldsymbol{y}_{1}, \ldots, \boldsymbol{y}_{g_{0}} \in \mathbb{R}^{n}, g_{0} \geq n, y1,,yg0Rn,g0n, span R n \mathbb{R}^{n} Rn,且 N ( 0 , 1 ) \mathcal{N}(0,1) N(0,1)表示服从独立(0,1)正太分布的随机数,那么
N ( 0 , 1 ) y 1 + ⋯ + N ( 0 , 1 ) y g 0 ∼ N ( 0 , ∑ i = 1 g 0 y i y i T ) (19) \mathcal{N}(0,1) \boldsymbol{y}_{1}+\cdots+\mathcal{N}(0,1) \boldsymbol{y}_{g_{0}} \sim \mathcal{N}\left(\mathbf{0}, \sum_{i=1}^{g_{0}} \boldsymbol{y}_{i} \boldsymbol{y}_{i}^{\mathrm{T}}\right)\tag{19} N(0,1)y1++N(0,1)yg0N(0,i=1g0yiyiT)(19)

是均值为0协方差 ∑ i = 1 g 0 y i y i T \sum_{i=1}^{g_{0}} \boldsymbol{y}_{i} \boldsymbol{y}_{i}^{\mathrm{T}} i=1g0yiyiT的正太分布随机向量。该随机向量是通过线性分布 N ( 0 , 1 ) y i \mathcal{N}(0,1) \boldsymbol{y}_{i} N(0,1)yi相加得到的。奇异分布 N ( 0 , 1 ) y i ∼ N ( 0 , y i y i T ) \mathcal{N}(0,1) \boldsymbol{y}_{i} \sim \mathcal{N}\left(\mathbf{0}, \boldsymbol{y}_{i} \boldsymbol{y}_{i}^{\mathrm{T}}\right) N(0,1)yiN(0,yiyiT)考虑了所有均值为0的正太分布,生成最大似然估计向量 y i \boldsymbol{y}_{i} yi

考虑(19)和(14)的轻微简化,试图深入了解协方差矩阵的适应规则,令(14)中的和仅包含一个被加项(例如 μ = 1 \mu=1 μ=1),且令 y g + 1 = x 1 : λ ( g + 1 ) − m ( g ) σ ( g ) \boldsymbol{y}_{g+1}=\frac{\boldsymbol{x}_{1: \lambda}^{(g+1)}-\boldsymbol{m}^{(g)}}{\sigma^{(g)}} yg+1=σ(g)x1:λ(g+1)m(g),那么协方差矩阵秩1更新写为:
C ( g + 1 ) = ( 1 − c 1 ) C ( g ) + c 1 y g + 1 y g + 1 T (20) \boldsymbol{C}^{(g+1)}=\left(1-c_{1}\right) \boldsymbol{C}^{(g)}+c_{1} \boldsymbol{y}_{g+1} \boldsymbol{y}_{g+1}^{\mathrm{T}}\tag{20} C(g+1)=(1c1)C(g)+c1yg+1yg+1T(20)

右边的被加项秩为1,再在协方差矩阵 C ( g ) \boldsymbol{C}^{(g)} C(g)加上 y g + 1 \boldsymbol{y}_{g+1} yg+1的最大似然项,因此在下一代中生成 y g + 1 \boldsymbol{y}_{g+1} yg+1的概率就增加了。

3.3.3.2 累计:利用进化路径

我们已经使用选择的步骤 y i : λ ( g + 1 ) = ( x i : λ ( g + 1 ) − m ( g ) ) / σ ( g ) \boldsymbol{y}_{i: \lambda}^{(g+1)}=\left(\boldsymbol{x}_{i: \lambda}^{(g+1)}-\boldsymbol{m}^{(g)}\right) / \sigma^{(g)} yi:λ(g+1)=(xi:λ(g+1)m(g))/σ(g)来更新(14)和(20)中的协方差矩阵,因为 y y T = − y ( − y ) T \boldsymbol{y} \boldsymbol{y}^{\mathrm{T}}=-\boldsymbol{y}(-\boldsymbol{y})^{\mathrm{T}} yyT=y(y)T,所以步骤的符号与协方差矩阵的更新无关,也就是说,符号信息不用于计算 C ( g + 1 ) \boldsymbol{C}^{(g+1)} C(g+1)。为了利用符号信息,引入了所谓的进化路径。

我们将策略在许多代上采取的连续步序列称之为一个进化路径。进化路径可以用一系列连续的步骤总和来表示,这种总和称为累积。为了构建一个进化路径,不考虑步长 σ \sigma σ。例如,分布均值为 m \boldsymbol m m的三步进化路径为:
m ( g + 1 ) − m ( g ) σ ( g ) + m ( g ) − m ( g − 1 ) σ ( g − 1 ) + m ( g − 1 ) − m ( g − 2 ) σ ( g − 2 ) (21) \frac{m^{(g+1)}-m^{(g)}}{\sigma^{(g)}}+\frac{m^{(g)}-m^{(g-1)}}{\sigma^{(g-1)}}+\frac{m^{(g-1)}-m^{(g-2)}}{\sigma^{(g-2)}}\tag{21} σ(g)m(g+1)m(g)+σ(g1)m(g)m(g1)+σ(g2)m(g1)m(g2)(21)
实际上,为了构造进化路径,使用了指数平滑,且 p c ( 0 ) = 0 \boldsymbol{p}_{\mathrm{c}}^{(0)}=\boldsymbol{0} pc(0)=0
p c ( g + 1 ) = ( 1 − c c ) p c ( g ) + c c ( 2 − c c ) μ e f f m ( g + 1 ) − m ( g ) σ ( g ) (22) \boldsymbol{p}_{\mathrm{c}}^{(g+1)}=\left(1-c_{\mathrm{c}}\right) \boldsymbol{p}_{\mathrm{c}}^{(g)}+\sqrt{c_{\mathrm{c}}\left(2-c_{\mathrm{c}}\right) \mu_{\mathrm{eff}}} \frac{\boldsymbol{m}^{(g+1)}-\boldsymbol{m}^{(g)}}{\sigma^{(g)}}\tag{22} pc(g+1)=(1cc)pc(g)+cc(2cc)μeff σ(g)m(g+1)m(g)(22)
其中

  • p c ( g ) ∈ R n \boldsymbol{p}_{\mathrm{c}}^{(g)} \in \mathbb{R}^{n} pc(g)Rn表示第 g g g代的进化路径
  • c c ≤ 1 c_{\mathrm{c}} \leq 1 cc1,同样, 1 / c c 1 / c_{\mathrm{c}} 1/cc为进化路径 p c \boldsymbol{p}_{\mathrm{c}} pc的backward time horizon 。

因子 c c ( 2 − c c ) μ e f f \sqrt{c_{\mathrm{c}}\left(2-c_{\mathrm{c}}\right) \mu_{\mathrm{eff}}} cc(2cc)μeff p c \boldsymbol{p}_{\mathrm{c}} pc的归一化常数,对于 c c = 1 c_{\mathrm{c}}=1 cc=1 μ e f f = 1 \mu_{\mathrm{eff}}=1 μeff=1,该因子变为1,且 p c ( g + 1 ) = ( x 1 : λ ( g + 1 ) − m ( g ) ) / σ ( g ) \boldsymbol{p}_{\mathrm{c}}^{(g+1)}=\left(\boldsymbol{x}_{1: \lambda}^{(g+1)}-\boldsymbol{m}^{(g)}\right) / \sigma^{(g)} pc(g+1)=(x1:λ(g+1)m(g))/σ(g)

考虑进化路径 p c ( g + 1 ) \boldsymbol{p}_{\mathrm{c}}^{(g+1)} pc(g+1)的协方差矩阵 C ( g ) C^{(g)} C(g)秩1更新写作:
C ( g + 1 ) = ( 1 − c 1 ) C ( g ) + c 1 p c ( g + 1 ) p c ( g + 1 ) T (26) \boldsymbol{C}^{(g+1)}=\left(1-c_{1}\right) \boldsymbol{C}^{(g)}+c_{1} \boldsymbol{p}_{\mathbf{c}}^{(g+1)} \boldsymbol{p}_{\mathbf{c}}^{(g+1)^{\mathrm{T}}}\tag{26} C(g+1)=(1c1)C(g)+c1pc(g+1)pc(g+1)T(26)
(26)中一种经验有效的学习率设置为 c 1 ≈ 2 / n 2 c_{1} \approx 2 / n^{2} c12/n2,如果 c 1 = 1 c_{1} =1 c1=1 μ = 1 \mu =1 μ=1,那么等式(26)、(20)和(14)就是完全相同的。

使用进化路径更新 C \boldsymbol C C是当 μ e f f \mu_{\mathrm{eff}} μeff较小时对(14)的显著改进,因为利用了连续步骤之间的相关性。

3.4 组合秩 μ \mu μ更新和累积

最终的协方差矩阵CMA更新就是组合(14)和(26):
C ( g + 1 ) = ( 1 − c 1 − c μ ) C ( g ) + c 1 p c ( g + 1 ) p c ( g + 1 ) ⏟ rank-one update  + c μ ∑ i = 1 μ w i y i : λ ( g + 1 ) ( y i : λ ( g + 1 ) ) T ⏟ rank- μ  update (27) \begin{aligned} \boldsymbol{C}^{(g+1)}=&\left(1-c_{1}-c_{\mu}\right) \boldsymbol{C}^{(g)} \\ &+c_{1} \underbrace{\boldsymbol{p}_{\mathrm{c}}^{(g+1)} \boldsymbol{p}_{\mathrm{c}}^{(g+1)}}_{\text {rank-one update }}+c_{\mu} \underbrace {\sum_{i=1}^{\mu} w_{i} \boldsymbol{y}_{i: \lambda}^{(g+1)}\left(\boldsymbol{y}_{i: \lambda}^{(g+1)}\right)^{\mathrm{T}}}_{\text {rank-} \mu \text { update}} \end{aligned}\tag{27} C(g+1)=(1c1cμ)C(g)+c1rank-one update  pc(g+1)pc(g+1)+cμrank-μ update i=1μwiyi:λ(g+1)(yi:λ(g+1))T(27)

其中

  • c 1 ≈ 2 / n 2 c_{1} \approx 2 / n^{2} c12/n2
  • c μ ≈ min ⁡ ( μ e f f / n 2 , 1 − c 1 ) c_{\mu} \approx \min \left(\mu_{\mathrm{eff}} / n^{2}, 1-c_{1}\right) cμmin(μeff/n2,1c1)
  • y i : λ ( g + 1 ) = ( x i : λ ( g + 1 ) − m ( g ) ) / σ ( g ) \boldsymbol{y}_{i: \lambda}^{(g+1)}=\left(\boldsymbol{x}_{i: \lambda}^{(g+1)}-\boldsymbol{m}^{(g)}\right) / \sigma^{(g)} yi:λ(g+1)=(xi:λ(g+1)m(g))/σ(g)

如果 c 1 = 0 c_{1}=0 c1=0则等式(27)退化为(14),如果 c μ = 0 c_{\mu}=0 cμ=0则退化为(26)。(27)融合了(14)和(26)的优势,一方面,秩 μ \mu μ更新有效地利用了一代种群内的信息,另一方面,秩1更新的进化路径利用了代之间的相关性信息。前者在大群体中很重要,后者在小群体中作用明显。

3.4 步长控制

在上一节中介绍的协方差矩阵自适应并没有明确地控制分布的“总体尺度”,步长。协方差矩阵自适应对于每一步选择只在一个方向上增加尺度,通过因子1 - c1 - c隐式地减少旧信息来降低尺度。除了 C ( g ) C^{(g)} C(g)的自适应规则以外,有两点原因来引入步长控制:

  • 最优整体步长不能通过(27)很好地近似,特别是当 μ e f f \mu_{eff} μeff大于1时。
  • (27)中协方差矩阵更新的最大可靠学习率太慢,以至于无法实现整个步长的竞争性变化率。

为了控制步长 σ ( g ) \sigma^{(g)} σ(g),我们利用到了进化路径,即连续步总和。该方法可独立于协方差矩阵更新而应用,可表示为累积路径长度控制(cumulative path length control)、累积步长控制(cumulative step-size control)或累积步长自适应( cumulative step
length adaptation,CSA)。基于以下推理,充分利用了进化路径的长度:

  • 只要进化路径很短,单个步骤就会相互抵消,笼统地讲,它们是反相关的。如果步长互相湮灭,步长应该减小。
  • 只要进化的路径很长,单个的步骤都指向相似的方向,笼统地讲,它们是相关的。因为步骤是相似的,同样的距离可以通过更少但更长的步骤进入相同的方向。在极限情况下,连续的步长有相同的方向,它们可以被一个放大的单步长代替。因此,应该增加步长。
  • 在理想情况下,期望步之间是(近似)垂直的,因此也就不相关。

为了确定进化路径是“长”还是“短”,我们将路径的长度与随机选择下的期望长度进行比较。在随机选择下,连续的步骤是独立的,因此是不相关的。如果选择导致进化路径比期望值长,则应该增加 σ \sigma σ,如果选择导致进化路径比期望值短,则应该降低 σ \sigma σ。在理想情况下,选择不会对进化路径的长度产生偏差,在随机选择下,进化路径的长度等于其期望长度。

实际上,为了构建进化路径 p σ \boldsymbol{p}_{\sigma} pσ,采用了(22)中相同的技术。但和(22)不同的是,这里构建的是共轭进化路径,因为(22)中的进化路径 p c \boldsymbol{p}_{c} pc的期望长度取决于其方向。初始化 p σ ( 0 ) = 0 \boldsymbol{p}_{\sigma}^{(0)}=\mathbf{0} pσ(0)=0,共轭进化路径写为:
p σ ( g + 1 ) = ( 1 − c σ ) p σ ( g ) + c σ ( 2 − c σ ) μ e f f C ( g ) − 1 2 m ( g + 1 ) − m ( g ) σ ( g ) (28) \boldsymbol{p}_{\sigma}^{(g+1)}=\left(1-c_{\sigma}\right) \boldsymbol{p}_{\sigma}^{(g)}+\sqrt{c_{\sigma}\left(2-c_{\sigma}\right) \mu_{\mathrm{eff}}} \boldsymbol{C}^{(g)^{-\frac{1}{2}} }\frac{\boldsymbol{m}^{(g+1)}-\boldsymbol{m}^{(g)}}{\sigma^{(g)}}\tag{28} pσ(g+1)=(1cσ)pσ(g)+cσ(2cσ)μeff C(g)21σ(g)m(g+1)m(g)(28)

其中

  • p σ ( g ) ∈ R n \boldsymbol{p}_{\sigma}^{(g)} \in \mathbb{R}^{n} pσ(g)Rn为第 g g g的代的共轭进化路径;
  • c σ < 1 c_{\sigma}<1 cσ<1 1 / c σ 1/c_{\sigma} 1/cσ为进化路径的backward time horizon;
  • c σ ( 2 − c σ ) μ e f f \sqrt{c_{\sigma}\left(2-c_{\sigma}\right) \mu_{\mathrm{eff}}} cσ(2cσ)μeff 为归一化常数,见(22);
  • C ( g ) − 1 2 =  def  B ( g ) D ( g ) − 1 B ( g ) T \boldsymbol{C}^{(g)^{-\frac{1}{2}}} \stackrel{\text { def }}{=} \boldsymbol{B}^{(g)} \boldsymbol{D}^{(g)^{-1}} \boldsymbol{B}^{(g)^{\mathrm{T}}} C(g)21= def B(g)D(g)1B(g)T,其中 C ( g ) = B ( g ) ( D ( g ) ) 2 B ( g ) T \boldsymbol{C}^{(g)}=\boldsymbol{B}^{(g)}\left(\boldsymbol{D}^{(g)}\right)^{2} \boldsymbol{B}^{(g)^{\mathrm{T}}} C(g)=B(g)(D(g))2B(g)T C ( g ) \boldsymbol{C}^{(g)} C(g)的特征分解, B ( g ) \boldsymbol{B}^{(g)} B(g)是特征向量的标准正交基,且对角矩阵 D ( g ) \boldsymbol{D}^{(g)} D(g)的对角元素为对应正特征值的平方根。

对于 C ( g ) = I \boldsymbol{C}^{(g)}=\mathbf{I} C(g)=I,则有 C ( g ) − 1 2 = I \boldsymbol{C}^{(g)^{-\frac{1}{2}}}=\mathbf{I} C(g)21=I,那么(28)就等价于(22)。转换 C ( g ) − 1 2 \boldsymbol{C}^{(g)^{-\frac{1}{2}}} C(g)21就是在由 B ( g ) \boldsymbol{B}^{(g)} B(g)给定的坐标系内对 m ( g + 1 ) − m ( g ) \boldsymbol{m}^{(g+1)}-\boldsymbol{m}^{(g)} m(g+1)m(g)进行重新缩放。

因此转换 C ( g ) − 1 2 \boldsymbol{C}^{(g)^{-\frac{1}{2}}} C(g)21使得 p σ ( g + 1 ) \boldsymbol{p}_{\sigma}^{(g+1)} pσ(g+1)的期望长度与其方向无关,对于任何已实现的协方差矩阵序列 C g = 0 , 1 , 2 , … ( g ) C_{g=0,1,2, \ldots}^{(g)} Cg=0,1,2,(g),给定 p σ ( 0 ) ∼ N ( 0 , I ) \boldsymbol{p}_{\sigma}^{(0)} \sim \mathcal{N}(\mathbf{0}, \mathbf{I}) pσ(0)N(0,I),在随机选择下都有 p σ ( g + 1 ) ∼ N ( 0 , I ) \boldsymbol{p}_{\sigma}^{(g+1)} \sim \mathcal{N}(\mathbf{0}, \mathbf{I}) pσ(g+1)N(0,I)

为了更新 σ ( g ) \sigma^{(g)} σ(g),比较了 ∥ p σ ( g + 1 ) ∥ \left\|\boldsymbol{p}_{\sigma}^{(g+1)}\right\| pσ(g+1)与其期望长度 E ∥ N ( 0 , I ) \mathrm{E} \| \mathcal{N}(\mathbf{0}, \mathbf{I}) EN(0,I),即:
ln ⁡ σ ( g + 1 ) = ln ⁡ σ ( g ) + c σ d σ E ∥ N ( 0 , I ) ∥ ( ∥ p σ ( g + 1 ) ∥ − E ∥ N ( 0 , I ) ∥ ) (29) \ln \sigma^{(g+1)}=\ln \sigma^{(g)}+\frac{c_{\sigma}}{d_{\sigma} \mathrm{E}\|\mathcal{N}(\mathbf{0}, \mathbf{I})\|}\left(\left\|\boldsymbol{p}_{\sigma}^{(g+1)}\right\|-\mathrm{E}\|\mathcal{N}(\mathbf{0}, \mathbf{I})\|\right)\tag{29} lnσ(g+1)=lnσ(g)+dσEN(0,I)cσ(pσ(g+1)EN(0,I))(29)

其中

  • d σ ≈ 1 d_{\sigma} \approx 1 dσ1为阻尼参数,缩放 ln ⁡ σ ( g ) \ln \sigma^{(g)} lnσ(g)的改变幅度;
  • E ∥ N ( 0 , I ) ∥ = 2 Γ ( n + 1 2 ) / Γ ( n 2 ) ≈ n + O ( 1 / n ) \mathrm{E}\|\mathcal{N}(\mathbf{0}, \mathbf{I})\|=\sqrt{2} \Gamma\left(\frac{n+1}{2}\right) / \Gamma\left(\frac{n}{2}\right) \approx \sqrt{n}+\mathcal{O}(1 / n) EN(0,I)=2 Γ(2n+1)/Γ(2n)n +O(1/n)表示服从 N ( 0 , I ) \mathcal{N}(\mathbf{0}, \mathbf{I}) N(0,I)分布的随机向量的欧几里得范数的期望。

由于 σ ( g ) > 0 \sigma^{(g)}>0 σ(g)>0(29)等价于
σ ( g + 1 ) = σ ( g ) exp ⁡ ( c σ d σ ( ∥ p σ ( g + 1 ) ∥ E ∥ N ( 0 , I ) ∥ − 1 ) ) (34) \sigma^{(g+1)}=\sigma^{(g)} \exp \left(\frac{c_{\sigma}}{d_{\sigma}}\left(\frac{\left\|\boldsymbol{p}_{\sigma}^{(g+1)}\right\|}{\mathrm{E}\|\mathcal{N}(\mathbf{0}, \mathbf{I})\|}-1\right)\right)\tag{34} σ(g+1)=σ(g)expdσcσEN(0,I)pσ(g+1)1(34)

4 算法总结

别看卡面给出了那么多公式,但实际上算法优化过程只用到了**(5)(6)(22)(27)(28)(34)**。

在这里插入图片描述

各符号说明如下:

  • y k ∼ N ( 0 , C ) , \boldsymbol{y}_{k} \sim \mathcal{N}(\mathbf{0}, \boldsymbol{C}), ykN(0,C), for k = 1 , … , λ k=1, \ldots, \lambda k=1,,λ为均值为0协方差矩阵为 C \boldsymbol C C的多元正太分布实现;
  • B , D B, D B,D来自于协方差矩阵 C \boldsymbol C C的特征分解,即 C = B D 2 B T = B D D B T \boldsymbol{C}=\boldsymbol{B} \boldsymbol{D}^{2} \boldsymbol{B}^{T}=\boldsymbol{B D D B}^{\mathrm{T}} C=BD2BT=BDDBT B \boldsymbol{B} B的列为特征向量的正交基,对角矩阵 D \boldsymbol{D} D的对角元素为对应正特征值的平方根。
  • x k ∈ R n , \boldsymbol{x}_{k} \in \mathbb{R}^{n}, xkRn, for k = 1 , … , λ k=1, \ldots, \lambda k=1,,λ λ \lambda λ个搜索点的样本;
  • ⟨ y ⟩ w = ∑ i = 1 μ w i y i : λ \langle\boldsymbol{y}\rangle_{\mathrm{w}}=\sum_{i=1}^{\mu} w_{i} \boldsymbol{y}_{i: \lambda} yw=i=1μwiyi:λ,不考虑步长 σ \sigma σ时的分布均值步;
  • y i : λ = ( x i : λ − m ) / σ \boldsymbol{y}_{i: \lambda}=\left(\boldsymbol{x}_{i: \lambda}-\boldsymbol{m}\right) / \sigma yi:λ=(xi:λm)/σ,如下;
  • x i : λ ∈ R n \boldsymbol{x}_{i: \lambda} \in \mathbb{R}^{n} xi:λRn,根据式(37)得到的 x 1 , … , x λ \boldsymbol{x}_{1}, \ldots, \boldsymbol{x}_{\lambda} x1,,xλ中的 i i i个最优点;
  • μ e f f = ( ∑ i = 1 μ w i 2 ) − 1 \mu_{\mathrm{eff}}=\left(\sum_{i=1}^{\mu} w_{i}^{2}\right)^{-1} μeff=(i=1μwi2)1方差有效选择质量,见式(8),其满足 1 ≤ μ e f f ≤ μ 1 \leq \mu_{\mathrm{eff}} \leq \mu 1μeffμ
  • C − 1 2 =  def  B D − 1 B T C^{-\frac{1}{2}} \stackrel{\text { def }}{=} B D^{-1} B^{\mathrm{T}} C21= def BD1BT
  • E ∥ N ( 0 , I ) ∥ = 2 Γ ( n + 1 2 ) / Γ ( n 2 ) ≈ n ( 1 − 1 4 n + 1 21 n 2 ) \mathrm{E}\|\mathcal{N}(\mathbf{0}, \mathbf{I})\|=\sqrt{2} \Gamma\left(\frac{n+1}{2}\right) / \Gamma\left(\frac{n}{2}\right) \approx \sqrt{n}\left(1-\frac{1}{4 n}+\frac{1}{21 n^{2}}\right) EN(0,I)=2 Γ(2n+1)/Γ(2n)n (14n1+21n21)
  • h σ = { 1  if  ∥ p σ ∥ 1 − ( 1 − c σ ) 2 ( g + 1 ) < ( 1.4 + 2 n + 1 ) E ∥ N ( 0 , I ) ∥ 0  otherwise  h_{\sigma}=\left\{\begin{array}{ll}1 & \text { if } \frac{\left\|p_{\sigma}\right\|}{\sqrt{1-\left(1-c_{\sigma}\right)^{2(g+1)}}}<\left(1.4+\frac{2}{n+1}\right) \mathrm{E}\|\mathcal{N}(\mathbf{0}, \mathbf{I})\| \\ 0 & \text { otherwise }\end{array}\right. hσ={10 if 1(1cσ)2(g+1) pσ<(1.4+n+12)EN(0,I) otherwise ,其中 g g g为代数。如果 ∥ p σ ∥ \left\|\boldsymbol{p}_{\sigma}\right\| pσ很大,亥维赛函数 h σ h_{\sigma} hσ停滞对(42中) p c \boldsymbol{p}_{\mathrm{c}} pc的更新,这可以防止在线性环境中即当步长太小时C轴的过快增长。当初始步长选择得过小或目标函数随时间变化时,这是有用的。
  • δ ( h σ ) = ( 1 − h σ ) c c ( 2 − c c ) ≤ 1 \delta\left(h_{\sigma}\right)=\left(1-h_{\sigma}\right) c_{\mathrm{c}}\left(2-c_{\mathrm{c}}\right) \leq 1 δ(hσ)=(1hσ)cc(2cc)1无关紧要。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

松间沙路hba

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值