APP下载

基于无梯度进化的神经架构搜索算法研究综述

2020-09-18尚迪雅洪振厚曾庆亮

计算机工程 2020年9期
关键词:搜索算法网络结构变异

尚迪雅,孙 华,洪振厚,曾庆亮

(1.新疆大学 软件学院 软件工程技术重点实验室,乌鲁木齐 830002; 2.深圳大学 光电工程学院 光电子器件与系统教育部/广东省重点实验室,广东 深圳 518060)

0 概述

近年来,随着人工智能技术的快速发展,自动化机器学习(Automated Machine Learning,AutoML)[1-2]已成为机器学习领域[3-5]的一个热点研究方向,并广泛应用于计算机视觉[6]、数据挖掘[7]、图像分割[8]和自然语言处理[9]等领域。

机器学习包括统计机器学习和深度学习2个方面[10]。统计机器学习在处理问题时一般包括数据预处理[11]、特征工程[12]和模型选择[13]等内容,这些操作均需要手动完成。在深度学习领域,神经网络结构在通常情况下也需人工设计,为了得到一个效果较好的神经网络结构,往往需要耗费很多时间和精力。为解决上述问题,AutoML应运而生。AutoML包含针对统计机器学习的自动化算法和针对深度学习的自动化算法2个部分。针对统计机器学习的自动化算法包括自动特征工程[14]和自动模型选择[15-16]等内容。本文的研究对象是针对深度学习的自动化算法,即自动化深度学习。自动化深度学习算法是一种特殊的机器学习算法,其可以获得高性能且十分灵活的网络结构。自动化深度学习算法用概念组成的网状层级结构来表示网络世界,每一个概念由更简单抽象的概念相连而成,且前者可通过后者计算而得。自动化深度学习根据当前问题的特点,通过自动搜索网络结构得到更多样且性能更好的神经网络结构,由此减少人工设计网络所花费的时间和人力并提高搜索效率和神经网络的性能。

网络架构自动搜索方法包括多种搜索策略,以进化算法为搜索策略的神经网络架构搜索(Neural network Architecture Search,NAS)算法,按照复杂程度可分为基于神经元的神经架构搜索算法、基于CNN的神经架构搜索算法和基于DNN的神经架构搜索算法。本文分析并归纳这3类算法的特点和应用现状,并对神经架构搜索算法的未来发展方向进行展望。

1 神经网络架构搜索

随着深度学习技术的发展,网络结构由最初的LeNet[17](7层结构)发展到后来的AlexNet[18]、VGGNet[19]、GoogLeNet[20-21](22层结构)以及ResNet[22](152层结构)。网络结构越来越深,模型也变得越来越复杂,虽然这些模型足够灵活,但人工设计网络结构仍然需要大量的专业知识以及充足的时间,而且针对深度学习模型的调参优化也非常繁琐。众多的超参数和网络结构参数会产生爆炸性的组合,常规的随机搜索和网格搜索效率较低,因此,效率较高的NAS和模型优化引起了学者们的广泛关注。

NAS[23]可以针对特定数据集从初始时刻设计性能良好的模型。一般NAS问题可以被定义为搜索空间和搜索策略2个子问题。搜索空间定义了被优化问题的变量和参数等,其代表一组可供搜索的神经网络架构。搜索策略定义了使用什么算法可以快速、准确找到最优的网络结构参数配置。常见的搜索方法包括随机搜索、基于贝叶斯优化、基于进化算法、基于强化学习[24-25]和基于可微分神经架构搜索[26-27]等。本文以基于进化算法的NAS为研究对象,阐述进化算法、进化神经网络的发展历程,分析近年来较受关注的若干基于进化算法的神经架构搜索算法的特点和应用现状。

2 进化算法和进化神经网络

2.1 进化算法的发展

进化算法是一类算法的统称,为一个“算法簇”。进化算法借鉴与模拟生物界的多种生物现象来实现搜索过程,一般包括基因编码、种群初始化、交叉变异算子、经营保留机制等基本操作。进化算法簇主要包含遗传算法(Genetic Algorithm,GA)、进化策略(Evolutionary Strategies,ES)和进化规划(Evolutionary Programming,EP),后期又提出了遗传规划(Genetic Programming,GP)。

