GACNN:利用遗传算法训练深度卷积神经网络

原文地址:GACNN: TRAINING DEEP CONVOLUTIONAL NEURAL NETWORKS WITH GENETIC ALGORITHM

引言

目前,在用遗传算法训练卷积神经网络的领域,大多数工作在一些重要方面尚有缺陷,例如缺少不同深度网络与数据集之间的对比,缺乏对遗传算法参数的探索,在大规模网络中失效,缺乏对不同遗传算法方案的探索等。

针对以上问题,本文提出了一些新思路,主要贡献如下:

  1. 介绍Accordion染色体结构(Accordion Chromosome Structure):相比传统染色体编码方式规模更小、运算更快、进化更有效。
  2. 提出全新遗传算子(Genetic Operator)。
  3. 介绍三个创新性的遗传算法方案:稳态(Steady-State)、世代(Generational)、精英(Elitism)。

背景

卷积神经网络

近年来,卷积神经网络(Convolutional Neural Network, CNN)在计算机视觉、语音识别等领域被认为是最有效和流行的工具之一。传统的人工神经网络(Artificial Neural Network, ANN)由于只用原生数据而不能检测到某些重要特征,因此无法高效处理大规模问题,而CNN则提供了一种解决方法。Figure 1展示了一个简单的CNN。


一个CNN主要由两个部分组成:

  • 特征提取(Feature Extraction) :这部分利用卷积层(Convolution Layer)、池化层(Pooling Layer)检测图片中的某些特征,例如边缘、形状等,以达到降维的目的。在卷积层中,一个过滤器(Filter)与对应输入值相乘后求和,再通过激活函数得到输出。然后,这个过滤器遍历整张图片,以提取其重要特征,如Figure 2所示。接下来,池化层将进一步降低图片维度,如Figure 3所示。以上的过滤与池化过程将一直重复,直到图片维度降低到可接受的程度。下一步则交给分类部分来分类降维后的图片。
  • 分类(Classification):这部分是一个简单的多层感知机(Multilayer Perceptron, MLP),如Figure 4所示。




总结下来,CNN的训练过程就是通过改变其参数,尤其是过滤器与权重的值,来最小化损失函数。

遗传算法

遗传算法(Genetic Algorithm, GA)基于达尔文的进化论,是一种由自然选择启发的,可用于解决有约束与无约束优化问题的全局优化方法。在每次迭代过程中,GA从当前种群中选择“最好”的个体作为双亲来产生子代,以使种群朝最优解“进化”。GA的流程图如Figure 5所示。


GA的流程如下:

  1. 初始化(Initialization):初始种群包括一系列随机产生的可能解。
  2. 评估(Evaluation):通过适应度函数(FItness Function),即通常情况下的目标函数计算每个成员的适应度。
  3. 选择(Selection):在每次世代交替时,一般来说适应度更高的个体会被选择来产生下一代。常见的选择策略有轮盘赌选择(Roulette-wheel Selection)、锦标赛选择(Tournament Selection)和随机全局采样(Stochastic Universal Sampling)。
  4. 遗传算子(Genetic Operators):将交叉(Crossover)、变异(Mutation)等遗传算子应用到被选择的个体上来产生下一代。经过该步骤后,总体来说,种群的平均适应度会增加。
  5. 终止(Termination):若找到一个满足最小标准的解,达到设定的世代数或适应度达到稳定水平等条件,则终止。

研究方法

利用GA训练CNN的挑战在于如何将网络映射到染色体上。传统的编码模式将每个网络参数作为染色体的一个元素,而在大规模网络中,这种编码模式将使得染色体结构过于庞大,导致遗传算子失效等问题。一个解决方法是将每个卷积层与全连接层看作一个整体作为染色体的一个元素,即每个染色体元素要么包含一个层的所有连接权重,要么包含一个过滤器的所有值。这种编码模式大大缩减了染色体结构,使其具有更快的运算时间,更快的收敛速度以及更高的正确率。如Figure 6所示。


