automl-演化算法

参考文献

  • Designing neural networks through neuroevolution | [Nature Machine Intelligence 2019] -----一篇综述

  • DetNAS: Neural Architecture Search on Object Detection | [2019/03]—目标检测

  • deep-lab:Hierarchical Neural Architecture Search for Semantic Image Segmentation,原文用darts的方法搜索的,原文代码地址
    但有人用进化算法重现了该论文,效果更好
    源码地址,源码地址2

  • The Evolved Transformer | [2019/01]—进化算法用于NLP的transformer


  • 2019 | Evolutionary Neural AutoML for Deep Learning. | Liang et al.(LEAF)(ps:一个并行架构)
    -网络解读:用于深度学习的演化神经AutoML
    -keras实现:https://github.com/sbcblab/Keras-CoDeepNEAT(并有一篇文章介绍该实现方法:Neuroevolution of Neural Network Architectures Using CoDeepNEAT and Keras)

  • 2019 | Evolving deep neural networks. | Miikkulainen et al. (CoDeepNEAT)

  • 2018 | Regularized evolution for image classifier architecture search. | Real et al. (又名 Aging evolution for image classifier architecture search)(Large-scale evolution of image classifiers的姊妹篇,手动设计大的架构,进化调整小的cell,达到更好的效果)
    2.1 NAS论文笔记:Regularized Evolution for Image Classifier Architecture Search
    github源码地址

  • 2017 | Large-scale evolution of image classifiers | Real et al. | ICML |
    网络解读:NAS论文笔记——Large-Scale Evolution of Image Classifiers

  • 2017 Genetic CNN
    源码地址

  • A Genetic Programming Approach to Designing Convolutional Neural Network Architectures
    源码地址

  • 2017 | Hierarchical representations for efficient architecture search. | Liu et al. | PDF

  • 2009 | A hypercube-based encoding for evolving large-scale neural networks. | Stanley et al. | Artificial Life | PDF

  • 2002 | Evolving neural networks through augmenting topologies. | Stanley and Miikkulainen | Evolutionary Computation (NEAT)
    学界 | NEAT学习:教机器自我编程
    基于NEAT算法的马里奥AI实现

快速搜索

  • Simple and efficient architecture search for convolutional neural networks(ICLR 2018)—提出一种简单但有效的功能保留变换方法(网络态射)。通过精英算法选择父代,突变时基于网络态射产生8个子代。
  • Deep learning architecture search by neuro-cell-based evolution with function-preserving mutations(spriner 2018)— 变异时网络态射,采用基于cell的搜索空间
    源码地址
  • EENA: Efficient Evolution of Neural Architecture(2019)—变异时网络态射、重组时继承共同祖先的基因
    源码地址,
  • Single Path One-Shot Neural Architecture Search with Uniform Sampling | [2019/04]
    官方源码,源码地址
  • EAT-NAS: Elastic Architecture Transfer for Accelerating Large-scale Neural Architecture Search | [2019/01]—在小数据集上搜索,迁移到大数据集
    源码地址(仅有评估部分)

多目标

  • Dpp-net: Device-aware progressive search for pareto-optimal neural architectures—多目标,进化算法,基于层次的搜索空间
  • Efficient Multi-objective Neural Architecture Search via Lamarckian Evolution | [ICLR 2019]
  • NSGA-Net: Neural Architecture Search using Multi-Objective Genetic Algorithm
    –又名:《a multi-objective genetic algorithm for neural architecture search》
    论文笔记:NSGA-Net: Neural Architecture Search using Multi-Objective Genetic Algorithm
    源码地址
  • Multi-objective reinforced evolution in mobile neural architecture search(2019)—强化于进化学习结合,多目标,NSGA-II算法

进化/演化算法简介

基本概念

选择

在进化算法中存在两个阶段的选择。

  • 抽样:第一次是参与进化操作的个体的选择,常被称为“抽样”。这个阶段的选择可以是基于个体适应度的、也可以是完全随机地选择交配个体。一旦个体被选中,那么它们就会参与交叉、变异等进化操作。未被选中的个体不会参与到进化操作中。

  • 重插入:第二次是常被称为“重插入”或“环境选择”的选择,它是指在个体经过交叉、变异等进化操作所形成的子代(或称“育种个体”)后用某种方法来保留到下一代从而形成新一代种群的过程。

  • 但很多时候这两次选择之中的某一次经常会在算法描述中被省略掉,这并不意味着只有一次选择,本质上依旧是存在两次选择(参考:geatpy 第一章:概述)
    automl-演化算法_第1张图片
    左图是经典的遗传算法流程图,可以看到它里面只出现了一次选择。实际上,它在重组和变异得到育种个体之后,无条件地代替了父代个体而形成新一代种群,这本质上也是一次选择,只是在选择中把父代所有个体都淘汰掉了。
    这种做法也有一定的弊端:收敛速度较慢。因此有不少加入了“精英保留”的改进型遗传算法,比如把育种种群的绝大部分个体(小于全部)代替父代中等数量的非最优个体而得到新一代种群;另外还有把父代个体和育种个体合并,在统一的、相同的环境下进行择优选择一半个体得到新一代种群;差分进化里面的一种经典做法是按照个体的索引顺序,每个育种个体只与其相同位置上的父代个体进行优胜劣汰保留其中一个,从而得到新一代种群。

