摘要

事实证明,神经网络能够有效解决各类困难问题,但是设计其网络结构可能具有挑战性,即使仅针对图像分类问题也是如此。我们的目标是最大程度地减少人类的参与,因此我们采用进化算法来自动发现此类网络。尽管有大量的计算需求,但我们表明,现在可以开发出精度在去年发布的范围内的模型。具体来说,我们以前所未有的规模采用简单的进化算法来发现CIFAR-10和CIFAR-100数据集的模型,从初始条件开始,准确度分别达到94.6%和77.0%。为此,我们使用新颖直观的变异操作来在较大的搜索空间进行搜索。我们表明,一旦进化算法开始迭代,就不需要人工参与,并且输出是经过完全训练的模型。在整个工作中,我们特别强调结果的可重复性,结果的可变性和计算要求。

1.介绍

神经网络可以成功地执行有大量训练数据的困难任务。然而,设计神经网络结构仍然是一项艰巨的任务。即使在特定的图像分类问题中,需要数百名研究人员通过多年的专心研究才达到了最好的水平。
  因此,近年来自动发现这些网络结构的技术变得越来越流行也就不足为奇了。最早的这种“神经发现”方法之一是神经进化算法。尽管取得了令人鼓舞的结果,但深度学习社区普遍认为进化算法无法匹配手工设计模型的准确性。在本文中,我们表明,只要有足够的计算能力,就有可能进化出这种相当的模型。
  据我们所知,我们使用了经过稍微修改的进化算法,并将计算规模扩大到了前所未有的水平。通过使用一组新颖且直观的变异操作,使我们能够在CIFAR-10数据集上达到相当的准确性。选择该数据集是因为它需要大型网络才能达到较高的精度,因此带来了计算挑战。我们还朝CIFAR-100数据集的泛化和演化网络迈出了很小的第一步。从CIFAR-10过渡到CIFAR-100时,我们没有修改算法的任何方面或参数。我们在CIFAR-10上进行的经典神经进化结果的测试准确度为µ=94.1%µ = 94.1%µ=94.1%,σ=0.4%@9×1019σ= 0.4%@ 9×10^{19}σ=0.4%@9×1019 FLOPs,而我们的顶级模型(通过验证准确率)的测试准确率为94.6%@4×102094.6%@ 4×10^{20}94.6%@4×1020FLOPS。集成来自每个种群的验证前2个模型,可以达到95.6%95.6%95.6%的测试准确率,而无需额外的训练成本。在CIFAR-100上,我们的单项实验得出了27.0×102027.0×10^{20}27.0×1020 FLOPs的测试准确率为77.0%77.0%77.0%。据我们所知,这是从初始条件开始的自动发现方法在这些数据集上获得的最准确的结果。
  在整个研究过程中,我们特别强调了算法的简单性。特别是,这是一种“one-shot”技术,可产生经过完全训练的神经网络,而无需进行后处理。它还具有很少有影响的元参数(即参数未通过算法优化)。从没有卷积的性能较差的模型开始,该算法必须演化复杂的卷积神经网络,同时在不受限制的搜索空间中搜索:没有固定的深度,任意的残差连接以及对参数取值几乎没有限制的数值参数。我们还密切关注结果报告。也就是说,除了最高值外,我们还提供结果的可变性,考虑研究人员的自由度,研究对元参数的依赖性,并披露必要的计算量达到主要结果。我们希望我们对计算成本的明确讨论可以激发更多关于有效模型搜索和训练的研究。研究通过计算投资归一化的模型性能可以考虑诸如机会成本之类的经济概念。

