2020-04-02 【遗传算法】Completely Automated CNN Architecture Design Based on Blocks

摘要:

卷积神经网络的性能在很大程度上依赖于其结构。为了设计一个性能良好的CNN,需要在CNN和被调查问题领域都有广泛的专业知识,这并不一定对每个感兴趣的用户都适用。为了解决这个问题,我们提出了一种基于ResNet和DenseNet块的遗传算法来自动进化CNN结构。该算法在CNN结构设计中是完全自动化的。特别是,不需要在它开始之前进行预处理,也不需要在CNNs方面进行后处理。此外,该算法不需要对CNNs、所研究问题甚至GAs有领域知识的用户。该算法在CIFAR10和CIFAR100基准数据集上对18个最先进的对等竞争对手进行了评估。实验结果表明,该算法在分类性能上优于目前最先进的人工神经网络和自动对等竞争对手设计的神经网络,并且在分类精度上优于半自动对等竞争对手。此外,在寻找最佳CNN架构方面,该算法比大多数同行竞争对手消耗更少的计算资源。

Introduction:

卷积神经网络(CNNs)[1]已经在各种实际应用中展示了它们有希望的性能[2]-[5]。众所周知,cnn的性能在很大程度上取决于其体系结构,例如使用了多少构建块层(例如卷积层和池化层)、如何组合使用的构建块层以及如何指定与使用的构建块层相关的参数。

不幸的是,对于与体系结构相关的参数,L(·)通常是非凸且不可微的,因为这些参数通常具有离散值,例如,卷积层的特征映射大小通常被指定为整数。为此,精确的优化算法(例如,基于梯度的算法)在解决体系结构优化问题时不能或无效[7],[8]。因此,研究人员提出了基于启发式计算范式的各种体系结构优化算法[9],如随机搜索[10]、基于贝叶斯的高斯过程[11]、[12]、树结构Parzen估计[13]、基于序列模型的全局优化[14]、扩充拓扑的神经进化[15],以及进化无监督深度学习[8]。然而,在CNN体系结构优化中,不可能预先知道最佳构建层的数目,例如n在λ中的特定值,从而构成最佳CNN体系结构,即在找到最佳CNN体系结构之前,最优CNN体系结构的决策变量的数目也是未知的。这使得上述的结构优化方法也不能有效地用于CNN的结构设计,因为它们是在优化参数数目固定的前提下工作的。尽管我们可以枚举n的每个潜在值,然后对不同n中的每一个执行这些方法,但是随着n的增长,运行时计算复杂度将增加一个数量级,并且在可接受的时间内可能无法获得满意的解[16]。

因此,最先进的cnn,如ResNet[17]和DenseNet[18],主要是手工制作的。手工设计CNNs需要CNN架构和问题领域的大量专业知识。这在实践中通常是不可用的。例如,医生可以发现CNN在评估磁共振成像(MRI)扫描结果时非常有用。虽然医生显然在问题领域有专业知识,但他们不太可能在CNN架构方面有可比的经验。这一障碍阻止了cnn在各种图像分类任务中的应用。非常需要一个算法,能够有效和高效地设计1 CNN架构,而不需要这样的专业知识。

幸运的是,在过去的两年里,人们提出了多种设计CNN体系结构的算法。根据使用这些算法时是否需要对CNNs进行预处理或后处理,可以将它们分为两类:半自动CNN体系结构设计算法和完全自动CNN体系结构设计算法。具体来说,半自动算法包括遗传CNN方法(genetic CNN)[19]、基于层次表示的方法(hierarchical expression-based method)(hierarchical Evolution)[20]、高效体系结构搜索方法(EAS)[21]和块设计方法(block-QNN-S)[22]。自动算法包括大规模进化方法(large scale evolution)[23]、笛卡尔遗传规划方法(CGP-CNN)[24]、神经架构搜索方法(NAS)[25]和元建模方法(MetaQNN)[26]。这些算法主要基于进化算法[27]或强化学习[28]。例如,遗传CNN、大规模进化、分层进化和CGP-CNN是基于进化算法的,而NSA、MetaQNN、EAS和Block-QNN-S是基于强化学习的。

