XShell Gradle xml jar permissions background sketch up教程 mysql降序 bootstrap文件上传样式 mysql删除一列 matlab颜色代码 jq入口函数 kubernetes架构 mysql数据库 python条件判断 python查找指定字符 java对象 java环境搭建 搭建java开发环境 javafinally java基础学习 java中的队列 java设置 java抽象方法 java怎么配置环境变量 java获取文件 java程序设计基础 在线pr序列设置 手机照片恢复免费软件 js删除节点 通达信金融终端官网 gg修改器下载 spss22安装教程 华为ff ps怎么画漫画 pr书写效果 ip地址切换器 电脑还原软件 淘宝抽奖活动 浣海之核
当前位置: 首页 > 学习教程  > 编程语言

论文阅读-基于遗传算法的NAS

2021/1/28 22:39:16 文章标签:

hello,这是鑫鑫鑫的论文分享站,今天分享的文章是Genetic CNN,这是一篇将标准遗传算法应用于NAS的论文,我们一起看看吧~ 基础知识: 遗传算法:模仿生物进化的过程。传统的遗传算法往往具有下列步骤&#xff…

hello,这是鑫鑫鑫的论文分享站,今天分享的文章是Genetic CNN,这是一篇将标准遗传算法应用于NAS的论文,我们一起看看吧~

基础知识:

遗传算法:模仿生物进化的过程。传统的遗传算法往往具有下列步骤:

  • 定义个体的基因编码方案
  • 初始化种群
  • 衡量个体生存竞争能力的适应度(通常是一个函数,函数值表示个体的生存竞争能力)
  • 淘汰适应度低的个体,选择适应度高的个体构成种群下一代的成员(选择)
  • 按一定概率对下一代成员进行基因的交叉与变异(交叉与变异),产生新个体的基因编码方案
  • 评估新种群的适应度

摘要

本文讨论了自动学习深层网络结构的可能性。需要注意的是,可能的网络结构的数量随着网络中的层数呈指数增长,这启发我们采用遗传算法来有效地遍历这个庞大的搜索空间。我们首先提出一种编码方法,用一个固定长度的二进制字符串来表示每个网络结构,并通过生成一组随机个体来初始化遗传算法。在每一代中,我们定义了**标准的遗传操作,**例如选择、变异和交叉,以消除弱势个体,然后产生更具竞争力的个体。每个个体的竞争力被定义为其识别准确率,这是通过从头开始训练网络并在验证集上对其进行评估得到的。我们在两个小数据集上运行遗传过程MNIST和CIFAR10,证明了它进化和发现高质量结构的能力,而这些结构以前很少被研究。这些结构也可转移到大型ILSVRC2012数据集。

1. 介绍
现代网络结构是手工设计的,而不是学习的,这限制了方法的灵活性。
在本文中,我们探讨了自动学习深层神经网络结构的可能性。我们考虑一个受限的情况,在这种情况下,网络有有限的层,每一层被设计成一组预定义的构建块,如卷积和池化层。即使在这些限制条件下,可能的网络结构的总数也会随着层数呈指数增长。因此,列举所有候选人并找出最佳候选人是不切实际的。相反,我们将此问题描述为一个大搜索空间中的优化问题,并将遗传算法应用于空间的高效遍历。

2. 相关工作