2.相关工作


  神经进化的历史可以追溯到很多年前,最初只是用来搜索具有固定结构的权重。Stanley&Miikkulainen (2002)表明,使用NEAT算法改进网络结构是有利的。NEAT具有三种变异操作:(i)修改权重,(ii)在现有节点之间添加连接,或(iii)在拆分现有连接时插入节点。它还具有将两个模型重组为一个模型的机制,以及一种促进多样性的策略,称为适应性共享。进化算法使用便于实现目的的编码(类似于自然界的DNA)来表示模型。NEAT使用直接编码:每个节点和每个连接都存储在DNA中。间接编码的替代范例已经成为许多神经进化研究的主题。例如,CPPN允许不同尺度上重复特征的演变。另外,Kim&Rigazio(2015)使用间接编码来改善最初高度优化的固定体系结构中的卷积滤波器。
  权重演化的研究仍在进行中,但更通用的机器学习社区默认使用反向传播来优化神经网络权重。反向传播和进化可以结合在一起,如Stanley et al.(2009),其中只进化结构。他们的算法遵循结构变异和权重反向传播的交替。同样,Breuel&Shafait(2010)使用这种方法进行超参数搜索。Fernando et al.(2016)还使用反向传播,允许通过结构修改来继承训练后的权重。
  上述研究创建的神经网络与用于图像分类的经典现代结构相比较小。他们的重点是进化过程的编码方式或效率,而不是规模。当用于图像时,一些神经进化的结果达到了在MNIST数据集上成功所需的计算规模。但是,现代分类器通常会在真实图像上进行测试,例如CIFAR数据集中的图像,这更具挑战性。这些数据集需要大型模型才能实现较高精度。

  非进化神经发现方法在处理真实的图像数据方面更为成功。Snoek et al. (2012)使用贝叶斯优化对固定深度结构调整9个超参数,达到了当时的最好水平。Zoph & Le (2016)在更深的固定长度结构上使用了强化学习。在他们的方法中,神经网络(“发现者”)一次一层地构建出一个卷积神经网络(“被发现”)。除了调整层参数外,它们还添加和删除残差连接。这与一些手动后处理一起使它们非常接近(当前)现有技术水平。(此外,它们在序列间问题上超越了现有技术。)Baker et al.(2016)使用Q-learning也一次一层地发现网络,但是在他们的方法中,层数由发现者决定。这是一个理想的方法,因为它将允许系统构造浅层或深层解决方案,这可能是现有数据集的要求。不同的数据集将不需要专门调整算法。这些方法之间的比较很困难,因为它们探索了非常不同的搜索空间并且具有非常不同的初始条件(表2)。
  顺带地,也有关于LSTM结构的神经进化工作,但这超出了本文的范围。与这项工作相关的还有Saxena & Verbeek (2016)的研究,他将具有不同参数的卷积嵌入具有许多平行路径的“超网络”种类中。然后,他们的算法选择并集合了超级网络中的路径。最后,超参数搜索的经典方法是网格搜索(例如,在Zagoruyko & Komodakis (2016)中使用)和随机搜索,后者是两者中较好的一种。
  我们的方法以先前的工作为基础,但有一些重要差异。我们探索从基本初始条件开始的大型模型结构搜索空间,以避免使用有关手头特定数据集的已知良好策略的信息来启动系统。我们的编码与上述神经进化方法不同:我们使用简化图作为我们的DNA,将其转换为完整的神经网络图以进行训练和评估(第3节)。作用于该DNA的某些变异让人联想到NEAT。但是,一个变异可以插入整个层,而不是单个节点,即一次数十到数百个节点。我们还允许删除这些层,以便演化过程除了使结构复杂之外,还可以简化结构。层参数也是可变的,但我们并未规定一小套可能的值进行选择,以允许更大的搜索空间。我们不使用权重共享。我们报告了使用重组的其他结果,但在大多数情况下,我们仅使用了变异。另一方面,我们确实使用反向传播来优化权重,权重可以跨变异继承。与学习率变异一起,这可以探索学习率的空间,并在进化过程结束时产生经过完全训练的模型(第3节)。表1和表2分别将我们的方法与人工设计的结构以及其他神经发现技术进行了比较。

3.方法

3.1 进化算法

