深層学習のモデル圧縮・高速化に関する論文80本ノック

こんにちは.無事に3年生に進級できてホッとしています.
昨年度から深層学習のモデル改変による高速化手法について調べていました.そんなわけで本稿では深層学習モデルのパラメータ容量の削減や高速化を目的とした手法に関する論文を80本紹介します.
一部, ハイパーパラメータ探索(Neural Architecture Search等)の論文を「高速なモデルの探索に使えないかな〜」というきもちで含めました.
また, 蒸留に関する論文は必ずしも高速化を狙ったものだけではなく, 蒸留そのものの派生論文についても含めています.
全ての論文について詳解ではなく雑な概要のみ記載しています.
サーベイする際のガイドにでも使っていただければ幸いです. サクッと読んだだけの論文も多々ありますので間違い等ございましたらご指摘ください.
では参りましょう.

高速なモデルアーキテクチャ

より良い速度と精度のトレードオフを持つマイクロモジュールを積層することでネットワークを構成する手法が主流です.

[1] Xception: Deep Learning with Depthwise Separable Convolutions

2016/10
Inception V3と同等のパラメータ数ながら, より精度の高いXceptionモデルを提案.

[2] SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and <0.5MB model size

2016/02
3*3Conv層の前に少ないフィルタ枚数の1*1Conv層を挿入することで, 3*3Conv層への入力チャネルを削減し高速化する構造の提案.

[3] ENet: A Deep Neural Network Architecture for Real-Time Semantic Segmentation

2016/06
semantic segmentationを行う既存モデルのSeg-Netを入力近傍の層での強力なダウンサンプリングにより高速化.

[4] MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications

2017/04
depthwise separable convolutionにBatchNormalizationと活性化関数を組み合わせたモジュールの積層による計算コストの低いモデルアーキテクチャの提案.

[5] clcNet: Improving the Efficiency of Convolutional Neural Network using Channel Local Convolutions

2017/12
grouped convが2層続く形式のモジュール構造は高速だが出力チャネルが一部の入力チャネルしか参照できないため精度が落ちる.これを解消した「Interlaced grouped convolution」を提案し, これを用いたclcブロックによるclcNetを提案.

[6] ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices

2017/07
1*1 pointwise convolutionは頻出であるが, これはチャネル方向への参照範囲が大きくコストが高い.これをgrouped convolutionに変更し, 更に出力チャネルが全ての入力チャネルを参照できるよう「channel shuffle」(チャネルの入れ替え)を行う層を提案.

[7] Wide Residual Networks

2016/05
ResNet比で浅く幅の広いモデルアーキテクチャを提案.深いモデルより並列計算の恩恵を受けやすくなる.

[8] Shift: A Zero FLOP, Zero Parameter Alternative to Spatial Convolutions

2017/11
shiftと呼ばれる, 入力を空間方向にずらすだけの層を提案し, これを用いたモデルを構築.

[9] ProjectionNet: Learning Efficient On-Device Deep Networks Using Neural Projections

2017/08
locality sensitive hashingを用いてrepresentationを一部バイナリ化することで高速化.

[10] Convolution with Logarithmic Filter Groups for Efficient Shallow CNN

2017/07
grouped convolutionにおいてグループの分け方を改良し精度を向上.

低ランク近似

全結合層におけるパラメータ行列や, 畳み込み層におけるパラメータテンソルを分解し低ランク近似することでパラメータ容量と計算量の削減を行います. また, 低ランクなフィルタの最適化手法として, filter reconstruction・data reconstruction・正則化学習・事前分解の4つのパターンが存在します.

[11] Restructuring of Deep Neural Network Acoustic Models with Singular Value Decomposition

2013/01
重み行列を特異値分解して低ランク近似することで計算量・パラメータ容量を削減.

[12] Compression of Deep Convolutional Neural Networks for Fast and Low Power Mobile Applications

2015/11
畳み込み層をTucker2分解・低ランク近似することで高速化・パラメータ容量を削減.

[13] Speeding up Convolutional Neural Networks with Low Rank Expansions

2014/05
n*nフィルタを1*nとn*1フィルタに分解することで高速化.

[14] Learning Separable Filters

2013
畳み込みフィルタの低ランク近似とその最適化手法.

[15] Flattened Convolutional Neural Networks for Feedforward Acceleration

2014/12
Convolutionを1*1conv -> d*1 depthwiseconv -> 1*d depthwiseconvに分解し低ランク近似することでパラメータ容量と計算コストを削減.

[16] Accelerating Very Deep Convolutional Networks for Classification and Detection (Efficient and Accurate Approximations of Nonlinear Convolutional Networksとほぼ同じ)

2015/05
Convolutionを2つのConvolution層に分解し低ランク近似することでパラメータ容量と計算コストを削減.

