論文要約: Learning both Weights and Connections for Efficient Neural Networks


書かれた時期: 2015/6/8
著者: Song Han, Jeff Pool, John Tran, William J. Dally
[原著リンク](https://arxiv.org/abs/1506.02626)

# Abstract
- ニューラルネットワークの冗長な重みを間引いて計算効率を向上させる提案

# Introduction
- ニューラルネットワークは進歩とともにパラメータ数が多くなり計算コストが増大
- DRAMアクセスも増えてより多くのエネルギーが必要
![image](https://qiita-image-store.s3.amazonaws.com/0/81374/00185124-4b95-0717-f526-f738a0467bd2.png)
DRAMアクセスが消費エネルギーの中で支配的であることが読み取れる
- **精度を維持しつつパラメータを間引いて計算コストを下げる**
- これによりモバイル機器上でリアルタイム処理も可能になる

# Related Work
1. [[11] Vincent Vanhoucke, Andrew Senior, and Mark Z Mao. **Improving the speed of neural networks on cpus**. In Proc. Deep Learning and Unsupervised Feature Learning NIPS Workshop, 2011.](http://static.googleusercontent.com/media/research.google.com/ja//pubs/archive/37631.pdf)
8bit固定小数点を使って計算を端折る研究

2. [[12] Emily L Denton, Wojciech Zaremba, Joan Bruna, Yann LeCun, and Rob Fergus. **Exploiting linear structure within convolutional networks for efficient evaluation**. In NIPS, pages 1269–1277, 2014.](https://arxiv.org/abs/1404.0736)
オリジナルのニューラルネットに対して1%以内の精度低下で低ランクの近似したパラメータを見つける研究

3. [[13] Yunchao Gong, Liu Liu, Ming Yang, and Lubomir Bourdev. **Compressing deep convolutional networks using vector quantization**. arXiv preprint arXiv:1412.6115, 2014.](https://arxiv.org/abs/1412.6115)
深層畳み込みネットワークをベクトル量子化により圧縮する研究
パラメータの間引きとは別のアプローチのネットワーク圧縮手法

4. [[14] Song Han, Huizi Mao, and William J Dally. **Deep compression: Compressing deep neural network with pruning, trained quantization and huffman coding**. arXiv preprint arXiv:1510.00149, 2015.](https://arxiv.org/abs/1510.00149)
上記の研究の発展、というかこの提案と上記の量子化とさらにハフマン符号化の圧縮の3つを組み合わせたもの

5. [[15] Min Lin, Qiang Chen, and Shuicheng Yan. **Network in network**. arXiv preprint arXiv:1312.4400, 2013.](https://arxiv.org/abs/1312.4400)
全結合レイヤーをglobal average poolingに置き換えることでパラメータ数を削減する研究
ネットワークインネットワークアーキテクチャを使ったもの

6. [[16] Christian Szegedy, Wei Liu, Yangqing Jia, Pierre Sermanet, Scott Reed, Dragomir Anguelov, Dumitru Erhan, Vincent Vanhoucke, and Andrew Rabinovich. **Going deeper with convolutions**. arXiv preprint arXiv:1409.4842, 2014.](https://arxiv.org/abs/1409.4842)
上記でGoogLenetを使ったもの
事前学習済みのパラメータを使うトランスファーラーニングにおけるファインチューニングではこのアプローチは難しい
リニアレイヤーを頭に追加してトランスファーラーニングに問題に対して有効との提案

7. [[17] Stephen Jose Hanson and Lorien Y Pratt. **Comparing biases for minimal network construction with back-propagation. In Advances in neural information processing systems**, pages 177–185, 1989.](https://papers.nips.cc/paper/156-comparing-biases-for-minimal-network-construction-with-back-propagation)
ネットワークの複雑さと過適合を防ぐパラメータの間引きについての初期の研究でWeight Decayをベースにしたもの

8. [18] Yann Le Cun, John S. Denker, and Sara A. Solla. Optimal brain damage. **In Advances in Neural Information Processing Systems**, pages 598–605. Morgan Kaufmann, 1990.
Hessian損失関数に基づくネットワーク接続の削減の研究
Weight Decayによる大きさベースの間引き手法よりも精度が良いと提案
ただし計算量が増えている

9. [[19] Babak Hassibi, David G Stork, et al. **Second order derivatives for network pruning: Optimal brain surgeon. Advances in neural information processing systems**, pages 164–164, 1993.](https://papers.nips.cc/paper/749-optimal-brain-surgeon-extensions-and-performance-comparisons)
同上

10. [[20] Wenlin Chen, James T. Wilson, Stephen Tyree, Kilian Q. **Weinberger, and Yixin Chen. Compressing neural networks with the hashing trick**. arXiv preprint arXiv:1504.04788, 2015.](https://arxiv.org/abs/1504.04788)
HashedNetsはハッシュ関数を使ってランダムに接続をグルーピングしてモデルサイズを削減する最近の手法の研究
グルーピングされたパラメータは一つのパラメータで代表する
この研究はパラメータの間引きと相性が良いかもしれない

11. [[21] Qinfeng Shi, James Petterson, Gideon Dror, John Langford, Alex Smola, and SVN Vishwanathan. Hash kernels for structured data. The Journal of Machine Learning Research, 10:2615–2637, 2009.](http://www.jmlr.org/papers/volume10/shi09a/shi09a.pdf)
同上

12. [[22] Kilian Weinberger, Anirban Dasgupta, John Langford, Alex Smola, and Josh Attenberg. **Feature hashing for large scale multitask learning**. In ICML, pages 1113–1120. ACM, 2009.](https://arxiv.org/abs/0902.2206)
上記の関連
ハッシュ衝突を最小化して効率化する

# Learning Connections in Addition to Weights
![image](https://qiita-image-store.s3.amazonaws.com/0/81374/b2469414-7590-3104-bd1f-82a1b6e802dc.png)
提案手法は左図に示す3ステップ
1. 通常のニューラルネットワークのトレーニング
    - ただし、L1又はL2の正則化を行う
2. 間引き (右図)
    - 閾値以下の重みパラメータは0としてコネクションを間引く
    - 入力又は出力が0のニューロン(訳注:ユニットのこと)はニューロンごと間引く
        - これに該当するニューロンはネットワークに何の貢献もしておらず、最終的にはこのニューロンに対する全てのコネクションが消滅する
    - 畳み込みニューラルネットワーク(CNN)の場合はまず畳み込み層を固定して全結合層のみ間引き、そのご逆に全結合層を固定して畳み込み層を間引く
        - ネットワークが深くなって勾配消滅問題が顕在化すると間引きによるエラーを回復するのが難しくなるため
3. 間引き後のトレーニング
    - 正則化は1と同様に行う
    - ドロップアウト率を次のように設定
        - Ni: i層目のニューロンの数
        - Ci: i層目のコネクションの数
        - Cio: 元のネットワークモデルにおけるi層目のコネクション数
        - Cir: 間引いた後のネットワークモデルにおけるi層目のコネクション数
        - Do: 元のネットワークモデルのドロップアウト率
        - Dr: 間引き後に適用すべきドロップアウト率
    ![image](https://qiita-image-store.s3.amazonaws.com/0/81374/f546966c-73fe-6254-cceb-7401cf3656d3.png)

# Experiments
次の表が各種ネットワークモデルに本手法を適用した結果
![image](https://qiita-image-store.s3.amazonaws.com/0/81374/55116708-c118-0a75-eadd-a374e4c7c633.png)
2列目がエラーレート、3列目がパラメータ数で一番右がパラメータ数の圧縮率、Refがついてる方はオリジナル、Prunedの方は間引き後

* LeNet-300-100 はMnistで全結合の300ユニットと100ユニットの2つの隠れ層をもつ
![image](https://qiita-image-store.s3.amazonaws.com/0/81374/2784ba2a-417e-78ad-68f7-d31e4eacd7c5.png)
![image](https://qiita-image-store.s3.amazonaws.com/0/81374/9ddbb2f7-1cae-de43-5a7f-8da4042b7bae.png)
上の図で横軸は1層目の全結合層の入力、縦軸が出力、色の濃さは各パラメータの大きさ
28個のバンドを形成しているのは画像が28x28のため
中央付近が濃くなっているのは隅は特徴として使えるものが少なく中央に行くほど重要度の高い情報と評価された結果

* LeNet-5はMnistでCNNのネットワークモデル
![image](https://qiita-image-store.s3.amazonaws.com/0/81374/10fd1619-ac44-fca5-1f6a-1486d98500f0.png)

* AlexNetはImageNet(ILSVRC-2012)、1.2Mをトレーニングサンプル、50Kを検証サンプルとして使用
    * CaffeのAlexNetモデルを使用
    * Nvidia Titan X GPUで75時間学習後間引いて学習率を1/100にして、173時間学習
![image](https://qiita-image-store.s3.amazonaws.com/0/81374/e613cc41-a5cb-2121-2825-cb1784025ecc.png)

* VGG-16は上のAlexNetモデルをVGG-16モデルに置き換えたもの
![image](https://qiita-image-store.s3.amazonaws.com/0/81374/812f2186-5dcc-278e-9622-1d83169b8669.png)

# Discussion
精度と間引き率のトレードオフを調べた結果が次の図
![image](https://qiita-image-store.s3.amazonaws.com/0/81374/6f163273-80f7-763b-a6a8-9b3308c1434a.png)

* 紫: L2正規化で間引き後の学習をしない場合
* 水: L1正規化で間引き後の学習をしない場合
* 橙: L1正規化で間引き後の学習をした場合
* 緑: L2正規化で間引き後の学習をした場合
* 赤: L2正規化で間引き後の学習をした後、もう一度間引いて学習した場合

次のFigure6はCNNで畳み込み層(CONV)と全結合層(FC)の比較
![image](https://qiita-image-store.s3.amazonaws.com/0/81374/7143796c-9132-b9f9-7463-fd8a42515a93.png)
畳み込み層の方が間引きに対する耐性が低い
畳み込み層は冗長性が少ないためと思われる
耐性が低い層に対しては間引く閾値を小さめに調整した

上記以外のネットワークへの適用結果は次の表
![image](https://qiita-image-store.s3.amazonaws.com/0/81374/3a65efaf-29fd-1714-930a-dee959b1015f.png)

間引き前(左)と後(右)の各パラメータの値の分布
![image](https://qiita-image-store.s3.amazonaws.com/0/81374/ea32922e-2007-ef82-83fb-6f098f99f615.png)

# Conclusion
AlexNetで1/9、VGG-16で1/13にパラメータ数を圧縮