遗传算法[28]是模拟达尔文生物进化论中自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法。

进化策略[29]是一种模仿生物进化的求解参数优化问题的方法。与遗传算法不同的是,进化策略采用实数值作为基因,总是遵循均值为零、方差为某值的高斯分布变化规律来产生新的个体,然后保留最优的个体。

进化规划是在人工智能技术研究过程中提出的一种有限状态机进化模型,在此模型中机器状态基于分布的规律进行编译。文献[30]对进化规划进行改进,使其可处理实数空间的优化问题,并在变异运算中引入正态分布变异算子,使得进化规划成为一种优化搜索工具并广泛应用于很多实际问题。进化规划模拟生物种群层次上的进化,因此,在进化过程中主要强调生物种群行为上的联系,即依据种群层次上的行为进化而建立父、子代间的行为链,优秀的子代才有资格生存。

遗传规划[31]是一种自动搜索程序的算法,该算法是一种新的全局优化搜索算法,简单通用、鲁棒性强且对非线性复杂问题展现出很强的求解能力,因此被广泛应用于许多不同的领域。

从适应度的角度而言,遗传算法可用于选择优秀的父代(优秀的父代产生优秀的子代),而进化规划和进化策略则用于选择子代(优秀的子代才能存在)。遗传算法与遗传规划强调的是基于编码基因的链式优化与筛选,而进化规划和进化策略更着重于结果选择。

近年来,对于遗传算法、进化策略、进化规划和遗传规划的定义一直存在较多争议,且遗传算法的应用较为广泛,因此,在很多情况下,对于进化算法而言并没有进行明确地区分,通常将遗传算法称为进化算法。

进化算法是一种无梯度的优化算法,先随机生成一个种群(N组解),然后循环执行选择、交叉、变异,直到满足最终条件后停止循环。进化算法尽管有多个重要分支,但它们却有着共同的进化框架。假设P为种群,t为进化代数,P(t)为第t代种群,则进化计算的基本结构可以描述如下:

{

确定编码形式和搜索空间;

初始化各进化参数,并设置进化代数t=0;

初始化种群P(0);

计算初始化种群的适应度;

While(不满足终止条件) do

{

t=t+1;

利用选择操作从P(t-1)代中选出P(t)代群体;

对P(t)代种群执行进化操作;

计算P(t)代种群的适应度值;

}

}

2.2 进化神经网络

1989年MILLER等人提出神经进化的概念,利用遗传算法进行神经网络的进化,通过搜索行为空间可以在特定任务中取得更好的结果[32]。

神经网络是一种对人类智能结构的模拟方法,其通过对大量人工神经元的广泛并行互联,构造人工神经网络系统从而模拟生物神经系统的智能机理。进化计算是一种对人类智能的演化模拟方法,其通过对生物遗传和演化过程的认知,用进化算法去模拟人类智能的进化规律。

进化神经网络将进化算法的进化自适应机制与神经网络的学习计算机机制有机结合在一起,实现对动态环境的自适应。进化神经网络包括链接权值、网络结构和学习规则的进化,图1所示为神经网络的进化过程。

图1 神经网络的基本进化过程

3 基于无梯度进化的神经架构搜索算法

基于无梯度进化的NAS按照复杂程度可以分为基于神经元的神经架构搜索、基于DNN的神经架构搜索和基于CNN的神经架构搜索。

基于神经元的神经架构搜索是指神经网络结构是以神经元为基本单元,一个节点就是一个神经元,然后由神经元的堆叠来构造神经网络结构。其进化过程则是通过改变神经元之间的链接权重或拓扑结构,从最简单的单个神经元的结构开始搜索,直至得到符合当前问题的最优结构为止。

基于DNN的神经架构搜索是指当神经网络结构越来越复杂时,为了提高搜索效率,基本单元由固定的DNN层组成,一个节点就是一个DNN层。其进化过程则是通过一种共同进化的方式,增加神经网络的可复用性和可迁移性。

