如何评价谷歌大脑的EfficientNet?

如何评价谷歌大脑的EfficientNet?

这是一篇不得不接收的论文,也是会让人沮丧的论文。首先论文整体的novelty并不是很足,但是写的很赞,实验充分,并有一定的insight,故很难找到理由拒它。。然后为什么沮丧呢?看完论文后你会觉得:好的,我知道这么“试”可以涨点,但是对于正常人来说哪来这么多卡试啊?这真是一个悲伤的故事,深度学习越来越拉大了大公司小公司差距了(没卡没数据的小公司只能在夹缝中生存。)

论文展示了谷歌各种吊炸天的调参能力,在各个参数量级上精度都超过了之前的SOTA,但是并没有告诉我们尝试的准则,仅仅展示了结果而已。作者可能意识到了这点,在最后的Discussion部分补充了一个activation的可视化结果图,但是其实就是告诉我们,我这样联合搜出来的结果就是好,不信你可以看我的特征图。。。还有就是论文缺少了一张对于我来说很重要的图,通过grid search搜出来的超参的accuracy对比图,论文只说了EfficientNet-B0搜出来最优值是 ,但是次优解的精度如何呢?是不是有一定规律呢?

然后再来聊聊论文的细节。。这篇论文的写作真的很讨人喜欢,至少是打动了我233333。我们跳过前言部分直接看方法那部分,也就是论文的第3节。第3节做的第一件事情就是定义问题,并把要做的问题抽象化成数学表达;然后采用欲扬先抑手法,之前大家从单一的维度做网络优化是可以的,但是存在上限,为此作者通过了几组实验证明了这个事情;之后就水到渠成的引出了联合优化的方法。最后实验部分同样是继续证明作者的方法有效性,从分类精度上,迁移能力以及特征可视化结果分别验证了。。可以说整篇论文都在围绕下面这张图来展开的。。

还值得一提的是EfficientNet-B0是用MnasNet的方法搜出来的,利用这个作为baseline来联合调整深度、宽度以及分辨率的效果明显要比ResNet或者MobileNetV2要好,由此可见强化学习搜出来的网络架构上限可能更高!至于原因我也不知道,但是我觉得这是一个很好的insight点,强化学习一方面可以用来超过人类,但是另外一个重要的点是如何利用它反哺人类,多向强化学习学学吧。。。(例如MobileNetV3就已经不自己设计了,而直接用强化学习搜出来的网络架构了)。。。可以看看EfficientNet-B0的网络结构,就会发现和我们手工设计的网络有明显的几处区别,如下图:

第一处区别是在最开始降采样没有采用maxpooling,而是换成了stride为2的conv。。猜测是为了减少信息丢失,尤其是对小模型来说,前期的底层特征提取更重要。

第二处区别是第一次降采样后的channel反而减少了,这个我没搞懂。。。。

第三处区别是有很多stage都采用了5x5的conv。。。这是因为对于depthwise separable conv来说,5x5的计算量要比两个3x3的计算量要小。。(坊间传闻large kernel is all your need. 233333)

其中输入特征图尺寸为(H, W, M),输出特征图尺寸为(H, W, N)。

第四处区别是降采样后的特征图尺寸减半,但是channel没有扩大两倍。第6个stage特征图尺寸没变,但是channel也扩大了。。这些可能都是手工设计很难搞定的。。。我能想到的解释是,MnasNet在搜网络结构的时候带上了运算量的约束,可以理解成网络在训练的时候就考虑了pruing(裁枝),因此才会出现一些不规则的channel数,同时这个带来另外的一个好处就是,网络可以更好的训练更有意义的权重,因此这些搜出来的网络结构的上限更高。

最后的最后,感觉这篇论文复现可能有坑,需要好好看看源码。。。但是好在官方提供了tf的pretrain model,可以先手动转一发试试。。。