为了自动搜索高性能神经网络结构,我们演化了许多模型。每个模型(或个体)都是经过训练的网络结构。模型在单独的验证数据集上的准确率是对个体质量或适应性的度量。在每个进化步骤中,一台计算机(worker)从该种群中随机选择两个体,并比较他们的适应性。这对中最差的一个立即被从种群中移走。这对中最好的被选择作为父代。接下来,worker将创建父代的副本,并通过应用变异来修改此副本,如下所述。我们将此修改后的副本称为子代。worker创造了子代之后,它将训练该子代,并在验证集中对其进行评估,然后将其放回总体中。然后子代激活,即自由地充当父代。因此,我们的计划是使用随机个体的重复成对竞争,这使其成为锦标赛选择的一个例子。使用成对比较而不是整个种群比较,可以防止workers提早完成迭代。可以在附录S1中找到有关以下描述的方法的代码和更多详细信息。
  使用此策略搜索复杂图像模型的大型空间需要大量计算。为了达到大规模,我们开发了大规模并行的无锁基础架构。许多workers在不同的计算机上异步操作。他们彼此之间不直接通信。取而代之的是,使用共享文件系统来存储种群。文件系统包含代表个体的目录。对这些个体的操作(例如杀死一个)在目录上表示为原子重命名。有时,workers可能会同时修改另一个workers正在操作的个体。 在这种情况下,受影响的workers只是放弃并重试。除非另有说明,我们设置种群大小为1000。workers数始终是种群总数的1/4。为了在空间有限的情况下长时间运行,经常对移除个体的目录进行垃圾回收。

3.2 编码和变异

个体结构被编码为我们称为DNA的图。在此图中,顶点表示3维张量或激活函数。按照卷积网络的标准,张量的两个维度表示图像的空间坐标,第三个维度是多个通道。激活函数被应用于顶点,可以是(i)使用修正线性单元(ReLU)进行batch-normalization或(ii)普通线性单元。图的边代表恒等连接或卷积,并包含用于定义卷积属性的可变数字参数。当多个边入射在顶点上时,它们的空间比例或通道数可能不一致。但是,顶点必须具有单个大小和数量的通道才能激活。输入不一致的问题必须解决。通过选择输入边之一作为主边来解决该问题。我们选择的这一主边没有残差连接。如He et al. (2016)所述,在尺寸维度方向,通过零阶插值对非主边的激活进行reshape;在通道维度方向,通过截断/填充来对来自非主边的激活进行reshape。除了图外,学习率值也存储在DNA中。
  由于变异的作用,子代与父代相似但不相同。在每次子代生成中,worker都会从已有的集合中随机选择一个进行变异。变异包含以下集合:

  • ALTER-LEARNING-RATE
  • IDENTITY
  • RESET-WEIGHTS
  • INSERT-CONVOLUTION
  • REMOVE-CONVOLUTION
  • ALTER-STRIDE
  • ALTER-NUMBER-OF-CHANNELS
  • FILTER-SIZE
  • INSERT-ONE-TO-ONE
  • ADD-SKIP
  • REMOVE-SKIP

选择这些特定的变异是因为它们与人类设计师在改进网络结构时可能会采取的行动相似。这可能会为将来的进化加手工设计的混合方法开辟新的道路。变异的概率没有得到任何调整。

3.3 初始化条件

每个进化实验都始于一群简单的个体,所有个体的学习率均为0.1。 他们都具有很差的性能。每个初始个体仅构成一个没有卷积的单层模型。具有较差性能的初始条件的这种有意识的选择迫使进化本身来进行发现。实验者主要通过选择指定搜索空间的变异操作来做出贡献。总之,糟糕的初始条件和较大的搜索空间会限制实验者本身的影响。换句话说,它阻止了实验者“操纵”实验以使其成功。

3.4 训练和验证

