论文提出使用进化算法来进行神经网络结构搜索,整体搜索逻辑十分简单,结合权重继承,搜索速度很快,从实验结果来看,搜索的网络准确率挺不错的。由于论文是个比较早期的想法,所以可以有很大的改进空间,后面的很大算法也是基于这种想法进行更好的补充



来源:晓飞的算法工程笔记 公众号

论文: 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的更多相关文章

  1. CARS: 华为提出基于进化算法和权值共享的神经网络结构搜索,CIFAR-10上仅需单卡半天 | CVPR 2020

    为了优化进化算法在神经网络结构搜索时候选网络训练过长的问题,参考ENAS和NSGA-III,论文提出连续进化结构搜索方法(continuous evolution architecture searc ...

  2. EAS:基于网络转换的神经网络结构搜索 | AAAI 2018

    论文提出经济实惠且高效的神经网络结构搜索算法EAS,使用RL agent作为meta-controller,学习通过网络变换进行结构空间探索.从指定的网络开始,通过function-preservin ...

  3. NASH:基于丰富网络态射和爬山算法的神经网络架构搜索 | ICLR 2018

    论文提出NASH方法来进行神经网络结构搜索,核心思想与之前的EAS方法类似,使用网络态射来生成一系列效果一致且继承权重的复杂子网,本文的网络态射更丰富,而且仅需要简单的爬山算法辅助就可以完成搜索,耗时 ...

  4. (转) NAS(神经结构搜索)综述

    NAS(神经结构搜索)综述 文章转载自:http://www.tensorinfinity.com/paper_136.html 本文是对神经结构搜索(NAS)的简单综述,在写作的过程中参考了文献[1 ...

  5. 差分进化算法 DE-Differential Evolution

    差分进化算法 (Differential Evolution)   Differential Evolution(DE)是由Storn等人于1995年提出的,和其它演化算法一样,DE是一种模拟生物进化 ...

  6. 标准差分进化算法matlab程序实现(转载)

    标准差分进化算法matlab程序实现 自适应差分演化算法方面的Matlab和C++代码及论文 差分进化算法 DE-Differential Evolution matlab练习程序(差异演化DE) [ ...

  7. [Evolutionary Algorithm] 进化算法简介

    进化算法,也被成为是演化算法(evolutionary algorithms,简称EAs),它不是一个具体的算法,而是一个“算法簇”.进化算法的产生的灵感借鉴了大自然中生物的进化操作,它一般包括基因编 ...

  8. geatpy - 遗传和进化算法相关算子的库函数(python)

    Geatpy The Genetic and Evolutionary Algorithm Toolbox for Python Introduction Website (including doc ...

  9. Python遗传和进化算法框架(一)Geatpy快速入门

    https://blog.csdn.net/qq_33353186/article/details/82014986 Geatpy是一个高性能的Python遗传算法库以及开放式进化算法框架,由华南理工 ...

随机推荐

  1. golang Printf 函数有超过 10 个转义字符

    verb 描述 %d 十进制整数 %x, %o, %b 十六进制.八进制.二进制整数 %f, %g, %e 浮点数:如 3.141593, 3.141592653589793, 3.141593e+0 ...

  2. Vue2.0 【第一季】第1节 走进我的Vue2.0

    目录 Vue2.0 [第一季]内部指令 第一节 走进我的Vue2.0 Vue2.0 [第一季]内部指令 记录一下我的代码地址:D:/Code/Vue 编辑器:VS code 前置知识: 1.HTML的 ...

  3. MVC项目中存储公用链接方法

    小白成长记第一篇,随手记录一下小常识 将固定地址写在web.config文件appSettings中 Controller调用方法:

  4. Python深度学习 deep learning with Python

    内容简介 本书由Keras之父.现任Google人工智能研究员的弗朗索瓦•肖莱(François Chollet)执笔,详尽介绍了用Python和Keras进行深度学习的探索实践,涉及计算机视觉.自然 ...

  5. JS中的call()方法和apply()方法用法总结(挺好 转载下)

    最近又遇到了JacvaScript中的call()方法和apply()方法,而在某些时候这两个方法还确实是十分重要的,那么就让我总结这两个方法的使用和区别吧. 1. 每个函数都包含两个非继承而来的方法 ...

  6. Git 基础入门

    目录 git安装 基本设置 创建版本库 相关概念 将代码提交到分支仓库 版本回退 代码修改 撤销修改 文件删除 github 远程仓库 添加远程仓库 克隆远程仓库 分支操作 忽略特殊文件 git安装 ...

  7. Linux 基础篇

    本文使用系统为 :CentOS 7 1.文件操作 增: touch a.txt   #增加文件 mkdir test  # 增加目录   参数:-p 创建多级目录   ; 删: rm a.txt  # ...

  8. drf的频率认证

    频率认证源码分析 APIView --->dispatch方法--->self.initial(request, *args, **kwargs)---> self.check_th ...

  9. 【前端词典】这些功能其实不需要 JS,CSS 就能搞定

    前言 今天我们大家介绍一些你可能乍一眼以为一定需要 JavaScript 才能完成的功能,其实 CSS 就能完成,甚至更加简单. 内容已经发布在 gitHub 了,欢迎围观 Star,更多文章都在 g ...

  10. OpenCV-Python 立体图像的深度图 | 五十二

    目标 在本节中, 我们将学习根据立体图像创建深度图. 基础 在上一节中,我们看到了对极约束和其他相关术语等基本概念.我们还看到,如果我们有两个场景相同的图像,则可以通过直观的方式从中获取深度信息.下面 ...