2020-03-18【遗传算法-加速适应度评估】 Automatically Designing CNN Architectures Using Genetic Algorithm for Im...

创新:

提出了一种基于遗传算法的CNNs体系结构自动设计方法,能够自动产生一种处理图像分类任务的CNN体系结构。该算法在工作之前不需要任何预处理,在发现的CNN上也不需要任何后处理,这意味着它是完全自动的。与其他架构发现演算法相比,所提出的演算法平均只占用一个百分比的计算资源。

1.CNNs的深度不局限于一个预先定义的数目,而是在进化过程中,通过寻找对给定数据具有最佳分类精度的CNN来发现最佳深度。

2.该算法直接引入了跳跃连接(The skip connection),理论和实验都证明了跳跃连接在有效训练深层结构中的优越性。以这种方式,进化的cnn能够通过使用深层架构处理复杂数据,避免梯度消失(GV)问题[33]。此外,这种设计还可以减少搜索空间,以便在有限的时间内获得最佳性能。此外,与其他性能相似的模型相比,该算法所改进的体系结构具有更少的参数。

3.完全自动化,不需要人工干预的CNN架构。

4.一个异步计算组件来加速计算,一个cache组件来缩短适应度评估时间。

提出的算法:

1.该算法的框架

具体地说,通过给遗传算法和图像分类数据集一组预先定义好的cnn构造块、种群大小以及最大生成数,该算法通过一系列进化过程开始工作,最后找出CNN的最佳结构来对给定的图像数据集进行分类。

在进化过程中,使用预先设定的编码策略对预先设定的构造块(第1行)进行编码,并使用预先设定的种群大小对种群进行随机初始化。

然后,当前生成的计数器初始化为零(第2行)。

在进化过程中,在给定的数据集(第4行)上评估编码CNN特定架构的每个个体的适应度。之后,根据适应度选择亲本个体,然后由遗传算子产生新的后代(第5行)。

然后,通过环境选择从当前种群中选出存活到下一代的个体种群(第6行)。具体地说,当前种群由父种群和生成的子种群组成。最后,计数器增加一个,并且继续进化,直到计数器超过预定义的最大生成。

如图2所示,所提出的算法遵循GA的标准流水线(在算法1的第5行集中描述了选择、交叉和变异的阶段,以及图2所示的后代种群)。注意,遗传算子由交叉和变异操作组成。

算法框架

2.初始化

如第2节所述,CNN由卷积层、池化层和偶尔的完全连接层组成。CNN的表现在很大程度上依赖于它的深度,跳过连接可以使深度变成现实。在所提出的编码策略中,我们设计了一个新的构造块,直接使用跳跃连接(skip-layer)来代替形成CNN时的卷积层。此外,在建议的编码策略中丢弃完全连接的层(原因将在本小节后面给出)。总之,所提出的编码策略中,仅使用跳跃层(skip-layer)和池化层(pooling)来构造CNN。

具体地说,跳跃层由两个卷积层和一个跳跃连接组成。跳跃连接从第一卷积层的输入连接到第二卷积层的输出。跳跃层的示例如图3所示。如上所述,卷积层的参数是特征映射的数目、滤波器大小、步长和卷积操作类型。在所提出的编码策略中,我们对滤波器大小、步长和卷积运算使用相同的设置。特别地,滤波器和步长分别设置为3×3和1×1,并且仅使用相同的卷积运算类型。为此,为跳跃层编码的参数是两个卷积层(分别表示为F1和F2)的特征映射的数目。此外,对于内核大小和步幅大小,所提出的编码策略中使用的池化层被设置为2×2。为此,为池化层编码的参数只是池类型(表示为P 1)。请注意,本小节稍后将解释此设计的原因以及采用此设计的设置。

跳跃层

算法2显示了种群初始化的细节。简单地说,T个个体以相同的方式初始化,然后存储到P0中。在个体初始化过程中,个体的长度(表示为L)表示对应CNN的深度,首先被随机初始化(第3行)。然后,创建一个包含L个节点的链表(第4行)。之后,配置每个节点(第5-20行),然后将链表存储到P0(第21行)。在每个节点的配置期间,从(0,1)(第6行)随机生成一个数字r。如果r<0.5,则通过将此节点的类型属性设置为1,将其标记为跳过层。否则,此节点通过将其类型设置为2来表示池层。在跳过连接层的情况下,特征映射的编号随机生成,然后分别分配给node.F 1和node.F2(第7-10行)。否则,池类型由掷硬币的概率决定。尤其是,当概率低于0.5时,池类型node.P1设置为max,否则为mean(第11-19行)。

