来源:AI科技评论

概要:最近这项来自南非开普敦大学的研究就带来了新的发现,只用单块GPU的资源就进化出了理想的网络结构,还刷新了三项测试的结果。

作者按:进化算法和生成式对抗性网络GANs类似,提出时大家都觉得是很好的想法,可以帮人类极大地拓展行为和想象空间,然而找到好的、可控的实现方法却没那么简单。GANs方面现在已经有了许多的成果,但是进化算法仍然停留在较为初期的状态,无法生成大规模、复杂的网络,需要的计算资源也是在计算集群的级别上。

不过,进化算法的研究也是一步步在“进化”的,最近这项来自南非开普敦大学的研究就带来了新的发现,只用单块GPU的资源就进化出了理想的网络结构,还刷新了三项测试的结果。作者把背景和这篇论文的成果简单介绍如下。

深度神经网络是强大但是反直觉的野兽,要有丰富的经验、反复试错,才能驾驭它们得到好的表现。也有许多例子证明,神经网络的表现会随着深度的增加不断提高。这些特性加上深度学习在各个领域内越来越强的影响力都表明,能自动找到最优或者接近最优的网络结构和超参数的方法越来越重要。

不过显然,网络中每一层的特性、层与层的顺序、激活函数、全连接层里的单元数量、卷积层里卷积核的数量等等建立深度学习网络需要的参数,挑选的时候每一项都不算容易。不过现在有一个好处是,我们有丰富的计算资源,一般来说都可以尝试许多种不同的组合,找到效果比较好的。那有没有可能只用非常有限的计算资源,比如一块GPU,就取得不错的结果呢?

这篇论文就讨论了一种思路,通过进化算法,发展出优秀的神经网络。这样的神经进化算法并不是新鲜事物,大概三十年前就有人提出过,最开始是在一项跟神经网络中的连接权重相关的研究中。

神经进化算法的近期成果

下面先介绍一下神经进化算法方面的近期相关工作,跟这篇论文中的成果相比,它们都用到了很多的计算资源。E. Real 等在“Large-scale evolution of image classifiers”(arXiv:1703.01041, 2017)中提出了一种神经进化的方法,优化用于图像分类的神经网络,其中用到了含有250台计算机的并行计算集群,而在CIFAR图像数据集任务中取得了可观的成果。B. Zoph 和 Q. V. Le 则在“Neural architecture search with reinforcement learning”(arXiv:1611.01578, 2016)中用了一个综合了强化学习的循环神经网络,用来学习优秀的架构,他们一共在800个GPU上训练了800个网络。

R. Miikkulainen 等人提出了CoDeepNEAT(“Evolving deep neural networks”,arXiv:1703.00548, 2017),其中产生了一大批模型和蓝图。这些蓝图是由数个节点组成的,节点指向表征了神经网络的特定模块。这样一来,他们所提的方法就让重复结构的进化变得可能,因为蓝图可以重复使用进化后的模块。T. Desell 提出了 EXACT(“Large scale evolution of convolutional neural networks using volunteer computing” ,arXiv:1703.05422, 2017),这是一种用来部署在分布式计算集群上的神经进化算法,他们当时使用了4500台志愿参与者的计算机,进化出了12万个网络用来搞定MNIST数据集。他们的方法中没有使用池化层,也仅限于使用2维的输入和滤波器。

作者们还发现,近期有研究中只用一个GPU就可以进化出能够准确判断出监督学习任务中需要的是回归模型还是分类模型的深度神经网络,在一系列不同的任务中获得了96%的平均准确率。(E. Dufourq 和 B. A. Bassett, “Automated problem identification: Regression vs classification via evolutionary deep networks”,Annual Conference of the South African Institute of Computer Scientists and Information Technologists, ACM, 2017)这项成果是作者们的这篇论文的直接先驱,而且只要有足够的计算资源就可以无缝衔接到这篇论文中的网络优化过程中来。

基因算法

基因算法(genetic algorithm,GA)是一种可以用来解决优化问题的进化算法。首先初始化一群染色体,每个染色体都表征了优化问题的一个解决方案。然后通过一个匹配度函数评价每个染色体,以确定哪个染色体可以解决这个问题。在迭代进化模型中,基因算法会迭代很多次,可以称作“世代”(generations),一直迭代到预定义的条件达成为止(比如最大世代数目)。每一个染色体由很多个基因组成,这些基因就可以用基因操作器进行替换。经过基因操作器操作之后的染色体,就可以称为原来染色体的子代(offspring)。根据染色体群落数目的不同,可以产生多个子代。每个世代中,子代染色体都会代替现有的染色体群落。