这些算法的实验结果表明,它们在寻找给定数据上的最佳CNN结构方面具有良好的性能。然而,仍然存在重大限制。首先,半自动CNN体系结构设计算法仍然需要研究数据和CNN的专业知识。例如,EAS在一个基础网络上生效,这个基础网络在所研究的问题上已经有了相当好的性能。但是,基本网络是根据专业知识手动设计的。Block-QNN-S只设计了几个小型网络,然后将这些网络集成到一个更大的CNN框架中。然而,其他类型的层,如池层,需要适当地吸收到具有专业知识的CNN框架中。其次,基于强化学习的CNN架构设计算法通常消耗更多的计算资源。例如,对于CIFAR10数据集[29],NAS在800个图形处理单元(GPU)卡上花费28天。然而,并不是每个感兴趣的用户都有足够的计算资源。最后,基于进化算法的CNN体系结构设计算法只利用了进化算法的部分原则性优点,这在无意中导致了发现的CNN对于所研究的问题通常没有很好的性能。例如,遗传CNN采用固定长度的编码方案来表示CNN。然而,我们永远不知道CNN在解决新问题方面的最佳深度。为此,大规模进化采用可变长度编码方案,其中cnn可以根据问题自适应地改变其深度。然而,大规模进化在搜索过程中只使用变异算子,不使用任何交叉算子。在进化算法中,交叉算子和变异算子起着局部搜索和全局搜索的互补作用。在不使用交叉算子的情况下,变异算子就像在不同的起始位置进行随机搜索一样工作。然而,大规模进化不使用交叉算子并不奇怪,因为交叉算子最初是为固定长度编码方案设计的。

为此,CNN体系结构设计算法的发展,特别是对性能良好、依赖有限计算资源的全自动CNN体系结构设计算法的发展,还处于起步阶段。本文的目的是设计和开发一种新的基于遗传算法(GA)的CNN结构自动设计算法。为了实现这一目标,以下是具体的目标。

1) 提出的算法要求用户在基本CNN设计、调查数据集和GAs中提供任何先决知识。根据该算法设计的CNN结构可以直接使用,无需重新编译、预处理或后处理。

2) 采用可变长度编码方案来搜索CNN的最佳深度。为了采用可变长度编码,设计了一种新的交叉算子和一种变异算子,并将其融入到算法中,共同开发和探索搜索空间,寻找最佳的CNN结构。

3) 设计了一种基于ResNet块(RB)和DenseNet块(DB)的高效编码策略,加快了体系结构的设计,利用了有限的计算资源,取得了良好的性能。注意,虽然在提出的算法中使用了RB和DB,但是当用户使用提出的算法时,不需要在这些块中具有专业知识。

本文的其余部分安排如下。第二节介绍了该算法的相关背景知识。然后,在第三节详细介绍了该算法。为了评估该算法的性能,在第四节和第五节分别给出了实验设计和数值结果。最后,第六节总结了本文的结论和今后的工作。

Background:

正如第一节所强调的,所提出的算法是设计一个新的遗传算法,通过使用ResNet和DenseNet块来自动设计CNN结构,这两个块是最先进的CNN人工设计。为了帮助读者容易理解第三节中所示的算法的细节,本节将讨论GAs、RBs和DBs的基本原理。

1.遗传算法