基于CNN的神经架构搜索是指随着CNN的广泛应用,为了能够自动构建CNN架构,而将CNN中的卷积层、池化层等操作作为基本单元,节点表示卷积操作、池化操作等操作类型。其进化过程主要采用经典的遗传算法,主要步骤包括初始化、选择、变异、交叉和适应度评估等。

3.1 基于神经元的神经架构搜索算法

经典的基于神经元的神经进化方式可以分为2种,一种是固定神经网络的拓扑结构,改变权重值,另一种是神经网络的拓扑结构和权重值都改变,从而实现神经进化。

3.1.1 神经网络拓扑结构固定的方式

在神经网络拓扑结构固定的方式中,通过改变权重值来进化神经网络结构。如图2所示,在一个全链接的神经网络结构中,网络拓扑结构是指一个隐藏的神经元层,每个隐藏的神经元分别链接到每个网络的输入和每个网络的输出,进化可以通过不断尝试变异的方式来修改链接中间的权重值和偏置值,从而改变神经网络的预测结果。

图2 全链接神经网络结构

3.1.2 权重及其形态改变的方式

链接权重并不是影响神经进化的唯一参数,神经网络的拓扑结构也会影响其效果。将遗传算法与神经网络相结合的经典算法之一是增强拓扑的神经进化网络(Neuro Evolution of Augmenting Topologies,NEAT)算法[33]。当用一个很复杂的神经网络来解决一个简单的问题时会造成层结构的浪费,因此,NEAT分析需要使用多少链接,忽略其中无用的链接从而构成更小的神经网络结构并提高运行效率。NEAT包括修改权重、添加节点和链接3种突变方式,在现有链接中插入节点。NEAT算法的基因编码、神经网络变异和交叉的具体过程如下:

1)NEAT的基因编码方式

NEAT的基因编码方式如图3所示,其中,Node Genes是指节点类型,用于存储网络中节点的信息,包括输入节点、隐藏节点和输出节点;Connect.Genes是指链接,用于存储节点间的信息,包括输入节点、输出节点、权重值(Weight)、连接方式(直接连接(Enabled)和间接连接(DISABLED))以及创新号(Innovation ID),其中,创新号在交叉过程中作为识别标准。

2)NEAT的神经网络变异方式

NEAT中的神经网络变异包括链接变异和节点变异2种类型。链接变异为添加链接,既链接2个以前未链接的节点,如图4(a)所示,新增加节点3和节点5之间的链接。在节点变异中,现有的链接被拆分,新节点被放置在旧链接之间的位置,旧链接被禁用,既旧链接变为Disable,2个新的链接被添加到基因组中,如图4(b)所示,在节点3和节点4之间增加了节点6,因此,节点3到节点4的链接变为Disable,新增节点3到节点6和节点6到节点4的链接。

3)NEAT的神经网络交叉方式

NEAT的神经网络交叉主要通过Innovation Number“对齐”父母的基因序列,若某链接父母都存在,则随机选择一个传给子代,该基因称为匹配基因;若某链接只存在父母一方,则将存在的那个基因传给子代,该基因称为不匹配基因。不匹配基因又分为过剩基因和不相交基因,均表示基因组中不存在的结构。孩子的基因序列应是父母基因的并集。图5所示为NEAT基因的交叉操作,通过Innovation ID匹配不同网络拓扑的基因组,Parent1和Parent2在节点和链接上具有相似的结构,但是它们也有区别,Innovation ID(显示在每个基因的顶部)能够显现哪些基因相匹配,对于相匹配的基因则选择随机遗传,如果有不匹配的基因,则继承具有更好适应度的亲本。这样即使没有任何拓扑分析,也可以创建一个新的结构,将双亲的重叠部分以及它们不同的部分进行组合。

图3 神经网络在NEAT中的表现形式

图4 NEAT的2种神经网络变异方式

图5 NEAT的神经网络交叉方式