这篇论文中,作者们使用了传统的基因算法。他们还额外增加了世代数目和网络训练中epoch的数目,用来探索最佳的epoch的数目。所用的基因算法如下图。

作者们采用基因算法的原因是,染色体的复杂程度可以根据编码的基因数目增大或者降低。基因算法相比其它进化算法还有一些好处:它们可以流畅地处理离散(比如层类型)和连续(比如学习速率)的连续空间,进行神经进化研究的时候这就是理想的选择。

EDEN

在这篇论文中,作者们提出了进化性深度网络(Evolutionary DEep Networks,EDEN),这算一种结合了基因算法和深度神经网络的的神经进化算法,用来探索神经网络架构、相关的超参数以及epoch数目的搜索空间。在这项研究中,作者们探索了例如嵌入层的优化这类的额外特征,并且提高了现有研究的复杂度。作者们希望通过EDEN解答两个问题:1,能否通过进化的方法得出总体来说较为优秀的架构和超参数用来解决许多不同的问题(并不仅限于图像识别)?2,与之前研究中使用的大规模计算集群相反,他们能否用单个GPU就达到这一目标?

作者们将EDEN接入了TensorFlow,这样新的层、函数以及其它的特征都可以轻松地被EDEN集合、应用,因为这些特征的表征函数都可以作为TensorFlow函数调用。而且,EDEN也不局限于TensorFlow,其它的现代深度神经网络框架也可以用来实现EDEN。下图就是一个EDEN的染色体在编码后得到的神经网络结构的例子。

每个EDEN染色体包含两个基因,编码学习速率和一个神经网络。图中展现的是一个用EDEN进化出的用于情绪分析的神经网络。EDEN创造了一个输出维度为120的嵌入层,其后有3个一维卷积层。EDEN进化出了滤波器的数目、每个滤波器的维度,以及每个滤波器响应的激活函数。对于最后一个层,EDEN决定使用的激活函数是sigmoid。这个染色体上的学习速率是0.0023。

下面这个动图展示了EDEN执行的过程中染色体进化的过程,要解决的问题是一个MNIST图像分类问题。这个过程中神经元群落向着一个高效的解决方案收敛,最终主要由二维卷积层组成。

实验结果

运用EDEN,在10个世代和13个训练epoch后,作者们在多项测试中分别得到的网络结果如下。

对于不同的任务,网络中进化出的学习速率和参数数目也不一样。其中EMNIST-balanced、EMNIST-digits 和 Fashion-MNIST 三项任务中取得了最好的结果,刷新了目前的最好成绩。对于CIFAR-10中低很多的表现,作者们认为原因是,由于他们这项研究关注效率更多,所以对模型的深度做出了一定限制,也就限制了CIFAR-10任务中的表现。

这张图是在MNIST任务中,网络进化到不同世代的平均匹配度变化图。其中的竖线标出的是整个群落中5%到95%的匹配度值。在进化刚开始时,群落中的匹配度有很大的不同,然后随着解决方案变好、群落收敛,匹配度的变化幅度开始减小。图中也标出了自进化开始之后,最初、中间、最终三个世代时的网络结构以及相关的超参数。

作者们表示,他们实验中只使用了一块GTX1070 GPU,训练时间6到24小时,就可以取得这样的成果,他们觉得非常满意。他们的研究也首次尝试了把神经进化用在一维卷积网络的创造中,用来解决情感分析、包括嵌入层的优化问题。