GAs[30]是一类基于群体的启发式计算范式。它们也是最流行的进化算法类型[进化算法广泛地包括遗传规划(GP)[31],进化策略[32],等等,除了GAs。由于无梯度和对局部最小值不敏感的性质,GAs是首选,特别是在优化问题通常是非凸和不可微的工程领域[33],[34]。GAs通过一系列受生物启发的操作,如交叉、变异和选择,模拟生物进化来解决优化问题[35],[36]。一般来说,遗传算法的工作原理如下。

Step 1:初始化个体的总体,每个个体都表示通过所采用的编码策略的问题的候选解决方案。

Step 2:基于编码信息和适应度函数的群体个体适应度评价。

Step 3:从当前种群中选择有希望的亲本个体进行交配,然后用交叉和变异算子产生后代。

Step 4:评价所产生后代的适合性。

Step 5:环境选择是指从当前种群中选出具有良好表现的个体,然后用所选种群替换当前种群。

Step 6:如果不满足终止条件,则到Step 3,否则,最好适应度的个体作为最优解被返回。

通常使用最大生成数作为终止标准。

2.ResNet和DenseNet块

ResNet[17]和DenseNet[18]是近年来提出的两个最先进的cnn。ResNet和DenseNet的成功在很大程度上要归功于它们各自的基石,即RBs和DBs。

图1示出了RB的示例,RB由三个卷积层和一个跳跃连接组成。在本例中,卷积层被表示为conv1、conv2和conv3。在conv1上,输入的空间大小被1×1的较小数量的滤波器减小,以降低conv2的计算复杂度。在conv2上,使用3×3等较大尺寸的滤波器来学习具有相同空间尺寸的特征。在conv3上,再次使用大小为1×1的滤波器,并增加空间大小以生成更多的特征。将输入(用⊕表示)作为RD的最终输出添加到conv3的输出中。注意,如果输入和conv3的输出的空间大小不相等,则对输入应用一组具有1×1大小的滤波器的卷积运算,以获得与conv3的输出相同的空间大小。

图一 RB

图2示出DB的示例。为了便于介绍,我们在DB中只给出了四个卷积层。实际上,DB可以有不同数量的卷积层,这是由用户调整的。在DB中,每个卷积层不仅接收来自输入数据的输入,而且还接收来自所有先前卷积层的输出。此外,还有用于控制同一卷积层的输入和输出的空间大小的参数k。如果输入的空间大小是a,则输出的空间大小是a+k,这是通过使用相应数量的滤波器的卷积运算来实现的。

图2 DB

文献[37]和[38]已经致力于研究RBs和DBs成功背后的机制,并揭示RBs和DBs能够减轻梯度消失问题的不利影响[39],在此基础上,一个深度结构能够有效地学习输入数据的层次表示,进而提高最终的分类精度。此外,DBs中的密集连接也被声称能够重用底层特征,以增加cnn顶层学习到的特征的区分性[18]。主要是基于这些优良的特性,选择RBs和DBs作为算法的构造块。

Proposed algorithm

在这一部分中,详细讨论了该算法的框架及其主要组成部分。为了便于开发,本文提出的算法简称为AE-CNN(automatically evolution CNN),进化后的CNN仅用于图像分类任务。

1.算法概述:

算法1给出了AE-CNN的框架,该框架由三部分组成。首先,使用预定义的N大小随机初始化填充(参见第1行)。然后,对个体进行适合性评估(见第2行)。其次,种群中所有个体以最大的世代数参与遗传算法的进化过程(见第3-14行)。最后,最好的CNN架构是从基于适应度的最终人群中选出的最佳个体中解码出来的(见第15行)。在进化过程中,一个空种群被初始化为包含子代(见第5行),然后,通过交叉和变异操作从选定的父代生成一个新的off-spring,而父代则通过二元竞赛选择(见第6-10行);在对生成的后代的适应度进行评估(见第11行)之后,使用环境选择操作(见第12行)从当前种群(包括当前个体和生成的后代)中选择一个新种群作为存活到下一个进化过程中的父解(即。,下一代)。注意第6行所示的|·|符号是基数运算符。“种群初始化”、“适应度评估”、“后代生成”和“环境选择”的阶段分别记录在第III-B–III-E节中。

算法1

2.种群初始化

种群初始化为以下进化过程提供了包含多个个体的基本种群。一般而言,所有个体以均匀分布的随机方式初始化,如第II-a节所述,GAs中的每个个体代表待解决问题的候选解决方案。由于该算法中的GAs是用来寻找最佳CNN结构的,因此该算法中的每个个体都应该表示一个CNN结构。通常,CNN的体系结构由多个卷积层、池层和按特定顺序完全连接的层以及它们的参数设置构成。在该算法中,基于RBs、DBs和池化层构造cnn,这是由于ResNet[17]和DenseNet[18]的显著成功,而在该算法中没有考虑完全连接层。主要原因是全连接层由于其全连接性质容易导致过拟合现象[40]。为了减少这种现象,必须采用其他技术,如dropout[41]。然而,这些技术也会产生额外的参数,需要仔细调整,这将增加算法的计算复杂度。第五节的实验结果将证明,在不使用完全连接层的情况下,该算法仍能获得良好的性能。算法2总结了AE-CNN种群初始化的细节。

算法2

接下来,我们将解释第8行和第11行的细节,因为算法2的其他部分很简单。具体来说,cnn中的池层对其输入数据执行降维,最常用的池操作是将输入大小减半,这可以从最新的cnn[2]-[5]、[17]、[18]中看出。为此,不能任意指定所使用的池层,而是遵循已计算的约束,如第2行所示。例如,如果输入大小为32×32,则使用的池层不能大于6个,因为6个池层会将输入数据的维数减少到1×1,而在1×1的维数上增加一个池层会导致逻辑错误。

编码使GAs能够模拟现实世界中的问题,然后,这些问题可以由GAs直接解决。编码是通过相应的编码策略实现的,这是使用GAs的第一步。没有一种统一的编码策略可以解决所有的问题。在该算法中,我们设计了一种新的编码策略,旨在有效地对不同结构的cnn进行建模。对于所使用的RBs,基于最新CNNs的配置[17]、[42],我们将conv2的滤波器大小设置为3×3,这也用于所使用的DBs中的卷积层。对于已使用的池层,我们根据约定将步长设置为2×2,这意味着进化后的CNN中的单个池层将输入维数减半一次。为此,RBs的未知参数设置是输入和输出的空间大小,DBs的未知参数设置是输入和输出的空间大小,以及k,而池层的未知参数设置只是它们的类型,即最大或平均池类型。注意,DB中的卷积层的数目是已知的,因为它可以由输入和输出的空间大小以及k导出。因此,所提出的编码策略基于三种不同类型的单元及其在cnn中的位置。这些单元是RB单元(RBU)、DB单元(DBU)和池层单元(PU)。具体来说,RBU和DBU分别包含多个RBs和DBs,而PU仅由单个池层组成。我们的理由是:1)将多个RBs或DBs放入一个RBU或DBU中,与逐个堆叠RBs或DBs相比,CNN的深度可以显著地改变,这将通过容易地改变CNN的深度来加速所提出算法的启发式搜索;2)由单个池层组成的一个PU更大比由多个池层组成灵活,因为多个后续池层的效果可以通过叠加多个pu来实现。此外,为了便于算法的实现,我们还增加了一个表示单元类型的参数。总之,RBU的编码信息是类型、RBs的数量、输入空间大小和输出空间大小,它们分别表示为类型、数量、输入和输出。另一方面,除了附加参数k之外,DBU的编码信息与RBU的相同。在PU中,仅需要一个参数来编码池类型。