初始化

接下来,我们将详细说明放弃完全连接层的原因,在跳跃层中使用两个卷积层,以及所提出算法中跳跃层和池层的设置。通常,多个完全连接的层被添加到CNN的尾部。然而,全连接层由于其紧密的连接容易导致过拟合现象[40]。为了减少过度拟合,通常使用随机移除一部分连接[41]。但是,每个移除将引入一个附加参数。只有正确地指定参数才能使相应的CNN具有良好的性能。同时,全连接层的数量和每个全连接层的神经元数量是额外的参数,很难调整。如果将完全连接的层合并到所提出的编码策略中,搜索空间将大大扩大,从而增加搜索最佳CNN结构的难度。在跳跃层中使用两个卷积层的灵感来自ResNet的设计,并且在文献[10]、[11]、[14]、[15]中实验证明了这种跳跃层的有效性。但是,ResNet的每个跳过层中的特征映射的大小被设置为相等。在我们提出的编码策略中,特征映射的大小可以不同,这被认为是更灵活的。此外,将卷积运算类型设置为相同,并使用1×1步长,可以使输入数据的维数保持不变,这对于这种自动设计来说更加灵活。请注意1×1步幅不会改变图像大小。就过滤器和内核大小的设置以及池层中的跨距大小而言,它们都基于现有手工CNN的设计[10],[11]。此外,指定此类设置的另一个重要原因是基于我们在手动调整CNN体系结构方面的专业知识。这些设置的有效性将在第5节中显示。

3.适应度评估


算法三

算法3详细描述了种群Pt中个体的适应度评估。简单地说,给定包含所有用于评估适应度的个体的总体Pt和要在其上发现CNN最佳结构的图像分类数据集,算法3以相同的方式评估Pt的每个个体,最后返回包含已评估适应度的个体的Pt。具体地说,如果适应度评估是针对初始化的总体,即P0,则创建全局缓存系统(表示为缓存),存储具有不可见架构的个体的适应度(第1-4行)。对于Pt中的每个个体(由个体表示),如果在C ache中找到个体,则直接从Cache(第6-8行)检索其适合性。否则,将个体异步放置在可用的GPU上进行其适应度评估(第9-13行)。请注意,从缓存中查询个人是基于个人的标识符的。理论上,可以使用任意标识符,只要它们能够区分编码不同体系结构的个体。在所提出的算法中,224散列码[42]作为对应的标识符,该散列码已被大多数编程语言实现,就编码的体系结构而言。此外,该个体被异步地放置在可用GPU上,这意味着我们不需要等待下一个个体的适应度评估,直到当前个体的适应度评估完成,而只需立即将下一个个体放置在可用GPU上。

算法4

输入:个体、可用的GPU、训练时段数、全局缓存、训练数据和来自给定图像分类数据集的验证数据。

输出:个体及其适应度。

算法4给出了评价个体适应度的细节。首先,对单个的CNN进行解码,并在给定的图像分类数据集的基础上,在CNN(第1行)中加入一个分类器。在提出的算法中,使用softmax分类器[43],并且特定的类数由给定的图像数据集确定。解码CNN时,在卷积层的输出中添加整流激活函数[44]和随后的批量规范化操作[45],卷积层的输出基于现代CNNs的惯例[9],[10]。此外,当跳跃层的空间数与输入数据的空间数不同时,向输入数据添加卷积层,卷积层具有单位滤波器和单位跨距,但具有相应数目的特征映射[9]、[10]。之后,利用给定的GPU(第4行)对训练数据进行随机梯度下降(SGD)算法[46]训练CNN,并根据验证数据(第5行)计算分类精度。注意,使用softmax分类器和SGD训练方法是基于深度学习社区的惯例的。当训练阶段结束时,验证数据的最佳分类精度被设置为个体的适应度(第10行)。最后,将个体的标识符和适应度关联起来并放入缓存(第11行)。

