SqueezeNet: AlexNet 並みの性能を 2% のパラメータ数で実現したネットワーク

# 原著論文
SQUEEZENET: ALEXNET-LEVEL ACCURACY WITH 50X FEWER PARAMETERS AND <0.5MB MODEL SIZE
>Iandola, Forrest N., et al. "SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and< 0.5 MB model size." arXiv preprint arXiv:1602.07360 (2016).
原著論文: https://arxiv.org/pdf/1502.01852.pdf

## 論文に対するインプレ
タイトルだけでどういう研究なのかが分かるというオモシロタイトルだと感じた．AlexNet の登場から 4 年後，パラメータ数を 50 分の 1 に抑え，かつモデルのサイズを 0.5 MB 未満にしたという **計算コストの削減** に関する研究である．
今でこそ計算コスト削減といえば，
- Pruning
- Quatization
- Distillation 

の 3 手法が挙げられるだろう，と私は思っている．
(同様の意見を述べていらっしゃる記事を発見したのでこちらもぜひ． [ディープラーニングを軽量化する「モデル圧縮」３手法](https://laboro.ai/activity/column/engineer/%E3%83%87%E3%82%A3%E3%83%BC%E3%83%97%E3%83%A9%E3%83%BC%E3%83%8B%E3%83%B3%E3%82%B0%E3%82%92%E8%BB%BD%E9%87%8F%E5%8C%96%E3%81%99%E3%82%8B%E3%83%A2%E3%83%87%E3%83%AB%E5%9C%A7%E7%B8%AE/))

SqueezeNet の論文中に関連研究としてモデル圧縮や CNN のモデル軽量化に関する研究が挙げられていることから，**決してこの論文が軽量化の元祖というわけではなさそうである．** が，CNN モデルの軽量化のサーベイ論文を読むような気持ちでどういう策略を取ることで軽量化ができるのかが分かりやすかった．

# SqueezeNet のすごいポイントってどこにあったの？
1. 戦略的に構築されたネットワーク
    **戦略1.** $3×3$ のフィルタを $1×1$ に置き換える
    **戦略2.** $3×3$ フィルタに入力する input のチャンネル数をそもそも減らす
    **戦略3.** Downsampling するタイミングを調節
2. The Fire Module
3. その他

## 1. 戦略的に構築されたネットワーク
### 戦略1. 3×3 のフィルタを 1×1 に置き換える
例えば，$1×1$ のフィルタを用いるのと $3×3$ のフィルタを用いるのでは，9 倍のパラメータ数に違いが出るのだから，$1×1$ のフィルタにした方が計算コストは削減できるよね，という発想．

### 戦略2. フィルタに入力する input のチャンネル数をそもそも減らす
パラメータ数の計算方法は
```math
(\mbox{number of input channels}) × (\mbox{number of filters}) × (3 × 3)
```
で求めることができる．この際に指し示されている input とは初めに入力されているものではなく，ある層に対して入力されているデータを指しているので注意．

このとき，パラメータ数を削減するために必要なのは必ずしもフィルタ数を削減することだけではないというのは数式から自明である．つまり，入力する input のチャンネル数を削減すればいいのである．
~~言ってることはつまり，「200円のきゅうりを10本買う時の合計金額は200円×10本で2000円，けどこれを節約したい時は買う数を減らすこともいいだろう，けどそもそも店員に値切っても安くなるはずだよなぁ！」というジャイアン的な発想．~~
これを実現するために，後述する Squeeze 層というものを用意したらしい．

### 戦略3. Downsampling するタイミングを調節
CNN においてはそれぞれの畳み込み層において活性化マップ (特徴量) が生成される．この活性化マップのサイズは以下の2つの要素によって決定される．
1. Input 画像のサイズ (例えば 256×256 の画像とか)
2. 用いる Downsampling の層の種類

よくある例としては，stride を 1 より大きくすることで畳み込み層や Pooling 層においてサイズを小さくする手法である．
もしもネットワーク中の早い段階で大きい stride を用いた場合，活性化マップサイズが急激に小さくなるためそれ以降の層では小さい活性化マップが入力として扱われることになる．
一方で，ほとんどの層で stride を 1 にして，ネットワーク中の最後の方にまとめて stride が 1 より大きいものを用いた場合は，特に前半ほとんどの層においてサイズの大きい活性化マップを獲得することができるのである．
そこで，この研究では**Downsamplingするタイミングを遅くすることで精度を上げる**いうことを図った．
(論文中ではこの遅延　Dowmsampling による精度向上のエビデンスとして以下の論文を紹介していた．)
>He, Kaiming, and Jian Sun. "Convolutional neural networks at constrained time cost." Proceedings of the IEEE conference on computer vision and pattern recognition. 2015.
(論文URL: https://arxiv.org/pdf/1412.1710.pdf)

## 2. The Fire Module
~~名前がかっこよすぎる火属性のレイヤーブロックであるが，名前がどこから来たのかは不明である．あまりにかっこよすぎるので理由を知りたいものである．~~
The Fire module とは以下のような構成からなる．
1. Squeeze Block
convolution layer と命名された $1×1$ フィルタによって構成された畳み込み層 (**戦略1.** より)
2. Expand Block
畳み込み層の $1×1$ と $3×3$ のフィルタを混ぜたもの (**戦略1.** より)

**ただし，制約条件が存在する．**
Squeeze block における $1×1$ のフィルタの数を $S1$，
Expand block における $1×1$ のフィルタの数を $E1$， $3×3$ のフィルタの数を $E3$ とした時，必ず $S1 < E1 + E3$ を満たすように設定する．これによる，$3×3$ に入力するチャンネル数を制限することができる． (**戦略2.** より)

## 3. その他
- 直列なネットワーク構造にしたものや，Bypass を使った ResNet ライクなネットワークも用いて精度を比較する．
- ReLU 関数を Squeeze Block と Expand Block に適用する．
- Dropout を原著論文通り，50% の確率で **9 番目の The Fire module** より後ろの層で実行する．
- 学習率は 0.04 をスタートとして，学習の進行に応じてこれを下げていく．

# 実験結果
![result_table.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1711990/6151cade-1fcf-facc-6f2a-97a3b12b153b.png)
(画像は原著論文より引用)

結果として元々の AlexNet と比べると精度を落とさずに (というか微量に精度が上昇しているが)，かつモデルサイズを小さくすることに成功している．

# 参考リンク
Iandola, Forrest N., et al. "SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and< 0.5 MB model size." arXiv preprint arXiv:1602.07360 (2016).
原著論文: https://arxiv.org/pdf/1502.01852.pdf

He, Kaiming, and Jian Sun. "Convolutional neural networks at constrained time cost." Proceedings of the IEEE conference on computer vision and pattern recognition. 2015.
原著論文: https://arxiv.org/pdf/1412.1710.pdf

Dmytro Mishkin, Nikolay Sergievskiy, Jiri Matas. "Systematic evaluation of CNN advances on the ImageNet" (2016).
原著論文: https://arxiv.org/pdf/1606.02228.pdf