关于适应度,本文使用分类交叉熵(Categorical Cross-entropy)

以上研究方法可以通过三个GA方案进行:

  • 稳态(Steady-State):子代代替“最差”的成员。
  • 世代(Generational):子代代替整个种群。
  • 精英(Elitism):保留“最好”的成员。

稳态遗传算法


该算法包括以下步骤:

  1. 初始化(Initialization):利用Keras初始化数量为pop_size的种群,每个网络的过滤器与连接权重从均值为0的截尾正态分布中随机产生,该过程可利用Keras的Glorot normal initializer完成。
  2. 评估(Evaluation):每个网络的表现基于Keras的model.evaluate()函数给出,该步骤在multiprocess的使用下有更快的运行时间。
  3. 适应度赋值(Fitness Assignment):此处我们使用每个网络的正确率作为适应度。
  4. 选择(Selection):我们使用最有名的选择策略:适应度比率选择(Fitness Proportional Selection),也被称为轮盘赌选择(Roulette-wheel Selection),即一个网络的适应度越高,其被选择的可能性就更大。该过程的参数如Table 1所示。
    交叉(crossover)算子由双亲产生一个子代,变异(mutation)算子由一个父代产生一个子代。如果选择变异,那么先从[0, 1]上的均匀分布中产生一个随机数并与 P i P_i Pi比较,如果小于 P i P_i Pi,那么第 i i i个个体就会被选择。如果选择交叉,那么以上过程将进行两次,选择两个个体。
  5. 交叉(Crossover):对卷积层,该过程随机选择双亲的其中一个,并将对应的过滤器拷贝到子代。对全连接层的每一个神经元,该过程仍然随机选择双亲的其中一个,并将所有权重拷贝到子代。如Figure 8所示。
  6. 变异(Mutation):如果被选择的是卷积层,那么其中的每一个值由均值为该值,标准差为0.5的高斯噪音代替。如果是神经元,则将每一个权重加上一个来自初始分布的随机数。如Figure 9所示。
  7. 代替(Replacement):新产生的子代将取代最不适应的个体,pop_size保持不变。




以上流程从第2步开始重复,直到达到某个标准(如世代数、正确率等)。这种方案将保留“最好”的个体,并且只有在更好的个体出现时才改变种群。这会使得其稳定但缓慢地收敛到全局最优解。在选择的过程中,适应度更高的个体将更频繁地被选择。

为简单起见,我们不考虑权重中的bias和dropout层。

世代遗传算法

该算法的【1. 初始化、2. 评估、3. 适应度赋值】步骤与稳态遗传算法相同,不再赘述。


4. 选择:每个个体被选择的概率的计算方式与稳态遗传算法相同。接下来,一些个体将被选择进入交配池(Mating Pool),交配池大小与种群大小一致,这意味着一些个体将被选择多于一次。下一步是将交配池中的个体随机配对。
5. 交叉:每一对产生两个互补的子代,产生过程与稳态遗传算法相同。这将产生一群数量为pop_size的子代。
6. 变异:基于变异比例(mutation_ratio),子代中的一些个体将被随机选择经历变异,变异过程与稳态遗传算法相同,变异后的个体将取代自身。
7. 代替:新一代将完全取代上一代,标志着一次迭代的完成。

该算法的流程如Figure 10所示。

精英遗传算法

该算法的【1. 初始化、2. 评估、3. 适应度赋值】步骤与稳态遗传算法和世代遗传算法相同,不再赘述。


4. 选择:与世代遗传算法不同的是,交配池大小与种群大小不相同。这是因为最适应的个体(如前10个),即精英,将直接进入下一代。此外,交配池中的个体将不会被随机配对,而是随机选择双亲通过交叉产生一个子代,然后将双亲放回交配池。
5. 交叉:双亲使用与稳态遗传算法相同的交叉算子产生一个子代,直到子代填满下一代种群。
6. 变异:与世代遗传算法相同,一些子代将经历变异。
7. 代替:新子代与精英共同组成了下一代种群,标志着一次迭代的完成。

