Evolution of Image Classifiers,进化算法在神经网络结构搜索的首次尝试 | ICML 2017
论文提出使用进化算法来进行神经网络结构搜索,整体搜索逻辑十分简单,结合权重继承,搜索速度很快,从实验结果来看,搜索的网络准确率挺不错的。由于论文是个比较早期的想法,所以可以有很大的改进空间,后面的很大算法也是基于这种想法进行更好的补充
来源:晓飞的算法工程笔记 公众号
论文: Large-Scale Evolution of Image Classifiers

Introduction
论文对当前的进化算法进行少量地改造,结合前所未有的算力进行神经网络结构搜索,在CIFAR-10上达到了很不错的准确率。论文十分注重搜索算法的简单性,从性能很差的无卷积模型开始,进化算法需要在一个几乎不受约束的搜索空间中进化成复杂的卷积网络
Methods

Evolutionary Algorithm
基于锦标赛选择(tournament selection)进行进化算法,定义如下概念:
- 种群(population),模型集合
- 个体(individual),训练完的单个模型
- 适应值(fitness),模型在测试集上的准确率
- 工作者(worker),每次从种群中选取两个个体进行适应值计算
- 消灭(killed),将worker挑选的个体中,适应值低的去掉
- 繁殖(reproduction),将worker挑选的个体中,适应值高的作为父代(parent),拷贝并进行变异(mutation)得到子代(child),将子代放回种群中(alive)
为了加速计算,使用massively-parallel, lock-free的并行计算,许多worker在不同电脑上进行独立的异步操作,仅使用共享文件系统来保证种群内容一致,每个个体为一个文件夹。种群数量为1000,worker一般为种群数量的$\frac{1}{4}$
Encoding and Mutations
网络结构表示为图(DNA),节点表示3维tensor或激活方法,tensor的3维分别表示图片的空间坐标以及channel数,激活方法作用与节点上,可以为BN+RELU或无激活,边表示identity connections或卷积(包含可变异参数)。当节点连接多条边时,将其中一条非identity connection的边作为主边,对其它边进行像素的最近邻差值以及维度的裁剪和填充,最后进行element-wise sum。在每次繁衍过程中,随机选取以下一种变异方式:
- 调整学习率
- 不变
- 重置权重,子代重新训练
- 随机位置插入卷积层
- 删除卷积层
- 修改stride,2的倍数
- 修改channel数,修改范围为原值的一半至两倍
- 卷积核大小,奇数
- 添加skip connection
- 删除skip connection
Initial Conditions
种群的初始化为仅包含global average pool的简单个体,学习率为0.1
Training and Validation
在CIFAR-10上进行4万5张图的训练和5千张图的测试,共训练25600轮,batch size为50
Computation cost
每个进行训练的模型,记录其单batch训练的计算量$F_t$FLOPs和验证的计算量$F_v$FLOPs,乘以batch数得到最终的计算量为$F_tN_t+F_vN_v$,
Weight Inheritance
由于模型完整的训练需要更多的迭代次数,这十分耗费时间,为了解决这一问题,允许子代默认继承父代的权重,如果层有相同的shape,则继承,但如果是重置权重突变,则全部不继承
Reporting Methodology
为了防止过拟合,训练集和测试集不能有交集,准确率表现最好的模型称为“the best model”
Experiments and Results




从实验来看,论文提出的搜索方法比目前的同体积的网络性能要高,但比SOTA略差一点,整体搜索时间很快。对于两个超参数,种群大小和迭代次数,则是越大越好,太小容易陷入局部最优
CONCLUSION
论文提出使用进化算法来进行神经网络结构搜索,整体搜索逻辑十分简单,结合权重继承,搜索速度很快,从实验结果来看,搜索的网络准确率挺不错的。由于论文是个比较早期的想法,所以可以有很大的改进空间,后面的很大算法也是基于这种想法进行更好的补充,所以这篇论文也是值得一读的
如果本文对你有帮助,麻烦点个赞或在看呗~
更多内容请关注 微信公众号【晓飞的算法工程笔记】