学界 | 进化算法可以不再需要计算集群,开普敦大学的新方法用一块GPU也能刷新MNIST记录相关推荐

  1. 进化算法可以不再需要计算集群,开普敦大学的新方法用一块GPU也能刷新MNIST记录...

    雷锋网 AI 科技评论按:进化算法和生成式对抗性网络GANs类似,提出时大家都觉得是很好的想法,可以帮人类极大地拓展行为和想象空间,然而找到好的.可控的实现方法却没那么简单.GANs方面现在已经有了许 ...

  2. mysql 高并发 集群架构_一种高并发的GPU集群架构及其负载均衡方法技术

    [技术实现步骤摘要] 一种高并发的GPU集群架构及其负载均衡方法 本专利技术属于GPU集群架构及其负载均衡方法 ,特别是涉及一种高并发的GPU集群架构及其负载均衡方法. 技术介绍 GPU因其高性能的并 ...

  3. 创建父需求子需求构建需求树_用pc构建DIY计算集群(超级计算机)

    ----------------------------------------------------------------- 用pc构建DIY计算集群 目录 /构建计算集群 0. |-- /0前 ...

  4. 用pc构建DIY计算集群

    ----------------------------------------------------------------- 用pc构建DIY计算集群 目录 /构建计算集群 |-- /0前言 | ...

  5. Linux ANSYS Fluent计算集群配置

    目录 0 Linux系统及ANSYS版本 1 Linux系统安装及相关配置 1.1 系统安装 1.2 CentOS 配置ntfs挂载 1.3 SSH相关配置 2 ANSYS 安装 3 实际计算操作及相 ...

  6. 结构流体多物理场耦合高性能仿真计算集群配置推荐

    经常听到客户反馈,某某分布式多机集群.某某云计算平台,在集群上做计算还不如普通电脑快,高性能计算集群做工程仿真计算效率很低,花了一大笔经费,经过一年多的方案论证.审批通过.采购.交货.使用,但集群性能 ...

  7. Linux仿真运算集群,fluent DPM Linux计算集群运行报错 - 计算模拟 - 小木虫 - 学术 科研 互动社区...

    计算对象是一个三维圆柱在空间中做简谐运动,计算域顶面有离散相入射. DPM设置为面入射,按rosin预设函数分布,unsteady particle track, 按0.001s的粒子时间步计算(计算 ...

  8. OPPO大数据计算集群资源调度架构演进

    1 背景 随着公司这两年业务的迅速扩增,业务数据量和数据处理需求也是呈几何式增长,这对底层的存储和计算等基础设施建设提出了较高的要求.本文围绕计算集群资源使用和资源调度展开,将带大家了解集群资源调度的 ...

  9. windows下tomcat集群配置(两种方法)

    两种方法只是在配置上不同原理一样,因为apache2.X后其自身集成了mod_jk功能,相对于1.3版本,不需要再进行繁琐的worker.properties配置,配置过程大幅简化. 一.软件需求 操 ...

最新文章

  1. python自动测试g_使用Python进行自动化测试
  2. RDD(Resilient Distributed Datasets 弹性分布式数据集)
  3. lotus php,LotusPhp框架目录_PHP教程
  4. 我虐小车千百遍,小车待我如初恋
  5. ajax传html调用样式的问题
  6. C# SharpMap 学习总结
  7. oracle 删除字段中空格
  8. react如何获取option的下标和值_react中option标签如何确定selected?
  9. linux 划ext4,linux – 有没有像ext4这样的’快速’格式?
  10. 【CF#-931A】 Friends Meeting(思维)
  11. 大型网站的Google排名策略
  12. 微信小程序的出现会给前端开发带来什么
  13. Java基础——构造代码块
  14. js获取post请求参数_SpringMVC请求参数获取时,有这六种方式值得学习
  15. Parquet文件格式简介
  16. java我行我素购物系统_用java怎么编写 我行我素shopping购物管理体统
  17. 魔兽服务器优化,《魔兽世界》画质与流畅最佳优化指南
  18. 计算机英语背诵发音,英语背诵十大技巧,简直不要太实用
  19. 如何将河道水系CAD数据导入HEC-RAS中?详细教程!
  20. 关于研发规范化的一些实践和思考

热门文章

  1. iframe中的奇怪现象
  2. PyTorch实现,GitHub star 4k+:这是微软开源的计算机视觉库
  3. Sampling Procedure 和 Sample-drawing Procedure, SAP QM里的双胞胎?
  4. 关于机器学习算法的16个技巧
  5. 产权分割商铺,太坑人!
  6. 机器学习为NASA贡献了什么?
  7. 2020 年了,深度学习接下来到底该怎么走?
  8. 滴滴自动驾驶获得江苏省苏州公安局颁发的路测牌照
  9. 干货丨零基础学习大数据,搭建Hadoop处理环境
  10. 如何看懂一个深度学习的项目代码