因为毕设原因需要学习CMA-ES算法,放在自己的博客留作学习,内容转载自:https://zhuanlan.zhihu.com/p/31193293
本文仅作个人学习用,若有侵权请联系删除
协方差自适应调整的进化策略(Covariance Matrix Adaptation Evolution Strategy, CMA-ES)是最有名,应用最多,性能最好的ES之一,在中等规模(变量个数大约在 3-300范围内)的复杂优化问题上具有很好的效果。是Google Vizier: A Service for Black-Box Optimization 包含的四种用于调hyper-parameter 的方法之一。
按照惯例,先列举几个应用文章:
Path Integral Policy Improvement with Covariance Matrix Adaptation, ICML, 2012.
Optimizing Walking Controllers for Uncertain Inputs and Environments, ACM Transactions on Graphics 29. 4 (2010)
Flexible Muscle-Based Locomotion for Bipedal Creatures , ACM Transactions on Graphics 32.6 (2013)
在强化学习和不确定环境下的行走控制取得了极好的效果。视频2013年 Flexible Muscle-Based Locomotion for Bipedal Creatures
CMA-ES的核心想法是通过对正态分布 中协方差矩阵 的调整来处理变量之间的依赖关系和scaling。算法基本可以分成以下三步
ES算法设计的核心就是如何对这些参数进行调整,尤其是步长参数和协方差矩阵的调整,以达到尽可能好的搜索效果。对这些参数的调整在ES算法的收敛速率方面有非常重要的影响。CMA-ES调整参数的基本思路是,调整参数使得产生好解的概率逐渐增大(沿好的搜索方向进行搜索的概率增大)。
CMA-ES 的搜索过程
1. 1 采样产生新解
在CMA-ES中,每一次迭代从 中产生 个解(一般 取值为log(n)的量级)
这里的每一个 是一个搜索方向。一般的, 可以通过协方差矩阵C的特征分解 或者Cholesky 分解由标准正态分布得到,即
1. 2 计算目标函数值
对新产生的解计算对应的目标函数值 ,并对这些目标函数值排序
其中的下标表示在这些样本中排第i位。对于截断选择来说,取前 个解用于更新分布参数。还存在其他的选择方式,这里为方便使用截断选择。值的注意的是,这里的顺序只依赖于目标函数值的比较,而不依赖于目标函数值本身,即comparison based,或者说 objective value-free。
1.3 分布参数更新
使用所选择的解分别对分布参数 分别进行独立的更新。大体来说,对 的更新使用的是最大似然估计 (ML-update)
1.3.1 均值
分布的均值即为所选择的 个解的加权的最大似然估计
此式表明,均值沿着平均搜索方向移动一步.
采样,选择和更新
1.3.2 进化路径/搜索路径(evolution path)
CMA-ES中,对协方差矩阵C 的更新包含rank-1 和rank- 两项,其中的rank-1 项使用的是历史搜索信息——进化路径,其构造方式为
它描述了分布均值的移动,并且将每次迭代中移动方向 做加权平均,使得这些方向中相反的方向分量相互抵消,相同的分量则进行叠加。这类似于神经网络优化中常用的Momentum。在神经网络中momentum起什么做用?因此,进化路径代表了最好的搜索方向之一。
这里面的系数因子是按照如下方式设计的:
1.3.3 协方差矩阵
协方差矩阵的更新的原理是
实际调整中是对此做一步迭代(一步迭代本身没有实现上式的最大化)。在此基础上,协方差的更新方式为
或者更加简洁的写成(由于前面采样中 和 的关系)
其中:
1.3.4 步长更新
CMA-ES默认使用累积式步长调整(Cumulative step size adaptation, CSA) 。CSA是当前最成功、用的最多的步长调整方式。CSA的原理可以从方面来理解:相继搜索的方向应该是共轭的。
进化路径
与前面的进化路径相似,构造另一个进化路径(有些文献里面称为共轭路径conjugate evolution path)
其中
注:在如果每次迭代步长几乎不变,大致有 , 那么会有如下近似
即相继的搜索方向关于协方差矩阵的逆 是共轭的,而在二次函数上,这个 收敛于Hessian矩阵(相差一个标量因子)。从这个角度来说, 被称为共轭进化路径。这个是很好的性质。
1.4 实验:A Case Study on Rosenbrock
在12-d 的Rosenbrock 函数上的一次典型运行,横轴为目标函数的评估次数(function evaluation),纵轴分别为目标函数值,各个自变量的值, 各轴向上的scaling和 . 可以看出,算法逐渐逼近最优点的过程(右上,最优点的位置在(1,...,1))就是算法逐渐学得各个轴向和轴向上的scaling的过程(左下和右下)。
注:有些作者指出,这里的 不应该称为步长,而应该称为 scale factor 或者mutation strength,原因是有时候即使 算法仍然能很好的收敛,只要 并且更快。这里为了方便我们就称为步长了。
自适应坐标下降=坐标下降+自适应编码
ES本身是进化计算领域相对来说理论比较完善的。早年间,随机优化(包含模拟退火这类算法)常常声称的优势是全局收敛性,即在 时算法以概率一收敛到全局最优。但是在ES领域则有不同的看法。
We believe that global convergence is rather meaningless in practice. The pure random search converge with probability one to the global optimum of functions belonging to a broad class, where the main assumption is that a neighborhood of the global optimum should be reachable by the search distribution with a positive probability. However, the convergence rate is sub-linear with degree 1/n, therefore, the running time is proportional to . Even for moderate dimension, e.g., n=10, this is prohibitively slow in practice.
He (M. Powell) believed that local optimality is all one can get in the nonconvex case.
因此,ES领域的理论研究主要关注算法的收敛速率方面。ES领域通常认为,全局收敛性实际上没什么意义,我们从来不可能真的让 ,而且这往往是通过牺牲局部搜索的效率换来的. 真正重要的是给定初始化之后,能够快速地收敛到局部最优。如果这个局部最优仍然太差不可接受,那么通过restart 重新搜索。
ES领域的理论分析(大部分情况下不包含协方差调整部分)主要包含以下三个方面(方法):
除此之外,随着对自然梯度和ES的关系认识的逐步加深,近年来有一些从自然梯度流(正态分布流形上的微分方程)的角度来分析算法在极限情形下的收敛性质。这方面主要的结论有,在二次函数上
即梯度流方程是线性收敛的,并且收敛速率 。这个速率远大于前面提到的以及实际观察到的 ,目前没有很好的解释. 这方面更多内容和资料可参考信息几何优化,随机优化, 与进化策略
注:ES的理论研究主要集中于步长调整方面,大部分情况下不涉及协方差矩阵的调整。这主要是由于协方差矩阵的变量参数太多,难以控制。另一方面,从变换的角度来说,协方差矩阵的调整(或者协方差矩阵的平方根矩阵)将一个不可分的椭圆等高面 (f-value sub-level set)映射成一个球函数的等高面,然后在这个球函数上使用步长调整方式。而在球函数上,自适应调整的步长是线性收敛的。所以从这个角度来说,研究球函数上步长调整方式的收敛速率具有重要性。
在前面的算法步骤中,每一次迭代产生新解都需要进行矩阵分解。矩阵分解的复杂度与变量个数的三次方成正比,这使得算法每次迭代需要耗费的计算非常多。实际算法中通过隔一些迭代次数才进行一次分解以降低计算复杂度(能这么做的原因在于C的学习率都很小,变动缓慢)。同时注意到,在采样中实际使用的并不是协方差矩阵本身,而是它的“平方根”,即满足 的矩阵A。因此,一种更高效的方案是不直接更新和分解协方差矩阵,而是直接迭代更新矩阵A,从而将复杂度降到二次方。这就是Cholesky CMA-ES。值的注意的是,这里并不一定要求A是上三角的。使用上三角矩阵的更新方式写起来更加复杂,不便于向量化编程,但在采样过程中的矩阵-向量乘法计算会少一半。
上面指出协方差矩阵的更新中,rank- 部分可以解释成自然梯度。那么更直接的,如果考虑以平方根A为参数的正态分布,使用自然梯度下降就得到自然进化策略(natural evolution strategies, NES). 这一思路下,一个更加有效、避免估计Fisher矩阵的方案是使用局部坐标系和指数映射的exponential NES。
为进一步降低算法的内部复杂度,近年来有一些工作使用特殊形式的协方差矩阵,避免使用稠密矩阵造成的计算量。后面我们会单独介绍这部分工作。
步长调整方式CSA具有极好的数学性质和性能,但是仍然有一些缺点。其一,CSA强烈依赖于标准正态分布,如果基础不是标准的正态分布,CSA可能就会不成立,算法性能会严重下降。其次,如果采样规模(即种群规模)很大,CSA的性能会变差。近年来,开始有一些将传统的1/5法则推广到population的情形的方法,并且性能很好。不过目前这些方法普遍还缺少理论分析。
注:1/5法则是早期基于对(1+1)-ES最大改进的理论分析提出的一种步长调整方式,直观来说就是要使目标函数的改进幅度(progress)最大,那么步长的设计应该使得产生一个由于当前解的概率大约是1/5左右。具体来说:In order to obtain nearly optimal (local) performance of the (1 + 1)-ES with isotropic mutation in real-valued search spaces, tune the mutation strength σ in such a way that the (estimated) success rate is about 1/5.
下面列举一些CMA-ES的程序:
Wiki 主页上有一个非常简短的Matlab 程序CMA-ES - Wikipedia,只有最基本的算法实现,可以用于了解算法。如果使用的话,应该尽可能使用上面的完整的Code,包含了多种变体,对约束、噪声的处理,以及restart 策略处理复杂优化问题。
部分参考文献
[1] The CMA Evolution Strategy: A Tutorial
[2] Adaptive Coordinate Descent
[3] The Theory of Evolution Strategies
[4] Theory of Evolution Strategies: a New Perspective
[5] Linear Convergence of Comparison-based Step-size Adaptive Randomized Search
[6] Convergence Analysis of Evolutionary Algorithms That Are Based on the Paradigm of Information Geometry
[7] Impacts of invariance in search: When CMA-ES and PSO face ill-conditioned and non-separable problems