我们在CIFAR-10数据集上进行了训练和验证。该数据集包含50000个训练样例和10000个测试样例,所有这些都是32×3232\times 3232×32彩色图像,并且每个图像用10个常见目标类别中的1个进行标记。取5000个训练样例保存在验证集中,其余的45000个样例构成了我们的实际训练集。训练集如He et al. (2016)中所描述的。CIFAR-100数据集具有与CIFAR-10相同的维数,颜色和样例数,但是使用了100个类,这使其更具挑战性。
  我们使用TensorFlow来实现并进行训练,使用SGD的动量为0.9,batch大小为50,权重衰减为0.0001。每个网络训练进行25600步,这个值选择得足够简短,以便每个个体可以在几秒钟到几小时内接受训练,具体取决于模型的大小。损失函数是交叉熵。训练完成后,对验证集进行一次评估即可提供准确率,以用作个体的性能评估。在测试评估过程中,通过多数表决进行组装。通过验证的准确率来选择集合中使用的模型。

3.5 计算成本

为了评估计算成本,我们确定了模型训练和验证所使用的基本TensorFlow(TF)操作,例如卷积,通用矩阵乘法等。对于这些TF操作中的每一个,我们都估算了浮点运算(FLOPs)的理论数量。这产生了从TF操作到FLOPs的映射,这对于我们所有的实验都是有效的。
  对于演化实验中的每个个体,我们在训练期间(FtF_tFt​ FLOPs)和验证期间(FvF_vFv​ FLOPs),通过一批样例计算TF操作在其体系结构中产生的总FLOPs。然后,我们将成本FtNt+FvNvF_tN_t+F_vN_vFt​Nt​+Fv​Nv​分配给这些个体,其中NtN_tNt​和NvN_vNv​分别是训练和验证批次的数量。这样,实验的成本就是其所有个体成本的总和。
  我们仅将FLOPs测量值作为粗略估计。我们不考虑输入/输出,数据预处理,TF图构建或内存复制操作。这些未解释的操作中的一些操作是每次训练运行一次或每一步运行一次,而某些操作具有模型大小不变的组件(例如,磁盘访问延迟或输入数据裁剪)。因此,我们希望该估计值对大型架构(例如,具有许多卷积的架构)更有用。

3.6 权重继承

我们需要训练每个网络结构才能完成演化实验中。如果这种情况没有发生,那么最后我们将不得不重新训练最佳模型,可能不得不研究其超参数。这种额外的探索往往取决于要重新训练的模型的细节。另一方面,25600个步骤不足以完全训练每个个体,对于训练大型模型以使其收敛的速度过慢。为了解决这个难题,我们允许子代尽可能地继承父代的权重。即,如果层具有匹配的形状,则权重得以保留。因此,有些变异保留了所有的权重(例如恒等或学习率变异),有些变异没有保留(权重重置变异),而大多数保留了一些但不是全部。后者的一个例子是滤波器大小变异:仅将被变异的卷积滤波器丢弃。

3.7 报告方法

为了避免过度拟合,进化算法和神经网络训练都没有看到测试集。每次我们提到“最佳模型”时,都是指验证准确率最高的模型。但是,我们总是报告测试的准确率。这不仅适用于实验中最佳个体的选择,而且适用于最佳实验的选择。此外,除非明确指出,否则我们仅包括设法复制的实验。在看到实验结果报告之前,必须完全确定任何统计分析,以避免针对我们的实验数据量身定制我们的分析。