图3示出了在编码包含九个单元的CNN时所提出的算法的示例。具体来说,块左上角的每个数字表示单元在CNN中的位置。如果类型分别为1、2或3,则单位为RBU、DBU或PU。注意到所提出的编码策略不限制每个个体的最大长度,这意味着所提出的算法可以通过所设计的可变长度编码策略自适应地找到具有适当深度的最佳CNN结构。

图3

3.适应度评估

个体的适应度提供了一种定量的测量方法,表明他们如何适应环境,并根据这些个体编码的信息和手头的任务来计算。在AE-CNN中,个体的适应度是基于个体编码的体系结构和相应的验证数据的分类精度。根据进化算法的原理,适应度越高的个体产生后代的概率越高,希望其适应度比自身更高。为了评估适应度,AE-CNN中的每个个体都被解码到相应的CNN中,然后加入一个分类器进行训练,就像普通CNN一样。通常,广泛使用的分类器是二元分类的logistic回归和多重分类的softmax回归。由(1)可知,在AE-CNN中,解码后的CNN是在训练数据上进行训练的,而适应度是CNN训练后对验证数据的最佳分类精度。

该算法的适应度评估如算法3,以相同的方式评估种群中的每个个体。首先,将编码在个体中的架构信息转换为具有相应架构(见第2行)的CNN,该架构与第III-B节中介绍的编码策略相反。其次,用与手工CNN类似的权重(见第3行)初始化CNN,然后根据提供的训练数据进行训练(见第4行)。注意到权重初始化方法和训练方法分别是Xavier初始化器[43]和带动量的SGD,它们在深度学习社区中常用。最后,根据验证数据对训练后的CNN进行评估(见第5行),并将评估的分类精度视为个体的适应度(见第6行)。

3.产生后代

为了产生一个后代种群,需要事先选择亲本个体。基于进化算法的原理,通过遗传双亲的品质性状,期望生成的后代比双亲具有更高的适应度。为此,应选择最适合的个体作为父母个体。然而,采用最好的作为父母,很容易导致种群多样性的丧失,进而导致种群过早收敛[44],[45],因此,由于陷入局部的min-ima[48],[49],种群的最佳性能无法实现[46],[47]。为了解决这一问题,一般的方法是随机选择有前途的父母。在所提出的AE-CNN算法中,基于GA群体的约定,采用二元竞赛选择[50],[51]。二元竞赛选择从群体中随机选择两个个体,选择适应度较高的个体作为单亲个体。通过再次重复此过程,选择另一个父个体,然后,这两个父个体执行交叉操作。注意,在每次交叉操作之后生成两个后代,并且在每一代中生成N个后代,即,在每一代中执行N/2次交叉操作,其中N表示种群大小。

在传统的GAs中,交叉操作是在两个长度相同的个体上进行的,这在生物学上是显而易见的。基于该编码策略,该算法中的个体具有不同的长度,即对应的cnn具有不同的深度。在这方面,不能使用传统的交叉算子。然而,交叉算子往往和GAs的局部搜索能力有关,利用搜索空间获得有希望的性能。由于在GAs中缺少交叉操作,最终解的性能可能会恶化。在该算法中,我们采用了单点交叉算子。原因是单点交叉在GP[31]中得到了广泛的应用。GP是另一类重要的进化算法,GP中的个体具有不同的长度。算法4给出了该算法的交叉操作。

