(CMA-ES源码)协方差自适应进化策略(Covariance Matrix Adaptation Evolution Strategy,CMA-ES)——最

454 阅读17分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

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

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

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

缩写

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

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

ES:Evolution Strategy,进化策略

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

希腊符号

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

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

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

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

拉丁符号

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

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

ciic_{i i}C\boldsymbol{C}的对象元素

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

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

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

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

DRnD \in \mathbb{R}^{n}:对角矩阵,DD的对焦元素为CC的特征值的平方根,对应于BB的各列

di>0d_{i}>0:对角矩阵DD的对角元素,di2d_{i}^{2}CC的特征值

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

EE:期望值

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

fsphere :RnR,xx2=xTx=i=1nxi2f_{\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}

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

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

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

nNn \in \mathbb{N}:搜索空间维度

N(0,I)\mathcal{N}(\mathbf{0}, \mathbf{I}):0均值和单位协方差矩阵的多元正太分布,按照该分布生成的向量,其元素是独立且服从N(0,1)\mathcal{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}):均值为mRn\boldsymbol{m} \in \mathbb{R}^{n},协方差矩阵为CRn×n\boldsymbol{C} \in \mathbb{R}^{n \times n}的多元正太分布,C\boldsymbol{C}为对称正定矩阵

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

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

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

xi:λ(g+1)\boldsymbol{x}_{i: \lambda}^{(g+1)}x1(g+1),,xλ(g+1)\boldsymbol{x}_{1}^{(g+1)}, \ldots, \boldsymbol{x}_{\lambda}^{(g+1)}中第ii个最优个体,i:λi: \lambda表示排名第ii的个体索引,且f(x1:λ(g+1))f(x2:λ(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)

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

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

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

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

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

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

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

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

1 Set parameters参数设置

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

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

选择和重组

λ=4+3lnn,μ=μ,μ=λ2\lambda=4+\lfloor 3 \ln n\rfloor, \quad \mu=\left\lfloor\mu^{\prime}\right\rfloor, \quad \mu^{\prime}=\frac{\lambda}{2}

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

wi=wij=1μwj,wi=ln(μ+0.5)lni for i=1,,μ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

有了μ\mu^{\prime}μ\mu就可求得wjw_{j}^{\prime},进而求得wiw_{i}

步长控制

cσ=μeff+2n+μeff+5,dσ=1+2max(0,μeff1n+11)+cσ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}

有了wiw_{i}后,就可以计算出μeff=1i=1μwi2\mu_{\mathrm{eff}}=\frac{1}{\sum_{i=1}^{\mu} w_{i}^{2}} ,进而得到cσc_{\sigma}dσd_{\sigma}

协方差自适应

cc=4+μeff/nn+4+2μeff/nc_{\mathrm{c}}=\frac{4+\mu_{\mathrm{eff}} / n}{n+4+2 \mu_{\mathrm{eff}} / n}

c1=2(n+1.3)2+μeffc_{1}=\frac{2}{(n+1.3)^{2}+\mu_{\mathrm{eff}}}

cμ=min(1c1,αμμeff2+1/μeff(n+2)2+αμμeff/2) with αμ=2c_{\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

根据μeff\mu_{\mathrm{eff}}nn可以计算出ccc_{\mathrm{c}},c1c_{1}cμc_{\mu}

说明

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

2 Initialization初始化

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

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

3 迭代优化过程

3.1 采样新种群

在CMA-ES中,新搜索点(个体,子代)的种群是通过多元正态分布采样(回顾:给定方差或协方差,正太分布的交叉熵在所有分布中是最大的)生成的,在第gg代采样搜索点的公式如下: xk(g+1)m(g)+σ(g)N(0,C(g)) for k=1,,λ\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

其中:

\sim表示左右分布相同。

N(0,C(g))\mathcal{N}\left(\mathbf{0}, \boldsymbol{C}^{(g)}\right):是均值为0,协方差为C(g)\boldsymbol{C}^{(g)}的多元正太分布,其满足m(g)+σ(g)N(0,C(g))N(m(g),(σ(g))2C(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)

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

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

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

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

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

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

3.2 选择和重组:均值移动

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

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

i=1μwi=1,w1w2wμ>0\sum_{i=1}^{\mu} w_{i}=1, \quad w_{1} \geq w_{2} \geq \cdots \geq w_{\mu}>0

其中

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

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

μeff=(w1w2)2=w12w22=1w22=(i=1μwi2)1\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}

上式会在后面重复使用到,可以解释为方差有效选择质量( variance effective selection mass)。根据(7)中wiw_i的定义,可以推导出1μeffμ1 \leq \mu_{\mathrm{eff}} \leq \mu,且当重组权重相等即对于所有i=1μi=1 \ldots \mu都有wi=1/μw_{i}=1 / \mu,则μeff=μ\mu_{\mathrm{eff}}= \mu。通常,μeffλ/4\mu_{\mathrm{eff}} \approx \lambda / 4表明wiw_i的设置比较合理,典型的设置是wiμi+1,w_{i} \propto \mu-i+1, and μλ/2\mu \approx \lambda / 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\sigma^{(g)} \neq 1时,除了常数因子外,这个公式是仍然成立。

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

我们可以使用根据(5)采样的种群重新评估原始的协方差矩阵C(g)\boldsymbol{C}^{(g)},通过下面的经验协方差矩阵: Cemp(g+1)=1λ1i=1λ(xi(g+1)1λj=1λxj(g+1))(xi(g+1)1λj=1λxj(g+1))T\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}}