2.1. 卷积神经网络
CNN是一种用于大规模视觉识别的层次模型。它是基于这样的观察:一个拥有足够多神经元的网络能够适应任何复杂的数据分布。在过去的几年里,神经网络被证明对简单的识别任务是有效的[20]。最近,大规模训练数据(如ImageNet[5])和强大的gpu的可用性使得训练深度CNNs成为可能,其显著优于BoVW模型。CNN是由几个层叠的层组成的。其中,前一层的响应与滤波器组卷积,并由可微非线性激活。因此,CNN可以看作是一个复合函数,它是由在顶层的监控和预测之间的差异定义的误差信号反向传播来训练的。最近,有人提出了几种有效的方法来帮助CNN更快地收敛并防止过度拟合,如ReLU激活[17]、批标准化[15]、辍学[11]和干扰标签[39]。从预先训练的神经网络中提取的特征可以推广到其他识别任务[36][40]。
设计强大的CNN结构是一个有趣的问题。人们相信更深的网络会产生更好的识别结果[29][32]。而且,增加公路信息也被证实是有用的[10][42]。我们还努力在网络结构中加入不变性[38]。我们发现了一些使用随机[14]或密集[13]结构的工作,但所有这些网络结构都是确定性的(尽管[14]中使用了随机操作来加速训练和防止过度拟合),这限制了模型的灵活性,从而启发我们自动学习网络结构。

2.2. 遗传算法

遗传算法是一种受自然选择过程启发的元启发式算法。遗传算法通常被用来产生高质量的优化和搜索问题的解决方案 ,依靠生物启发的操作,如变异、交叉和选择

一个典型的遗传算法需要两个先决条件,即,解域的遗传表示,以及评估每个个体的适应度函数。 一个很好的例子是旅行商问题(TSP),这是一个著名的NP完全问题,其目的是在节点图中寻找最优哈密顿路径。在这种情况下,每个可行解表示为{1,2,…,N}的置换,适应度函数是路径的总代价(距离)。我们稍后将展示深层神经网络可以编码成二进制字符串。

遗传算法的核心思想是允许个体通过一些遗传操作进行进化。流行的操作包括选择、变异、交叉等。选择过程允许我们在保留强个体的同时消除弱个体。执行变异和交叉的方式因情况而异,通常基于特定问题的特性。

3. 本文的方法

本节介绍设计竞争网络结构的遗传算法。首先,我们描述了一种用固定长度的二进制字符串表示网络结构的方法。其次,定义了选择、变异和交叉等遗传操作,使我们能够高效地遍历搜索空间,找到高质量的解。

在这项工作中,遗传算法只用于提出新的网络结构,每个结构的参数和分类精度都是通过独立的训练从头开始得到的

3.1. 二进制网络表示法

许多常见的state-of-the-art神经网络架构都可以分为几个stage,两个stage之间通过池化操作连接,同个stage内的所有卷积操作都有相同的过滤器数目,基于上述,论文得出了神经网络架构的基因编码方案,具体定义如下:

  • 每个神经网络架构由S个阶段构成,stage与stage之间通过池化操作连接
  • 每个阶段都有Ks个节点组成,这Ks个节点其实是卷积+BN+ReLU的操作,Ks个节点编号并由小到大顺序排序
  • 使用有向边连接一个阶段中的节点,每个节点只能连接比自己编号要大的节点,使用Vs,ks表示第s阶段的第ks个节点,其中ks=1,2,…,Ks

在每个阶段,我们使用1+2+3+…+(Ks-1)来表示来编码阶段内部节点之间的有向边。
​编码是表示节点和节点之间是否有有向边连接,1表示有有向边连接,0表示没有。
具体编码:
在这里插入图片描述

以此类推,有边连接表示前一节点输出的特征图会作为后一连接节点的输入,可能会有多个边指向同一个节点,此时element-wise相加,此时是一个残差结构(由于位于一个阶段内部,因此特征图的channel数一致,只需要padding即可相加),一个具体的例子如下:
在这里插入图片描述
图1:两级网络(S=2,(K1,K2)=(4,5))和编码的二进制字符串。对于第s个阶段来说,这两个节点分别为0和Ks,分别为上图中的红色和绿色节点,红色节点接收前一节点的输出,对其进行卷积,并将输出的特征图送往所有没有前驱但是有后继的节点,而绿色节点接受所有有前驱但是没后继节点输出的特征图,对其进行element-wise相加后,输入到池化层,这两个节点不做编码,如果一个阶段的编码为0,则红色节点直接和绿色节点连接,即经过以此卷积操作后立刻进行池化操作。我们只对有效部分(浅蓝色背景区域)中的连接进行编码。在每个阶段中,卷积滤波器的数量是一个常数(阶段1中32个,阶段2中64个),并且空间分辨率保持不变(阶段1中32×32,阶段2中16×16)。每个池层按2的因子对数据进行向下采样。在每次卷积之后添加ReLU和批处理规范化。