注意,如果需要,会自动对生成的后代进行一些必要的更改。例如,当前单元的“输入”应等于前一单元的“输出”,而其他级联调整则由此更改引起。为了更好地理解交叉操作,图4中示出了示例,其中图4(a)示出了双亲个体。假设这两个父个体的分离位置分别是第三和第四个单元,然后,图4(b)示出相应的生成子代,并且红色数字表示表示表示有效CNN的逻辑的交叉操作之后所需的相应变化。

变异操作通常在GAs中执行全局搜索,探索搜索空间以获得有希望的性能。它在一个产生的后代身上起作用,这个后代具有预先定义的概率和允许的突变类型。基于该编码策略设计了可用的变异类型。在该算法中,可用的变异类型如下:

1) 添加(添加RBU、添加DBU或将PU添加到所选位置);

2) 移除(移除所选位置的单元);

3)修改(修改单元的编码信息在选定的位置)。

详细介绍了该算法中的变异操作在算法5中。由于所有生成的子代对变异使用相同的例程,算法5出于简单的原因仅显示一个子代的过程。注意如果后代没有变异,它们将保持不变。此外,还将根据交叉操作中突出显示的组成有效CNN的逻辑自动执行一系列必要的调整。为了更好地理解突变,图5示出了关于“添加RBU”的示例,其中图5(a)示出了用于突变的选定个体和随机初始化的RBU,图5(b)示出了突变个体。图5(b)中的红色数字还意味着在执行突变时所需的改变。在提出的交叉和变异操作中,所有这些必要的改变都是自动进行的。

4.环境选择

在环境选择中,从当前种群中选择一个N大小的个体种群,即Pt∪Qt,作为下一代的亲本个体。理论上,一个好的种群具有收敛性和多样性的特征[30],以防止陷入局部极小[48]、[49]和过早收敛[44]、[45]。在实践中,父母个体应该由最适合趋同的个体和适应度在多样性上存在显著差异的个体组成。为此,我们将有目的地选择最适合的个体,以及通过二元竞赛选择[50]、[51]选择的N-1个个体作为父个体,以产生新种群的后代。明确选择下一代的最佳亲本是GAs中“精英主义”机制的实现[52],它可以防止种群的性能随着进化的进程而降低。

算法6给出了该算法中环境选择的细节。具体地说,给定当前种群Pt和生成的后代种群Qt,用第2-6行所示的二元锦标赛选择来选择N个个体。在那之后,最好的个人从Pt∪Qt(见第7行)中选择pbest(即具有最高适应度的个体),然后检查pbest是否已被选入Pt+1。从Pt+1中选择的随机值,如果Pt+1中不存在,则将被pbest替换(见第8-10行)。注意,Qt中的后代应该在环境选择之前对其适应度进行评估,因为二元竞赛选择基于适应度工作。

实验设计

实验旨在验证所提出的自动CNN架构设计算法是否能够在图像分类任务上取得良好的性能。在本节中,我们将首先介绍所选择的对等竞争对手(在第IV-A节中),并对所提出算法的性能进行比较,然后重点介绍所采用的基准数据集(在第IV-B节中)和参数设置(在第IV-C节中)。

A. Peer Competitors

为了证明该算法的优越性,选择不同的竞争对手进行比较。特别是,所选择的同行竞争者可以分为三类。

第一类包括最先进的CNN,其架构是手工制作的,具有广泛的领域专业知识:DenseNet[18]、ResNet[17]、Maxout[53]、VGG[54]、Network in Network[55]、Highway Network[56]、All CNN[57]和FractalNet[58]。此外,考虑到ResNet的良好性能,我们在实验中使用了两个不同的版本,分别是具有101层的ResNet和具有1202层的ResNet,分别标记为ResNet(深度=101)和ResNet(深度=1202)。由于其出色的表现,近年来,这一类别的大多数竞争对手都赢得了大型视觉挑战赛的冠军[59]。选择这些最新CNN的目的是验证所提出的自动CNN体系结构设计算法是否能够显示手工CNN的竞争性能。

第二部分介绍了具有半自动方法的CNN体系结构设计算法,包括遗传CNN[19]、层次进化[20]、EAS[21]和Block-QNN-S[22]。

第三种是大规模Evo-lution[23]、CGP-CNN[24]、NAS[25]和MetaQNN[26],它们以完全自动的方式设计CNN架构。

B. Benchmark Data Sets(基准数据集)