[17] Speeding-up Convolutional Neural Networks Using Fine-tuned CP-Decomposition

2014/12
畳み込み層をCP分解により1*1Conv->d*1Depthwise->1*dDepthwise->1*1Convの4層に分解し低ランク近似することでパラメータ容量と計算コストを削減.

[18] Exploiting Linear Structure Within Convolutional Networks for Efficient Evaluation

2014/04
畳み込み層の分解によるパラメータ容量の削減と高速化手法を提案.

[19] Quantized Convolutional Neural Networks for Mobile Devices

2015/12
全結合層の低ランク近似手法の提案.

[20] Design of Efficient Convolutional Layers using Single Intra-channel Convolution, Topological Subdivisioning and Spatial “Bottleneck” Structure

2016/08
畳み込み層の分解によるパラメータ容量の削減と高速化手法を提案.

[21] Training CNNs with Low-Rank Filters for Efficient Image Classification

2015/11
畳み込み層の分解によるパラメータ容量の削減と高速化手法を提案.

[22] Convolutional neural networks with low-rank regularization

2015/11
畳み込み層の分解によるパラメータ容量の削減と高速化手法を提案.

[23] Low-rank matrix factorization for Deep Neural Network training with high-dimensional output targets

2013/05
音響・言語といった時系列モデルの最終層の低ランク近似.

[24] On Compressing Deep Models by Low Rank and Sparse Decomposition

2017
フィルタ分解による低ランク近似を行う際の最適化手法に関する論文.

[25] SVD-Softmax: Fast Softmax Approximation on Large Vocabulary Neural Networks

2017
ソフトマックス層の重みを特異値分解して低ランク近似し, 出力の高い上位N次元について, フルランクで再度計算し直すことで精度を向上.

[25] Fast ConvNets Using Group-wise Brain Damage

2015/06
畳み込み層の分解によるパラメータ容量の削減と高速化手法を提案. またGradual group-wise sparsificationと呼ばれる正則化手法も同時に提案.

[27] Compressing Deep Neural Networks using a Rank-Constrained Topology

2015
音声認識モデルの特異値分解による圧縮.

[28] Compression-aware Training of Deep Networks

2017/11
低ランク近似の学習スキームに関する論文.

[29] LCNN: Lookup-based Convolutional Neural Network

2016/11
convのカーネルを一定個数の辞書の重み付き和で表現することで高速化.

蒸留

蒸留(Distillation)とは, アンサンブルモデルなどの計算コストの高いモデルの出力を小さいモデルのターゲットに用いて学習する手法のことです.一般に, キャパシティの小さなモデルを1hotベクトルを用いて学習すると高い精度が得難いことが知られていますが, 蒸留により緩和されるケースがあります.

[30] Distilling the Knowledge in a Neural Network

2015/03
大きいモデルが各データに対して出力したソフトラベルを小さいモデルのターゲットとして学習することで小さいモデルの精度を向上する.

[31] Do Deep Nets Really Need to be Deep?

2013/12
教師モデルが出力したlogit(ソフトマックスを適用前の出力層の活性)を生徒モデルのターゲットとして学習することで浅く幅の広い生徒モデルの精度を向上する.

[32] Face Model Compression by Distilling Knowledge from Neurons

2016
顔認識タスクに対するdistillationは出力層の各ノードが各個人に対応している場合, 非常に高次元なソフトターゲットが生成される為学習が困難だった. ターゲットとして用いるノードを選別しlogitで蒸留することでこの問題を解決.

[33] FitNets: Hints for Thin Deep Nets

2014/12
中間層でも蒸留を行うことで深く幅の小さい生徒モデルにおいても精度を向上させる手法を提案.

[34] Paying More Attention to Attention: Improving the Performance of Convolutional Neural Networks via Attention Transfer

2016/12
中間層の活性について空間方向に寄与度を計算し(Attention Map), 教師モデルでのAttentionMapを生徒モデルへ蒸留することで生徒モデルの精度を向上する.

[35] Learning Efficient Object Detection Models with Knowledge Distillation

2017
object detectionモデルに対する蒸留.中間層でhint layerを用いることで生徒モデルの精度を向上.

[36] Model Compression

2006
精度の高いアンサンブルモデルがデータのラベリングを行い, 得られたラベル付きデータで小さなモデルを学習する.

[37] Born Again Neural Networks

2017
教師モデルから同じようなキャパシティの生徒モデルへの蒸留. これを繰り返すことで更に精度が向上することを実験的に主張.

[38] Towards Effective Low-bitwidth Convolutional Neural Networks

2017/11
量子化において, 重みと活性の両方を量子化するのは学習が難しいが各層での蒸留を用いてこの問題を改善する.

