Meta Learning:遗传算法与深度学习的火花(附 GitHub 代码)

代码模型 Admin ⋅ 于 2个月前 ⋅ 387 阅读

来源:机器学习算法工程师@微信公众号
作者:陈扬


原文地址:https://arxiv.org/pdf/1703.01513.pdf

这篇文章讲述了如何用传统的遗传算法,生成卷积神经网络,传统的遗传算法可以帮助我们调整参数调,这里我们把网络参数化,通过遗传算法调整我们的DNA序列,然后生成不同的网络结构。好探索我们的网络结构是否可以达到像我们人工设计的网络一样具有高效的泛化能力和识别能力。这样我们可以通过自动生成网络来设计网络的方法帮助人设计神经网络,也是元学习的一个基础。

再扯点别的知识,什么是遗传算法: 在遗传算法中,一个个体一般只包含一条染色体。染色体上包含这一组基因组。

遗传算法

基因型(genotype):性状染色体的内部表现
表现型(phenotype):染色体决定的性状的外部表现,或者说,根据基因型形成的个体的外部表现;
进化(evolution):种群逐渐适应生存环境,品质不断得到改良。生物的进化是以种群的形式进行的。
适应度(fitness):度量某个物种对于生存环境的适应程度。
选择(selection):以一定的概率从种群中选择若干个个体。一般,选择过程是一种基于适应度的优胜劣汰的过程。
复制(reproduction):细胞分裂时,遗传物质DNA通过复制而转移到新产生的细胞中,新细胞就继承了旧细胞的基因。
交叉(crossover):两个染色体的某一相同位置处DNA被切断,前后两串分别交叉组合形成两个新的染色体。也称基因重组或杂交;
变异(mutation):复制时可能(很小的概率)产生某些复制差错,变异产生新的染色体,表现出新的性状。
编码(coding):DNA中遗传信息在一个长链上按一定的模式排列。遗传编码可看作从表现型到基因型的映射。
解码(decoding):基因型到表现型的映射。
个体(individual):指染色体带有特征的实体;
种群(population):个体的集合,该集合内个体数称为种群

遗传算法中每一条染色体,对应着遗传算法的一个解决方案,一般我们用适应性函数(fitness function)来衡量这个解决方案的优劣。所以从一个基因组到其解的适应度形成一个映射。可以把遗传算法的过程看作是一个在多元函数里面求最优解的过程。可以这样想象,这个多维曲面里面有数不清的“山峰”,而这些山峰所对应的就是局部最优解。而其中也会有一个“山峰”的海拔最高的,那么这个就是全局最优解。而遗传算法的任务就是尽量爬到最高峰,而不是陷落在一些小山峰。(另外,值得注意的是遗传算法不一定要找“最高的山峰”,如果问题的适应度评价越小越好的话,那么全局最优解就是函数的最小值,对应的,遗传算法所要找的就是“最深的谷底”)

file

好吧这些都是题外话,要是你真的想了解GE,可以看看我的gtihub的代码:(https://github.com/harvitronix/neural-network-genetic-algorithm)

01 正题

我们现在可以把一个神经网络变成一段01字符串序列,然后通过对这段DNA序列进行我们生物学的:过度繁殖,自然选择(俄罗斯转轮不均匀选择),适者生存。 这个问题的关键是我们如何把这个网络参数化?

文章的方法是:设计竞争网络结构的遗传算法。 首先,我们描述一种用固定长度的二进制串表示网络 结构的方法。约束情况下为网络结构提供二进制字符串表示。

file

我大概解释一下,他这个连接的方式。第一个1是指A2联A1,然后00是指A3没有连接A1和A2然后111是指A4链接了A1,A2,A3。 stage2中的B2因为既没有入点有没有出点,相当于DNA序列中的无效基因片段。·In each stage, we use 1+2+...+(Ks 1) = 1 Ks (Ks 1) bits to encode the inter-node connections. 相当于O(n^2)的复杂度 ,这样我们就可以生成许多有趣的结构 。

file

这个网络是什么就不解释了,但是我们发现有一些结构,比如MAXOUT它是生成不出来的,而且生成的网络中都是固定的格式,包括卷积核的大小也是固定的。所以其最大的问题就是能生成这样类似的网络结构,但是参数是固定的,这样子就会失去它的灵活性。如实验所示,我们可以仅使用这些基本构建块来实现竞争性识别性能。 正如近期发表的使用强化学习探索神经结构的工作所显示的那样 , 这种类型的方法通常需要大量的计算来遍历巨大的解决方案空间。他的计算量就是这么大,所以我们的方法就是想生成的网络先在MNIST上跑,然后跑到好了,我们再把它放到CIFAR10上去跑。

02 技术细节

遗传操作:它从初始化的一 代随机化个体开始。 然后,我们执行T轮或T代,每轮由三个操作组成,即选择,变异和交叉。

file

首先我们输入一个数据dataset,遗传的代数T还有我们要的这个网络的大小N,然后我们进行一个迭代的过程,首先是我们对初始网络进行一个随机参数初始化,然后我们再进行一个选择,训练完之后跑一下他的正确率然后一个优胜劣汰保存他的DNA,之后我们再对这个网络进行一个交叉,是根据概率PC和QC。然后就是突变,也是基于一个概率pm和qm。在这一代自然选择完了之后我们队这一整袋的基因进行一个整体性的评估evaluation 。如果MT,N先前被评估过,我们就简单再次评估并计算其所有事件的平均精确度。这种策略至少在一定程度上减轻了训练过程中随机性引起的不稳定性。

最后,我们把这些新编的码放到了下一代的自然选择中。

file

上面这幅图演示了一个进化的过程。

03 实验介绍

遵循基本的LeNet进行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个训练时期,学习率为10-3,其次为4个时期, 学习率为10-4,另一个时间为10,学习率为10-5(这是一种常见的优化策略用于平均训练时间和精度)。

我们创建一个N = 20个个体的初始代,并 行T = 50 个循环的遗传过程。 其他参数设置为pM= 0.8,qM= 0.1, pC= 0.2和qC= 0.3。 我们设置相对较高的突变和交叉概率 来促进新结构的产生。 探索个体的最大数量是20(50 + 1)= 1,020 < 8,192。 每个人的训练阶段在现代Titan-X GPU上平均需要2.5分钟。经过50代后,最佳个体的识别错误率从0.41%下降到0.34%。

file

file

可以看得出进化的效果非常的不明显我们想到了一个很好的解决方案,但是因为涉及到组里面现在的工作,暂不在这里写出

04 对比CIFAR10

file

我们可以到看到这个网络结构,首先它的层数是固定的,第二个是它的进化极其不明显,而且其最大的问题就是我们浪费了太多的时间在这个进化。相反,它的这个结构其实是很少的,并没有表现出良好的泛化能力。我们完全有理由相信,即便不进化,我们也依然可以生存出很好的效果,就是我们工作的一个努力方向,当然,具体的方法不方便透露。(其实隐藏在了MD里面)


推荐文章
深度学习图像标注工具汇总

绝对不容错过:最完整的检测模型评估指标mAP计算指南(附代码)在这里!

DensePose开源了,2D变3D人体姿势实时识别 | Facebook@CVPR 2018

微信公众号: 极市平台(ID: extrememart )
每天推送最新CV干货

成为第一个点赞的人吧 :bowtie:
回复数量: 0
暂无回复~
您需要登陆以后才能留下评论!