cnn通常通过观察分类性能来执行图像分类任务以比较其性能。对于最新的CNNs,最常用的图像分类基准数据集是CIFAR10和CIFAR100[29],而对于CNN体系结构设计算法,由于CIFAR100对于手头的分类任务有大量的类,因此它的挑战性更大,所以广泛使用的基准数据集只有CIFAR10。考虑到采用的竞争对手涵盖了最先进的cnn和体系结构设计算法,实验中选择了CIFAR10和CIFAR100作为基准数据集。

CIFAR10和CIFAR100是两种应用广泛的图像分类基准数据集,用于识别鸟类、船只和飞机等自然目标。每组有50000张训练图像和10000张测试图像。CIFAR10与CIFAR100的区别在于,CIFAR10是10类分类,而CIFAR100是100类分类。然而,每一个基准都有几乎相同数量的每一类训练图像,即每一类CIFAR10有5000个训练图像,而CIFAR100有500个训练图像。

图6示出了用于参考的来自每个基准的图像,其中每一行中的图像表示来自同一类的图像,并且左列中的单词表示对应的类名。从图6可以看出,在每个图像中要识别的对象彼此具有不同的分辨率,与背景混合,并且占据不同的位置,这通常增加了正确识别对象的难度。基于cho-sen对等竞争对手的惯例[17]-[26],CIFAR10和CIFAR100在输入到所提出的算法之前,通过在一幅图像的每一侧填充四个零来增强,然后随机裁剪到原始大小,然后随机水平翻转。

C. Parameter Settings

相比之下,我们提取的是同行竞争对手在其开创性论文中报告的结果,而不是自己执行的结果。原因是报告的结果通常是最好的。这样做,就不需要设置同行竞争对手的参数。对于所提出的算法,我们遵循所有参数都是根据它们的常用值设置的原则,以降低研究人员的难度,他们希望使用所提出的算法为他们的研究数据寻找最佳CNN架构,即使他们没有GAs方面的专业知识。特别地,将种群规模和最大世代数设为20,交叉和变异概率分别设为0.9和0.2。根据机器学习社区的惯例,验证数据以1/5的比例从训练数据中随机分离出来。最后,在相同的测试数据上对所有分类错误率进行评估,以进行比较。

在评估适应度时,每个人都接受128批的SGD训练。SGD的参数设置也基于同行竞争对手的约定。具体来说,动量设定为0.9。学习率初始化为0.01,但在第二个到第150个历元期间的预热设置为0.1,并在第250个历元除以10进行缩放。重量衰减设置为5×10-4。此外,如果在训练过程中记忆不清,则个人的适应度设置为零。当进化过程结束时,在相同SGD设置的原始训练数据上重新训练最佳个体,并报告测试数据上的错误率以供比较。考虑到该算法的启发性和昂贵的计算成本,对最优个体进行了5次独立运行的训练。由于所有被选择进行比较的同行竞争对手只显示他们的最佳结果,无论他们执行了多少次,因此本文在五个独立试验中给出了该算法的最佳结果,以便进行公平的比较。

此外,根据DenseNet的设计,DB中k的可用选择为12、20和40,并且DB中的最大卷积层被指定为10(当k=12和k=20时)和5(当k=40时)。CNN中rbu和dbu的最大数目都设置为4。DBU和RBU中的DBs和RBs的数目分别设置为3到10。注意,这些设置主要基于我们可用的计算资源,因为超出这些设置的任何数字都很容易从内存中呈现出来。如果用户的计算平台配备了更强大的gpu,他们可以将数字设置为任意数字。该算法在Nvidia-GeForce-GTX-1080ti三块GPU卡上进行了实验,并在PyTorch[60]设计的基于GPU的并行框架上实现。这些代码在https://gitlab.ecs.vuw.ac.nz/yanan/ea-cnn上提供。

实验结果

在实验中,我们研究了所提出的算法的性能,不仅是分类误差,而且参数的数量,以及计算复杂度,以便与所选择的对等竞争对手进行综合比较(如第V-a节所示)。由于很难从理论上分析每个竞争对手的计算复杂度,因此使用消耗的“GPU天数”作为计算复杂度的指标。具体地说,GPU天数是通过将使用的GPU卡的数量与为寻找最佳架构而执行的算法的天数相乘来计算的。例如,针对CIFAR10数据集,所提出的算法在三个GPU卡上执行了九天,因此,相应的GPU天数是27,即用九(天)乘以三(使用的GPU卡)。显然,目前最先进的cnn手工制作没有关于“GPU日”的数据,此外,我们还提供了该算法在所选基准数据集上寻找最佳架构的进化轨迹,这有助于读者了解该算法是否与所采用的算法收敛参数设置(见第V-B节)。最后,在第V-C节中提供了所发现的最佳架构,这可能为研究人员手工制作CNN架构提供有用的知识。

A、 性能概述

