Sleep like a pillow

Deep Learning関係の話。

論文読み EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks

著者による実装 github.com

どんなもの?

  • CNNモデルをスケーリングするにはdepth, width, resolution(入力画像サイズ)の3つをチューニングする必要があるが、単純にどれか一つを大きくしても計算コストが増えるだけで精度はサチってしまう(ResNet-1000がResNet-101と同等な精度なのが良い例)。
  • この論文では、depth, width, resolutionの3つのパラメータをバランス良くチューニングする手法を提案。
  • さらに、ベースとなるネットワーク(ベースラインモデル)であるEfficientNetをNAS (neural architecture search) で探索。
  • EfficientNetをスケーリングさせたEfficientNet-B7は、ImageNetのSOTAである84.4% top-1 / 97.1% top-5を達成。これは従来のSOTAであるGPipeに対して1/8.4の大きさかつ6.1倍高速。

f:id:uiiurz1:20190618221134p:plain

技術や手法のキモ

Compound Model Scaling

Problem Formulation

  • モデルのスケーリングを以下のような最適化問題として定式化。 $$ \max_{d, w, r} \hspace{3pt} Accuracy(\mathcal{N}(d, w, r)) \\ {\rm s.t.} \hspace{3pt} \mathcal{N}(d, w, r) = \bigodot_{i = 1 \ldots s} \hat{\mathcal{F}}_i^{d \cdot \hat{L}_i} (X_{\langle r \cdot \hat{H}_i, r \cdot \hat{W}_i, w \cdot \hat{C}_i \rangle}) \\ {\rm Memory}(\mathcal{N}) \le {\rm target \hspace{2pt} memory} \\ {\rm FLOPS}(\mathcal{N}) \le {\rm target \hspace{2pt} flops} $$
  •  \hat{\mathcal{F}}_i^{d \cdot \hat{L}_i}はネットワークの各ステージでレイヤ \hat{\mathcal{F}}_i d \cdot \hat{L}_i回繰り返されるのを示している。
  •  X_{\langle r \cdot \hat{H}_i, r \cdot \hat{W}_i, w \cdot \hat{C}_i \rangle}は入力テンソル
  •  \hat{\mathcal{F}}_i, \hat{L}_i, \hat{H}_i,  \hat{W}_i, \hat{C}_i はベースラインモデルのパラメータで、 d, w, rがスケーリングのパラメータ。

Scaling Dimension

  • 以下の図はベースラインモデルのEfficientNetのそれぞれのパラメータだけ増加させた際の精度。それぞれ80%になったくらいでサチってる。 f:id:uiiurz1:20190622211844p:plain

Depth (d)

  • ネットワークの層を深くすることでより表現力の高い複雑な特徴表現を獲得できるとともに、汎化性が向上することが知られている。
  • 深くし続ければ精度が向上し続けるということはなく、深くなるほど精度の向上は横ばいになる。例えば、ResNet-1000はResNet-101と同じくらいの精度。

Width (w)

  • ネットワークのチャネル数を増やすことで微細な特徴表現を獲得できるとともに、学習が早く進むことが知られている。
  • しかし、depthに対してチャネル数が大きすぎるネットワークは高レベルな特徴表現を獲得するのが難しくなってしまう。
  • widthも同様に大きくしていくと精度はサチる

Resolution (r)

  • 高解像度の入力画像を用いることで、ネットワークは潜在的に画像中の微細なパターンを見つけられるようになる。
  • ImageNetでは最初は224×224の入力画像が使われていたが、時代が進むにつれてより大きいサイズの入力画像が使われるようになってきており、SOTAであるGPipeの入力画像は480x480。
  • resoluitionも同様に大きくしていくと精度はサチる

Observation 1

  • 以上から得られる一つ目の知見は、ネットワークのdepth, width, resolutionのどれかを大きくすると精度は向上するが、モデルが大きくなると精度の向上は少なくなる。

Compound Scaling

  • 直感的には、depth, width, resolutionは互いに独立したパラメータではないと言える。
  • 例えば、resolutionを大きくするなら画像全体の特徴を捉えるためにdepthも増やすことで受容野を大きくするべきだし、画像中の微細なパターンを捉えるためにwidthも大きくするべき。
  • この直感が正しいことを確かめるために、EfficientNetのdepth, resolutionの値を変えてwidthをスケールさせてみると、depth, resolutionを大きくした場合の方が同じFLOPSでの精度は高くなった。 f:id:uiiurz1:20190622213624p:plain

