【論文閱讀】韓松《Efficient Methods And Hardware For Deep Learning》節選《Deep compression》

Trained Quantization and Deep Compression


本章內容來在ICLR 2016論文《Deep compression: Compressing deep neural networks with pruning, trained quantization and huffman coding》。

DeepCompression由剪枝、量化和變長編碼組成,它可將神經網絡在無損精度情況下壓縮一個數量級。DeCp是一種3段管道方法。

  • Prune,移除冗餘的連接。
  • 量化,多個連接共用權重,縮小了參數空間,每個參數可用更小的位數表示。
  • Huffman coding,用霍夫曼編碼對分佈不均勻的量化的權重進行編碼(邊長編碼可無損的使用最小空間保存參數)。

一個重要的發現是剪枝與量化是互不干擾的,所以可以聯合實現更高的壓縮率。

在這裏插入圖片描述

Trained Quantization and Weight Sharing

量化和權重共享實際就是一種粗粒度編碼方式以減少權重需要的存儲位數(極端情況下可以達到二值化編碼)。
在這裏插入圖片描述

上圖是權值共享的過程,參數矩陣進行分組,然後保存其index值即可,每個所以index對應真實的參數值,這個參數值有weight和gradients乘學習率lr更新得到。

權值分組採用k-means 聚類算法。不同layer不會共享權值!相當於每層都有其單獨的分組值。不同層的相同索引值對於的不是相同的權值值。

Storing the Meta Data

整個方案會產生兩類元數據:

  • 剪枝得到的稀疏網絡的非零權重的索引
  • 量化會爲每個layer產生一個codebook

稀疏網絡的元數據存儲

剪枝後的稀疏網絡,我們需要存儲非零權重值及其位置索引。通過保持相對索引可以最小化需要的數據位數。採用4位就足夠使用,最大可以表示16個索引相對位置。考慮稀疏度普遍爲10%,即10個坑裏有1個非零值,所以採用16的最大相對間隔是合理的上界,若超出16,有兩種處理方案。

  • 填充零:當相對索引差大於16,則填充一個0。優點是不需要修改其他邏輯。缺點是填充的0造成計算週期的浪費(相當於要計算這個無意義的0)
  • 特殊編碼解決:保留一個最後的編碼作爲一個相對索引溢出的標籤,用來佔位提示溢出,下一個相對位置直接從這個佔位處開始計算即可。優點是這種方法不會浪費計算資源。缺點是這種方案下實際可用的最大索引只有15,浪費了一個專用標籤碼,需要有額外的定製邏輯去處理這個標籤碼,使得計算更難去並行。
    在這裏插入圖片描述
    在這裏插入圖片描述

實驗發現真正出現溢出的情況很少,所以額外的計算浪費微不足道,所以最終採用方案1,補零法。

量化的碼本存儲

量化過程,如採用4-bit,即16個【索引-值】對,1到16分別表示16種量化(聚類)之後的參數值。這樣1層需要16對,50層的網絡需要50x16=800對,每個【索引-值】對4btye,則總共只有3kb。

各部分存儲情況分解表(breakdown)
在這裏插入圖片描述

Variable-Length Coding

目前爲止,經過上面的步驟,網絡經過剪枝,然後參數經過量化,目前用固定位的數來表示權重,但是這時候遇到一個問題,由於權重分佈問題,應該採用一種更節約空間的變長編碼來保存數據。如下參數分佈:
在這裏插入圖片描述

採用最優前綴編碼算法(這裏採用霍夫曼編碼,Huffman)對量化的權重和稀疏的索引矩陣進行編碼,可以節省20%-50%的模型存儲容量。

Experiments

在LeNet-300-100,LeNet-5,AlexNet,VGG-16,Inception-V3 和 ResNet-50上進行了剪枝、量化和霍夫曼編碼的實驗。在無損準確率的情況下壓縮網絡17x到49x,ResNet-50網絡從100MB壓縮到5.8MB,這足夠將模型放入片上RAM(on-chip SRAM),消除了對高能耗的DRAM的存儲需求。(SRAM相對價格稍高,但能耗少,DRAM需要動態不停刷新)。

實驗採用caffe和Pytorch實現。實現如下:

  • 量化和權重共享:每層維護一個碼書結構存儲了共享的權重(經過聚類中心確定權重),然後權重矩陣採用稀疏的索引矩陣表示,每一個共享的權值的更新根據該權值的所有index位置的梯度進行更新。
  • 之後模型確定了(fine-tuning完成之後),再進行off-line Huffman編碼。

無損情況下的各網絡模型的壓縮率
在這裏插入圖片描述

  • LeNet(LeNet-300-100、LeNet-5) + MNIST :
    在這裏插入圖片描述

  • AlexNet + ImageNet ILSVRC-2012:採用Caffe model作爲對比。

    **實驗思路:**首先確定最優的位數,然後再分別實驗P+Q和P+Q+H,實驗充分!這裏有一個平衡取捨的問題,用8bit & 5bit能獲得最好的準確率,但是8bit & 4 bit能更好的在硬件上實現,天然位對齊,且壓縮率會進一步上升一些。
    在這裏插入圖片描述

  • VGG-16 + ILSVRC-2012、 Inception-V3、ResNet-50:略,實驗詳情見論文。

結論

下圖描述不同壓縮率下的準確度損失(分別在pruning、quantization或者他們的組合,以及和SVD的對比)
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

  • 剪枝與量化可以分開工作,但組合之後壓縮率提升巨大。
  • Deep Compression比SVD低秩分解好很多
  • 重訓練過程非常重要!
  • 表4.9中統一量化和非統一量化指的是 adjacent code 是否可變。(這裏沒看懂)

與其他壓縮方法的對比:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章