3.1.1技术细节
为了使每个二进制字符串有效,我们在每个阶段中定义两个默认节点。默认的输入节点,表示为,从前一级接收数据,执行卷积运算,并将其输出发送到没有前置节点的每个节点,例如。默认输出节点(表示为)从没有后继节点的所有节点接收数据,例如,对它们求和,执行卷积,并将其输出发送到池层。注意,普通节点和默认节点之间的连接没有编码。对,0对,1对,Ks码+1对,Ks码
有两种特殊情况。首先,如果一个普通节点被隔离(即,它没有连接到任何其他普通节点,6=j),那么它被简单地忽略,即,它既没有连接到默认的输入节点,也没有连接到默认的输出节点(参见图1中的B2节点)。这是为了保证节点多的stage可以模拟节点少的stage所代表的所有结构。第二,如果在某一级没有连接,即二进制字符串中的所有位都是0,则卷积运算只执行一次,而不是两次(一次用于默认输入节点,一次用于默认输出节点)
在这里插入图片描述
(每一层看做是一个节点)

3.1.2示例和限制

许多流行的网络结构可以用所提出的编码方案来表示。示例包括VGGNet[29]、ResNet[10]和DenseNet[13]的一个修改变体,如图2所示。
目前,只考虑卷积和池操作,这使得无法生成一些复杂的网络模块,如Maxout[8]。此外,卷积滤波器的大小在每个阶段都是固定的,这限制了我们的网络与初始模块中的多尺度信息相结合[32]。然而,我们注意到所有基于编码的方法都有这样的局限性。我们的方法可以很容易地修改,以包括更多类型的层和更灵活的层间连接。
实验表明,仅使用这些基本构造块就可以获得具有竞争力的识别性能。

正如最近发表的一篇利用强化学习探索神经结构的著作[45]所示,这类方法通常需要大量计算才能遍历巨大的解空间。幸运的是,我们的方法可以很容易地推广和扩大,这是通过学习一个小数据集的体系结构,并将学习到的信息传输到大规模的数据集。详见实验部分。

3.2. 遗传操作

遗传过程的流程图如算法1所示。它从随机个体的初始化生成开始。然后,我们进行轮次或世代,每个轮次包括三个操作,即选择、变异和交叉。每个个体的适应度函数通过在参考数据集上从头开始的训练来评估。在这里插入图片描述

1:输入:参考数据集D、代数T、每代个体数N、变异和交叉概率Pm,Pc、变异参数qm和交叉参数qc。
2:初始化:生成一组随机个体,计算其识别精度;
3for 代数t=(1…T)循环
4: 选择:用俄罗斯轮盘赌过程产生新一代
5: 交叉:对每一对用概率交叉和交叉参数进行交叉;
6: 变异:对于每个非交叉个体,用变异概率和参数进行变异
7: 评估:计算每个新个体的识别准确率;
8结束
9:输出:最后一代中的一组个体

3.2.1初始化

我们初始化一组随机模型,每个模型都是一个长度为L的二进制字符串,从伯努利分布中独立地对每个个体中的每个位进行采样,即串上每位服从伯努利分布,之后,我们评估每个个体以获得其适应度函数值。

我们将在第4.1.3节中看到,不同的初始化策略不会对遗传性能产生太大的影响。即使从一个简单的初始化开始(所有个体都是零串),遗传过程也可以通过交叉和变异发现相当有竞争力的结构。