[39] Deep Mutual Learnings

2017/06
2モデルを同時に学習させ, その際の各モデルのソフトラベルを互いに蒸留することで精度を向上する.

[40] Transparent Model Distillation

2018/01
全結合ニューラルネットを学習して教師モデルとし, そのソフトラベルを蒸留して解釈容易なモデルを学習する.

[41] Data-Free Knowledge Distillation for Deep Neural Networks

2017/10
プライバシーの問題が絡むデータや, データセットを公開できない場合を想定し, そのようなデータで学習されたモデルを入手した側が, データ無しでモデル圧縮を行う手法を提案.

量子化

モデル圧縮の文脈での量子化手法は, 多くの場合パラメータに小さいビット数を割り当てることで容量の削減並びに処理系による高速化を狙うものです.手法によってはrepresentationの量子化も行います. 本稿では近年話題の1bit量子化の論文を列挙します.

[42] BinaryConnect: Training Deep Neural Networks with binary weights during propagations

2015/11
バイナリ(-1,+1)のパラメータの導入による高速化, パラメータ容量の削減を提案.

[43] Binarized Neural Networks: Training Deep Neural Networks with Weights and Activations Constrained to +1 or -1

2016
パラメータの二値化に加え, representationの二値化を提案. 但し入出力層のrepresentationは二値化しない.

[44] XNOR-Net: ImageNet Classification Using Binary Convolutional Neural Networks

2016/03
パラメータとrepresentationを二値化するニューラルネットの提案.

ハイパーパラメータ探索

より良い速度と精度のトレードオフを持つモデルアーキテクチャを発見できれば, それ自体を高速化と捉えることができます.

[45] Regularized Evolution for Image Classifier Architecture Search

2018/02
Neural Architecture Searchにおいて, 進化的アルゴリズムと強化学習を比較. また, 遺伝的アルゴリズムのトーナメント選択方式を改良して生成したモデルはCIFAR-10でSOTA.

[46] Efficient Neural Architecture Search via Parameter Sharing

2018/02
Neural Architecture Searchにおいて, 子モデルのパラメータを共有しながらハイパーパラメータを探索することでモデル構造の探索を高速化.GTX1080Tiで16時間.

[47] Net2Net: Accelerating Learning via Knowledge Transfer

2015/11
精度に悪影響を与えないように徐々にモデルのキャパシティ(幅・深さ)を大きくしていく手法の提案.

[48] Neural Architecture Search with Reinforcement Learning

2016/11
強化学習を用いて精度の高いモデルアーキテクチャの探索を行う.

[49] Learning Transferable Architectures for Scalable Image Recognition

2017/07
強化学習を用いて画像認識モデルのモジュール構造を探索.CIFARで探索した構造をImageNetに適用することで探索時間を短縮.

[50] Progressive Neural Architecture Search

2017/12
モデルアーキテクチャから精度を予測するRNNを用いて, モデルアーキテクチャを全探索する時間を短縮.

[51] Convolutional Neural Networks at Constrained Time Cost

2014/12
CNNのハイパーパラメータが時間計算量と精度にどのように影響するか実験的に分析した論文.

スパースなモデル

学習済みネットワークを任意の部分に分解し, 各部分に何らかの指針で重要度を割り当て, 重要度の低い部分を0にすることでパラメータ容量を削減する手法をPruningと呼びます.Pruningによって得られたモデルはそのスパースな構造によりパラメータ容量の削減, 場合によっては高速化が行えます. また, 初めからスパースなモデルを学習する手法も以下に列挙します.

[52] Reducing the Model Order of Deep Neural Networks Using Information Theory

2016/05
フィッシャー情報量の小さな重みからPruningすることでパラメータ容量を削減.

[53] Optimal Brain Damage

1990
目的関数のヘッセ行列の対角成分を用いて重み毎の重要度を計算し, 重要度が低い重みから0に置き換えることでパラメータ容量を削減する手法を提案.

[54] Deep Compression: Compressing Deep Neural Networks with Pruning, Trained Quantization and Huffman Coding

2015/10
pruning, 量子化, ハフマン符号化によりパラメータ容量を削減.

[55] Sparsifying Neural Network Connections for Face Recognition

2015/12
2ノード間の活性の相関を基準にしたPruningによるパラメータ容量の削減手法の提案.

[56] Optimal Brain Surgeon and general network pruning

1993/03
目的関数のヘッセ行列の非対角成分まで用いたPruning手法の提案.

[57] The Power of Sparsity in Convolutional Neural Networks

2017/02
スパースなコネクションを持つモデルを学習.

[58] Learning Structured Sparsity in Deep Neural Networks

2016/08
正則化学習による低ランク構造の誘引について述べた論文.更に層を丸ごと削るlayer pruningも提案.

