论文将标准的遗传算法应用到神经网络结构搜索中,首先对网络进行编码表示,然后进行遗传操作,整体方法十分简洁,搜索空间设计的十分简单,基本相当于只搜索节点间的连接方式,但是效果还是挺不错的,十分值得学习undefined
来源:晓飞的算法工程笔记 公众号
论文: Genetic CNN
为了进行神经网络架构搜索,论文将网络限制为有限的深度,每层为预设的操作,但仍然存在很多候选网络,为了有效地在巨大的搜索空间中进行搜索,论文提出遗传算法进行加速。首先构造初始种群,然后对种群内的个体进行遗传操作,即选择、交叉和变异,通过识别的准确率来判断其适应性,最终获得强大的种群
目前SOTA的网络大都由多个阶段构成,每个阶段内的层具有相同的维度,而相邻的阶段则用池化进行连接。借鉴这种思想,定义网络有$S$个阶段组成,$s$-th阶段($s=1,2,...,S$)包含$Ks$个节点,标记为$v{s,k}$,$k_s=1,2,...,K_s$,节点按顺序排列,仅允许低序号节点连接到高序号节点,对节点的所有输入进行element-wise sum,每个节点代表卷积操作,卷积后都接BN+ReLU,网络不加入全连接层
每个阶段使用$1+2+...+(Ks-1)=\frac{1}{2}K_s(K_s-1)$位来表示内部连接,第一位表示连接$(v{s,1},v{s,2})$,第二位和第三位则表示连接$(v{s,1},v{s,3})$和$(v{s,2},v{s,3})$,以此类推,最后$K_s-1$位则表示$v{s,Ks}$与其它节点的连接。对于$1\le i\le j\le K_s$,如果$(v{si}, v{s,j})=1$,则$v{s_i}$和$v{s,j}$有边,$v{s,j}$将$v{s,i}$的输出作为element-wise sum的一部分。编码如图1所示,但是Stage 2的编码好像有点问题,按照图片应该是0-10-000-0011
这样的编码形式可以编码目前的主流分类结构,但也有很多局限性:
遗传算法过程如图1所示,共进行$T$代遗传,每代包含3个操作,选择、变异和交叉,适应值通过训练后的模型在验证集上获得
实验配置,$S=2$,$(K_1,K_2)=(3,5)$,$L=13$,种群初始$N=20$,共一次$T=50$,$p_M=0.8$,$q_M=0.1$,$p_C=0.2$,$q_C=0.3$,一共只产生$20\times (50+1)=1020\le 8192$个网络,耗时2 GPU-day
实验配置,$S=3$,$(K_1,K_2,K_3)=(3,4,5)$,$L=19$,种群初始$N=20$,共一次$T=50$,$p_M=0.8$,$q_M=0.05$,$p_C=0.2$,$q_C=0.2$,一共只产生$20\times (50+1)=1020\le 524288$个网络,耗时17 GPU-day
将CIFAR-10中学习到的网络直接在别的数据集上进行测试
将图5中的两个网络在ILSVRC2012上进行训练,先用VFFNet的stem进行下采样,再过图5的网络,最后接全连接进行分类
论文将标准的遗传算法应用到神经网络结构搜索中,首先对网络进行编码表示,然后进行遗传操作,整体方法十分简洁,搜索空间设计的十分简单,基本相当于只搜索节点间的连接方式,但是效果还是挺不错的,十分值得学习
如果本文对你有帮助,麻烦点个赞或在看呗~undefined更多内容请关注 微信公众号【晓飞的算法工程笔记】
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。