3.2.2选择
选择过程是在每代种群生成前执行的操作。在第t代之前,第M(t-1,n)的个体被分配一个适应度函数,该适应度函数定义为在上一代或初始化中获得的识别率(rt−1,n)。(rt−1,n)直接影响M(t−1,n)在选择过程中幸存的概率。

我们执行俄罗斯轮盘赌算法来决定下一代种群的成员。
这意味着最好的个体被选中的概率最大,而最差的个体总是被淘汰,由于个体数量保持不变(选择过程需要保证种群的大小与上一代一致),上一代中的每个个体可以被多次选择。导致下一代种群中有多个相同的网络架构,通过选择操作,可以淘汰准确率低的网络架构
在这里插入图片描述

3.2.3变异和交叉

变异:一个个体以一定的概率独立翻转每一个比特的突变过程。 在实践中,突变通常很小,例如0.05,所以突变不太可能改变一个个体太多。这是为了保存一个幸存个体的良好特性,同时提供一个尝试新可能性的机会。
**交叉过程包括同时改变两个人。**交叉中的基本单元不是单独考虑每个比特,而是一个stage,其动机是需要保留每个阶段中的局部结构。与突变相似,每一对相应的阶段以很小的概率qC进行交换。

3.2.4评价

经过上述过程,对每个个体Mt,n进行误判,得到适应度函数值。一个参考数据集D是预先定义的,我们从零开始分别训练每个模型。如果之前评估过,我们只需再次评估,并计算所有事件的平均精度。该策略至少在一定程度上缓解了训练过程中随机性带来的不稳定性。
(总结:对产生的新种群中每个模型进行重新训练,对于旧模型,采用其历史准确率的平均值作为适应度,对于新模型,采用其准确率作为适应度)

4. 实验

提出的遗传算法需要大量的计算资源,这使得直接在大规模数据集(如ILSVRC2012)上进行评估非常困难。我们的解决方案是在小型数据集(如MNIST[19]和CIFAR10[16])上探索有前途的网络结构,然后将这些结构转移到大规模的识别任务中。

4.1. MNIST实验
MNIST数据集[19]定义了手写数字识别任务。训练图像6万张,测试图像1万张,均为28×28灰度图像。训练和测试数据统一分布在10个类别上,即0到9之间的数字。为了避免使用测试数据,我们从训练集中留下10000张图像进行验证。

4.1.1设置和结果

我们遵循MNIST认可的基本原则。

原始网络缩写为:C5@20-MP2S2-C5@50-MP2S2-FC500-D0.5-FC10。 在这里,C5@20是一个具有内核大小为5的卷积层,默认的空间步长1和内核数20;MP2S2是一个最大池层,内核大小为2,空间步长为2,FC500是一个具有500个输出的完全连接层,D0.5是一个丢弃层,丢弃率为0.5。我们采用20个学习率为0.001的训练时段,然后是4个学习率为0.0001的时段,以及1个学习率为0.00001的时段。

我们设置S=2,(K1,K2)=(3,5),保持LeNet的完全连接部分不变。每一级中的第一卷积层与原透镜中的卷积层相同,其他卷积层采用3×3的核尺寸和相同的信道数。每个二进制字符串的长度是13,这意味着有2^13=8192个可能的个体。

20个体的第一代,并运行了50轮的遗传过程。其他参数设置为 pM = 0.8, qM = 0.1, pC = 0.2 and qC = 0.3.。我们设置了相对较高的变异和交叉概率,以便于生成新的结构。最大个数为20×(50+1)=1020<8192。每个个体的训练阶段在现代Titan-X GPU上平均需要2.5分钟,整个遗传过程大约需要2 GPU天。

结果汇总在表1中。通过遗传操作,我们可以找到具有竞争性的网络结构,从而达到较高的识别精度。虽然在很短的时间内,最好的个体的识别率没有提高,但平均和中等的准确率通常会一代一代地提高。这一点非常重要,因为它保证了遗传算法提高了个体的整体素质。 根据我们在第4.1.2节中的诊断,这对遗传过程非常重要,因为新个体的质量与其父母的质量正相关。50代以后,最佳个体的识别错误率从0.41%下降到0.34%。