NEAT算法能够将复杂的问题分割成较小且可以被优化的问题(子任务)来进行解决。

3.2 基于DNN的神经架构搜索算法

随着深度神经网络的发展,网络的深度和复杂程度不断增加,网络的拓扑结构也变得十分复杂,从而产生了数百万的超参数。研究人员在优化深度神经网络时不可能考虑到所有的参数,只能凭借经验或者实验优化小部分的参数,而那些没有被选中的参数也有可能具有重要的地位。为解决该问题,基于DNN的神经架构搜索应运而生,其通过自动搜索DNN的结构来找到更为合适的神经网络架构。

为了更好地优化DNN的架构设计,文献[34]提出经典CoDeepNEAT(Coevolution DeepNEAT)算法,该算法完全继承于NEAT算法。NEAT算法主要是通过优化拓扑结构和权重的方式,而CoDeepNEAT算法则采用一种结合拓扑结构和超参数实现共同进化的方式。

3.2.1 DeepNEAT算法

DeepNEAT算法与NEAT算法具有相同的进化方式,首先创建一个具有最小复杂度的群体,然后通过变异的方式给网络结构不断添加节点或者边,实现进化的过程;在交叉操作时,使用Innovation ID的形式,可以准确地表示在拓扑结构多样化的种群中基因之间的匹配关系;最后基于相似性度量将群体划分为物种,物种再不断进化形成新的物种,从而保证结构的创新性。

DeepNEAT算法与NEAT算法的主要区别在于,NEAT算法的最小单元是基于神经元构成的,而DeepNEAT算法中的节点则是一个DNN层,每一个节点包含2种编码方式:实数编码(表示Channel数量、Kernel Size等数值参数)和二进制编码(表示节点类型和类别参数)。2种算法的另一个区别在于链接,在NEAT算法中链接表示权重,而在DeepNEAT算法中则代表链接关系与链接方向。

3.2.2 CoDeepNEAT算法

DeepNEAT算法在构造深度神经网络结构时,会导致网络结构复杂,而且结构没有规整性。因此,文献[34]采用一种共同进化的方式,使得网络结构简单化并增加其复用性。

在CoDeepNEAT算法中,涉及模块和蓝图2个新的概念。模块表示一个小的DNN结构,蓝图表示一个图,其中,每个节点包含指向特定模块的指针。

CoDeepNEAT算法和DeepNEAT算法采用相同的进化方法,但是CoDeepNEAT算法同时进化2组蓝图和模块,并且采用共同进化的方式,通过用相应的模块替换蓝图节点,将模块和蓝图组装成网络,从而得到一个大型的网络结构,称为集合网络。

在计算适应度时,根据蓝图中每个节点的指向,从相应的模块中随机选择一个个体加入到集合网络中,如果多个蓝图节点指向相同的模块,则在所有蓝图中使用相同的模块。该集合网络的适应度包括其中所有的蓝图和模块,计算包含该蓝图或模块的所有集合网络的平均适应度作为整个集合网络的适应度。CoDeepNEAT算法的进化过程如图6所示,由2组蓝图和模块同时进化得到最右边的集合网络。

图6 CoDeepNEAT算法的进化过程

3.3 基于CNN的神经架构搜索算法

在图像分类、目标检测等图像处理领域,为了提高深度学习的准确率,研究人员提出了CNN,但是,人工设计的CNN结构存在局限性。因此,自动构造CNN的结构显得十分重要。

3.3.1 Genetic CNN算法

Genetic CNN算法于2017年被提出[35],其是一种通过自动学习来获得最优CNN结构的方法,该算法将遗传算法用于CNN架构搜索中。在自动搜索网络结构的过程中,需要设置一些约束条件使搜索过程不会无限发展,其中一个约束条件就是CNN以池化层为界划分为不同的层,每个层中包含一系列预定义的构建块(由卷积层和池化层组成),然后利用一种新的编码方式将网络结构通过固定长度的二进制编码进行表示,最后利用遗传算法在一个大的搜索空间内实现优化,从而提高搜索空间的遍历效率。Genetic CNN算法的编码方式与进化方式具体如下:

1)Genetic CNN的编码方式

对于Genetic CNN算法而言,编码方式是其重要的组成部分,该算法主要使用二进制编码方式,如图7所示。

图7 Genetic CNN的编码方式

(1)默认节点。图7中包含2个层(Stage),每个Stage包含2个默认节点,一个是默认输入节点,另一个是默认输出节点。输入节点的数据来自前一个Stage的数据,然后执行卷积操作;输出节点的数据为经过前面卷积操作之后的结果,然后进行求和再执行卷积操作,最后将结果输出到池化层。在Stage1中,默认输入节点为A0,默认输出节点为A5;在Stage2中,默认输入节点为B0,默认输出节点为B6。

(2)普通节点。除默认节点外的节点称为普通节点,即图7中编码区域中的节点,它们的节点序号唯一且有序。同一Stage中的所有卷积操作具有相同的卷积核和通道数量。

(3)每一个节点均代表一个卷积操作,编码只针对普通节点进行。

(4)孤立节点。孤立节点是为了保证具有更多节点的Stage可以模拟具有更少节点的Stage表示的所有结构,如图7中Stage2的B2就称为孤立节点。

在图7中,普通节点的编码方式为:

(1)Stage的个数为S,Stage中的节点个数为K,则S=2,K1=4,K2=5。通过简单的排列组合计算二进制点数,Stage1所需要的二进制点数为6,Stage2所需要的二进制点数为10。

(2)对节点之间的链接逻辑进行编码,有链接表示为1,无链接表示为0。

Stage1中的编码顺序为:1和2;1和3、2和3;1和4、2和4、3和4,即1-00-111。

Stage2中的编码顺序为:1和2;1和3、2和3;1和4、2和4、3和4;1和5、2和5、3和5、4和5,即0-10-000-0011。

2)Genetic CNN的进化方式

Genetic CNN算法使用遗传算法进行CNN结构的搜索,主要分为初始化、选择、变异、交叉以及适应度评估等步骤。

(1)初始化。初始化操作主要用于网络中个体的初始化,即创建初始种群。

(2)选择。选择操作在每一代开始时执行,采用随机选择的方式,每个个体的适应度是其被选中的概率,适应度值越高,被选中的概率越大。

(3)变异。每一个个体根据一定的概率改变自身结构,变异操作能够避免架构陷入局部最优解。

(4)交叉。交叉操作能够使得相邻的个体以一定的概率互换Stage结构。

(5)适应度评估。在个体的适应度评估中,主要以个体的适应度函数值为标准,减少由于随机性造成的不稳定性,假如一个个体之前被评估过,则将其适应度函数值的平均值作为该个体当前的适应度函数值。

Genetic CNN算法因其约束条件而在很大程度上减少了网络结构的搜索范围,但是这些约束条件也导致很多的局限性。例如,每一层的卷积核大小和通道数量相同,这就导致了CNN的多样性。

3.3.2 CGP-CNN算法

CGP-CNN算法[36-37]于2017年被提出,该算法的思想与Genetic CNN算法类似,都是通过遗传算法进行架构的迭代选择与升级,两者的主要区别在于编码方式的不同。CGP-CNN算法主要基于有向无环图,其基本组成单元为Datanode和Graphnode,即在CGP-CNN算法中,将多个简单的神经元构成的有向无环图作为一个进化单元进行优化。CGP-CNN算法的节点类型、编码方式及进化过程具体如下:

1)CGP-CNN算法的节点类型

CGP-CNN算法中包括6种节点类型,分别是ConvBlock、ResBlock、Max Pooling、Average Pooling、Concatenation和Summation。这些节点操作由行、列和通道的大小定义成三维(3D)张量。

(1)ConvBlock由标准卷积处理组成,步长为1,然后是批量归一化和ReLU激活函数,其中,卷积块不进行降维,因此,采用零值填充来保持前后特征图维度不变,并且具有不同大小的Kernel Size和不同的Channel数。

