论文提出使用进化算法来进行神经网络结构搜索,整体搜索逻辑十分简单,结合权重继承,搜索速度很快,从实验结果来看,搜索的网络准确率挺不错的。由于论文是个比较早期的想法,所以可以有很大的改进空间,后面的很大算法也是基于这种想法进行更好的补充undefined
来源:晓飞的算法工程笔记 公众号
论文: Large-Scale Evolution of Image Classifiers
- 论文地址:https://arxiv.org/abs/1703.01041
Introduction
论文对当前的进化算法进行少量地改造,结合前所未有的算力进行神经网络结构搜索,在CIFAR-10上达到了很不错的准确率。论文十分注重搜索算法的简单性,从性能很差的无卷积模型开始,进化算法需要在一个几乎不受约束的搜索空间中进化成复杂的卷积网络
Methods
Evolutionary Algorithm
基于锦标赛选择(tournament selection)进行进化算法,定义如下概念:
- 种群(population),模型集合
- 个体(individual),训练完的单个模型
- 适应值(fitness),模型在测试集上的准确率
- 工作者(worker),每次从种群中选取两个个体进行适应值计算
- 消灭(killed),将worker挑选的个体中,适应值低的去掉
- 繁殖(reproduction),将worker挑选的个体中,适应值高的作为父代(parent),拷贝并进行变异(mutation)得到子代(child),将子代放回种群中(alive)
为了加速计算,使用massively-parallel, lock-free的并行计算,许多worker在不同电脑上进行独立的异步操作,仅使用共享文件系统来保证种群内容一致,每个个体为一个文件夹。种群数量为1000,worker一般为种群数量的$frac{1}{4}$
Encoding and Mutations
网络结构表示为图(DNA),节点表示3维tensor或激活方法,tensor的3维分别表示图片的空间坐标以及channel数,激活方法作用与节点上,可以为BN RELU或无激活,边表示identity connections或卷积(包含可变异参数)。当节点连接多条边时,将其中一条非identity connection的边作为主边,对其它边进行像素的最近邻差值以及维度的裁剪和填充,最后进行element-wise sum。在每次繁衍过程中,随机选取以下一种变异方式:
- 调整学习率
- 不变
- 重置权重,子代重新训练
- 随机位置插入卷积层
- 删除卷积层
- 修改stride,2的倍数
- 修改channel数,修改范围为原值的一半至两倍
- 卷积核大小,奇数
- 添加skip connection
- 删除skip connection
Initial Conditions
种群的初始化为仅包含global average pool的简单个体,学习率为0.1
Training and Validation
在CIFAR-10上进行4万5张图的训练和5千张图的测试,共训练25600轮,batch size为50
Computation cost
每个进行训练的模型,记录其单batch训练的计算量$F_t$FLOPs和验证的计算量$F_v$FLOPs,乘以batch数得到最终的计算量为$F_tN_t F_vN_v$,
Weight Inheritance
由于模型完整的训练需要更多的迭代次数,这十分耗费时间,为了解决这一问题,允许子代默认继承父代的权重,如果层有相同的shape,则继承,但如果是重置权重突变,则全部不继承
Reporting Methodology
为了防止过拟合,训练集和测试集不能有交集,准确率表现最好的模型称为“the best model”
Experiments and Results
从实验来看,论文提出的搜索方法比目前的同体积的网络性能要高,但比SOTA略差一点,整体搜索时间很快。对于两个超参数,种群大小和迭代次数,则是越大越好,太小容易陷入局部最优
CONCLUSION
论文提出使用进化算法来进行神经网络结构搜索,整体搜索逻辑十分简单,结合权重继承,搜索速度很快,从实验结果来看,搜索的网络准确率挺不错的。由于论文是个比较早期的想法,所以可以有很大的改进空间,后面的很大算法也是基于这种想法进行更好的补充,所以这篇论文也是值得一读的
如果本文对你有帮助,麻烦点个赞或在看呗~undefined更多内容请关注 微信公众号【晓飞的算法工程笔记】