论文出自Google Brain,是对前一篇论文的改进,前一篇文章讲述了用RNN去搜索一个最好的网络结构,而这篇文章认为之前的搜索空间太大,效果不好,所以改成搜索CNN的效果最好的conv cell。再用这些conv cell来构建一个更好的网络。
链接:https://arxiv.org/abs/1707.07012
1、Introduction
在ImageNet上学习到的分类网络,其特征迁移到其他任务时,往往能获得更好的效果。但是如果将前一篇文章提出的NAS直接在ImageNet上训练,则计算量非常大。所以作者就想在CIFAR-10上训练得到一个比较好的网络,然后迁移到ImageNet上也能获得很好的效果。为了能完成这种迁移,作者设计一个与网络深度和图片大小无关的搜索空间。所以,作者觉得CNN网络都是由卷积层构成的,搜索最好的CNN结果可以退化为搜索一个好的CNN的Cell。 2.Method
因此作者重心放在设计一个Cell的搜索空间。文中提出两种Cell:Normal Cell 和 Reduction Cell。Normal Cell是输入输出大小不变,而Reduction Cell的输出的height和width为原来的一半。网络则由两种不同的Cell叠加构成,如图:
网络结构
网络结构有两个可变参数,N是Normal Cell的叠加个数,另外一个是每个Cell里面的卷积核的个数 。这两个数并不是学习到的,而是人为指定的。后面作者分别用N=4和N=6做了实验。另外作者提到一个通识,为了使得某层的隐藏状态基本不变,我的理解是大概使得表征能力没有下降,所以在某一层的输出变小时,需要增加该层的滤波器个数,使得输出基本维持稳定。
下面说说怎么用RNN控制器构建一个Cell。每个Cell有两个输入hi,hi-1,每个Cell包含5个Block,其中每个Block如下图右侧。其中每个Block需要进行五种操作,这五个操作由RNN控制器给出。如下图左侧,预测。
Block的产生
这五个操作从如下选项中选出:
block的可选操作
block构建好后,block的输出就可以作为下一个block构建时的可选hidden state输入。至于为什么一个Cell包含5个block,作者没有做实验,只是说他们用了这个效果比较好。 由实验知道,最后效果最好的Cell是如下结构,作者称为NASNet-A。留意后面关于NASNet-A的实验。
NASNet-A
3.Reslut
3.1 CIFAR-10
Tabel 1主要在CIFAR-10上和其他网络对比,在相当的计算复杂度上,都获得不错的表现,超越了shake-shake网络。
3.2 ImageNet
作者强调他们仅仅是使用了CIFAR-10上的最优网络,从0开始在ImageNet上训练。并且作者发现这些预测的Cell之间没有residual connection,并且作者做实验发现手动加入residual connection并没有提升效果。
上图是在大平台上的对比,可以看到NASNet-A基本上都是state-of-the-art。
图5
并且由图5可以知道相同的精度,NASNet-A的计算量更小。
然后作者再在计算资源非常有限的平台,比如手机,上和其他网络进行对比,如下图:
可以看到在资源有限的情况下,NASNet-A比MobileNet和ShuffleNet都要好。并且计算量相当。
3.3 网络在目标检测上的应用
作者继续把得到的网络并进Faster-RCNN的框架中,发无论在大平台还是像手机这种小平台上都比现有的网络效果更好。
目标检测上的比较
3.4 搜索方法的有效性
最后,作者还比较了强化学习和brute-force random search两个方法的有效性。从迭代20个epochs的模型效果看,强化学习明显更有效。
读者的感想:
这要从ICLR2017的时候说起,google brain 当时出了一个工作,提出了神经网络的设计可以用神经网络来学习(designing netwotks to learn how to design networks),就是本文中引用的NAS(Neural architecture search with reinforcement learning)。其实当时mit也有类似的工作,但是效果没nas好,我觉得主要是gpu没他们多(有钱真的可以为所欲为(。・ˇ_ˇ・。:))。
nas 基于强化学习,方法也很暴力,搜索空间也很大,在cnn和rnn上都做了探索,使用了800块gpu,当然只在cifair10上做的啦,而且没有超过densenet的性能。 由于网络结构的搜索空间大,所以设计的网络连接也有些反人类,特别是rnn,手机上码字,不好贴图,有兴趣可以看看nas的paper感受下。 直接使用nas的框架来跑imagenet显然是不行的!于是就有了这篇工作了。个人觉得这篇工作可以看做是在nas的基础上加上几个改进,使得可以在cifar10上设计的网络能够在imagenet上有效。
第一个改进其实是一个经验:cnn 可以由同构模块进行堆叠而构成。这样设计一个大型cnn网络就直接简化为设计一个block就行了,也就可以用nas解决了。
第二个改进:合理选择搜索空间中的操作,使得block运行时对输入尺寸没有要求(例如卷积,pooling等操作)。这样图像由cifar的32到imagenet的大尺寸图片就不会有问题了。
第三个改进还是经验:block的连接,block内部的一些拓扑结构根据经验可以固定,不用去学。 基于以上几条,nas那一套就可以直接用啦。这篇工作里面的网络也看起来人性化一些,一个原因就是经验性的东西加入了很多。
有了上面的想法,剩下的事情就简单了。。。好的想法和最终的paper之间还差500块gpu呢(ノ`⊿´)ノ。 唉,大牛的工作。。。((유∀유|||))
————————方黎
1.计算量确实大。
"In our experiments, the pool of workers in the workqueue consisted of 500 GPUs." 贫穷限制了我的想象力。 有钱真的是可以为所欲为的。 这意味着能接着往下做的组不多。
2.我觉得这种思路是正路。
之前的网络结构虽然成功,也确实总结出了不少有用的结构规律,但始终是拍脑袋的因素在里面。怎么让程序自己去找结构,在比较大的搜索空间中找到更好的结构,才是做分类接下来的方向。 当然,对计算能力要求很高,能接着往下走的人不多。 惭愧的讲,当初老师也有过这个想法,但是我浅尝辄止,因为觉得实在对计算量要求比较大,我搞不定。
3.完美的结构,不一定特别规整。
resnet,googlenet等人设计的结构,总归还是规整的。但我们看看学出来的三个结构,其实没那么规整。其实人脑里的网络结构也未必多规整,搜索空间比这个文章里的还要大。
4.我们需要《深度非线性网络的数学原理》
这么大的搜索空间,怎么搞? 对于一个任务,怎么的网络结构最好? 最好是多好? 需要多少数据?
————————李鑫