第一次读 Neural Architecture Search (NAS )的论文读起来磕磕绊绊,有些东西不知道什么含义,大概总结一下。
大规模图像分类问题上神经架构搜索(Neural Architecture Search,NAS)确定的神经网络框架的表现超越了人类设计的网络。本论文将研究用于图像密集预测任务语义分割的 NAS。一般而言,对于一般的 NAS 结构都是对 cell 进行搜索,而本文不仅对单独的 cell 进行搜索,还对神经网络的结构进行了搜索。
这里的 cell 指的应该是网络的基本单元,里面包含有更小的 block . cell 应该就是类似于 residual block 通过不断堆叠得到 resnet 。
而 network level 应该指的是 feature maps 空间分辨率的变化,
既然要搜索,首先要给出搜索空间。
先给出 cell level 的搜搜空间
文章中定义的 cell 为全卷积单元, 并且内部包含 block. 每一个 block 是一个 two-branch architecture,每一个 block 包含 5 个 参数 (I1, I2, O1, O2, C)
Ii1是对应第一个 branch 同理 I2, I的选择有多种,为了维持一个 DAG (有向无环图) I 的输入可以上一个 cell 或者上上个 cell 的输出,或者是该 cell 之前 block 的输出。
O 表示用于 I 上的转换,有 8 中选择,如下 :
C 是两个分支合并的方法,目前仅支持两个分支逐元素相加。
再给出 network level 的搜索空间 :
通过之前的积累的经验我们不难发现,
所以搜索空间如下图所示 :
目的就是找到一个长度为 L 的路径,然后通过 ASPP 和 双线性差值得到原图分辨率,得到最佳的网络表现。
给出搜索空间之后再给出搜索的方法 :
上面给出的都是离散的方式,搜索空间太大,不能用梯度下降求解,搜索的解决方法就是把离散空间搜索 转化为 连续空间的搜索,使用梯度下降进行求解。
对于 cell :
首先,在cell level我们要找出每个block要使用哪两个input,以及对这些input使用哪些转换。为了把这个问题转换成连续的问题,让每个input使用全部的转换,再乘上 α。如果input的候选有n个,转换有八种,那应该每一个block有8n个 α。 α的限制是要大于零,且加总为1,所以可视为机率。在最后模型训练结束后,只要找到α最大的两个直,变找到了在cell level上该block使用了哪两个input,以及使用了哪两个转换。最终可以如此表示第l层output
同样的方法用于对于 network :
s这个分辨率的可能从三个地方转换到这里,一是比他两倍大的地方、一是比他两倍小的地方、三是分辨率和他一样大的地方。分别给予三个β权重。在训练玩模型后,我们可以将β视为转移机率,而要找到一条最大机率的路径,可以透过Viterbi algoritm达成。
求解 :
寻求最佳解的部分,分成两个部分训练,一是update所有的weigths(convolution等),二update决定network structure的α和β。训练过程轮流update这两个部分。作者们发现如果一开始就optimize第二个部分,模型会表现得很差,所以他们在20个epoch之后才开始update第二部分。