表1显示了所提出算法的实验结果和所选择的同行竞争对手。为了便于调查比较,表一被六条水平线分成五行。第一行表示每个列的标题,第二行、第三行和第四行表示最先进的同行竞争对手,其架构分别是手动设计、半自动和自动CNN架构设计算法。第五行给出了该算法的结果,该算法是CNN体系结构设计中的一种自动算法。此外,表1中的符号“—”表示相应的同行竞争对手没有公开报告结果。

如表一所示,AE-CNN的表现优于为CIFAR10手工设计的所有最先进的同行竞争对手。具体来说,AE-CNN的分类误差比DenseNet(k=12)和FractalNet低约1.0%,比ResNet(depth=101)、VGG和All-CNN低约2.1%,比ResNet(depth=1202)和High-way网络低3.5%,甚至比Maxout和Network-in网络低5.0%。在CIFAR100上,AE-CNN的分类错误率显著低于Maxout, Network in Network,Highway Network, and All-CNN,分类错误率略低于DenseNet(k=12)、ResNet(深度=101)、ResNet(深度=1202)和VGG,与FractalNet的性能相似,但仍优于FractalNet。AE-CNN在CIFAR10和CIFAR100上演化出的CNN参数数目均大于DenseNet(k=12)和ResNet(depth=101),但远小于ResNet(depth=1202)、VGG和FractalNet。

与半自动同行竞争对手相比,AE-CNN在CIFAR10和CIFAR100上的表现都要比遗传CNN好得多。尽管分层进化在CIFAR10上显示出比AE-CNN更好的性能,但是AE-CNN只消耗1/10gpu天,而在CIFAR10上,分层进化只消耗1/10gpu天。与AE-CNN相比,Block-QNN-S在CIFAR10上的性能稍差,但在CIFAR100上的性能稍好,而AE-CNN消耗的GPU天数是Block-QNN-S消耗的GPU天数的1/3,而且AE-CNN发现的最佳CNN比Block-QNN-S的参数少,EAS和AE-CNN在CIFAR10上的分类误差几乎相同,而AE-CNN进化出的最佳CNN只有2.0M的参数,仅为EAS的1/11。综上所述,与半自动同行竞争对手相比,AE-CNN显示了竞争性能,但参数数量明显较少。需要注意的是,在使用这类算法时,仍然需要领域专业知识。例如,对于CIFAR10上最好的CNN,EAS只需要10个GPU天,而CIFAR10是基于已知性能相当好的基本CNN。因此,就所消耗的GPU天数进行比较与所提出的AE-CNN算法是不公平的,该算法是完全自动的,无需使用任何人力专业知识和/或额外资源。

在自动竞争对手中,无论是在CIFAR10还是CIFAR100数据集上,AE-CNN在分类错误、参数个数和所消耗的GPU天数方面都显示出最佳性能。具体来说,AE-CNN在CIFAR10上的分类错误率为4.3%,而来自竞争对手的最佳和最差分类错误率分别为5.4%和6.92%。此外,AE-CNN的分类误差也比MetaQNN低。在CIFA100上,AE-CNN的分类误差比大规模进化的分类误差低2.15%,参数个数为540万,比大规模进化的分类误差(440万)小得多。此外,AE-CNN比CIFAR10和CIFAR100上的大规模进化、NAS和MetaQNN消耗更少的GPU天。比较表明,该算法在所属的自动对等竞争对手中取得了最好的性能。

AE-CNN优于大规模Evo-lution、CGP-CNN、NAS和Meta-QNN的理由如下。首先,大规模进化不采用交叉算子,它提供了局部搜索能力。因此,基于遗传算法的设计会降低其性能。其次,CGP-CNN采用固定长度编码策略来设计最佳的CNN架构。为了使编码策略有效,CGP-CNN在体系结构设计中必须预先定义CNN的最大长度。从文献[24]可以看出,CGP-CNN的预定最大长度小于AE-CNN确定的最佳长度。最后,基于强化学习设计了NAS和Meta-QNN。由于在使用强化学习方法时不计算适应度值,因此基于强化学习的方法在相同性能下通常比遗传算法消耗更多的计算资源[7]。预期,在可用的计算资源下,NAS和元QNN的每种形式都比AE-CNN差。

B、 演化轨迹

当进化算法用于解决现实问题时,我们通常希望知道它们在终止时是否已经收敛。更好的观察方法是绘制进化轨迹。在这一部分中,我们提供并分析了所提出的算法在所研究的基准数据集上的演化轨迹。为了达到这一目的,我们首先收集每一代中每个个体的分类精度,然后绘制统计结果。

