EfficientNet:模型设计新范式
唔~2019年的图像特征提取方面似乎有了可喜的发展,大家不再盲目地堆大模型,而是寻找更加高效的特征提取结构,在显著减小参数量和计算量的同时模型的表现还能得到提升。同时我们可以看到深度可分离卷积及其变种几乎已经成为主流——
接下来我将分三次分别介绍今年Google Brain的几篇思路清奇的论文,首先是《EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks(2019ICML)》。
该论文的主要贡献在于简化模型缩放流程,统合了宽度、深度、分辨率三个维度的缩放,建立起一个简单有效的联系。
模型缩放
在设计好模型结构的情况下,我们通常可以通过对模型的缩放,以增大模型的大小来换取模型表现的提升,或以牺牲模型表现为代价换取模型大小的减小。最常用的缩放维度有三个——深度、宽度和输入分辨率
- 深度
- 更深的网络往往能提取到更佳丰富和复杂的特征,并且有更强的泛化能力
- 但深层网络存在训练难的问题,尽管shortcut、BN等技术缓解了这一问题,但随着网络的加深边际收益依旧会明显变小
- 比如ResNet18、ResNet34、ResNet50、ResNet101、ResNet152,其数字代表的是模型中卷积层和全连接层数量(不考虑shortcut上用于downsample的卷积);VGG11、VGG13、VGG16、VGG19,其数字代表的是模型中卷积层和全连接层数量——这是一种典型的深度缩放
- 宽度
- 更宽的网络往往能提取更细粒度的特征,并且也更容易训练(同时足够宽的网络能够容许Dropout和BN技术兼容使用,比如WideResNet)
- 比如MobileNet1.0、MobileNet0.75、MobileNet0.5、MobileNet0.25,其数字代表的是模型中卷积通道数量的缩放因子,除此之外还有常见的WideResNet,这是一种典型的宽度缩放
- 输入分辨率缩放更为常见,通过增加输入图片的尺寸,可以保留更多信息,从而提升模型的表现
- 除此之外,下采样策略也是一种缩放维度,提前下采样可以缩小模型,反之则会增大模型
- 下采样策略可以看作更细粒度的输入分辨率缩放,它控制的是中间特征图的分辨率而非简单的模型输入分辨率
- 比如FD-MobileNet采用快速下采样策略并提升模型宽度,在保持模型大小几乎不变的情况下提高模型的特征提取能力
论文作者做了简单的实验,表明单一放大某一因素,其边际收益是不断减小的——
(其中,w, d, r分别表示宽度(Width)、深度(Depth)、分辨率(Resolution)的缩放因子)
混合缩放
此前已经有其他论文(如《Searching for Activation Functions(2017)》和《Regularized Evolution for Image Classifier Architecture Search(2019AAAI)》)讨论过多个缩放维度混合的模型缩放策略,而本文则是为深度、宽度、输入分辨率的缩放建立一个简单但有效的联系,从而简化缩放因子的选取过程。
其实思路非常简单,首先定义这三个缩放因子为$d$, $w$, $r$,并且让他们同步增长
$$
d = \alpha^\phi \\
w = \beta^\phi \\
r = \gamma^\phi
$$
那么此时模型的计算量会增长为大约原来的$(\alpha \cdot \beta^2 \cdot \gamma^2) ^ \phi$倍;
为了简单起见,作者约束了$\alpha \cdot \beta^2 \cdot \gamma^2 \approx 2$,计算量随$\phi$增长为原来的$2^\phi$倍,这样一来只需要找到合适的$\alpha, \beta, \gamma$,然后调整$\phi$的值就可以实现简单的混合缩放。
EfficientNet模型设计
在上述基础上,作者提出了一种新的模型设计范式,并得到了EfficientNet系列模型——
- 用NAS搜索出符合预期大小的一个小模型,这里作者设定了计算量目标为400MFLOPS,于是搜出了一个跟MNasNet类似的小模型B0
这里的Operator沿用了MNasNet的命名方式,MBConv1
指的是MobileNetv1的原版深度可分离卷积,MBConv6
指的是MobileNetv2的反残差结构,不过作者在论文中指出这里使用的是带SE模块的反残差结构 - 接下来通过网格搜索,找出满足$\alpha \cdot \beta^2 \cdot \gamma^2 \approx 2$的最优超参$\alpha, \beta, \gamma$,进而得到B1
如作者搜索出来的结果为$\alpha=1.2, \beta=1.1, \gamma=1.15$,此时B1计算量约为800MFLOPS - 按照混合缩放的公式,逐步增加$\phi$值,依次得到各种规模下的B2-B7
Tensorflow-EfficientNet的预设值跟论文描述似乎有些细微差别:
Model | w | d | r | dropout rate |
---|---|---|---|---|
B0 | 1.0 | 1.0 | 224 | 0.2 |
B1 | 1.0 | 1.1 | 240 | 0.2 |
B2 | 1.1 | 1.2 | 260 | 0.3 |
B3 | 1.2 | 1.4 | 300 | 0.3 |
B4 | 1.4 | 1.8 | 380 | 0.4 |
B5 | 1.6 | 2.2 | 456 | 0.4 |
B6 | 1.8 | 2.6 | 528 | 0.5 |
B7 | 2.0 | 3.1 | 600 | 0.5 |
由此设计出来的模型有着相当惊人的特征提取效率,而且小模型的搜索空间比较小,更容易搜索出最优模型,搭配合理的模型缩放,放大后的模型甚至能比直接搜索的大模型更加有效——