Observation 2

  • 以上から得られる二つ目の知見は、より高い精度と効率性を求めるならdepth, width, resolutionのバランスをとることが重要。

Compound Scaling Method

  • 以上を踏まえてcompound scaling method (複合スケーリング手法)を提案。
  • 下式に基づいて、単一の係数 \phiで3つのパラメータを一様にスケーリングさせる。 $$ {\rm depth}: d = \alpha^{\phi} \\ {\rm width}: w = \beta^{\phi} \\ {\rm resolution}: r = \gamma^{\phi} \\ {\rm s.t.} \hspace{3pt} \alpha \cdot \beta^2 \cdot \gamma^2 \approx 2 \\ \alpha \ge 1, \beta \ge 1, \gamma \ge 1 $$
  •  \alpha, \beta, \gammaは定数、簡単なグリッドサーチで求める。
  •  \phiはユーザーが指定する変数で、モデルのスケーリングに使用できる計算リソースを制御する。
  • 畳み込み演算のFLOPSは d, w^2, r^2に比例しており、例えばdepthが2倍になるとFLOPSも2倍になるのに対して、widthかresolutionが2倍になるとFLOPSは4倍になる。
  • CNN全体の計算コストのほとんどが畳み込み演算によるものであるため、上式にしたがってスケーリングするとFLOPSはおおよそ (\alpha \cdot \beta^2 \cdot \gamma^2)^{\phi}倍になる。
  • 本論文では、 \alpha \cdot \beta^2 \cdot \gamma^2 \approx 2という制約を設けたため、FLOPSはおおよそ 2^{\phi}で増加する。

EfficientNet Architecture

ベースモデルの設計

  • モデルのスケーリングはレイヤは変更しないため、優秀なベースモデルを設計することが重要。
  • ベースモデルの設計には、MnasNetとほぼ同様の精度とFLOPSの両方を最適化する多目的なneural network searchを用いる。
  • 目的関数は ACC(m) \times (FLOPS(m)/T)^wで、 ACC(m), FLOPS(m)はモデル mの精度とFLOPS、 Tは目標とするFLOPS(今回は400M)、 wは精度とFLOPSのトレードオフを制御するハイパーパラメータ(今回は-0.7)を表している。
  • 探索によって得られるネットワークをEfficientNet-B0とする。構造は以下の通り。

f:id:uiiurz1:20190623000446p:plain:w400
- MBConvというのはMobileNet v2で使われているInverted Residual Blockのこと。MBConv6は t=6のInverted Residual Block。

スケーリング

  • EfficientNet-B0を以下の2ステップでスケーリングさせる。

Step1

  •  \phi=1に固定して小さめのグリッドサーチで \alpha, \beta, \gammaを求める。
  • EfficientNet-B0に最適な値は \alpha \cdot \beta^2 \cdot \gamma^2 \approx 2という制約の下で、 \alpha=1.2, \beta=1.1, \gamma=1.15

Step2

  •  \alpha, \beta, \gammaを定数として固定して、 \phiを変えることでベースモデルをスケーリングさせる。
  • EfficientNet-B0をスケーリングさせることで得られるのがEfficientNet-B1~B7。

  • 最初から大きいモデルについて直接 \alpha, \beta, \gammaを探索することでより高い性能を得ることができるが、それだと計算コストが高くなる。

  • この手法では、計算コストのかかるパラメータ探索は小さいモデルで行い、得られたパラメータを大きいモデルにも適用することで計算コストを抑えている。

有効性の検証

  • ImageNetではEfficientNet-B7がSOTAとなるとともに、それぞれのスケールのモデルは同等の精度の従来モデルと比較してパラメータ数とFLOPSがかなり小さくなっており、効率性も高いことがわかる。

f:id:uiiurz1:20190623003528p:plain

  • 他のデータセットでfine-tuningした結果も良好で、汎化性の高い特徴表現を獲得していることがわかる。

f:id:uiiurz1:20190623003801p:plain

所感

  • パラメータ数とFLOPS削減の大部分はSeparable Convolutionのおかげな感じ。