論文位址:Deep Compression: Compressing Deep Neural Networks with Pruning, Trained Quantization and Huffman Coding
源碼:github 源碼
介紹:
本篇論文主要講述關于深度學習網絡參數的壓縮工作。論文主要從下三點出發:
- pruning:對網絡進行剪枝,隻保留重要的連接配接
- train quantization:通過參數共享量化權重矩陣
- huffman coding:對量化值進行huffman編碼,進一步壓縮。
整個網絡在不影響性能的情況下,能夠将參數量降低到原來的1/49~1/35。

網絡剪枝
在深度學習訓練的過程中,會學到連接配接的參數。剪枝的方法是:連接配接的權值小于一定門檻值的直接移除,最終就得到了稀疏的網絡連接配接。剪枝這一步驟能夠将VGG-16(AlexNet)參數降低到原來的1/13(1/9)。
稀疏矩陣用compressed sparse row(CSR)和compressed sparse column(CSC)的格式進行壓縮,總共需要2a+n+1個存儲單元,a是非零元素個數,n是行數或者列數。
網絡剪枝的過程如figure 2所示:
一個4*4的矩陣可以用一維16數組表示,剪枝時候,隻保留 權值大于指定門檻值的數,用相對距離來表示,例如idx=4和idx=1之間的位置差為3,如果位置差大于設定的span,那麼就在span位置插入0。例如15和4之間距離為11大于span(8),是以在4+8的位置插入0,idx=15相對idx=12為3。這裡span門檻值在卷積層設定為8,全連接配接層為5。
共享量化權重矩陣
上圖假定某層有4個輸入單元4個輸出單元,權重矩陣為4*4,梯度同樣為4*4。
假設權重被量化為4類,用四種顔色辨別。用每類量化的值代表每類的權值,得到量化後的權值矩陣。用4個權值和16個索引就可以計算得到4*4權重矩陣連接配接的權值。梯度矩陣同樣量化為4類,對每類的梯度進行求和得到每類的偏置,和量化中心一起更新得到新的權值。
壓縮率計算方法如下公式所示:
r=nbnlog2k+kb(1)
公式(1)n代表連接配接數,b代表每一個連接配接需要b bits表示,k表示量化k個類,k類隻需要用 log2(k) 個bit表示,n個連接配接需要 nlog2(k) 索引,還需要用 kb 表示量化中心的數值。
霍夫曼編碼
聚類中心,需要用 log2(k) 的bit作為索引,這裡可以使用變長的huffman編碼進一步壓縮。figure 5顯示了壓縮前和壓縮後的長度分布。