上一篇遗传算法中提到了进化策略。这一篇扩展一下,具体细节详见莫烦老师网站。
进化策略与遗传算法
进化策略 (Evolution Strategy)是另一种使用进化理论的优化模式,与遗传算法略有不同。
用一句话概括ES: 在程序里生宝宝, 杀死不乖的宝宝, 让乖宝宝继续生宝宝.
ES和GA的不同有以下几点:
- 选好父母进行繁殖 (GA); 先繁殖, 选好的孩子 (ES)
- 通常用二进制编码 DNA (GA); 通常 DNA 就是实数, 比如 1.221 (ES)
- 通过随机让 1 变成 0 这样变异 DNA (GA); 通过正态分布(Normal distribution)变异 DNA (ES)
具体实数编码的规则和举例见上一篇博文。
(1+1)-ES
(1+1)-ES 是 ES 进化策略的一种形式, 也是众多形式中比较方便有效的一种. 接下来我们来细说他们的类别. 如果要我用一句话来概括 (1+1)-ES: 一个爸爸和一个孩子的战争。即,
- 有一个爸爸;
- 根据爸爸变异出一个宝宝;
- 在爸爸和宝宝中选好的那个变成下一代爸爸.
在 kill_bad 中, 我们选择更为适合的, 不管是爸爸还是孩子, 只要是适合的就留下, 不适合的杀掉. 但是还有注意的一点是, 在这一步我们还要对 变异强度进行一点改变. 改变的方法遵循了 1/5 successful rule.
这个原则的意思是说: 还没到收敛的时候, 我们增大变异强度, 如果已经快到收敛了, 我们就减小变异强度. 那如何判断是否快到收敛没呢, 就是如果有1/5的变异比原始的 parent 好的话, 就是快收敛了。
(此处类似于梯度下降中的学习率)
自然进化策略
自然进化策略(Natural ES,NES), 应该就是算一种用适应度诱导的梯度下降法, 如果要我用一句话来概括 NES: 生宝宝, 用好宝宝的梯度辅助找到前进(下降)的方向。
NES 的方法其实和强化学习中 Policy Gradient 的方法非常接近. 简单来概括一下它们的不同: 在行为的策略上, PG 是扰动 Action, 不同的 action 带来不同的 reward, 通过 reward 大小对应上 action 来计算 gradient, 再反向传递 gradient. 但是 ES 是扰动 神经网络中的 Parameters, 不同的 parameters 带来不同的 reward, 通过 reward 大小对应上 parameters 来按比例更新原始的 parameters.
参考网址:
遗传算法- 进化算法Evolutionary Algorithm | 莫烦Python