Genetic CNN

Genetic CNN

目前,用于大规模视觉识别的最先进的解决方案之一就是深层卷积神经网络。这些网络大多是研究人员手动设计的固定的网络体系结构,具有一定的局限性。为此,Alan等人做出了新的尝试:采用遗传算法来自动探索和学习网络结构。接下来就让我们一探究竟。

论文

本文介绍了Alan Yuille等人提出的文章《Genetic CNN》,这篇论文于2017年发表于ICCV。在此特表感谢!

论文地址

https://ieeexplore.ieee.org/document/8237416/

本文介绍了一种通过自动学习来获得最优深度神经网络框架的方法。将CNN以池化层为界划分成不同的(stage),每个层里包含一系列预定义好的构建块(由卷积层和池化层组成),从而利用一种新的编码方式将这每一种网络结构用一串固定长度的二进制串表示,利用遗传算法将原本的“遍历每个结构选出最优”问题转换为“在一个大的搜索空间内进行优化”,从而高效地遍历空间。

本文中的方法仅用于提供新的网络结构,具体的参数和识别准确性都需要通过独立的训练获得。

重要概念

遗传算法:遗传算法是一种模拟生物学进化过程搜索最优解的计算模型。

生物遗传学中的概念与本文的遗传算法中的概念一一对应。

“种群”对应 定长的编码所能表示的所有网络结构的集合

“基因编码”对应 定长的二进制编码

“个体”对应 一串二进制编码所表示的一种网络结构

“末代种群中的最优个体” 对应 最终的最优解

每一代的“进化”通过适应度函数的评分和“俄罗斯转盘”的方式来决定(将在下文中详细解释)。为了避免局部最优,本文的介绍遗传算法中也引入了生物学中的“选择”、“交叉”和“变异”。

算法介绍

“遗传个体”的二进制编码方法

在这种编码方式中,一个生物个体对应于一个网络模型,基因对应于节点间的连接(一个二进制码点)。

图中的每一个节点代表一个卷积操作,编码操作仅作用于黑色的普通节点。

孤立节点存在是为了保证具有更多节点的stage可以模拟由具有更少节点的stage表示的所有结构。

一个网络模型由有限个阶(stage)组成,用一个固定长度的二进制串表示。每一阶由一系列预定义的块(比如卷积和池化)组成。

上图中的网络有两个阶,即S=2,每个阶的节点个数为Ks个,此时Ks=,因此,所需的二进制码点数为(4*3+5*4)/2=16个。

“遗传个体”是如何逐代进化的?

使用遗传进行CNN结构的搜索主要分为以下几步:初始化、选择、变异、交叉以及个体评估。接下来一一介绍这些步骤的具体实现思想。

初始化操作用于实现网络个体的初始化,即创建初始种群。初始种群的数量为N,每个个体是一个长度为L的二进制串。定义遗传操作执行T代。

每次进行选择时都是随机选择。每个个体的识别精度决定了该个体被选中的概率,如果一个个体的识别精度越高,那么该个体被选中的概率就越大。这样的操作从一定程度上实现了优胜劣汰。

变异操作让个体以一定的概率改变自身的结构。以第一个个体(Code:1-01-001)为例,经过变异之后,其编码可能变成0-01-001。变异操作能够减少陷入局部最优解的风险。

交叉操作能够让相邻的个体以一定的概率互换“阶”的结构,本质上是属于个体之间的变异操作。

以GeNet#1 与 GeNet#2 这一对相邻个体为例:将GeNet #1的第二个“阶”(Code: 0-01-100) 与GeNet #2的第二个“阶”(Code: 1-01-100)交换。交换之后,GeNet #1的第二个“阶”的Code 就变成了1-01-100,GeNet #2 的第二个“阶”的Code 变成0-01-100。

在评估个体时,主要以个体的识别精度作为评判标准。

整个遗传算法的流程如下所示:

实验结果分析

随着代数的增加,识别精度的均值和中值越来越高,这表明遗传算法提高了“种群”的总体质量。

从图中可以看出,大约5代之后,全0初始化与随机初始化的识别精度大体一致。大约30代之后,两者的识别精度几乎一样。

随着代数的增加,识别精度逐步增加。虽然这些精度低于某些最先进的CNN [42] [16] [15],但这些网络要深得多(例如40-100层,而GeNet#1和#2层数却少得多)。这表明遗传算法可以生成较优的替代策略。

可以看到,从小数据集(CIFAR10)中学习的结构基本可以迁移到大规模视觉识别数据集上(ILSVRC2012)。因为原始的链式阶段被自动学习的结构所取代,所以学习到的模型比VGGNet-16和VGGNet-19具有更好的性能。

总结

虽然遗传算法很大程度的减少了网络结构的搜索范围,但也有一定的局限性。比如,该遗传算法固定了每个阶段的卷积核的大小和通道数量,这就限制了网络从初始模块中结合多尺度信息。另一方面,遗传算法仅用于探索网络结构,与网络训练过程是分开进行的。那么,是否能将遗传算法同时用于搜索网络结构和训练网络?这值得我们继续探索。

源码链接

https://github.com/aqibsaeed/Genetic-CNN

在此对源码作者表示感谢!

- 编辑 -

吴霞

王晨阳

万鸣

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180427G0XI6Z00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券