Large-Scale Evolution of Image Classifiers翻译相关推荐

  1. Paper之BigGAN:《Large Scale Gan Training For High Fidelity Natural Image Synthesis》翻译与解读

    Paper之BigGAN:<Large Scale Gan Training For High Fidelity Natural Image Synthesis>翻译与解读 目录 效果 1 ...

  2. 【翻译】Rosetta Large Scale System for Text Detection and Recognition in Images

    Rosetta: Large Scale System for Text Detection and Recognition in Images(大规模图像文本提取和识别系统) 摘要 ​ 在本文中,我 ...

  3. 暗光增强论文Attention Guided Low-light Image Enhancement with a Large Scale Low-light Simulation Dataset翻译

    Abstract 低光图像增强是一个挑战,因为它不仅需要考虑亮度恢复,还需要考虑复杂的问题,如颜色失真和噪声通常隐藏在黑暗中.简单地调整低光图像的亮度将不可避免地放大这些噪声.针对这一难题,本文提出了 ...

  4. 【PaddlePaddle论文复现】LARGE SCALE GAN TRAINING FOR HIGH FIDELITY NATURAL IMAGE SYNTHESIS阅读心得

    [PaddlePaddle论文复现]LARGE SCALE GAN TRAINING FOR HIGH FIDELITY NATURAL IMAGE SYNTHESIS阅读心得 作者:Andrew B ...

  5. 【多标签文本分类】Large Scale Multi-label Text Classification with Semantic Word Vectors

    ·阅读摘要:   本文提出了利用词向量+CNN/词向量+GRU来解决大规模数据下的多标签文本分类问题.   [1] Large Scale Multi-label Text Classificatio ...

  6. Machine Learning week 10 quiz: Large Scale Machine Learning

    Large Scale Machine Learning 5 试题 1. Suppose you are training a logistic regression classifier using ...

  7. Paper之BigGAN:ICLR 2019最新论文《LARGE SCALE GAN TRAINING FOR HIGH FIDELITY NATURAL IMAGE SYNTHESIS》(未完待续)

    Paper之BigGAN:ICLR 2019最新论文<LARGE SCALE GAN TRAINING FOR HIGH FIDELITY NATURAL IMAGE SYNTHESIS> ...

  8. 【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 17—Large Scale Machine Learning 大规模机器学习...

    Lecture17 Large Scale Machine Learning大规模机器学习 17.1 大型数据集的学习 Learning With Large Datasets 如果有一个低方差的模型 ...

  9. Introducing DataFrames in Apache Spark for Large Scale Data Science(中英双语)

    文章标题 Introducing DataFrames in Apache Spark for Large Scale Data Science 一个用于大规模数据科学的API--DataFrame ...

最新文章

  1. Hbase集群搭建二(Hadoop搭建)
  2. python语言表白源码-python七夕浪漫表白源码
  3. 【设计模式】面向对象 - 多态 ( 面向对象 3 要素 | 多态 提升 程序扩展性 | 多态示例 )
  4. git clone -b master https://github.com/hyperledger/fabric-samples.git
  5. SPI的4种工作模式(备忘)
  6. C语言实现的简单的线程池
  7. Sql为什么连接不上服务器上的数据库
  8. HDU 2303 The Embarrassed Cryptographer
  9. 日本老年人开始送外卖了 锻炼赚钱两不误 网友:饿死了么外卖?
  10. Javascript 立即执行函数
  11. 平板电脑办公软件_办公软件便签电脑版免费下载
  12. Oracle如何实现跨库查询
  13. 关于SDWebImage
  14. Linux命令行打开不了发行光盘RHEL_6.3 i386 Disc 1
  15. Ant Design Pro图片上传
  16. 四叉树算法原理与实现
  17. img文件制作linux启动u盘,用syslinux制作简单U盘启动盘教程
  18. 企业级数据模型主题域模型划分(NCR FS-LDM)
  19. Newman定制报告
  20. oracle判断除数为零,Oracle decode函数 除数为零

热门文章

  1. Android开发技巧——设置系统状态栏颜色
  2. 【转载】高性能MySQL小结
  3. linkedin 分享_如何在LinkedIn上记录和显示您的名字发音
  4. 信管专业的目标职位体系与职业认证体系
  5. java购物小票代码_Java编程打印购物小票实现代码
  6. 自动排课系统的设计与实现 开题报告 java_高校自动排课APP的设计与实现毕业论文+开题报告+app源码(Hbuilder+Android+sqlite+H5)+操作步骤...
  7. mysql服务端下载安装详细教程
  8. 半导体PVD和CVD设备用质量流量控制器市场现状研究分析
  9. 舆情风险怎么分析的解决方案
  10. css进阶01 |CSDN创作打卡