深度壓縮技術總結

2021-08-09 12:09:52 字數 2465 閱讀 8496

深度壓縮主要技術: 

① 2016 iclr best *****三步走策略 : 

技術路線:1)剪枝(剪掉多餘的連線,將網路結構變稀疏) 

具體步驟: 

step1:正常訓練得到網路權值 

step2:將所有小於閾值的權值設為0 

step3:重新訓練剩下的非0值 

step2,step3不斷迭代,直到滿足條件為止。 

2)量化(通過k均值聚類,用索引代表聚類中心,從而減少權值的儲存) 

3)霍夫曼編碼(解決編碼長短不一帶來的冗餘問題,不需要訓練,在所有微調之後離線實施) 

實現效果:主流網路上都達到了40倍左右的壓縮率,而且精度完全沒有降低,甚至還提高了一點點。

② squeezenet 

主要思想:從網路結構的設計入手,通過設計更小的卷積核來減少模型的引數個數。 

技術路線: 1)採用1*1的卷積核部分替換3*3的卷積核。 

2)減少輸入3*3卷積核影象的通道數量。 

3)延後降取樣操作(包括pooling stride)。因為過早降取樣會丟掉一些資訊,後面的輸出特徵值會變小,通過延後降取樣來提高網路精度。 

實現效果:不損失精度的情況下,文章將alexnet原先240m的引數壓縮到了4.8m,壓縮了50倍。 

提公升空間:如果再加上①的方法對權值進行壓縮,理論上可以壓縮510倍。amazing!

③簡化網路設計 

④低秩分解:奇異值分解、tucker分解、塊分解。

⑤量化 

⑥用定點來代替浮點數計算。

⑦設計更精巧的演算法來降低模型大小(自然語言的相關應用) 

主要思想:不是用乙個向量來表達乙個詞,而是用兩個向量表達乙個詞,乙個行向量+乙個列向量,不同的詞之間共享行或列向量。 

實現效果:提出的lightrnn演算法極大的減小了模型的尺寸,可以把原來語言模型的大小從4g降到40m左右

⑧剪枝+嫁接(動態外科手術): 

主要思想:採取了剪枝與嫁接相結合、訓練與壓縮相同步的策略完成網路壓縮任務。通過網路嫁接操作的引入,避免了錯誤剪枝所造成的效能損失,從而在實際操作中更好地逼近網路壓縮的理論極限。極其有效地解決了處理大型網路時重訓練時間長,誤剪枝率高的問題。 

實現效果:將lenet和alexnet這兩個經典網路的引數總量分別壓縮108倍和17.7倍。

⑨knowledge distillation 

主要思想:使用乙個深度網路或對不同模型(即ensemble)的**結果進行平均,比使用單個較淺網路的準確性更高。當然計算複雜度也更高。knowledge distillation可以將複雜模型(teacher)學到的知識轉移到更簡單的模型(student)。通過這種方法,學生網路可以實現直接使用相同的資料集進行訓練而無法實現的準確性。 

就是用teacher dnn(或多個teacher dnns的ensemble)的class score作為soft target。目標是最小化soft target與student dnn class score之間的平方差。knowledge distillation看起來也是乙個簡化dnn網路的有效方法。

總結近年深度壓縮技術熱點: 

1)1*1卷積的使用:在googlenet inception v1以及後續版本,resnet中都大量得到應用,有減少模型引數的作用。 

2)卷積拆分: 

eg1: vgg模型壓縮trick:對於5×5的卷積,使用兩個3×3的卷積串聯,但參數量卻有所降低,為3×3×2/(5×5)=0.72,同樣的道理3個3×3卷積代替乙個7×7,則引數壓縮比3×3×3/(7×7)=0.55,降低一倍的參數量,也是很可觀的。 

eg2:googlelet inception v2就借鑑了vgg上面的思想。而到了inception v3網路,則更進一步,將大卷積分解為小卷積。比如7×7的卷積,拆分成1×7和7×1的卷積後。參數量壓縮比為1×7×2/(7×7)=0.29,比上面拆分成3個3×3的卷積,更加節省引數了。 

後來的resnet也是上面這些trick。到現在,基本上網路中都是3×3卷積和1×1卷積,5×5很少見,7×7幾乎不可見。 

eg3:squeezenet,squeezenet將上面1×1降維的思想進一步拓展。通過減少3×3的filter數量,將其一部分替換為1×1來實現壓縮。 

3)硬體方面的加速。

二:訓練方法改進: 

dsd(密集-稀疏-密集)方法 

訓練流程: 

1)初始的密集訓練(學習哪些權重重要,那些不重要) 

2)稀疏訓練(剪枝並且重新訓練稀疏網路,引數:稀疏度) 

3)最終的密集訓練(恢復已剪枝的連線,使網路再次變的密集。這些之前剪枝的連線會初始化為零並重新訓練。恢復被剪枝的連線增加了網路的維度,並且更多的引數更容易使網路的鞍點向下滑動以獲得更好的區域性最小值)

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

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

深度學習模型壓縮

1 引入1 1的卷積降維 inception v1 例如googlenet,假設輸入是28 28 192的feature map,1 1的channel是64,3 3的channel是128,5 5的channel是32 在左圖被3個 不同尺寸的卷積核卷積之後,參數量是1 1 192 64 3 3 ...

深度學習模型壓縮

前言 目前在深度學習領域分類兩個派別,一派為學院派,研究強大 複雜的模型網路和實驗方法,為了追求更高的效能 另一派為工程派,旨在將演算法更穩定 高效的落地在硬體平台上,效率是其追求的目標。複雜的模型固然具有更好的效能,但是高額的儲存空間 計算資源消耗是使其難以有效的應用在各硬體平台上的重要原因。最近...