接下来,给出了设计这种异步和缓存组件的原因。综上所述,由于CNNs上的训练是非常耗时的,根据具体的体系结构,训练时间从几个小时到几个月不等,因此本文提出的算法旨在加快适应度评估的速度。具体来说,异步组件是一个基于GPU的并行计算平台。由于计算梯度的计算性质,深学习算法通常放在gpu上以加快训练速度[47]。事实上,现有的深度学习库,如Tensor-flow[48]和Pythorch[49],支持对多个GPU的计算。然而,它们的并行计算是基于数据并行和模型并行管道。在数据并行流水线中,输入的数据被分成几个较小的组,每个组放在一个GPU上进行计算。原因是一个GPU有限的内存无法同时有效地处理整个数据。在并行流水线模型中,一个模型被划分为几个较小的模型,每个GPU携带一个较小的模型。显而易见的原因是一个GPU的计算能力有限,无法运行整个模型。然而,设计的平行管道显然不属于这两条管道中的任何一条,而是在更高的层次上。因此,设计这种异步组件是为了充分利用GPU的计算资源,特别是对于基于种群的算法。此外,如果问题可以划分为几个独立的子问题,则异步组件在解决大型问题时被广泛使用。通过在不同的计算平台上并行执行这些子问题,可以缩短整个问题的总处理时间。在过去,进化算法通常被用来解决适应度评估不是时间消耗的问题,并且在开发这种异步组件时没有关键的需要。有时,它们只是使用基于所采用的编程语言的内置组件。然而,几乎所有这些内置组件都是基于cpu的,它们不能有效地训练深层神经网络,主要是因为神经网络的加速平台是基于gpu的。此外,每个个体的适应度评估是独立的,这正好满足了使用该技术的场景。基于上述原因,该算法设计了一个异步组件。cache组件还用于加速适应度评估,这是基于以下考虑:1)如果其架构没有改变,则存活到下一代的个体不需要再次评估适应度;2)已评估的架构,可以在下一代中通过突变和交叉操作再生。

4.生成子代

生成子代的细节如算法5所示,该算法由两部分组成。第一个是交叉(第1-18行),第二个是突变(第19-26行)。在交叉操作过程中,将完全生成| Pt |后代,其中|·|测量集合的大小。具体来说,首先选择两个父母,每个父母都是根据更好的适应度从两个随机选择的个体中选择的(第3-7行)。这种选择被称为二元竞赛选择[50],在GAs中广泛用于单目标优化。一旦选择了父节点,将生成一个随机数(第8行),以确定是否进行交叉。如果生成的数目不低于预定义的交叉概率,则将这两个父个体作为后代放入Qt(第16行)。否则,将每个父个体随机分成两部分,并交换来自两个父个体的两部分以创建两个后代(第10-14行)。在变异操作中,首先生成一个随机数(第20行),如果生成的数低于pm(第21-25行),则在当前个体上形成变异。在对个体进行变异时,从当前个体中随机选择一个位置(表示为i),并基于pl中定义的概率从所提供的变异列表中选择一个特定的变异操作(表示为m),然后对位置i执行m。

在所提出的算法中,变异列表中定义的可用变异操作有:

•添加带有随机设置的跳过层;

•添加具有随机设置的池层;

•移除选定位置的层;

•随机改变

所选位置的构建基块。

其次,给出了设计这种交叉算子和基于给定概率表选择变异算子的动机。首先,设计的交叉算子受传统遗传算法中单点交叉[37]的启发。然而,单点交叉只为等长个体设计。设计的交叉算子适用于长度可变的个体。尽管所设计的交叉算子很简单,但它可以提高发现更好的CNNs结构的性能,这将在第5节中得到实验证明。其次,现有的算法使用相同的概率来选择特定的变异操作。在该算法中,所提供的变异操作是以不同的概率选择的。特别地,我们提供了一个更高的概率为“添加跳跃层”突变,这将鼓励一个更高的概率,以增加CNN的深度。对于其他的变异操作,我们仍然使用相同的概率。这种设计背后的动机是,更深入的CNN往往具有更强大的能力,如前所述。尽管“添加池层”也可以增加CNN的深度,但是使用一个池层,输入数据的维数将减少到一半,从而导致发现的CNN不可用。为此,我们并没有把更高的概率放在上面。

环境选择:

算法6

算法6显示了环境选择的细节。首先,利用二元竞赛选择从当前种群(Qt∪Pt)中选择| Pt |个体,然后将这些选择的个体放入下一个种群(表示为Pt+1)(第2-6行)。其次,选择最佳个体,检查是否已放入Pt+1中。如果没有,它将替换Pt+1中最差的个体(第7-10行)。