经验协方差矩阵Cemp(g+1)\boldsymbol{C}_{\mathrm{emp}}^{(g+1)}C(g)\boldsymbol{C}^{(g)}的无偏估计:假设xi(g+1),i=1λ\boldsymbol{x}_{i}^{(g+1)}, i=1 \ldots \lambda为随机变量(而不是已完成的采样),那么就有E[Cemp(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)}。现在考虑一种稍微不同的获取C(g)\boldsymbol{C}^{(g)}估计量的方法。

Cλ(g+1)=1λi=1λ(xi(g+1)m(g))(xi(g+1)m(g))T\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}}

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

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

Cμ(g+1)=i=1μwi(xi:λ(g+1)m(g))(xi:λ(g+1)m(g))T\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}}

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

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

3.3.2 秩μ\mu更新

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

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

在(13)中,所有的代的步上都有相同的权重,为了分配最近几代更高的权重,引入了指数平滑。取C(0)=I\boldsymbol{C}^{(0)}=\mathbf{I}且学习率0<cμ10<c_{\mu} \leq 1 ,那么C(g+1)\boldsymbol{C}^{(g+1)}取值为:

\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}}

其中

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

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

1/cμ1/c_{\mu}是backward time horizon,约占总体权重的63%。由于式(14)可以扩展为加权和:

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

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

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

3.3.3 秩1更新

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

3.3.3.1 不同的视角

考虑一种特殊的方法来产生均值为零的n维正态分布,令向量y1,,yg0Rn,g0n,\boldsymbol{y}_{1}, \ldots, \boldsymbol{y}_{g_{0}} \in \mathbb{R}^{n}, g_{0} \geq n, span Rn\mathbb{R}^{n},且N(0,1)\mathcal{N}(0,1)表示服从独立(0,1)正太分布的随机数,那么 N(0,1)y1++N(0,1)yg0N(0,i=1g0yiyiT)\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)

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

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

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

3.3.3.2 累计:利用进化路径

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

我们将策略在许多代上采取的连续步序列称之为一个进化路径。进化路径可以用一系列连续的步骤总和来表示,这种总和称为累积。为了构建一个进化路径,不考虑步长σ\sigma。例如,分布均值为m\boldsymbol m的三步进化路径为:

\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)}}}

实际上,为了构造进化路径,使用了指数平滑,且pc(0)=0\boldsymbol{p}_{\mathrm{c}}^{(0)}=\boldsymbol{0}

其中

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

因子cc(2cc)μeff\sqrt{c_{\mathrm{c}}\left(2-c_{\mathrm{c}}\right) \mu_{\mathrm{eff}}}pc\boldsymbol{p}_{\mathrm{c}}的归一化常数,对于cc=1c_{\mathrm{c}}=1μeff=1\mu_{\mathrm{eff}}=1,该因子变为1,且pc(g+1)=(x1:λ(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)\boldsymbol{p}_{\mathrm{c}}^{(g+1)}的协方差矩阵C(g)C^{(g)}秩1更新写作: C(g+1)=(1c1)C(g)+c1pc(g+1)pc(g+1)T\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}}} (26)中一种经验有效的学习率设置为c12/n2c_{1} \approx 2 / n^{2},如果c1=1c_{1} =1μ=1\mu =1,那么等式(26)、(20)和(14)就是完全相同的。

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

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

最终的协方差矩阵CMA更新就是组合(14)和(26):

\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}}

其中

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

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

3.4 步长控制

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

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

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

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

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

实际上,为了构建进化路径pσ\boldsymbol{p}_{\sigma},采用了(22)中相同的技术。但和(22)不同的是,这里构建的是共轭进化路径,因为(22)中的进化路径pc\boldsymbol{p}_{c}的期望长度取决于其方向。初始化pσ(0)=0\boldsymbol{p}_{\sigma}^{(0)}=\mathbf{0},共轭进化路径写为: pσ(g+1)=(1cσ)pσ(g)+cσ(2cσ)μeffC(g)12m(g+1)m(g)σ(g)\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)}}

其中

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

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

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

为了更新σ(g)\sigma^{(g)},比较了pσ(g+1)\left\|\boldsymbol{p}_{\sigma}^{(g+1)}\right\|与其期望长度EN(0,I)\mathrm{E} \| \mathcal{N}(\mathbf{0}, \mathbf{I}),即: lnσ(g+1)=lnσ(g)+cσdσEN(0,I)(pσ(g+1)EN(0,I))\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)

其中

  • dσ1d_{\sigma} \approx 1为阻尼参数,缩放lnσ(g)\ln \sigma^{(g)}的改变幅度;
  • EN(0,I)=2Γ(n+12)/Γ(n2)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)表示服从N(0,I)\mathcal{N}(\mathbf{0}, \mathbf{I})分布的随机向量的欧几里得范数的期望。

由于σ(g)>0\sigma^{(g)}>0(29)等价于 σ(g+1)=σ(g)exp(cσdσ(pσ(g+1)EN(0,I)1))\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)

4 算法总结

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

在这里插入图片描述

各符号说明如下:

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