遗传算法的妙用--优化卷积神经网络的结构和初始化权重

最近又读了一篇将进化算法应用于深度学习的文章,读文章的时候发现和这篇文章《Surrogate-Assisted Evolutionary Deep Learning Using an End-to-End Random Forest-Based Performance Predictor》(文章细节)的作者竟是同一人,由衷地感叹,大神就是大神啊,短短几个月之内中了两篇进化计算顶刊的文章。

Sun Y , Xue B , Zhang M , et al. Evolving Deep Convolutional Neural Networks for Image Classification[J].IEEE Transactions on Evolutionary Computation. 2017.

文章要解决的问题主要有两个:对某种数据集最优的CNN网络结构和初始化该网络的权重。

文章的关键就是如何优化CNN网络结构,与这篇文章类似,首先需要解决的就是如何对网络结构进行编码。因为只有对网络结构编码后,才能进行交叉变异和环境选择,网络结构也才能被进一步优化。

  1. CNN网络结构编码方式
    卷积神经网络一般包括三部分:卷积层、池化层和全连接层。一般情况下,卷积层出现在网络的前端,而后连接卷积层或者池化层,而全连接层出现在网络的最尾端。而一个网络结构是卷积层、池化层和全连接层根据一般常识的随机组合,不同的网络结构有不同深度,因此对于网络结构的编码应该采取非等长的策略,具体地:
    遗传算法的妙用--优化卷积神经网络的结构和初始化权重_第1张图片
    其特点为:1)网络的最前端为卷积层,池化层连接在卷积层的后边,全连接层出现在网络的最尾端。2)不同网络结构的编码长度可能是不同的。3)无论是卷积层、池化层还是全连接层都是一个子结构,其中还包含了其他信息,但是子结构是交叉变异操作的最小作用单元。
    遗传算法的妙用--优化卷积神经网络的结构和初始化权重_第2张图片
    个体的编码方式有了,下一步需要解决的问题就是如何进行初始化
    初始化操作分为三个部分:卷积层、池化层的初始化、全连接层的初始化、初始化最小单元参数。
    1)随机产生一个整数,表示卷积层和池化层总的层数。从1到这个整数值进行循环,在每次循环中产生一个随机数,若大于0.5,则产生一个卷积层,否则产生池化层。
    2)随机产生一个整数,表示全连接层的个数。从1到这个整数值进行循环,在每次循环中产生一个全连接层。
    3)卷积层和池化层的顺序完成构建后,初始化子单元内部参数,比如长宽、步长等。

  2. 适应度评价
    一个表示网络结构个体的适应度可以用该网络对数据集的分类误差表示,作者使用了分类误差的均值和方差两个指标。
    还有一个重要的问题,完全训练一个网络结构是比较耗时的,为了解决这个问题,作者减小了网络的训练次数以节省运行时间。

  3. 交叉变异
    由于两个个体的基因长度可能是不一样的,那么怎么进行交叉变异操作呢?
    遗传算法的妙用--优化卷积神经网络的结构和初始化权重_第3张图片

  4. 实验结果
    遗传算法的妙用--优化卷积神经网络的结构和初始化权重_第4张图片
    EvoCNN得到的网络结构和其他网络结构在8个数据集上进行了比较,尤其是在数据集MBI(he MNIST with
    Background Images)和RI(Rectangle Images)上有明显的优势。
    但是算法的求解时间无疑是非常漫长的。

你可能感兴趣的:(Evolutionary,Deep,Learning,神经网络,机器学习)