yoheikikuta / paper-reading

Notes about papers I read (in Japanese)
156 stars 4 forks source link

[1801.04381] MobileNetV2: Inverted Residuals and Linear Bottlenecks [paper-reading] #14

Open yoheikikuta opened 6 years ago

yoheikikuta commented 6 years ago

論文リンク

https://arxiv.org/abs/1801.04381

公開日(yyyy/mm/dd)

2018/01/13

概要

勉強会で発表した。資料は https://speakerdeck.com/diracdiego/20180701-cvpr2018-reading-yoheikikuta

モバイルで動かすことを考えた軽量なモデルでる MobiNetV1 からの進化版。 MobileNetV1 では depthwise と pointwise covolution で演算を効率化していたが、その構造は踏襲しつつもタイトルにもあるように inverted residuals and linear bottlenecks という構造を入れてさらにメモリ効率が良くかつ性能が高いモデルを構築した。 これは ReLU を介する場合の表現力に注目することから生まれた構造で、ReLU によって非ゼロになる部分は linear transformation の表現力のみ、入力層の次元の低次元 subspace mfd. に情報が住んでいるなら(間のチャンネル数を十分増やせば)ReLU が情報を保存する、ということがキーになっている。 具体的な構造としては linear bottleneck (非線形性を入れない) > depthwise & pointsize with larger channels > linear bottoleneck という普通の residual の構造とは逆のチャンネル数の増減をする構造を入れている。

yoheikikuta commented 6 years ago

モデルアーキテクチャの構築の方向性として、チャンネル方向の情報をうまく扱うというものの重要性が高い。 SENet のように空間方向の情報を集約してチャンネル毎の情報としてそれを元々のfeatureと掛け合わせる、とかが典型である。 一方で 1*1 convolution に端を発する効率的な演算の実現というのもチャンネル方向の取り扱いに注目しているものである。depthwise, pointwise とか group convolution とか。

MobileNetV2 はやはりチャンネル方向の取り扱いを工夫したものとして提案されている。

yoheikikuta commented 6 years ago

また、モデルアーキテクチャの自動探索も最近の流れ

この辺の自動探索は複雑なモデルアーキテクチャになりがちで、著者曰くこのようなモデルと相補的にあるとのこと。 相補的というのはちょっと疑問符だが、アーキテクチャの building block となる構造を人力で探すのも重要ということだろうか。

yoheikikuta commented 6 years ago

計算量の議論から始める。 input: $ h_i w_i d_i $ で output: $ h_i w_i d_j $という場合を考える(幅と高さは変化なしでチャンネル数のみ変化)。

普通の convolution with kernel size $ k $ なら $ h_i w_i d_i d_j k * k $ という計算量。

depthwise separable convolution はチャンネル毎に convolution をして $ h_i w_i d_i k k $、その結果の shape は input と同じで、それに対してチャンネル方向の 11 convolution をするので $ h_i w_i d_i d_j $ になる。 合わせると $ h_i w_i d_i ( k k + d_j ) $ という計算量になる。

典型的には $ k*k \ll d_j $ で $ k=3 $ などとするので、1/9 程度の計算量ですよ、というのが depthwise separable convolution の話だった(これは MobileNetV2 以前の復習)。

yoheikikuta commented 6 years ago

linear bottleneck とは何ぞや、という話をする。

前提として、活性化レイヤーで得られる結果は manifold of interest とか呼ばれるもので、これはもっと低次元の mfd. に情報が埋め込まれているものと期待しているものである。

ナイーブに考えれば、これを捉えるには manifold of interest が全空間を span するくらいに次元を落とせばよいということだが、ReLU のような非線形変換がある場合はゼロに潰してしまう領域が発生してうまくいかない?(この辺は書いてあることがちょっとよくわからない)

線形変換 B を用いて、ReLU(Bx) を考える時、これによって S という非ゼロ領域が残る場合、S の内部にマップされる点は Bx で与えられる(ReLUの定義なんだからそりゃそうだ)。 これはすなわち出力の非ゼロ領域に対応する入力の領域は線形変換の効果のみに限定され、言い換えれば DL は出力の非ゼロ領域では liner classifier の判別能力しかないということになる(まあこれも ReLU ってそういうものなので)。

また、ReLU の性質として、あるチャンネルの情報を喪失するが(ゼロに潰す部分があるので当然)、中間チャンネル数を増やしてその後元のチャンネル数に戻すみたいな状況では他のチャンネルに潰れた情報を持たせることができて情報の喪失を防ぐ、ということができる。

ここまでの観測で以下の構造を考案:

yoheikikuta commented 6 years ago

一応絵を貼っておくが、上で説明したことが本質的で、別に絵を見ても理解が深まるということはない。視覚的に channel 数が少ない > channel 数が多い > channel 数が少ない というこれまでよく使われていた構造とは "inverted" であることは明確ではある。

yoheikikuta commented 6 years ago

ここで、新しいパラメタが一つ入ってくる。 channel 数を expand する際にどれくらいの倍率で expand するかという expansion parameter t である。これを使うと shape は次のようにまとめられる。

この構造が MobileNetV2 の基本的な構成要素になる。 input に linear bottleneck があって、そのあと 1x1 conv2d ReLU > 3x3 depthwise ReLU > 1x1 conv2d linear と続く。 stride は 1 にする layer も出てくるが、基本的には 2 とする layer が多い(後述)。

これを使い、モデルの全体像は以下。 特に、t が expansion ratio で n がそのブロックの繰り返しの回数である。