CMAES文章:
- The CMA Evolution Strategy: A Tutorial
- Wiki:CMA-ES
- GitHub doc
- Python code
什么是CMA(Covariance Matrix Adaptation) 协方差
- 我们想要刻画世界的关系时,常常会用到距离
(1)定义空间中两点的距离:用欧氏距离,即坐标差的平方和
(2)对于两段二进制序列,或者基因序列:用汉明距离来表示两者的差异
(3)对于两个很复杂的量(需要用很多很多的参数来描述)之间的关系:先把这些参数拍平,构成向量空间中的一个点。两个向量点是否相关:可以用余弦夹角,计算非常简单,用内积 (x1,y1)・(x2,y2)=x1x2+y1y2,也叫协方差,再除以向量长度,就可以计算两个向量点夹角:cos =(a・b)/|a||b| - 点积的几何意义是一个向量在另一个向量上的投影,或者理解成两个向量的重合程度。当向量角为0时,重合值最大;当向量角为90时,重合值最小。
2个n维向量的距离
- 如果是2个n维向量点:分子是协方差,分母是两个向量的长度
- 这种计算方式的好处是
(1)如果两个向量平行:那么夹角的余弦(相关系数)等于1或者-1,同方向为1,反方向为-1
(2)如果两个向量垂直,夹角余弦为0,说明二者不相关。
协方差与相关系数
- 二者都是用来描述两个连续变量的线性相关关系。
- 协方差只表示线性相关的方向,取值正无穷到负无穷
假是一个二维随机变量(比如身高和体重),若 期望 存在,则称此数学期望为X与Y的协方差 Covariant,记作: 特别的有
① 当协方差 > 0是正相关(两者有同时增大的倾向),②小于0是负相关(两者有同时减少的倾向),③等于0是不相关
- 相关系数不仅表示线性相关的方向,还表示相关的程度,取值 [-1, 1]
对于二维随机变量,各自的方差为:,则相关系数:
如果只用协方差,我们无法通过 和的值来判断那个跟体重更相关,因为两者的单位(厘米·公斤 vs 岁·公斤)不同。但是用相关系数可以对比,相当于做了一次normalize
协方差矩阵
协方差矩阵在统计学和机器学习中随处可见,一般而言,可视作两部分组成
(1)方差构成了对角线上的元素:度量单个随机变量的离散程度
(2)协方差构成了非对角线上的元素:度量两个随机变量的相关性
根据方差的定义,给定d个随机变量 ,协方差矩阵为对称矩阵
- 作为一个对称矩阵,协方差矩阵C有非常良好的性质
(1)C始终是对角阵:对角矩阵(diagonal matrix)是一个主对角线之外的元素皆为0的矩阵,常写为diag(a1,a2,...,an)
(2)C始终是半正定矩阵:正定矩阵实际上就是说对于一个向量X,我们希望 X在经过有一个矩阵A的变化后得到的新的向量M和它本身的夹角小于90度。
而小于90度背后的含义是变换后的向量M是沿着原向量X的正方向进行缩放的(即 M投影回原向量时方向不变);而半正定的判定条件宽松一些,这个"半"字则包括等于90°的情况。
(3)所有的特征值都是非负实数:把矩阵看作是运动,特征值就是运动的速度
特征向量就是运动的方向,所以特征值、特征向量自然可以称为运动(即矩阵)的特征
(4)所有特征值都是正交的:正交矩阵(Orthogonal Matrix)是指其转置等于其逆的矩阵。
(5)C的特征向量可以组成Rn的一个标准正交基:一个内积空间的正交基(orthogonal basis)是元素两两正交的基
简单的高斯进化策略
- 在介绍CMAES之前,先介绍GP-ES,是最基础和经典的版本。
- 将建模为一个n维的各向同性的高斯分布,在高斯分布中指的是均值和标准差
- 流程如下:
(1)初始化随机参数 ,计数器 t=0
(2)从高斯分布采样种群大小为A的后代种群
(3)选择适应性最优的k个样本组成的子集,也就是「精英集」
(4)更新参数,也就是均值和标准差
(5)重复(2)到(4)
协方差自适应进化策略 CMA-ES
- 标准差 决定了探索的程度:当\sigma越大,我们就可以在更大的搜索空间中对后代种群进行采样,因为简单的高斯进化策略中,下一代的和上一代的 密切相关,不能迅速调整
- CMA-ES调整参数的基本思路是,调整参数使得产生好解的概率逐渐增大(沿好的搜索方向进行搜索的概率增大)。
- CMA-ES通过使用协方差矩阵C,跟踪分布上得到的样本两两之间的依赖关系,可以解决上述问题,新的分布参数变成(其中控制整体尺度,成为步长):
- 更新均值,其中 ,用比较小的学习率控制均值 的更新速度,如果设置为1,就跟简单高斯进化策略的一样
- 协方差矩阵的进化路径
- 标准差的进化路径
- 衰减因子,种群数量
- 初始化的均值和步长,控制着分布的整体尺度,是从协方差矩阵中分离出来的。
- ,CMA-ES通过将连续的移动步长序列相加 构建一个演化路径 (evoluation path) 通过比较该路径与随机选择(意味着每一步之间是不相关的)状态下期望会生成的路径长度,可以相应的调整
- 使用了「Polyak 平均 」算法(平均优化算法在参数空间访问轨迹中的几个点),以学习率更新演化路径。同时,我们平衡了权重,从而使在更新前和更新后都为服从 的共轭分布(更新前后的先验分布和后验分布类型相同)。
- 根据 调整步长
- 使用个精英样本估计协方差矩阵,考虑到精英种群越大,估计越可靠,但为了加速计算,又不希望种群样本太多,CMA-ES发明了一种更加可靠,但同时也更加复杂的方式去更新C,包括两种独立的演化路径
(1)秩 更新:使用精英种群的历史信息,每一代都重头开始估计
(2)秩 1 更新:根据历史估计移动步长 以及符号信息。使用了完整的历史信息,且能够保留符号信息。 - CMA-ES使用了两种方法的结合。
参考:
详解CMAES:https://lilianweng.github.io/posts/2019-09-05-evolution-strategies/
CMAES编程思路:https://blog.csdn.net/hba646333407/article/details/108836648
CMAES Tutorial:https://paperswithcode.com/paper/the-cma-evolution-strategy-a-tutorial