(2)ResBlock由卷积处理、批量归一化、ReLU函数和张量求和组成。ResBlock架构如图8所示,输入的行和列大小与卷积后的ConvBlock保持一致。在ResBlock中,M×N×C的输入特征映射被变换为M×N×C′的输出映射,并且具有不同大小的Kernel Size和不同的输出Channel数。

图8 ResBlock的结构

(3)Pooling池化层执行Max Pooling和Average Pooling的操作,使用2×2的Kernel,步长Stride=2。

(4)Concatenation将不同特征图进行合并,如果特征图大小不同,则对更大的特征图进行Max Pooling完成下采样,从而实现特征图大小一致。

(5)Summation主要用于skip-connection的特征图元素两两相加,当特征图大小不同时,对更大的特征图进行最大池化完成下采样,从而实现特征图大小一致。

2)CGP-CNN的编码方式

基于进化算法的神经网络架构在应用时,通常有直接编码和间接编码2种编码形式。直接编码主要将神经元的数量和链接情况作为基因类型,而间接编码主要表达网络架构的生成规则。CGP-CNN算法采用笛卡尔基因编程这种直接编码的方式,从而表示CNN的结构和连通性。CGP-CNN算法具有灵活性,可以表示可变长度的网络结构和跳远链接。

图9所示为一种CGP-CNN的编码方式,其中左边是Genotype,右边是CNN架构图,节点5是一个未激活的节点。

图9 CGP-CNN的编码方式Fig.9 Coding method of CGP-CNN

3)CGP-CNN算法的进化过程

CGP-CNN算法的变异方式有2种:第1种是强制突变,为了有效地使用计算资源,需要在每一代并行地评估一些候选解决方案,因此,在使用变异操作时,要保证至少有一个活动节点改变之后出现后选解,此时称为强制突变;第2种是中性突变,为了维持对CGP进化的有效性,如果后代的适应度值没有得到改善,可以通过使用中性突变的方式重新对父代执行变异操作,在中性突变过程中,只改变非活动节点的基因而不改变Phenotype。

CGP-CNN算法验证了在自动构建CNN架构时,可以使用笛卡尔基因编程的方式,并且基本单元可以采用如ConvBlock、ResBlock这样的构建块。但是,为了得到效果更好的网络结构,在进化过程中,CGP-CNN算法需要消耗很多资源,因此,后续将重点研究降低计算资源消耗的方法,或者在进化过程中通过减少多余的CNN结构来实现进化算法的优化。

3.4 基于进化算法的NAS改进

CoDeepNEAT算法、Genetic CNN算法和CGP-CNN算法在基于进化算法进行神经网络架构搜索时,都很依赖先验知识并基于已有的模块进行叠加组合。此外,这些算法要求每一个个体均从初始时刻开始训练,这样就需要很多的计算资源才能满足架构搜索任务的需求。为解决上述问题,研究人员提出Large-Scale算法[38]、Better Topologies算法[39]。为了提高搜索效率并降低搜索空间,文献[40]提出了Hierarchical Representation算法。

Large-Scale算法和Better Topologies算法的设计思想类似,只是在具体的参数设置上存在区别,两者都采用了非常简单的神经网络设定方法,使得算法进化出网络结构。初始化阶段从一个包含3个节点(输入节点、中间节点和输出节点)的简单架构开始。进化过程则是对internal node的连接方式进行改变,其中,在Large-Scale算法中,对internal node采用卷积、池化、批量归一化等操作中的某一个或者多个相组合;在Better Topologies算法中,对internal node执行卷积和池化操作。这2种算法与NEAT算法不同的是只采用了变异操作,而没有使用交叉操作。Better Topologies算法有5个变异算子,Large-Scale算法有11个变异算子。

Hierarchical Representation算法是一种结合模型的结构分层表示和进化策略的高效架构搜索方法。为了降低网络架构搜索的复杂性,提高搜索效率,Hierarchical Representation算法对搜索空间进行约束,通过增加一个分层的网络结构来约束搜索空间。Hierarchical Representation算法的基本单元为基元(motif),较低层次的motif由卷积、池化等操作构成,然后通过将这些低层次motif多次叠加的方式最终形成神经网络结构,其中,堆叠的方式由进化策略或者随机搜索决定。这种通过堆叠的方式构建网络结构,类似于VGGNet、ResNet和Inception结构,使用模块化进行设计。