图7示出了所提出算法的进化轨迹,其中图7(a)和(b)分别示出了CIFAR10和CIFAR100上的进化轨迹。在图7中,水平轴表示代数,垂直轴表示分类精度;红线表示同一代个体的平均分类精度,而浅绿色区域由每一代个体的最佳和最差分类精度轮廓。

从图7(a)可以看出,从第一代到第三代,平均分类精度急剧增加,然后随着进化过程的进行而稳步提高,直到第14代;从那时起,平均分类精度从约75%显著增加到约95%。最后,提出的算法在终止时收敛。从浅绿色区域的下边界可以看出,前两代的分类精度最差为零,这是因为随机初始化的体系结构由于内存不足而无法在使用的GPU上运行;从第三代开始,内存不足的个体由于其不具竞争力的适应度而从种群中被淘汰,并且分类精度稳步提高,直到算法终止,尽管在第四代时有例外。从浅绿色区域的上边界可以看出,随着进化过程中平均分类精度的不断提高,最优性能几乎保持不变。此外,最优分类精度和最差分类精度之间的差异也变小,这意味着种群收敛到一个稳定状态。

从图7(b)也可以看到类似的情况。具体来说,从第一代到第四代,平均分类准确率从约30%提高到约45%,而在第三代则略有下降。从第四代开始,平均分类精度一直提高到第14代,然后从第14代的50%左右提高到第17代的79%左右;之后,平均分类精度收敛到进化过程结束。在前三代中,由于随机初始化的失忆个体,最差分类精度保持在零;从第四代开始,除第十代和第十五代外,最差分类精度提高到第二十代。从最优分类精度的演化轨迹可以看出,最优分类精度的提高趋势与平均分类精度的提高趋势基本一致,同时也体现了第17代的收敛性能。

从图7(A)和图7(b)可以看出一个共同的趋势,即最佳分类精度(即浅绿色区域的上边界)不会降低,这是通过第III-e节详述的利用精英主义实现的,即具有最佳适应度的个体无条件地保留到下一代。综上所述,该算法在GAs的默认参数设置范围内收敛,即使用户没有GAs方面的专业知识,也可以帮助用户使用该算法为自己的数据找到最佳的CNN架构。但是,如果有更多的计算资源可用,则最大生成数和种群大小可以设置为更大的数。

在本节中,表II和表III分别提供了由该算法在CIFAR10和CIFAR100上找到的最佳CNN架构。

从表II和III可以看出,CIFAR10上的最佳架构由9个单元组成,这些单元是按照第III-B节中提出的编码策略设计的,总共有38层,由34个卷积层和4个池层组成;而CIFAR100上的最佳架构由6个单元组成,由21个单元组成层,包含17个卷积层和4个池层。

与基于DBs或RBs的最新cnn相比,基于这两个块的自动发现体系结构具有更简单的体系结构和更好的性能。这可以作为手工制作CNN架构的先验知识,其中集成块可能更有效。此外,CIFAR100通常被视为比CIFAR10更复杂的基准,研究人员在处理CIFAR100时通常考虑比CIFAR10具有更多层的CNN架构。然而,根据表II和表III所示的架构,CIFAR100的最佳架构的层数比CIFAR10的层数要少得惊人。为此,通过进化搜索找到最佳的体系结构也可以提供有用的领域专业知识,这与我们的常识形成了对比。


本文的目标是开发一种基于GAs的CNN体系结构设计算法,该算法能够在有限的计算资源的基础上,以完全自动化的方式设计/搜索/学习/进化给定任务的最佳CNN体系结构。该编码策略建立在具有可变长度表示的最新块上,提出了可变长度个体的交叉算子和相应的变异算子,成功地实现了这一目标。在积木的基础上,可以加快CNN的架构设计。对于不同复杂度的任务,可变长度的个体可以自适应地进化出合适的CNN深度。所提出的交叉算子和所设计的变异算子为算法提供了有效的局部搜索和全局搜索能力,从而使算法能够找到最佳的CNN结构。该算法在CIFAR10和CIFAR100图像分类数据集上进行了验证,对比了人工设计的9个最新CNN、4个对等竞争对手半自动设计CNN体系结构和5个对等竞争对手全自动设计CNN体系结构。结果表明,提出的算法优于所有最新的CNNs算法手工制作和所有来自自动分类的同行竞争者在分类错误率方面。此外,与同类竞争对手相比,该算法所需的GPU时间也要少得多。此外,该算法还表现出了与半自动竞争对手的竞争性能。今后的工作重点是切实加快体质评价工作。

你可能感兴趣的:(2020-04-02 【遗传算法】Completely Automated CNN Architecture Design Based on Blocks)