深度神經網路壓縮

2021-09-12 13:44:57 字數 1761 閱讀 3680

目前深度學習模型壓縮方法的研究主要可以分為以下幾個方向: 

更精細模型的設計,目前的很多網路都具有模組化的設計,在深度和寬度上都很大,這也造成了引數的冗餘很多,因此有很多關於模型設計的研究,如squeezenet、mobilenet等,使用更加細緻、高效的模型設計,能夠很大程度的減少模型尺寸,並且也具有不錯的效能。 

模型裁剪,結構複雜的網路具有非常好的效能,其引數也存在冗餘,因此對於已訓練好的模型網路,可以尋找一種有效的評判手段,將不重要的connection或者filter進行裁剪來減少模型的冗餘。 

核的稀疏化,在訓練過程中,對權重的更新進行誘導,使其更加稀疏,對於稀疏矩陣,可以使用更加緊致的儲存方式,如csc,但是使用稀疏矩陣操作在硬體平台上運算效率不高,容易受到頻寬的影響,因此加速並不明顯。 

除此之外,量化、low-rank分解、遷移學習等方法也有很多研究,並在模型壓縮中起到了非常好的效果。

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類,對每類的梯度進行求和得到每類的偏置,和量化中心一起更新得到新的權值。 

壓縮率計算方法如下公式所示:

公式(1)n代表連線數,b代表每乙個連線需要b bits表示,k表示量化k個類,k類只需要用個bit表示,n個連線需要索引,還需要用log2(k)表示量化中心的數值。

聚類中心,需要用的bit作為索引,這裡可以使用變長的huffman編碼進一步壓縮。figure 5顯示了壓縮前和壓縮後的長度分布。

深度神經網路

關於卷積神經網路cnn,網路和文獻中有非常多的資料,我在工作 研究中也用了好一段時間各種常見的model了,就想著簡單整理一下,以備查閱之需。如果讀者是初接觸cnn,建議可以先看一看 deep learning 深度學習 學習筆記整理系列 中關於cnn的介紹 1 是介紹我們常說的lenet為例,相信...

深度神經網路加速與壓縮總結

low rank pruning 深度網路加速和壓縮的第二種方法是pruning,簡單來說就是把神經網路中的連線剪掉,剪掉以後整個網路複雜度特別是網路模型大小要減小很多。最早在iclr2016上史丹福大學提出了一種稱為deep compression的隨機剪枝方法。由於隨機剪枝方法對硬體非常不友好,...

機器學習,深度學習,神經網路,深度神經網路

先來說一下這幾者之間的關係 人工智慧包含機器學習,機器學習包含深度學習 是其中比較重要的分支 深度學習源自於人工神經網路的研究,但是並不完全等於傳統神經網路。所以深度學習可以說是在傳統神經網路基礎上的公升級。神經網路一般有輸入層 隱藏層 輸出層,一般來說隱藏層大於2的神經網路就叫做深度神經網路,深度...