在这里插入图片描述

在这里插入图片描述

图3。父母和子女之间的准确度关系(最好用彩色PDF查看)。如果识别错误率较低,则点较大且接近蓝色,否则点较小且接近蓝色。横轴上的点来自变异操作,而其他点来自交叉操作。

4.1.2诊断

我们进行诊断实验来验证这个假设,即一个更好的个体更可能通过变异或交叉产生一个好的个体。为此,我们随机选择了CIFAR10遗传过程中的几个突变和交叉事件,并观察个体与其亲本之间的关系。图3支持我们的观点。我们认为遗传操作倾向于保留一小部分好的局部属性,因此来自父母的优秀“基因”更有可能被保留。
MNIST上的GeNet
在这里插入图片描述

图4。相对于代数,所有个体的平均识别准确率。条形图表示相应代中的最高和最低精度。

4.1.3初始化问题
最后,我们观察了不同初始化网络的影响。为此,我们开始了一个天真的人口=20所有零个人,并使用相同的参数为一个完整的遗传过程。结果如图4所示。我们发现,虽然全零串对应的是一个非常简单且竞争性较弱的网络结构,但遗传算法能够在几代之后产生强大的个体。这种简单的初始化实现了大约10代随机个体的初始性能。经过30代左右,据统计,这两个种群之间几乎没有差异。

4.2. CIFAR10实验
CIFAR10数据集[16]是8000万个微型图像数据库[33]的一个子集。训练图像50000张,测试图像10000张,全部为32×32 RGB图像。CIFAR10包含10个基本类别,训练和测试数据都统一分布在这些类别中。为了避免使用测试数据,我们从训练集中留下10000张图像进行验证。

4.2.1设置和结果
我们遵循修改后的LeNet进行CIFAR10识别。

原始网络缩写为: C5(P2)@8-MP3(S2)-C5(P2)@16-MP3(S2)C5(P2)@32-MP3(S2)-FC128-D0.5-FC10。请注意,我们在每个阶段都显著减少了过滤器的数量,以加速训练阶段。我们稍后将证明,这并不妨碍遗传过程学习有前途的网络结构。我们采用120个训练时段,学习率为10−2,然后是60个时段,学习率为10−3,40个时段,学习率为10−4,另外20个时段,学习率为10−5。**

我们保持上述网络的完全连接部分不变,并设置为S=3和(K1,K2,K3)=(3,4,5)。类似地,每个级中的第一卷积层保持与原始透镜中的相同,并且其他卷积层采用3×3的核尺寸和相同的信道数。每个二进制字符串的长度是19,这意味着有2^19=524288个可能的个体。

一个有20个个体的第一代,并运行了50轮的遗传过程。其他参数设置为 pM = 0.8, qM = 0.05, pC = 0.2 and qC = 0.2。因为字符串变长,所以变异和交叉参数和被设置为更小。最大网络个数为20 × (50 + 1) = 1020 <<524,288 每个个体平均需要0.4小时,整个遗传过程大约需要17 GPU天。

我们执行单独的遗传过程。表2总结了一个过程的结果。在这里插入图片描述

4.2.2与密集连接网络的比较

在我们的编码方案下,一种简单的网络构造方法是将所有比特设置为1,这将导致网络中同一级中的任意两层连接在一起。该网络的识别率为76.84%,略低于表2。考虑到密集连接网络需要更大的计算开销,我们得出结论,遗传算法有助于找到比密集连接更有效的结构。

4.2.3观察

