Large-Scale Evolution of Image Classifiers论文阅读

Abstract:

  • 提出了一个大规模进化算法,减少在网络设计过程中的人为参与
  • 明显缺陷是会产生很大的计算量
  • 不需要预处理,整个演化过程开始之后不需要认为参与,最后会输出一个训练好的网络

具体方法:

population: consist of models
individual: each model
worker: each computer
fitness:accuracy(训练完成之后,在validation set上验证的时候的数据集)

大规模指的是在这个方法中种群很大,有1000个个体,那如何实现这么多个体的进化呢?答案是使用很多台计算机,计算机的数量是个体数量的四分之一(250)。这些计算机是并行异步的,彼此间没有直接的交流,population是一个文件,所有的计算机都可以进行访问并进行更改。

在演化过程中,用的是tournament selection机制。每次每台计算机从populaiton中随机选2个individual,比较他们的fitness,kill小的,大的作为parent留下来,复制并通过mutation产生新的individual。(之所以用pairwise的tournament selection而不是把population分完,是为了让每个worker都保持工作状态。要不然的话一次性分完,结束的早的就得等结束的晚的,效率低)

但是这样有个问题,就是有的时候一个worker可能在另一个work对这个individual进行修改的时候也对这个individual进行修改,从而产生冲突。论文中解决冲突的方法就是让被影响的放弃,之后再尝试进行修改。

编码与变异:

在编码的时候,每个模型和它的学习率被编码成一条DNA。单个框架被看成是一张图,其中的边表示identity连接或者卷积,顶点表示连接的融合,如果输入一个点的连接的通道数不同,就通过padding的方式identity连接的通道数。

可供选择的变异包括:(有的变异给出了范围)

  • 改变学习率
  • 恒等连接插入卷积层
  • 删除卷积层
  • 改变步长
  • 改变卷积层的channel数
  • 改变卷积层filter的大小(只能是奇数)
  • 插入skip connection
  • 删除skip connection

变异的时候,选择那种变异类型是认为决定的,但是选定一种变异之后,如何进行变异(在什么位置,也就是选哪个进行变异,变到多大)是随机的,所以这种变异比较盲目。

初始化:

所有的individual的学习率都初始化为0.1(一般初始化大小事0.0001),神经网络只有一层,没有卷积层。

权重继承:

如果突变之后weigt的形状没变,那就将父母的权重复制过来。如果形状变了,就重新初始化然后训练。

实验:

实验部分主要是回答三个问题:
1、一个one-shot的训练过程是否能从一个很差的初始条件中通过演化得到一个和人工设计的网络性能相近的结构。
2、研究这个方法的结果可变性、并行性、计算花销上如何
3、一个能在CIFAR10上演化的算法能否不做更改就迁移到CIFAR100上,并且性能较好。

实验结果如图所示:
Large-Scale Evolution of Image Classifiers论文阅读_第1张图片
上面的每个点都表示一个individual,其中灰色的点是被杀死的点,蓝色的点是存活下来的点。底下的四个框架是演变过程的一个例子。一开始的时候网络只有一个全局池化层,通过演变一步步变为最后的结构。从结构可以看出来,和人工设计的网络结构不同,这些网络结构有时会经历很多个非线性激活层。

这个算法在CIFAR10上最好的测试结果是达到94.6%的测试正确率。

此外,论文还探索了种群大小对实验结果的影响,不用tournament selecton机制改用随机kill对结果的影响,如何避免局部最优,尝试recombination(让child结合parent的结构和参数)之后对结果的影响。发现,当种群大小不够大的时候会陷入较差的局部最优,当不用tournament selection机制的时候最后正确率较低,当recombination的时候(建立在父母双方能从数据集中提取不同特征的假设上,让孩子继承父母双方的‘基因’,发现并不能提高正确率。

总结: 这篇文章建立在大规模种群的基础上。这是因为初始条件太差了,为了得到好的结果,只能使用大规模种群,扩大搜索区域,找到更好的局部最优解。但是完全不需要给出这么大的搜索域,

你可能感兴趣的:(论文阅读)