该算法的流程如Figure 11所示。

容易发现,这种算法将可能产生前两种算法的最好结果。一方面,稳态遗传算法收敛稳定但是缓慢;另一方面,世代遗传算法进化得更快,但达到最优解的过程更加震荡。我们希望通过结合这两种算法能产生最好的结果。

评估结果

首先,我们在MNIST和CIFAR10数据集上进行评估,Table 2与Table 3展示了网络结构。MNIST的网络结构是自定义的,而CIFAR10的网络结构是著名的LeNet网络。


在三种算法中,pop_size设为100.

对于稳态遗传算法,有70%的可能性选择交叉,30%的可能性选择变异。变异比例(mutation_ratio)设为10%.

对于世代遗传算法,变异概率设为20%,变异比例设为10%.

对于精英遗传算法,前10个最适应的个体直接进入下一代。选择20个个体进入交配池,产生剩下的90个子代。

对于MNIST数据集,70000张图片用于训练和验证,10000张图片用于测试。对于CIFAR10数据集,50000张图片用于训练和验证,10000张图片用于测试。batch_size设为32.

值得注意的是,对于每个网络,我们初始化一个种群,再用不同的算法进化,这会使得初始正确率相等。当与反向传播(Back Propagation,BP)算法比较时,初始化种群中适应度最高的个体将被选择用BP算法训练。

Accordion编码与传统编码在两个数据集,三种遗传算法上的表现如Figure 12-14所示。

Figure 15展示了在Accordion编码方式下,三种遗传算法在两个数据集上的表现的对比。


Figure 16展示了表现最好的精英算法与传统Adam算法在两个数据集上的表现的对比。

结论

本文提出的全新的编码方式极大缩小了染色体大小,并且表现好于传统编码方式。通过对三种遗传算法收敛性与正确率的分析,本文推断出稳态算法收敛稳定但是缓慢;世代算法进化得更快,但达到最优解的过程更加震荡;精英算法收敛得更快也更稳定。

代码实现与结果

三种遗传算法在CIFAR10数据集上的表现如下。


Adam算法在CIFAR10数据集上的正确率与损失如下。

Adam算法在MNIST数据集上的正确率与损失如下。


代码实现👉Github

  • 16
    点赞
  • 158
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
遗传算法是一种模拟自然界遗传进化过程的优化算法,通过模拟遗传进化的过程,逐渐找到问题的最优解。卷积神经网络(Convolutional Neural Network,简称CNN)是一种常用的深度学习算法,广泛应用于图像识别、目标检测等领域。在优化CNN的过程中,可以利用遗传算法来提高其性能。 首先,采用遗传算法CNN的参数进行优化。可以将CNN的参数表示为基因编码,比如卷积核的大小、卷积层的神经元个数等。通过对这些基因进行交叉、变异等操作,生成新的个体,并计算其适应度(比如分类准确率)。根据适应度的大小,选取一部分个体进行下一代的繁殖,再次通过交叉、变异操作生成新的个体。重复这个过程,直到达到停止条件。最终得到的候选解中的个体即为优化后的CNN模型。 其次,可以利用遗传算法CNN的网络结构进行优化。例如,可以通过遗传算法来搜索最佳的网络层数、每层神经元的个数等。同样,将网络结构表示为基因编码,通过交叉、变异等操作生成新的个体,并计算适应度。根据适应度的大小选择个体进行下一代的繁殖,直到达到停止条件。最终得到的候选解中的个体即为优化后的CNN网络结构。 在利用遗传算法优化CNN的过程中,要注意设置合理的遗传算法参数,如种群大小、交叉概率、变异概率等。此外,也需要根据具体任务的需求和计算资源的限制,合理设置优化算法的迭代次数和停止条件。 总的来说,通过遗传算法优化卷积神经网络的代码,可以从两个方面提升CNN的性能,一是优化CNN的参数,二是优化CNN的网络结构。这种方法可以帮助我们更好地发掘CNN的潜力,提升其在各种图像处理任务中的性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值