经典的选择算法:
轮盘赌算法和锦标赛算法是常见两种选择策略。

  • . 轮盘赌算法是最简单选择方法。轮盘赌算法有放回地采样出原种群大小的新一代种群,个体i的采样概率与其适应度成正比。

  • 锦标赛算法也是常见的选择方法。锦标赛法从大小为n的种群随机选择k(k小于n)个个体,然后在k个个体中选择适应度最大的个体作为下一代种群的一个个体;反复多次,直到下一代种群有n个个体。

  • 精英保留策略可以认为是选择策略的一部分。精英保留策略是指每次迭代都保留已发现的最优解。这个策略是显而易见的,我们不可能舍弃已发现的最优解,而只使用最后一代种群的最优解。根据上一篇博客,典型遗传算法并不能保证收敛到全局最优解,但采用精英保留策略的典型遗传算法是保证收敛到全局最优解的。(精英保留策略可与轮盘赌、竞标赛相结合)

“我想问一下“精英”代表历史最优个体,还是代表每一代的最优个体。”
-----由于每一代都执行该策略,所以历史最优和每代最优一样一样滴。

分类

进化算法包括遗传算法、遗传规划/编程、进化策略等。
1、遗传算法 Genetic Algorithm,GA

2、进化规划 Evolutionary Programming,EP (ps:不知与遗传规划有何区别?)

3、遗传规划 Genetic Programming,GP

  • 参考博文1

4、进化策略 Evolution Strategy, ES

5、差分进化算法

6、协同进化

  • 合作协同进化(Cooperative Coevolution)是求解大规模优化算法一个有效的方法。将大规模问题分解为一组组较小的子问题。而合作协同进化的关键是分解策略。
    合作协同进化算法概述
    多目标协同进化算法概要
    差分分组的合作协同进化的大规模优化算法概述
  • 竞争协同进化
    基于竞争协同进化的改进遗传算法
    多种群协同进化的K_means聚类算法(粒子群+多种群)
    基于粒子群优化和遗传算法的协同聚类算法
    变种群规模合作型协同进化遗传算法及其再优化中的应用

优势种、建群种、关键种与冗余种
(1)一般而言,群落中常有一个或几个生物种群大量控制能流,其数量、大小以及在食物链中的地位强烈影响着其他物种的栖境,这样的物种称为群落的优势种(dominant species)。群落各层中的优势种可以不止一个种,即共优种。在我国热带森林里,乔木层的优势种往往是由多种植物组成的共优种。
简而言之,群落中起主导和控制作用的物种称为优势种。可用有关重要值评价方法来表征。常被用来划分群落的类型。
(2)群落主要层(如森林的乔木层)的优势种,称为建群种。建群种有个体数量上不一定占绝对优势,但决定着群落内容结构和特殊的环境条件。如在主要层中有两个以上的种共占优势,则把它们称为共建种。
(3)物种在群落中的地位不同,一些珍稀、特有、庞大的对其他物种具有不成比例影响的物种,它们在维护生物多样性和生态系统稳定方面起着重要的作用。如果它们消失或削弱,整个生态系统可能要发生根本性的变化,这样的特有种称为关键种(keystone species)。
(4)在一些群落中,有些物种是多余的,这些种的去除不会引起群落内其他物种的丢失,同时对整个系统的结构和功能不会造成太大的影响。
如果开发建设项目征占地区物种属于冗余种(redundant species),则项目建设占地对生态环境的影响一般是可以接受的。

7、免疫算法(免疫遗传算法)

8、粒子群算法.
粒子群优化算法(Particle Swarm Optimization)
本人的另一篇博客:automl-演化算法-粒子群算法

9、鱼群算法

虽然这些概念的内涵有一定的差别,它们有各自不同的侧重点,各自有不同的生物进化背景,各自强调了生物进化过程中的不同特性,但本质上都基于进化思想的,都能产生鲁棒性较强的计算机算法,适应面较广,因此又称它们为进化算法或进化计算。