3.5 算法对比与分析

前文提到的7种算法对比如表1所示。NEAT算法的基本单元为神经元(Neuron),采用链表的方式进行编码,有增加连接、增加节点和修改权重3种变异方式,在进行交叉操作时,根据Innovation ID决定采用交叉操作的2个基因序列。CoDeepNEAT算法的基本单元为DNN Layer,采用实数编码和二进制编码2种编码方式,并且有改变连接和改变节点2种变异方式,在交叉操作阶段,根据历史标记确定2个基因排列方式。Genetic CNN算法的基本单元是通过Block方式构造的CNN结构,采用二进制编码,根据每个个体的概率进行变异和交叉。CGP-CNN算法的基本单元与Genetic CNN算法相同,都是通过Block方式构造的CNN结构,采用的变异方式为强制变异和中性变异,没有交叉操作。Large-Scale算法和Better Topologies算法的基本单元都为Node,编码方式分别采用DNA Graph和整数编码,分别为11种变异方式和5种变异方式,都没有交叉操作。Hierarchical Representation算法的基本单元是由一个三级结构表示的有向无环图,这个有向无环图包括3个节点(特征图),每2个节点的边有6种基本操作可供选择,在进化过程中包括增加连接、修改连接和删除连接3种变异方式,没有交叉操作。

表1 7种基于进化算法的神经架构搜索算法对比

CoDeepNEAT算法使用CIFAR-10数据集进行实验,初始化阶段生成了25个蓝图和45个模块。在训练集上每个网络训练8个epoch,然后进行评估,经过72代的进化之后结束训练。将得到的最优网络在所有训练图片上进行300个epoch的训练,最终得到错误率为7.3%。

Genetic CNN算法分别在MNIST数据集和CIFAR-10数据集上进行实验,初始种群数量为20,执行50代进化操作。在MNIST数据集上,经过50代后,最佳个体的识别错误率由0.41%下降到0.34%。实验在Titan-X GPU上进行,每个个体的训练时间平均为2.5 min,整个进化过程大约需要2 GPU-days。在CIFAR-10数据集上,经过50代后,最佳个体的识别正确率从75.96%上升到77.06%,每个个体的训练时间平均为0.4 h,整个进化过程大约需要17 GPU-days。

CGP-CNN算法使用CIFAR-10数据集进行实验,搜索ConvBlock和ResBlock 2种类型结构,其中,ConvSet的进化代数为500代,ResSet执行300代,实验在2个NVIDIA GeForce GTX 1080 GPU上进行。CGP-CNN算法使用ConvSet模型时的错误率为6.75%,使用ResSet模型时的错误率为5.98%。在ResSet上完成CNN架构的优化大约需要14天。

Large-Scale算法分别在CIFAR-10数据集和CIFAR-100数据集上进行实验,并且都进行5组实验,达到的最佳准确率分别为94.6%和77%,参数数量分别为5.4 M和40.4 M。在CIFAR-10数据集上的计算成本为4×1020FLOPS,在CIFAR-100数据集上的计算成本为2×1020FLOPS。

Better Topologies算法分别在CIFAR-10数据集、CIFAR-100数据集和SVHN数据集上进行实验。在CIFAR-10和CIFAR-100上使用了标准图像增强(翻转和裁剪)进行数据预处理,最大迭代次数为400 epoch,在SVHN数据集上不使用数据增强,最大迭代次数为180 epoch。当网络深度为91时,3个数据集上的错误率分别为5.19%、24.6%和1.85%。

Hierarchical Representation算法使用CIFAR-10数据集和ImageNet数据集进行实验,得到的Top-1错误率分别为3.6%和20.3%。