在图5中,我们描绘了从两个单独的遗传过程中学习到的网络结构。遗传算法学习的结构与人工设计的结构有很大的不同,但也观察到一些人工设计的局部结构,如链状网络、多径网络和公路网。我们强调这两个网络是通过独立的遗传过程获得的,这表明我们的遗传过程通常收敛到相似的网络结构。
在这里插入图片描述

4.3. CIFAR和SVHN实验

我们将从CIFAR10实验中学到的网络应用到更多的小规模数据集。
我们测试了三个数据集,即CIFAR10、CIFAR100和SVHN:

数据库介绍:
CIFAR100是CIFAR10的扩展,包含100个细粒度的类别。它有相同数量的训练并将图像作为CIFAR10进行测试,这些图像也均匀分布在100个类别中。
SVHN(Street View House Numbers)[25]是一个32×32RGB图像的大集合,即73257个训练样本、26032个测试样本和531131个额外训练样本。我们像前面的工作[25]一样对数据进行预处理,即从训练集中选择每个类别400个样本,以及从额外的集合中选择每个类别200个样本,使用这6000个图像进行验证,剩余的598388个图像作为训练样本。我们也使用用于预处理的局部对比度归一化(LCN)[8]。

我们在每一代的遗传过程中评估最佳的网络结构。我们在每个阶段继续使用大量的滤波器,即三个阶段和第一个完全连接层分别配备64、128、256和1024个滤波器。训练策略,包括次数和学习率,与之前的实验保持一致。(即利用之前在CIFAR-10训练好的网络)
在这里插入图片描述

我们将我们的结果与表3中的一些最新方法进行了比较。在这些竞争对手中,我们注意到密集连接的网络与我们的工作密切相关。尽管GeNet(17层)的识别精度较低,但我们注意到中使用的结构要深得多(例如,40-100层)。由于密集连接通常不是最佳选择,我们认为可以使用遗传算法优化中使用的连接。

4.4. ILSVRC2012实验
我们评估了ILSVRC2012分类任务[28]上的前2个网络,这是ImageNet数据库[5]的一个子集,其中包含1000个对象类别。训练集、验证集和测试集分别包含1.3M、50K和150K图像。输入图像为224×224×3像素。**我们首先在VGGNet中使用前两个阶段(4个卷积层和2个池层)将数据维数改为56×56×128,然后,我们应用图5所示的两个网络,并将三个阶段的过滤器数量分别调整为256、512和512(遵循VGGNet)。经过这些阶段,我们得到了一个7×7×512的数据。我们在VGGNet中以0.5的丢包率保留了完全连接的层。**我们采用VGGNet中的训练策略。每个网络的整个培训过程大约需要20个GPU天。
(即利用之前在 ILSVRC2012训练好的网络)
在这里插入图片描述

结果汇总在表4中。

我们可以看到,一般来说,从小数据集(CIFAR10)学习的结构可以转移到大规模视觉识别(ILSVRC2012)。我们的模型比VGGNet有更好的性能,因为原来的三个链式阶段被自动学习的结构所取代。

5. 结论
本文将遗传算法应用于深层神经网络的结构设计。我们首先提出一种编码方法,用一个固定长度的二进制字符串来表示每个网络结构,然后使用一些流行的遗传操作,如变异和交叉来有效地探索搜索空间。不同的初始化策略对遗传过程影响不大。我们使用一个相对较小的参考数据集(CIFAR10)进行遗传算法,发现生成的结构可以很好地转移到其他任务,包括大规模的ILSVRC2012数据集。

尽管我们得到了一些有趣的结果,但是我们的算法存在一些缺点。首先,很大一部分网络结构还没有被探索,包括那些具有非卷积模块(如Maxout[8])的网络结构,以及在inception模块中使用的多尺度策略[32]。其次,在目前的工作中,遗传算法只用于探索网络结构,而网络训练过程是单独进行的。将遗传算法应用于网络结构和权值的同时训练是一个非常有趣的问题。这些方向留给今后的工作。


本文链接: http://www.dtmao.cc/news_show_650053.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?