遗传算法和遗传编程有什么不同?

https://cloud.tencent.com/developer/ask/117391
遗传编程和遗传算法非常相似。它们都被用来通过比较潜在候选人群体中的每个候选人在多代人中的适应度来演变问题的答案。

每一代人都可以通过随机改变(突变)或交换其他候选人的部分(交叉)来找到新候选人。最不“适合”的候选人被从人口中移除。

1、结构差异
它们之间的主要区别是算法/程序的表示。

  • 遗传算法被表示为动作和值的编码列表,通常是一个字符串。例如:
1+x*3-5*6  #这里将其看作一个字符串,而不是一个运算

必须为此编码编写解析器,即将字符串映射到实际的意义,例如将其转换为函数。由此产生的功能可能如下所示:

function(x) { return 1 * x * 3 - 5 * 6; }

解析器还需要知道如何处理无效状态,因为变异和交叉操作不关心算法的语义,会产生无效编码,例如可以产生下列字符串:1+/3-2*。需要决定处理这些无效状态的方法。

  • 遗传程序被表示为行动和值,通常是一个嵌套的数据结构的树结构。下面是一个例子,用一棵树来说明:
   -
   /     \
  *       *
 / \     / \
1   *   5   6
   / \
  x   3

解析器也必须为此编码编写,但遗传编程通常不会产生无效状态,因为变异和交叉操作在树的结构中起作用。

2、实际差异

  • 遗传算法
    本质上有一个固定的长度,这意味着所产生的功能有限的复杂性
    通常会产生无效状态,因此需要以非破坏性方式处理这些状态
    通常依赖于运算符优先级(例如,在我们的例子中,乘法发生在减法之前),这可以被看作是一种限制

  • 遗传程序
    本质上具有可变长度,这意味着它们更加灵活,但往往复杂度增加
    很少产生无效状态,通常可以丢弃这些状态
    使用显式结构来完全避免运算符的优先级

遗传算法 差分进化算法 粒子群优化算法区别

https://blog.csdn.net/try_again_later/article/details/79086117?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

遗传算法

各式各样的遗传算法

  • .多种群并行
    在大自然,物种的进化是以多种群的形式进行的。一般来说,一个物种只有一个种群了,意味着这个物种有灭亡的危险。受此启发,人们提出了多种群遗传算法。顾名思义,多种群遗传算法就是保持多个种群同时进化,具体流程如下图所示。多种群遗传算法和遗传算法执行多次的区别在于移民,种群之间会通过移民的方式交换基因。这种移民操作把自然界的杂交优势体现的淋淋尽致啊。

  • .自适应遗传算法
    遗传算法有两个参数很重要:交叉概率pc和变异概率pm。针对不同的优化问题,需要反复实验来确定pc和pm,好烦的。而且在遗传算法的不同阶段,我们需要不同的pc和pm。当种群中各个个体适应度趋于一致或者趋于局部最优时,使pc和pm增加;当群体适应度比较分散时,使pc和pm减少。甚至于不同个体也应该有不同的pc和pm。对于适应度高的个体,我们应该减少pc和pm以保护他进入下一代;反之对适应度低的个体,我们应该增加pc和pm让他探索新的天地。
    遗传算法需要在选择操作引起的收敛性和变异交叉操作引起的多样性之间取得平衡。Srinivas.M and Patnaik.L.M (1994)就是为了让遗传算法把这事做得更好,提出来自适应遗传算法的 《Srinivas M, Patnaik L M. Adaptive probabilities of crossover and mutation in genetic algorithms》。在论文中,pc和pm的计算公式如下:

  • 混合遗传算法
    遗传算法的全局搜索能力强,但局部搜索能力就soso了。这句话怎么理解呢?比如对于一条染色体,遗传算法并不会去看看这条染色体周围局部的染色体适应度怎么样,是否比这条染色体好。遗传算法会通过变异和交叉产生新的染色体,但新产生的染色体可能和旧染色差的很远。因此遗传算法的局部搜索能力差。
    梯度法、爬山法和贪心法等算法的局部搜索能力强,运算效率也高。若能够将问题相关的启发知识引入这些算法,这些算法的威力不可小觑。受此启发,人们提出了混合遗传算法,将遗传算法和这些算法结合起来。混合遗传算法的框架是遗传算法的,只是生成新一代种群之后,对每个个体使用局部搜索算法寻找个体周围的局部最优点。
    混合遗传算法是很常见的策略。比如遗传算法应用于排序问题,生成新一代种群之后,将个体中相邻两个元素交换次序,如果新的个体适应度更高则保留。这种贪心的变种往往能大幅度提高遗传算法的收敛速率。