Evolution of Image Classifiers,进化算法在神经网络结构搜索的首次尝试 | ICML 2017的更多相关文章
- CARS: 华为提出基于进化算法和权值共享的神经网络结构搜索,CIFAR-10上仅需单卡半天 | CVPR 2020
为了优化进化算法在神经网络结构搜索时候选网络训练过长的问题,参考ENAS和NSGA-III,论文提出连续进化结构搜索方法(continuous evolution architecture searc ...
- EAS:基于网络转换的神经网络结构搜索 | AAAI 2018
论文提出经济实惠且高效的神经网络结构搜索算法EAS,使用RL agent作为meta-controller,学习通过网络变换进行结构空间探索.从指定的网络开始,通过function-preservin ...
- NASH:基于丰富网络态射和爬山算法的神经网络架构搜索 | ICLR 2018
论文提出NASH方法来进行神经网络结构搜索,核心思想与之前的EAS方法类似,使用网络态射来生成一系列效果一致且继承权重的复杂子网,本文的网络态射更丰富,而且仅需要简单的爬山算法辅助就可以完成搜索,耗时 ...
- (转) NAS(神经结构搜索)综述
NAS(神经结构搜索)综述 文章转载自:http://www.tensorinfinity.com/paper_136.html 本文是对神经结构搜索(NAS)的简单综述,在写作的过程中参考了文献[1 ...
- 差分进化算法 DE-Differential Evolution
差分进化算法 (Differential Evolution) Differential Evolution(DE)是由Storn等人于1995年提出的,和其它演化算法一样,DE是一种模拟生物进化 ...
- 标准差分进化算法matlab程序实现(转载)
标准差分进化算法matlab程序实现 自适应差分演化算法方面的Matlab和C++代码及论文 差分进化算法 DE-Differential Evolution matlab练习程序(差异演化DE) [ ...
- [Evolutionary Algorithm] 进化算法简介
进化算法,也被成为是演化算法(evolutionary algorithms,简称EAs),它不是一个具体的算法,而是一个“算法簇”.进化算法的产生的灵感借鉴了大自然中生物的进化操作,它一般包括基因编 ...
- geatpy - 遗传和进化算法相关算子的库函数(python)
Geatpy The Genetic and Evolutionary Algorithm Toolbox for Python Introduction Website (including doc ...
- Python遗传和进化算法框架(一)Geatpy快速入门
https://blog.csdn.net/qq_33353186/article/details/82014986 Geatpy是一个高性能的Python遗传算法库以及开放式进化算法框架,由华南理工 ...
随机推荐
- C 和 C++语言中的内存拷贝函数memcpy()
memcpy指的是C和C++使用的内存拷贝函数 函数原型为void *memcpy(void *destin, void *source, unsigned n): 函数的功能是从源内存地址的起始位置 ...
- Java多线程详解(转载)
林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 本文主要讲了java中多线程的使用方法.线程同步.线程数据传递.线程状态及相应的一些线程函数用 ...
- Mybatis总结一之SQL标签方法
---恢复内容开始--- 定义:mapper.xml映射文件中定义了操作数据库的sql,并且提供了各种标签方法实现动态拼接sql.每个sql是一个statement,映射文件是mybatis的核心. ...
- 五分钟了解Semaphore
一.前言 多个线程之间的同步,我们会用到Semaphore,翻译成中文就是信号量.使用Semaphore可以限制多个线程对同一资源的访问.我们先看下C#中对Semaphore的定义,如下图: 翻译成中 ...
- mysql主从复制(主从同步)
mysql主从同步 1.mysql主从同步(复制)概念 1. 将Mysql某一台主机数据复制到其它主机(slaves)上,并重新执行一遍来实现的. 2. 复制过程中一个服务器充当主服务器,而一个或多个 ...
- JAVA和C#中数据库连接池原理与应用
JAVA和C#中数据库连接池原理 在现在的互联网发展中,高并发成为了主流,而最关键的部分就是对数据库操作和访问,在现在的互联网发展中,ORM框架曾出不穷, 比如:.Net-Core的EFCore.Sq ...
- cmdb客户端代码完善2
目录: 1.面试提问 2.完善采集端代码 3.唯一标识的问题 4.API的验证 1.面试会问到的问题: # 1. 为啥要做CMDB?# - 实现运维自动化, 而CMDB是实现运维自动化的基石# - 之 ...
- 基础的linux命令(一)
我练习使用的 Linux 系统是 CentOS 7 它是通过把 RHEL 系统重新编译并发布给用户免费使用的 Linux 系统. 首先你需要一台Linux虚拟机,如果没有,也没关系,点这里 一.命令格 ...
- Visual Studio2019+OpenCV3.4.9环境搭建
让人头疼的vs2019+opencv环境配置 准备: visual studio2019: opencv 3.4.9: 耐心: 说明:vs2019属性管理器没有Microsoft.Cpp.x64.us ...
- RDD的Cache、Persist、Checkpoint的区别和StorageLevel存储级别划分
为了增强容错性和高可用,避免上游RDD被重复计算的大量时间开销,Spark RDD设计了包含多种存储级别的缓存和持久化机制,主要有三个概念:Cache.Persist.Checkout. 1.存储级别 ...