原则上,只有为下一代选择最优秀的个体才可能导致过早收敛现象[51],这将导致算法陷入局部最优[23],[52]。如果我们不为下一代选择最好的个体,算法就不会收敛。原则上,一个理想的种群不仅应该包含好的种群,还应该包含相对不好的种群,以增强多样性[53],[54]。为此,二进制锦标赛选择通常用于这样的目的[50],[55]。然而,仅使用二元竞赛选择可能会错过最佳个体,导致算法没有朝着更好的方向发展。因此,我们显式地将最优个体加入到下一个种群中,这在进化算法中被视为精英策略[56]。


补缺:

在CNN的变体中,有一种趋势是它们的架构越来越深。例如,LeNet5的深度是6,VGG是16,而ResNet[11]的深度是1202。这种设计背后的原理是,更深层次的CNN通常具有更强大的能力来处理复杂和大规模的数据。

一般来说,CNNs体系结构的设计算法可以根据其基本技术分为两类:

一.使用进化算法。如:genetic CNN method (Genetic CNN) [13], the large-scale evolution method (Large-scale Evolution) [14], the hierarchical representation method (Hierarchical Evolution) [15] and the Cartesian genetic programming method (CGP-CNN) [16].    没有充分利用进化算法的优点,导致计算量大,分类精度不高。

二.使用基于强化学习的算法。如:the neural architecture search method (NAS) [18], the meta-modelling method (MetaQNN) [19], the efficient architecture search method (EAS) [20] and the block design method (Block-QNN-S) [21]. 由于强化学习的性质,比第一种需要更多的计算资源。

depending on whether expertise in CNNs is required or not in using these algorithms, they can also be classified into the automatic and the semi-automatic categories. The first includes Large-scale Evolution, CGP- CNN, NAS and Meta-CNN, while the second is composed of Genetic CNN, Hierarchical Evolution, EAS and Block- QNN-S.

GV问题是指在深层神经网络的反向传播训练中梯度变小或爆炸

跳跃连接:跳跃连接是指那些连接不相邻层神经元的连接。跳跃连接缩短了反向传播的层数,因此应减轻GV问题。如上所述,CNN越深,它处理复杂数据的能力就越强。结合不跳过的连接,具有跳过连接的CNN可以具有深度架构所具有的能力,并且还可以有效地进行训练。【S. Hochreiter and J. Schmidhuber, “Long short-term memory,”Neural Computation, vol. 9, no. 8, pp. 1735–1780, 1997.】

遗传算法:流程图如图2所示。具体来说,首先随机初始化个体群(即具有架构变体的cnn),然后评估每个个体的适合性。适应度是根据待优化问题的上下文(即CNNs在特定图像分类任务上的性能)由一个被称为适应度函数的定义函数来度量的。函数的输入是编码在个体中的决策变量。之后,通过选择操作,选择适合性较好的个体,希望能产生适合性较好的后代。具体地说,通过交换或改变所选亲本个体的编码信息,即通过交叉和变异操作,生成新的后代。对这些产生的后代进行适应度评估,然后通过环境选择,从当前种群(由亲本种群和产生的后代组成)中选择存活到下一代的种群。通过重复这些操作,期望在遗传算法终止时从种群中找到最优解。注意,在我们的实验中,终止遗传算法的典型标准是预定义的最大生成数,比如20。

[10]  G. Huang, Z. Liu, K. Q. Weinberger, and L. van der Maaten,“Densely connected convolutional networks,” in Proceedings of 2017 IEEE Conference on Computer Vision and Pattern Recognition,Honolulu, HI, USA, 2017, pp. 2261–2269.

[11]  K. He, X. Zhang, S. Ren, and J. Sun, “Identity mappings in deep residual networks,” in Lecture Notes in Computer Science.Amsterdam, the Netherlands: Springer, 2016, pp. 630–645.

[14] E. Real, S. Moore, A. Selle, S. Saxena, Y. L. Suematsu, J. Tan, Q. Le, and A. Kurakin, “Large-scale evolution of image classifiers,” inProceedings of Machine Learning Research, Sydney, Australia, 2017,pp. 2902–2911.

[15] H. Liu, K. Simonyan, O. Vinyals, C. Fernando, and K. Kavukcuoglu, “Hierarchical representations for efficient architecture search,” in Proceedings of 2018 Machine Learning Research, Stockholm, Sweden, 2018.

你可能感兴趣的:(2020-03-18【遗传算法-加速适应度评估】 Automatically Designing CNN Architectures Using Genetic Algorithm for Im...)