CMAES

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
  • 协方差矩阵的进化路径
  • 标准差的进化路径
  • 衰减因子,种群数量
  • 初始化的均值和步长,控制着分布的整体尺度,是从协方差矩阵中分离出来的。
  • ,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

你可能感兴趣的:(CMAES)