DEEP COMPRESSION: COMPRESSING DEEP NEURAL NETWORKS WITH PRUNING, TRAINED QUANTIZATION AND HUFFMAN CODING

ディープラーニングの重みの圧縮に関する論文です。Network pruning(刈り込み)と非線形量子化によってAlexNetの係数を240MBから6.9MBまで圧縮します。

以下、論文からアーキテクチャを意訳してみました。

architecture


Network Pruning

Network pruningはCNNモデルの圧縮において広く利用されています。1989年にLeCunによって、ネットワークの複雑さの削減とオーバーフィッティングのために有効であると証明されました。また、2015年にHanによって、近代のState-of-the-artなCNN modelsに対して適用されました。

Pruningでは、まず、connectivityを通常のネットワークトレーニングによって学習します。次に、小さい重みのconnectionを刈り込みます。全てのしきい値以下の重みがネットワークから取り除かれます。最後に、残っているスパースなconnectionに対して、再学習を行います。Pruningによって、AlexNetのパラメータは1/9〜1/13まで削減されます。

Pruningによってスパースになった重みは、圧縮行格納方式 CSR(compressed sparse row)もしくは圧縮列格納方式 CSC(compressed sparse column)フォーマットで符号化します。その結果、2a+n+1個の値が残ります。aは非0の要素数、nはrowかcolumnの数です。

さらに圧縮するため、非0重みの出現位置を、絶対位置ではなく相対位置インデックスで符号化します。畳み込み層に対しては8bit、全結合層に対しては5bitで符号化します。8bitもしくは5bitを超えた値が出現した場合、0を符号化することで、残差が8bitもしくは3bitを超えないようにします。

padding


Trained Quantization and Weight Sharing

ネットワークの量子化と重みの共有化によって、刈り込まれたネットワークの重みをさらに圧縮します。保存すべき複数のconnectionで共有される効果的な重みを見つけ、共有された重みをfine-tuneします。

quantization


Weight Sharingの概念を図3に示します。4入力、4出力のニューロンがあり、重みは4x4行列となっています。左上が係数の行列、左下が勾配の行列です。重みは量子化され、4つのbinsに区分けされます。各binを色分けして示しています。同じbinに格納された重みは、共通の重み(セントロイド)に量子化されます。その結果、重みは共有された重みテーブルのインデックスとなります。updateによって、勾配はグループごとに平均化され、学習率を乗じ、セントロイドを更新します。

刈り込みされたAlexNetにおいて、1つの畳込み層につき、重みは256 shared weightsまで非線形量子化され、各重みは8bitとなります。また、1つの全結合層につき、重みは32 shared weightsまで非線形量子化され、各重みは5bitになります。

quantized_result


量子化によって、4x4行列が、4セントロイドと2bitインデックスになるため、データサイズは1/3まで削減されます。

ハフマン符号化

量子化された重みと、疎行列のインデックスをハフマン符号化することで、データサイズは20%〜30%削減されます。