[59] Group Sparse Regularization for Deep Neural Networks

2016/07
正則化項を比較し, どれがより強くスパース性を誘引するかを検証.

[60] Structured Bayesian Pruning via Log-Normal Multiplicative Noise

2017/05
dropoutによる変分ベイズ推定を用いてパラメータに分布を導入. 導入した分布によりスパースなパラメータの学習が誘引される.

[61] Channel Pruning for Accelerating Very Deep Neural Networks

2017/07
畳み込みフィルタをpruningすることでパラメータ容量と計算コストを削減.

[62] Pruning Filters for Efficient ConvNets

2016/08
学習済みモデルの畳み込みフィルタをpruning.

[63] Learning both Weights and Connections for Efficient Neural Networks

2015/01
スパースなパラメータを持つモデルの学習スキームに関する論文.

[64] Bayesian Compression for Deep Learning

2017/05
dropoutによる変分ベイズ推定を用いてパラメータに分布を導入. 導入した分布によりスパースなパラメータの学習が誘引される.

[65] Runtime Neural Pruning

2017
順伝播時のrepresentationを用いて次の層のpruningの対象を決めるRNNをQ学習することで, データ毎に異なるフィルタをpruningする手法を提案.

[66] The Lottery Ticket Hypothesis: Training Pruned Neural Networks

2018/03
これまでニューラルネットワークの圧縮は, 初めから小さなキャパシティのモデルを学習すると高い精度が得難いことが知られていた. これに対して学習済みモデルを重みの絶対値に基づいてpruningし, 残った部分の初期重みだけでキャパシティの小さいモデルをもう一度学習し直すと高い精度が得られることを示した.

[67] Learning Sparse Neural Networks through L0 Regularization

2017/12
network-pruningのために行われるL0ノルム正則化微分不可能でNP困難である. これを近似して最適化を行う手法を提案.

[68] Faster gaze prediction with dense networks and Fisher pruning

2018/01
Twitterがタイムラインに投稿された画像を表示する際のクリップ位置を決定する視線推定DNNが存在する.そのモデルの高速化に際するpruning手法に関する論文.

[69] Recovering from Random Pruning: On the Plasticity of Deep Convolutional Neural Networks

2018/01
pruningにおいて各重みの重要度を計算する指標は重要ではなく, random pruningを行った(つまり何のポリシーもなくpruningを行った)場合でもfine tuningにより, 作り込んだ指標でpruningした場合と同程度まで精度が回復することを実験的に示す.

[70] Net-Trim: Convex Pruning of Deep Neural Networks with Performance Guarantee

2016/11
filter pruningにおけるdata reconstructionと呼ばれる最適化手法に関する論文.

[71] Predicting Parameters in Deep Learning

2013/06
少数のパラメータから残りのパラメータを補間することで学習対象のパラメータ数を削減する手法を提案.

その他

実装を工夫したり, パラメータ行列を制約して高速なアルゴリズムを適用する手法を以下に列挙します.

[72] An Exploration of Parameter Redundancy in Deep Networks with Circulant Projections

2015/02
全結合層の重み行列を巡回行列に制限し, 順伝播をFFTで計算することでオーダーを削減する手法を提案.

[73] Compressing Neural Networks with the Hashing Trick

2015/04
ランダムな重みの共有と, そのハッシュ関数による表現によりパラメータ容量を削減.

[74] Structured Transforms for Small-Footprint Deep Learning

2015/10
重み行列に巡回行列等の制約を導入してFFTで計算することで高速化.

[75] Deep Fried Convnets

2014/12
全結合層を制約付き行列6つの積で近似し, 順伝播を高速ウォルシュアダマール変換で計算することでパラメータ容量を削減.

[76] Fast Algorithms for Convolutional Neural Networks

2015/09
Convolutionを工夫して乗算回数を減らすアルゴリズム「winograd」の提案.

[77] cuDNN: Efficient Primitives for Deep Learning

2014/10
cuDNNのim2col実装について述べた論文.

[78] MEC: Memory-efficient Convolution for Deep Neural Network

2017/06
im2colをベースに, imの展開にオーバーラップを導入することでメモリ効率を向上.

サーベイ論文

本稿の如く(?)モデル圧縮分野を俯瞰する内容の論文です.

[79] A Survey on Acceleration of Deep Convolutional Neural Networks

2018/02
サーベイ論文.pruningとdecompositionに詳しい.

[80] A Survey of Model Compression and Acceleration for Deep Neural Networks

2017/10
サーベイ論文.蒸留に詳しい.

謝辞

本稿はIdein Inc.でのアルバイトで得られた調査内容を含んでいます.
本稿の公開を快諾して下さった社に感謝の意を表します.