基于改进遗传算法的自适应卷积神经网络
2022-10-24高新成王莉利杜功鑫
高新成,李 强,王莉利,杜功鑫,柯 璇
(1.东北石油大学 现代教育技术中心,黑龙江 大庆 163318; 2.东北石油大学 计算机与信息技术学院,黑龙江 大庆 163318; 3.东北石油大学 地球科学学院,黑龙江 大庆 163318)
0 引 言
深度学习[1]是一种能够学习层次化特征表达的表示学习方法,通过无监督或有监督的方式,表现出高效强大的分类能力和特征学习能力。作为近几十年来的研究热点,许多深度学习模型相继被研究开发出来,包括自编码器模型[2]、受限波尔兹曼机模型[3]、深度信念网络模型[4]、卷积神经网络模型(Convolutional Neural Networks,CNN)[5]等。CNN作为近年来深度学习的主导技术,在图像识别任务中取得了显著的成绩,并且还在人脸检测[6]、语音识别[7]、表情识别[8]、情态意识识别[9]、性别识别[10]等现实计算机视觉应用中表现优异。CNN的性能高度依赖于其网络模型结构的设计[11],自LeNet-5[12]被提出以来,人们研究出了CNN的各种改进模型,包括AlexNet[13]、VGGNet[14]、GoogleNet[15]、ResNet[16]、DenseNet[17]等,每一种都有不同的网络结构,并在图像分类任务中显著提高了分类准确性。然而,开发研究这样的网络结构并设置一些重要的参数,需要对CNN有深入的研究,并且针对所要解决的问题有丰富的经验知识[18]。
为了突破CNN结构设计和参数设置过度依赖经验知识的局限性,许多专家学者针对进化计算方法在神经网络上的应用展开了一系列研究。Esfahanian等人[19]采用了三种独立的遗传进化方案进行对比试验,验证了遗传算法优化CNN的可行性。Luo等人[20]提出了基于特征提取和遗传算法增强的自适应深度神经网络,并将其成功应用于实际办公建筑的能源测量中。Sun等人[21]利用遗传算法自动设计CNN结构,取得了比人工设计CNN更好的图像分类准确性。席亮等人[22]提出自适应遗传算法并用于BP神经网络结构的优化,提高了网络模型的收敛性。
基于以上研究,通过改进遗传算法求解问题的过程,分析CNN结构和参数对分类精度的影响,该文提出了基于改进遗传算法(Genetic Algorithm,GA)的自适应卷积神经网络算法(GA-CNN)。CNN结构经过选择、交叉和变异一系列进化过程后,使网络调优过程自动化,特征参数得到充分有效的训练,最终确定最优的卷积神经网络结构,提高了分类准确性,并且通过MNIST、Fashion-MNIST、CIFAR-10数据集验证了该算法的有效性和可行性。
1 卷积神经网络与改进遗传算法的设计
1.1 卷积神经网络设计
CNN是一种被设计用来识别二维图像的特殊多层感知器模型,在整体架构上多采用固定的构建模式,将卷积层和池化层作为特征提取器完成图片不同层次语义的提取,通过全连接层完成分类,再依靠数据样本的训练不断拟合调整网络参数。但对于当前的卷积神经网络结构设计,大多数都需要具有丰富领域知识的相关研究人员来完成,针对不同的图像分类任务,无法自适应地调整网络结构,导致卷积神经网络分类性能的显著差异。
该文将卷积神经网络初始结构设计为头模块和尾模块。头模块包括两层卷积层和一层池化层,完成基本的特征提取功能。尾模块主要由全连接层以及防止过拟合的网络层组成,如Dropout层、Flatten层和BatchNormalization层。
利用改进遗传算法对卷积神经网络初始结构进行优化,逐步自适应调整网络结构,在自适应模块中进行变异操作,确定整个网络中的网络层及其参数,最终得到一个最优的卷积神经网络结构。
1.2 改进遗传算法设计
传统遗传算法是一种具有自适应能力的启发式搜索算法,主要模拟了自然环境中自然选择、遗传进化的思想,具有充足可靠的理论依据和良好的全局搜索能力。因此,该文通过构建合理的适应度函数,改进选择、交叉和变异策略,以提高最优解的质量。
1.2.1 编码和适应度函数选择
该文采用可变长编码策略,直接将整个卷积神经网络编码成一条染色体,在具有多目标参数、大规模、复杂的卷积神经网络结构进行优化的过程中,能充分发挥算法效率,减少计算复杂性,简化编码操作。
适应度函数对于评价个体优劣,驱动遗传算法寻找最优解发挥着重要作用。该文注重于自动调整卷积神经网络的结构来解决图像分类问题,因此将分类误差L和网络结构复杂度C作为评价适应度值的依据。分类交叉熵损失函数L的计算方式如下:
(1)
网络结构复杂度C表示如下:
C=Δp/p
(2)
式中,Δp为自动调整网络结构过程中增加的参数量,p为初始网络结构参数量。
适应度函数表示如下:
Fitness=1/(αL+βC)
(3)
式中,α和β取值范围为(0,1)区间,分别表示分类误差和网络结构复杂度所占的权重。适应度值越大,表示卷积神经网络的结构和分类效果越好。
1.2.2 选择策略改进
遗传算法的寻优过程是一个随机过程,在随机搜索中保存最优的解,通过不断迭代逼近函数的最优解。其中,后代选择策略是影响遗传算法寻优的关键因素。比例选择和最优保存策略是目前被广泛采用的一种选择策略[23],但单独使用这种策略也有一定的缺陷。一方面,若群体个体数量很少,比例选择生成的随机数将不能很好地反映当前个体的适应度值,会产生一定的误差。另一方面,最优保存根据适应度值寻找最优的染色体进行交叉变异,容易导致局部收敛,并且不利于改善种群多样性。
为了提高种群的多样性和最终种群的平均适应度值,该文将比赛选择、期望值选择、比例选择以及最优保存策略进行结合。算法进行选择操作时,利用概率随机选择一种方式,避免单一选择方式使搜索空间陷入局部极小值。
1.2.3 交叉策略改进
该算法是对卷积神经结构进行编码操作,在最佳网络结构深度未知的情况下,进行交叉操作的个体染色体长度不一定相同,因此采用可变长两点交叉操作。两点交叉方式操作较简单,并且不会破坏卷积神经网络结构的局部完整性。通过对个体进行可变长两点交叉操作后,得到不同长度的个体,即不同深度的卷积神经网络结构,进而提高搜索空间的多解性。
1.2.4 变异策略改进
变异算子主要通过模仿生物界遗传进化中的变异思想,对个体的某一部分进行改变,防止算法出现早熟,提高群体多样性以及局部搜索能力。该文提出层变异和变异概率自适应[24]的参数变异两种方式。首先通过层变异调整卷积神经网络结构,增强初始进化时的算法全局寻优能力,加快进化速度。再通过变异概率自适应的参数变异对神经网络参数进行调整,以尽量有效保存种群的优良个体。
2 基于改进遗传算法的自适应卷积神经网络
GA-CNN算法的本质是在初始CNN的头模块和尾模块之间增加自适应模块,通过适应度函数对分类结果精度和网络结构进行评价,利用遗传算法中改进的遗传操作,结合层变异和参数变异不断调整网络的结构和参数,提高特征提取的精度。
2.1 自适应模块的设计
自适应模块的设计主要通过层变异和参数变异对网络进行调整。层变异主要对卷积神经网络结构进行调整,通过在个体S的编码中选择自适应模块,对其进行添加层、移除层和对修改选择层操作。层变异的实现方式如算法1所示。
算法1:层变异
输入:个体S
输出:变异后的个体S’
从个体S的编码中选择自适应模块A;
随机选择一种层操作方式;
如果执行层添加操作:
(1)向块A中添加卷积层;
(2)向块A中添加池化层;
如果执行层修改操作(从块A中按概率随机选择层f):
如果随机选择层f是卷积层:
复制f得到f’,将f’中的特征映射数量减半,并置于后面;
如果随机选择层f是池化层:
建立步长为2的新卷积层f’替换f;
如果执行层删除操作:
从块A中随机移除一层网络层;
对选择层进行修改操作,分为以下两种情况:
(1)如果选择层为卷积层,则将其特征映射数量减半,然后进行复制,并放到该层后面;
(2)如果选择层为池化层,则将其替换为一个步长为2的卷积层,完成池化层下采样的作用;用步长为2的卷积层替代尺寸2×2的池化层,可以更好地提取图像特征[25],不会损失卷积神经网络的分类效果。算法按概率进行层修改操作,在迭代后期网络中仍可能保留池化层。
参数变异可作用于网络层(包括头模块、自适应模块和尾模块)中的所有参数。参数变异概率可以随适应度进行一定的调整,有助于在迭代后期保存优良个体。自适应参数变异对于不同类型网络层中的参数,表达效果不同,主要分为以下四种情况:
(1)卷积层参数变异:对卷积层中的特征映射数量扩大2倍或减半,改变填充类型(SAME或VALID);
(2)池化层参数变异:改变池化方式(最大池化或平均池化)以及填充类型(SAME或VALID);
(3)Dropout层参数变异:对于其参数rate值的大小增大或减小0.1;
(4)全连接层参数变异:将神经元数量扩大2倍或减半。
2.2 改进遗传算法优化卷积神经网络过程
卷积神经网络的构建和调优过程类似黑盒测试[26],需要根据网络训练的最终结果,凭借人为经验对卷积神经网络进行调参,严重影响网络的精度和效率。为此,该文提出GA-CNN算法,改进遗传算法的进化操作,自动调整网络结构和参数,通过全局寻优能力搜索卷积神经网络结构空间中的最优网络结构。遗传算法优化卷积神经网络的算法步骤如下:
Step1:建立多个基本卷积神经网络结构,并初始化卷积神经网络中各层连接方式以及对应的参数;
Step2:将各个神经网络结构编码为染色体,确定种群个体;
Step3:初始化种群,使用数据集训练各个神经网络,根据适应度函数计算各卷积神经网络的适应度值;
Step4:判断遗传代数和个体适应度是否达到算法停止条件,若达到算法停止条件,则执行Step5;否则返回Step3,并对种群继续进行遗传算法进化操作,获得子卷积神经网络群体;
Step5:获取最优卷积神经网络结构以及训练分类的结果。
3 实验及结果分析
3.1 实验环境配置
实验选用Intel Xeon Sliver 4210 CPU 2.20 GHz处理器,GeForce RTX 2080显卡,显存容量为8 GB,操作系统为Ubuntu 18.04,采用Tensorflow2.1.0开源框架,Python3.6解释器。
3.2 数据集
在MNIST、Fashion-Mnist、CIFAR-10数据集上对GA-CNN算法性能进行评估。由于CIFAR-10数据集包含现实世界中的真实物体,数据噪声大并且特征识别困难,因此实验以CIFAR-10数据集为例具体展开研究。
3.3 实验参数设置
遗传算法的有效性取决于参数的选择(如种群大小和后代数量)。在所提出的算法中,实验参数的选择充分考虑了最优解的质量、可用的计算资源以及数据集大小,在算法寻优结果达到要求的情况下,尽可能保证算法效率。算法实验中的参数设置如表1所示。
表1 实验中的参数设置
实验所用的基础卷积神经结构参考了AlexNet和VGGNet两种网络结构,在尾模块中预添加了Dropout层、Flatten层和BatchNormalization层来防止卷积神经网络结构在优化过程中出现的过拟合问题。实验使用Relu激活函数减少计算量,并在所有卷积层中使用大小3×3 filter尺寸,使用大小为2×2 kernel尺寸的池化层,保持网络结构简洁的同时增加网络的特征学习能力以提升网络模型的分类精度。
3.4 实验结果分析
由于AlexNet和VGGNet10的网络深度与GA-CNN相差较小,因此该文使用GA-CNN与AlexNet和VGGNet10进行实验。所有网络均采用CIAFAR-10数据集训练,得到训练集损失值、验证集损失值、训练集精确度以及验证集精确度四个曲线的实验结果。
图1为GA-CNN和AlexNet、VGGNet10训练CIFAR-10的实验效果对比。在训练集上的对比结果如图1(a)和图1(c)所示,通过损失值和精确度曲线可以看出,GA-CNN在迭代10次后损失值和精确度值开始趋于稳定,并且训练速度比AlexNet和VGGNet10更快,取得了良好的训练效果。图1(b)和图1(d)为神经网络在验证集上的表现,通过损失值曲线可以看出,AlexNet和VGGNet10收敛效果较差,并呈现出过拟合趋势。在验证集精确度上,GA-CNN表现出更优秀的特征提取能力,精确度达到了87.6%,分别比AlexNet和VGGNet10提高了13%和5%左右。
图1 GA-CNN和VGGNet10、AlexNet的实验效果对比
综上所述,通过GA-CNN和传统卷积神经网络的进行实验对比,该算法构建的卷积神经网络取得了比人工构建神经网络更好的效果。由表2可以看出,在网络深度相似的情况下,GA-CNN的抗噪能力和特征提取能力更强,并且在训练速度和分类精度上优于手动调参的神经网络,证明了该算法在解决不同复杂度的分类问题时仍具有良好的性能。
表2 3种神经网络的精确度对比 %
4 结束语
该文提出了一种利用改进遗传算法构建自适应卷积神经网络的算法,针对遗传算法中的选择、交叉和变异策略等进行了改进,并利用算法不断自动调整网络中的卷积层和池化层数量,优化网络层中的参数,最终得到最优的卷积神经网络结构。通过在MNIST、Fashion-MNIST和CIFAR-10数据集上进行实验,验证了改进遗传算法优化得到的卷积神经网络分类精度更高。此外,该算法具有较强的灵活性,针对不同的问题和不同的数据集均可适用,避免了对神经网络反复调参的过程。
然而,当利用遗传算法优化非常复杂和更深层次的卷积神经网络时,会偶尔发生梯度消失的情况,因此在下一步的研究中,考虑加入跳层连接,增加网络模型的深度,进一步提高网络模型的拟合能力和精确度。