进化策略算法(CMA-ES)

进化策略算法


本篇主要想对CMA-ES算法进行一个简单整理,CMA-ES算法学习的过程中,避免不了传统简单的ES算法的学习,都一起整理在这里便于更好的理解进化策略。

引言

ES(进化学习)是一种最优化算法,如神经网络梯度下降算法一样也是最优化算法的一种,但是跟梯度下降算法不同的是,ES是通过干预的方式影响结果,逐步选取最优点迭代,是一种不用考虑中间复杂函数关系的一种黑盒算法,不需要建立复杂的函数关系(如,dnn)只需要定义reward就可以直接对终极目标进行参数优化;对于中等规模的参数寻优,ES表现出很好的效果。对于一个优化问题,如果不能够直接对x和y定义他们之间的联系,或者说x和y之间联系很多且不好确定,可以直接选用ES算法。

ES主要做的事情伪代码表示如下:

Purpose: maximize(f(x))
Given: f(x)
1、init x               
2、while true:          
3、    generated r
4、    calc f(x+r)
5、    if f(x+r) > f(x):
6、        x = x+r
7、    if f(x) is ok:
8、        break
9、return x
--------------------------------------------------------------------
意图: 最大化f(x)   [或者理解最大化收益都可以]
给定: f(x)   [不同取值x对应收益f(x)(reward),用于指导进化方向]
1、初始化 x   [一般给定初始解,基于此解进化寻优,或random也可]
2、while true: 
3、    生成 r   [r为随机扰动,一般由高斯分布生成]   
4、    计算 f(x+r)   [计算在r扰动下新解(x+r)的reward f(x+r)]
5、    if f(x+r) > f(x):   [判断如果此扰动(x+r)产生结果由于此前x结果,进化]
6、        x = x+r   [进化替换原有解]
7、    if f(x) is ok:   [满足条件跳出]
8、        break
9、return x   [得到最优解x,最大收益f(x)]

二元ES:(1+1)-ES

就从ES算法中最简单的(1+1)-ES算法说起,顾名思义,是一个父代通过高斯变异产生一个子代寻优的算法,以下简单描述下:

  1. 选择一个初始解x;
  2. 通过初始解x和变异强度 δ \delta δ,产生新解 y = x + N ( 0 , δ ) y=x+N(0,\delta) y=x+N(0,δ)
  3. 比较f(x)和f(y),如果变异成功 ( f ( y ) > f ( x ) ) (f(y) > f(x)) (f(y)>f(x)), 则y替换x;
  4. 重复执行2、3步,直到满足条件跳出。

二元ES的变异强度是由一个为 δ \delta δ的正太分布 N ( 0 , δ ) N(0,\delta) N(0,δ)产生所决定的。我在这里理解 δ \delta δ为变异强度,通过控制分布、选取扰动影响进化强度;通过对比扰动带来的reward选择成功变异的扰动,控制进化方向。所以有理由认为能否找到最优解很大程度上取决于 δ \delta δ。接下来,如果能够根据此 δ \delta δ影响下变异成功的概率,去调控 δ \delta δ,想必也是一种改进,基于此在这里补充下"1/5 success rule",即根据历史成功变异能力不断的调控 δ \delta δ

