[Reading] EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks

1. 概述

  EfficientNet: Rethinking Model Scaling for Convolutional Neural Network 一文提交于 2019 年,它提出了一种系统化地对模型进行缩放的方法,并通过神经架构搜索(NAS,Neural Architecture Search)得到了一系列称为 EfficientNet 的网络。EfficientNet 系列网络在达到 SOTA 准确度的同时,大幅降低了参数数量,减小了模型体积,提高了推断速度,同时具有较好的迁移能力。其中 EfficientNet-B7 在 ImageNet 上的 Top 1 和 Top 5 准确率分别为 84.4% 和 97.1%,优于当前的最佳模型,且体积小 8.4 倍、速度快 6.1 倍。

图 1

图 1

  EfficientNet 系列网络与其他模型的比较见图 1,其中红线为 EfficientNet 系列模型,蓝色短横线为通过 NAS 得到的网络,黑色虚线为手工设计的网络。可见 EfficientNet 系列网络在达到 SOTA 准确度的同时,大幅降低了参数数量。

2. 更大的模型

  越大的网络通常越容易获得更高的准确率,但同时也需要更大的计算量。要获得更大的模型,以往的工作通常只会从网络深度、宽度和图片尺寸三个维度之一入手,如图 2 所示。同时调整多个维度则会涉及大量繁杂的手动调优,缺乏系统化的方法进行指导。

图 2

图 2

3. 模型缩放的维度

  一般来说,可以从以下几个维度对卷积网络进行缩放。

3.1. 深度(Depth,$d$)

  更深的卷积网络容易捕获更丰富和更复杂的特征,且更容易泛化到新的任务上,但同时也因梯度消失等问题更难训练。即便有了 Skip Connection(ResNet)和 Batch Norm 等应对方法,增加网络深度所带来的收益仍会不断减小,如图 3 中图所示。实际中,ResNet-1000 的层数远多于 ResNet-101,但二者的准确率却相差无几。

图 3

图 3

3.2. 宽度(Width,$w$)

  更宽的网络更容易捕获细粒度的特征,且更容易训练,但宽且浅的网络则难以捕获高级特征。虽然增加宽度可以提高模型准确率,但提升效果也会随着宽度的增加而快速饱和,如图 3 左图所示。

3.3. 分辨率(Resolution,$r$)

  输入图像的分辨率越高,网络就越容易捕获细粒度的模式。如图 3 右图所示,提高分辨率可以提高模型准确率,但过高的分辨率带来的收益仍会下降,如图 3 右图所示。

  由此可以得到如下的观察:

  • 观察 1:仅提高深度、宽度或分辨率之一,可以提高模型准确率,但提高的效果会随模型的增大而降低。

  直觉上,对于更高分辨率的图像,需要更深的网络来提供更大的感受野,同时也应该增加网络的宽度,来捕获更细粒度的模式。这就要求协同调整各个维度。通过在不同深度和分辨率的网络上对宽度进行缩放,得到模型准确率的变化如图 4。可见准确率的提升都会快速饱和,且对于相同的 FLOPS,更深和更高分辨率的网络可以达到更高的准确率。如图 4 所示。

图 4

图 4

  由此引出第二个观察:

  • 观察 2:为了得到更佳的准确率和效率,在进行模型缩放时,平衡网络宽度、深度和分辨率各个维度至关重要。

4. 复合模型缩放(Compound Model Scaling)

  模型缩放的问题可以这样来描述。将卷积网络的第 $i$ 层看成是一个函数 $Y_i = \mathcal{F}_i(X_i)$,其中$\mathcal{F}_i$ 是操作符,$Y_i$ 是输出张量,$X_i$ 是输入张量,形状为 $\langle H_i, W_i, C_i \rangle$,其中 $H_i$ 和 $W_i$ 是空间维度,$C_i$ 是通道维度,这里省略了批维度。由此,卷积网络 $\mathcal{N}$ 就可以表示成一系列层的组合 $\mathcal{N} = \mathcal{F}_k \odot \dots \mathcal{F}_2 \odot \mathcal{F}_1(X_1) = \bigodot_{j} \mathcal{F}_j (X_1)$。实际中,卷积网络通常会分为若干个阶段,各阶段中的各层具有相同的结构,因此卷及网络可以进一步定义为

\begin{equation}
\mathcal{N} = \bigodot\limits_{i = 1 \dots s} \mathcal{F}_i^{L_i} \big( X_{\langle H_i, W_i, C_i \rangle} \big) \tag{1}
\end{equation}

其中 $\mathcal{F}_i^{L_i}$ 表示层 $\mathcal{F}_i$ 在第 $i$ 阶段重复了 $L_i$ 次,$\langle H_i, W_i, C_i \rangle$ 表示第 $i$ 层输入张量 $X$ 的形状。

  模型设计主要着眼于寻找最佳的模型架构 $\mathcal{F}_i$,而模型缩放则尝试在不改变网络结构 $\mathcal{F}_i$ 的前提下,扩展 $L_i$、$C_i$、$H_i、 W_i$。同时为了进一步缩小搜索空间,约束所有层都按一个统一的比例进行缩放。在这些条件下,寻找最大化模型准确度的缩放方法。这样,模型的缩放问题就变成了一个优化问题:

\begin{align}
\max\limits_{d, w, r} \quad & \mathrm{Accuracy}\big( \mathcal{N}(d, w, r) \big) \\
s.t. \quad & \mathcal{N} = \bigodot\limits_{i = 1 \dots s} \hat{\mathcal{F}}_i^{d \cdot \hat{L_i}} \big( X_{\langle r \cdot \hat{H_i}, r \cdot \hat{W_i}, w \cdot \hat{C_i} \rangle} \big) \\
& \mathrm{Memory}(\mathcal{N}) \leq \mathrm{target\_memory} \\
& \mathrm{FLOPS}(\mathcal{N}) \leq \mathrm{target\_flops} \tag{2}
\end{align}

其中 $w, d, r$ 是缩放网络宽度、深度和分辨率的系数,$\hat{\mathcal{F}}, \hat{L_i}, \hat{H_i}, \hat{W_i}, \hat{C_i}$ 是基线网络预置的参数。

  如观察 2 所述,为了在缩放时平衡各个维度,文章给出了如下的方法:

\begin{align}
\mathrm{depth}:& \; d = \alpha^\phi \\
\mathrm{width}:& \; w = \beta^\phi \\
\mathrm{resolution}:& \; r = \gamma^\phi \\
s.t. & \; \alpha \cdot \beta^2 \cdot \gamma^2 \approx 2 \\
& \alpha \geq 1, \beta \geq 1, \gamma \geq 1 \tag{3}
\end{align}

其中 $\alpha, \beta, \gamma$ 是常数,具体数值可以通过网格搜索得到。$\phi$ 是一个用户定义的系数,用来控制缩放使用的总资源,而 $\alpha, \beta, \gamma$ 控制在缩放中分配给宽度、深度和分辨率的资源。对于常规卷积操作,运算量和 $d, w^2, r^2$ 成正比,且卷积网络中的大部分计算都是卷积,因此通过式 $(3)$ 进行的缩放,增加的总计算量为 $(\alpha \cdot \beta^2 \cdot \gamma^2)^\phi$。文章中约束 $\alpha \cdot \beta^2 \cdot \gamma^2 \approx 2$,因此增加的总计算量约为 $2^\phi$。

5. EfficientNet

  文章还给出了名为 EfficientNet 的基线网络。该网络通过多目标神经网路架构搜索得到,同时优化准确率和 FLOPS,具体来说,优化目标为 $\mathrm{ACC}(m) \times [\mathrm{FLOPS}(m) / T]^w$,其中 $\mathrm{ACC}(m)$ 和 $\mathrm{FLOPS}(m)$ 分别为模型 $m$ 的准确率和 FLOPS,$T$ 为目标 FLOPS,$w$ 是一个用于控制准确率和 FLOPS 取舍的超参数,取值为 $w = -0.07$。

表 1

表 1

  通过以上方法得到了 EfficientNet-B0 网络,结构如表 1 所示。在此基础上,通过以下步骤进行复合缩放:

  1. 首先固定 $\phi = 1$,即使用两倍的资源,由式 $(2)$ 和式 $(3)$,通过小型的网格搜索得到 $\alpha, \beta, \gamma$ 的值。实际中,在 $\alpha \cdot \beta^2 \cdot \gamma^2 \approx 2$ 的约束下,对应 EfficientNet-B0 的搜索结果为 $\alpha = 1.2, \beta = 1.1, \gamma = 1.15$。

  2. 然后固定 $\alpha, \beta, \gamma$,使用不同的 $\phi$ 扩大网络,得到 EfficientNet-B1 到 EfficientNet-B7。

注意这里只在第一步对 $\alpha, \beta, \gamma$ 进行了搜索得到 EfficientNet-B0,然后只修改 $\phi$ 得到 EfficientNet-B1 到 EfficientNet-B7,因为在较大模型上搜索 $\alpha, \beta, \gamma$ 的计算成本非常大。

  文章给出了 EfficientNet 的详细性能比较,如图 1 和图 5 分别展示了参数-准确率和 FLOPS-准确率的图像,可见 EfficientNet 可以在大幅降低参数和 FLOPS 的基础上,获得更高的准确率。

图 5

图 5

  为了在 EfficientNet 之外验证复合缩放的效果,文章还在 MobileNetV1/V2 和 ResNet-50 上应用缩放,验证了在缩放效果。

  文章还使用不同数据集,对 EfficientNet 的迁移学习能力进行了实验,如图 6 所示,证明 EfficientNet 具有很好的迁移学习能力。

图 6

图 6

6. 对复合缩放的理解

  为了理解复合缩放能提高准确率的原因,文章比较了不同缩放方法的激活图,如图 7 所示。

图 7

图 7

可以看到,通过复合缩放得到的模型能够更关注物体特征的相关区域,且能注意到更多细节;其他模型则会丧失部分细节,或者无法捕获所有物体。直觉上,由于模型的各个维度不是独立的,通过复合缩放有助于找到各个维度的有效组合,避免短板,同时也能更有效地利用有限的计算资源。