参考文献
-
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 第一章:概述)
左图是经典的遗传算法流程图,可以看到它里面只出现了一次选择。实际上,它在重组和变异得到育种个体之后,无条件地代替了父代个体而形成新一代种群,这本质上也是一次选择,只是在选择中把父代所有个体都淘汰掉了。
这种做法也有一定的弊端:收敛速度较慢。因此有不少加入了“精英保留”的改进型遗传算法,比如把育种种群的绝大部分个体(小于全部)代替父代中等数量的非最优个体而得到新一代种群;另外还有把父代个体和育种个体合并,在统一的、相同的环境下进行择优选择一半个体得到新一代种群;差分进化里面的一种经典做法是按照个体的索引顺序,每个育种个体只与其相同位置上的父代个体进行优胜劣汰保留其中一个,从而得到新一代种群。
分类
进化算法包括遗传算法、遗传规划/编程、进化策略等。
1、遗传算法 Genetic Algorithm,GA
2、进化规划 Evolutionary Programming,EP (ps:不知与遗传规划有何区别?)
3、遗传规划 Genetic Programming,GP
4、进化策略 Evolution Strategy, ES
5、差分进化算法
6、多种群协同进化
- 合作协同进化(Cooperative Coevolution)是求解大规模优化算法一个有效的方法。将大规模问题分解为一组组较小的子问题。而合作协同进化的关键是分解策略。
合作协同进化算法概述
多目标协同进化算法概要
差分分组的合作协同进化的大规模优化算法概述 - 竞争协同进化
基于竞争协同进化的改进遗传算法
多种群协同进化的K_means聚类算法(粒子群+多种群)
基于粒子群优化和遗传算法的协同聚类算法
变种群规模合作型协同进化遗传算法及其再优化中的应用
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
资源
学习资源
莫烦python 神经进化
NEAT-Python NEAT算法的python库
遗传算法库
-
pymoo
该库直接实现了单目标、多目标基因算法(如NSGA-II, NSGA-III等)。 -
deap
基于DEAP库的Python进化算法从入门到入土–(一)进化算法的基本操作与实现
基于DEAP库的Python进化算法从入门到入土—(二)简单遗传算法实现
基于DEAP库的Python进化算法从入门到入土–(三)遗传算法求解TSP问题
基于DEAP库的Python进化算法从入门到入土 --(四)遗传算法的改进
【遗传编程/基因规划】python DEAP框架学习笔记
优化算法库DEAP的粒子群优化算法(PSO)示例代码分析 -
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