正文
R. Miikkulainen 等人提出了CoDeepNEAT(“Evolving deep neural networks”,arXiv:1703.00548, 2017),其中产生了一大批模型和蓝图。这些蓝图是由数个节点组成的,节点指向表征了神经网络的特定模块。这样一来,他们所提的方法就让重复结构的进化变得可能,因为蓝图可以重复使用进化后的模块。T. Desell 提出了 EXACT(“Large scale evolution of convolutional neural networks using volunteer computing” ,arXiv:1703.05422, 2017),这是一种用来部署在分布式计算集群上的神经进化算法,他们当时使用了4500台志愿参与者的计算机,进化出了12万个网络用来搞定MNIST数据集。他们的方法中没有使用池化层,也仅限于使用2维的输入和滤波器。
作者们还发现,近期有研究中只用一个GPU就可以进化出能够准确判断出监督学习任务中需要的是回归模型还是分类模型的深度神经网络,在一系列不同的任务中获得了96%的平均准确率。(E. Dufourq 和 B. A. Bassett, “Automated problem identification: Regression vs classification via evolutionary deep networks”,Annual Conference of the South African Institute of Computer Scientists and Information Technologists, ACM, 2017)这项成果是作者们的这篇论文的直接先驱,而且只要有足够的计算资源就可以无缝衔接到这篇论文中的网络优化过程中来。
基因算法
基因算法(genetic algorithm,GA)是一种可以用来解决优化问题的进化算法。首先初始化一群染色体,每个染色体都表征了优化问题的一个解决方案。然后通过一个匹配度函数评价每个染色体,以确定哪个染色体可以解决这个问题。在迭代进化模型中,基因算法会迭代很多次,可以称作“世代”(generations),一直迭代到预定义的条件达成为止(比如最大世代数目)。每一个染色体由很多个基因组成,这些基因就可以用基因操作器进行替换。经过基因操作器操作之后的染色体,就可以称为原来染色体的子代(offspring)。根据染色体群落数目的不同,可以产生多个子代。每个世代中,子代染色体都会代替现有的染色体群落。
这篇论文中,作者们使用了传统的基因算法。他们还额外增加了世代数目和网络训练中epoch的数目,用来探索最佳的epoch的数目。所用的基因算法如下图。