稍微官方一点的公式如下:
δ g + 1 = { δ g ( 1 / c d )     i f ( p s > 1 / 5 ) δ g c d     i f ( p s ) < 1 / 5 δ g     e l s e \delta^{g+1}= \begin{cases} \delta^{g}(1/c_d) \ \ \ if(ps>1/5)\\ \delta^g{c_d} \ \ \ if(ps)<1/5\\ \delta^{g} \ \ \ else \end{cases} δg+1=δg(1/cd)   if(ps>1/5)δgcd   if(ps)<1/5δg   else

c d c_d cd为固定值0.817,以上公式很好理解,在此 δ \delta δ的变异强度下如果成功概率大于1/5说明在此空间内有一个更有的解,反之需要以更大的变异强度去搜寻最优解,这种方法是由于简单随机(蒙特卡洛方法)选择扰动的方法的。

多元ES(u+ λ \lambda λ)-ES

另外除了对变异强度 δ \delta δ的调整,多元ES引入种群的方法,即使用多个父代和子代,这里用 u u u表示父代、 λ \lambda λ表示子代。

  1. 初始化 u u u个初始解 x 1 , x 2 . . x i . . x u x_1,x_2..x_i..x_u x1,x2..xi..xu
  2. 通过初始解 x 1 , x 2 . . x i . . x u x_1,x_2..x_i..x_u x1,x2..xi..xu和变异强度 δ \delta δ创建 λ \lambda λ个变异解 y 1 , y 2 . . y j . . y λ y_1,y_2..y_j..y_{\lambda} y1,y2..yj..yλ,执行 λ \lambda λ次,每次随机选择一个父代 x i x_i xi,产生新解 y j = x i + N ( 0 , δ ) y_j=x_i+N(0,\delta) yj=xi+N(0,δ)
  3. 在子代和父代的并集P中选择最优的 u u u个解(为了保持父代种群数量不变); P = ( U i u x i ) U ( U j λ y j ) P=(U_i^u\\{x_i\\})U(U_j^{\lambda}\\{y_j\\}) P=(Uiuxi)U(Ujλyj)
  4. 重复执行2、3步,直到满足条件跳出。

这里一般 λ / u = 5 \lambda/u=5 λ/u=5,从父代和子代中选取Top,这是一种精英算法,在某些优化场景中,保留精英是十分必要的。但是这种做法易导致算法收敛于局部最优,减少继续对未知空间的探索。多元ES(u, λ \lambda λ)-ES在以上第3步中改为选择子代 λ \lambda λ中最优的u个解一定程度上缓解了这个问题,这也是这两个算法的不同。

重组:已上示例以单变量来阐述,若是对多个变量寻优,可以理解为对多维空间的一个点寻优,在不同的采样点之间的不同维度进行替换之类的操作可简单理解为重组。

CMA-ES

CMA-ES(协方差矩阵自适应进化策略算法)相比于已上集中简单的方法,有些许改进,从名字就能看出,能够进行自我调整。首先对于多维向量,将协方差信息放入矩阵中,基于此矩阵的多维高斯正太分布生成随机点,另外维护历史步长对多维高斯分布参数进行平滑调整。

一句话概括ES的流程: 使用产生topN reward的扰动 y i g , i ∈ ( 1... i . . n ) y^g_i, i\in(1...i..n) yig,i(1...i..n),去调整 δ , p δ , C , p c \delta,p_{\delta},C,p_c δ,pδ,C,pc等参数,这些参数影响下一次扰动的生成,生成更为接近最优解的 y i g + 1 y^{g+1}_i yig+1。(其中 p δ p_{\delta} pδ维护了 δ \delta δ的历史变化,为了给 δ \delta δ做平滑而存在; p c p_c pc维护了 C C C的历史变化,为了给 C C C做平滑而存在;这种方法使用参数历史步长的指数平均来不断更新参数,能够减少震荡,使分布生成的扰动逐步接近最优解)

具体算法流程、更新步骤如下:

CMA-ES

  1. learning rete: α u , α δ , α c p , α c 1 , α c λ \alpha_u,\alpha_{\delta},\alpha_{cp},\alpha_{c1},\alpha_{c\lambda} αu,αδ,αcp,αc1,αcλ(分别用于更新 α \alpha α下标所带的参数,可直接设定)
  2. damping factor: d δ d_{\delta} dδ(阻尼参数,控制缩放 l n δ g ln\delta^g lnδg的改变幅度)
  3. generation counter: t=0(进化次数计数,第t代进化)
  4. input,initial mean vectors and step size: u ( 0 ) ∈ R n , δ ∈ E + u^{(0)}\in R^n,\delta \in E_+ u(0)Rn,δE+ u ( 0 ) u^{(0)} u(0)为n维向量,每一维为对应维度均值; δ \delta δ为标量,可理解为是从协方差矩阵中分离出来的,控制着分布的整体尺度,可以比完整的协方差更快地改变全局步长)
  5. initlalize covariance matrix and evolution path: C ( 0 ) = I , p δ ( 0 ) , p c ( 0 ) = 0 ; C ( 0 ) ∈ R n ∗ n , p δ ( 0 ) ∈ R n , p c ( 0 ) ∈ R n C^{(0)}=I,p_{\delta}^{(0)},p_{c}^{(0)}=0;C^{(0)} \in R^{n * n},p_{\delta}^{(0)}\in R^{n},p_{c}^{(0)}\in R^{n} C(0)=I,pδ(0),pc(0)=0;C(0)Rnn,pδ(0)Rn,pc(0)Rn(初始化 C C C为单位矩阵,进化路径 p p p都为0向量)
  6. repeat: a) x i ( t + 1 ) = u ( t ) + δ ( t ) y i , w h e r e   y i ∼   N ( 0 , C ( t ) ) , i = 1... Λ x_{i}^{(t+1)}=u^(t)+\delta^{(t)} y_i, where\ y_i \sim\ N(0,C^{(t)}),i=1...\Lambda xi(t+1)=u(t)+δ(t)yi,where yi N(0,C(t)),i=1...Λ(按照协方差矩阵 C C C构成的高斯混合分布,随机采样 y i y_i yi,乘整体步长 δ ( t ) \delta^{(t)} δ(t),加和均值 u ( t ) u^{(t)} u(t)得到t+1代采样点 x i ( t + 1 ) x_{i}^{(t+1)} xi(t+1),注意这里都为向量,多维数据。[这里理解下t+1代,可理解当前代,ES最重要的就是参数的生成,主要由 C , δ , p C,\delta,p C,δ,p等确定,当前代利用上一代参数生成当前代采样点,并且为下一次进化计算参数])
  7. repeat: b) Select top λ \lambda λ with the base performance x i ( t + 1 ) , i = 1... λ x_{i}^{(t+1)},i=1...\lambda xi(t+1),i=1...λ,按照reward排序选取top λ \lambda λ
  8. repeat: c) update u ( t + 1 ) ← u ( t ) + α u 1 λ ∑ i = 0 λ ( x i t + 1 − u ( t ) ) u^{(t+1)}\leftarrow u^{(t)}+\alpha_u{{1}\over{\lambda}}\sum_{i=0}^{\lambda}(x_{i}^{t+1}-u^{(t)}) u(t+1)u(t)+αuλ1i=0λ(xit+1u(t)),(这里为考虑嵌套上一代的 u ( t + 1 ) u^{(t+1)} u(t+1)代均值更新,仔细思考下,是融入了历史均值,当学习率 α u \alpha_u αu为1时,更新计算为本代均值)
  9. repeat: d) update p δ ( t + 1 ) ← ( 1 − α δ ) p δ ( t ) + α δ ( 2 − α δ ) λ C ( t ) − 1 2 u ( t + 1 ) − u ( t ) δ ( t ) p_{\delta}^{(t+1)}\leftarrow (1-\alpha_{\delta})p_{\delta}^{(t)}+\sqrt{\alpha_{\delta}(2-\alpha_{\delta})\lambda}C^{(t)-{{1} \over {2}}} {{u^{(t+1)}-u^{(t)}} \over \delta^{(t)}} pδ(t+1)(1αδ)pδ(t)+αδ(2αδ)λ C(t)21δ(t)u(t+1)u(t)
  10. repeat: e) update δ ( t + 1 ) ← δ ( t ) e x p ( α δ d δ ( ∥ p δ ( t + 1 ) ∥ E ∥ N ( 0 , I ) ∥ − 1 ) ) \delta^{(t+1)}\leftarrow \delta^{(t)}exp({{\alpha_{\delta}}\over{d_{\delta}}}({{\|p_{\delta}^{(t+1)}\|}\over{E\|N(0,I)\|}}-1)) δ(t+1)δ(t)exp(dδαδ(EN(0,I)pδ(t+1)1))
  11. repeat: f) update p c ( t + 1 ) ← ( 1 − α c p ) p c ( t ) + α c p ( 2 − α c p ) λ u ( t + 1 ) − u ( t ) δ ( t ) p_c^{(t+1)}\leftarrow (1-\alpha_{cp})p_{c}^{(t)}+\sqrt{\alpha_{cp}(2-\alpha_{cp})\lambda} {{u^{(t+1)}-u^{(t)}} \over \delta^{(t)}} pc(t+1)(1αcp)pc(t)+αcp(2αcp)λ δ(t)u(t+1)u(t)
  12. repeat: g) update C ( t + 1 ) ← ( 1 − α c λ − α c 1 ) C ( t ) + α c 1 p c ( t + 1 ) p c ( t + 1 ) T + α c λ 1 λ ∑ i = 1 λ y i ( t + 1 ) y i ( t + 1 ) T C^{(t+1)}\leftarrow (1-\alpha_{c\lambda}-\alpha_{c1})C^{(t)}+\alpha_{c1}p_c^{(t+1)}p_c^{(t+1)^T}+\alpha_{c\lambda}{{1}\over{\lambda}}\sum_{i=1}^{\lambda}y_i^{(t+1)}y_i^{(t+1)^T} C(t+1)(1αcλαc1)C(t)+αc1pc(t+1)pc(t+1)T+αcλλ1i=1λyi(t+1)yi(t+1)T
  13. repeat: h) update t ← t + 1 t\leftarrow t+1 tt+1
  14. until hit stop criteria:(达到跳出条件,停止重复已上循环)

注解: p δ t + 1 , p c t + 1 p_{\delta}^{t+1},p_c^{t+1} pδt+1,pct+1两个的更新公式十分相似, p δ t + 1 p_{\delta}^{t+1} pδt+1这个是多了一个 C − 1 / 2 C^{-1/2} C1/2的线性变化。

文章转自笔记:CMA-ES

  • 6
    点赞
  • 69
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值