AmoebaNet,论文的全名是Regularized Evolution for Image Classifier Architecture Search,是一篇比较早的采用进化算法来做NAS的论文。

进化算法是传统人工智能中的一种群体启发式优化算法,它模拟生物学在自然界中的仿生原理,通过选择、交叉、变异等方式,一代又一代更新和进化,最终收敛于最优解的过程。

AmoebaNet是由谷歌团队Real等人提出的一种基于年龄进化算法的神经网络架构搜索。为了解决网络架构参数无法通过验证集精度的梯度传播来更新,之前的一些学者提出了用强化学习的思想来优化controller RNN。与强化学习相似,进化算法同样也不需要计算损失函数或者目标函数的梯度传播,甚至不需要目标函数是可导的,只需要一些简单易操作的编码处理,就可以优化目标函数。

在AmoebaNet里,采用的是遗传算法的一个变种,叫做年龄进化算法。群体中的每一个个体,代表着一种子网络,而个体的编码空间(或者说是搜索空间),则是支持直接引用NASNet的Cell和Block的设计,每一个个体,代表着对Cell的编码。

下图是AmoebaNet年龄进化算法的流程。
AmoebaNet论文和算法解析
图1. AmoebaNet的年龄进化算法流程图

算法的步骤为:

  1. 随机初始化P个个体 的种群(也就是P个子网络),训练和验证这P个子网络获得它们的精度(适应度值),将P个个体加入历史群体中。
  2. 如果历史群体数量少于C个,则进入循环。从种群中随机选取S个样本,从S个中挑出最高精度的样本作为父个体。对父个体进行变异操作生成子个体,对子个体重新训练和验证,得到子个体的精度。
  3. 将子个体加入到种群和历史群体中,从群体中淘汰掉最老(不是最差)的个体。
  4. 如果历史群体大于C个,则跳出循环,返回历史群体中最高精度的个体作为最终的搜索结果。否则的话跳到步骤2中进入下一个循环。

AmoebaNet的年龄进化算法和基本遗传算法还是有较大的差别:首先,每一轮的迭代不是整个群体在更新,而是通过采样,只更新一个个体;其次,淘汰的个体不是适应度值最差的,而是最古老(但是选择最佳个体是根据精度);另外,变异的操作方略微有点不同。

AmoebaNet的变异方法有个选择的过程,依次是:

  1. 对block的输入或者操作(二选一)做变异;
  2. 选择其中一种Cell类型(Normal或者Reduction二选一);
  3. 选择Cell里面的某个Block(五选一);
  4. 选择Block的某个输入分支(二选一);
  5. 将该分支变成搜索空间范围内的另一种输入或者操作(由过程1中决定)。

变异的过程和示例如下面两图所示。
AmoebaNet论文和算法解析
图2. 变异选择过程
AmoebaNet论文和算法解析
图3. 变异选择示例

作者在Cifar-10和ImageNet数据集上进行搜索实验。种群个体为P=100P=100,采样个体为S=25S=25,搜索过程中每个子网络训练25个epoch,子网络结构为N=3N=3F=24F=24(N为Normal Cell连续堆叠个数,F为第一个Cell的输出通道数)。在450个K40的GPU上耗时7天时间,搜索出来的最佳Cell结构如下图所示。
AmoebaNet论文和算法解析
图4. AmoebaNet的Normal(左)和Reduction(右)Cell结构

搜索出来的AmoebaNet分别在Cifar-10和ImageNet数据集上的进行训练,得到的实验结果如下两图所示。

从Cifar-10和ImageNet的实验可以看出,AmoebaNet的搜索结果不仅超过了传统的深度学习网络,也和最好的NAS方法(NASNet和PNASNet)相当,论文还训练了一个参数量超大的模型(469M),精度超过了之前所有的网络。
AmoebaNet论文和算法解析
图5. Cifar-10实验结果
AmoebaNet论文和算法解析
图6. ImageNet实验结果

相关文章:

  • 2021-07-21
  • 2022-12-23
  • 2021-10-08
  • 2022-12-23
  • 2021-05-29
  • 2021-09-02
  • 2021-11-28
猜你喜欢
  • 2021-10-24
  • 2021-11-30
  • 2021-10-13
  • 2021-11-13
  • 2021-12-29
  • 2022-01-22
相关资源
相似解决方案