通过对这7种算法的实验设置和数据进行对比可知,随着神经架构搜索算法的发展,图像分类的准确率不断提高。为了在更大的数据集上进行实验,同时降低计算资源消耗并保证准确率,通过神经架构搜索算法设计的网络结构也会越来越复杂。虽然目前神经架构搜索算法能够设计出与人工神经网络性能相当甚至更好的网络结构,但是在保证准确率的情况下,如何降低计算资源消耗仍然是一个具有挑战性的任务。

4 算法存在的问题及其解决方案

目前,研究人员针对神经架构搜索主要探究其搜索空间和搜索策略2个方面。搜索空间决定了哪些结构可以增加到最后的网络结构中,其通过预先设定好一些适合当前任务的结构,以有效减小搜索空间并简化搜索过程。但是,预先定义好的搜索空间必然会引入人为的偏好,因此,该方式限制了网络搜索的程度。在后续的研究中,可以增加搜索空间的范围,使得神经架构搜索可以搜索到更丰富多样的网络结构。除此之外,减少人为的参与以及约束条件,使得神经架构搜索的搜索过程更加自动化,也是一个重要的研究方向。

搜索策略也是搜索算法,其决定了用何种规则或者方法来利用搜索空间,使得算法可以快速、准确地找到最优的网络结构和参数配置。进化算法是其中一种搜索策略,虽然进化算法的种类很多,在针对不同问题时可以选用不同类型的进化算法,但是进化算法的进化策略却大同小异,主要步骤通常是初始化(采用不同的方式对基因进行编码)、变异、交叉、评估,直到循环至预先设定好的最优标准时停止进化并输出最终的结果。因为进化算法是一个迭代的过程,每迭代一次都会消耗很长的时间,所以提高搜索效率并减少时间和资源的消耗是该过程中需要面临的一个重要问题。为了提高进化算法的搜索效率,可以将进化算法和其他搜索策略(如强化学习)相结合,组合时学习强化学习中的奖励机制,通过与环境的交互获得奖励,然后通过获得的奖励大小学习行为,使得算法能够获得更大的奖励,将强化学习中与环境交互的形式运用在进化过程中,从而提高搜索效率。因此,在后续的研究中,将进化算法和其他多种搜索策略相结合也是一个重要的研究热点。

除了上述2种问题及其解决方案之外,算法未来的发展方向也是一个很重要的研究内容。一方面,本文根据复杂程度将算法分为基于神经元的NAS、基于DNN的NAS和基于CNN的NAS,这种分类方式是根据神经网络的发展过程而进行的分析和总结。因此,在后续的研究过程中,也可以根据神经网络的后续发展来扩展NAS的多样性,如针对RNN的神经架构搜索或者基于更复杂、更深层的神经网络的NAS等;另一方面,目前基于自动化深度学习的有关图像方面的问题大多是关于图像分类的,因此,如何将自动化深度学习扩展到其他图像处理方面,如图像补全、图像修复等,甚至语音处理以及自然语言处理等领域,也是今后一个非常重要的研究热点。

5 结束语

本文阐述进化算法在神经网络架构搜索中的应用,根据构成神经网络最小单元的不同对神经网络架构搜索算法进行简单的分类,并介绍7种具有代表性的基于进化算法的神经架构搜索算法的特点和应用现状。基于无梯度进化的神经架构搜索算法具有广阔的发展前景,针对特定数据集设计的网络结构性能可以达到与人工设计的神经网络相同的水平。但是,搜索网络结构需要耗费大量的计算资源,因此,如何在大数据集上降低基于进化算法的神经架构搜索算法的计算资源消耗,将是下一步的主要研究方向。

猜你喜欢

搜索算法网络结构变异
一种基于分层前探回溯搜索算法的合环回路拓扑分析方法
改进的非结构化对等网络动态搜索算法
改进的和声搜索算法求解凸二次规划及线性规划
变异危机
变异
基于广义混合图的弱节点对等覆盖网络结构
体系作战信息流转超网络结构优化
基于互信息的贝叶斯网络结构学习
复杂网络结构比对算法研究进展
变异的蚊子