协同进化

参考文章:
1、协同进化算法研究进展 王凌
2、基于竞争协同进化的改进遗传算法_李碧
3、双精英协同进化遗传算法_刘全
4、基于生态种群竞争模型的协同进化_曹先彬(种群动态变化)

协同进化:

  • 合作型:
    – (1)将搜索空间分解:连续超参数作为A种群,采用粒子群+鱼群算法;网络架构和离散参数作为B种群,采用遗传算法
    – (2)多种群下的分布式操作协同

多种群下的分布式操作协同. 不同的搜索操作作用于不同的子种群, 各种群单独进化并适时交互信息, 同时通过种间竞争决定各操作在后期的使用情况.
– Mallipeddi 等[68]提出多操作协同自适应进化规划算法, 两个子种群分别采用高斯变异与柯西变异.
– Tasgetiren等[69]提出多种群下的离散DE, 不同子种群采用不同的交叉算子和参数配置.
– Elsayed 等[70]提出了基于多操作协同的GA 与 DE 算法.
– Wang等[71]提出了双种群协同进化算法, 两个种群分别采用侧重全局探索与局部开发的两套操作.

  • 竞争型:(1)双精英方法, (2)评价者集合、 学习者集合和名人堂模型

MGACC:评价者集合、 学习者集合和名人堂模型

MGACC中存在 3个同时 进化的子群体, 即评价者集合、 学习者集合和名人 堂 (famehall).其中 , 评价者集合里, 可根据相 对适应度选取部分个体作为评价者 ;一个子群体是 学习者集合 , 进化过程中选择操作的依据是相对适 应度;名人堂里保留着每一代进化过程中出现的优 秀个体 (elite).名人堂的优秀个体同时也在进化 , 选择操作的依据是绝对适应度 ;在每一代, 名人堂 随机选取部分个体作为评价者 .
MGACC结构如图 :
automl-演化算法_第2张图片
个体 pop1和 pop2 轮流担任学习者和评价者的角 色, 轮流刺激对方生存能力的提高 , 轮流出现新颖 积木块 , 从而以一种 “军备竞赛 ” (armsrace)方 式[ 11]寻找最优解.MGACC算法步骤为:
①初始化种群 pop1 、 pop2 和 pop3 ;
②定义 pop1 为学习者 ,pop3 为名人堂;
③从 pop2 中选取评价者集合 E;
④ 计算 pop1 中个体的相对适应度 ;
⑤据相对适应度 对 pop1 实行选择操作;
⑥ 对 pop1 实行交叉和变异 操作;
⑦从 pop1 中选取最佳个体加入 pop3;
⑧据 绝对适应度对 pop3 实行选择操作 ;
⑨ 对 pop3 实行 交叉和变异操作 ;
⑩交换 pop1 和 pop2 中的个体;
11、如果没有达到中止条件, 返回 ③;
12、名人堂中的最佳个体作为算法的解 .

资源

学习资源

莫烦python 神经进化
NEAT-Python NEAT算法的python库

遗传算法库

  • pymoo
    该库直接实现了单目标、多目标基因算法(如NSGA-II, NSGA-III等)。

  • deap
    基于DEAP库的Python进化算法从入门到入土–(一)进化算法的基本操作与实现
    基于DEAP库的Python进化算法从入门到入土—(二)简单遗传算法实现
    基于DEAP库的Python进化算法从入门到入土–(三)遗传算法求解TSP问题
    基于DEAP库的Python进化算法从入门到入土 --(四)遗传算法的改进
    【遗传编程/基因规划】python DEAP框架学习笔记
    优化算法库DEAP的粒子群优化算法(PSO)示例代码分析

  • geatpy
    Python遗传算法工具箱的使用(一)求解带约束的单目标优化

  • scikit-opt
    集成了六种启发式算法(遗传算法、差分进化算法、粒子群算法、鱼群算法、免疫算法、模拟退火算法),并且都做了很好的封装。

- Pyvolution: 非常模块化且非常可扩展的进化算法框架,具有完整的文档, Apache License 2.0
- Pyevolve
- PyRobot: 开源的演化算法(GA + GP)模块
- PonyGEa 是GE的一个小型,单一源文件实现,具有交互式图形演示应用程序, GNU GPL v3
- inspyred: 生物启发式计算,包括进化计算,群体智能和神经网络, GNU GPL v3
- DRP: 定向Ruby编程,遗传算法和语法进化库, GNU GPL
- gplearn :遗传规划方面的一个通用包,支持自定义适应度函数
链接:https://www.zhihu.com/question/49098839/answer/406902825

你可能感兴趣的:(深度学习)