深度神經網絡的壓縮與加速綜述

引用本文:

[如本文對讀者朋友們的研究有所幫助,請添加如下參考文獻]

紀榮嶸,林紹輝,晁飛,吳永堅,黃飛躍. 深度神經網絡壓縮與加速綜述[J]. 計算機研究與發展, 2018, 55(9): 1871-1888.
Ji Rongrong,Lin Shaohui,Chao Fei,Wu Yongjian,Huang Feiyue. Deep Neural Network Compression and Acceleration: A Review. Journal of Computer Research and Development, 2018, 55(9): 1871-1888.

 

1.原因

對於深度神經網絡而言,其無論參數、計算量、數據存儲或者說是網絡深度與寬度等等都會限制深度神經網絡在嵌入式、便攜式工具上的拓展應用

2.加速、壓縮任務

2.1 卷積層:計算耗時長,可以通過權值共享策略進行網絡存儲壓縮,涉及到的是網絡的計算加速

2.2 全連接層:因爲是神經元之間的全連接,所以其網絡參數尤其的多,因此涉及到的是網絡模型的內存壓縮

而這兩項任務設計到很多學類門課:機器學習、參數優化、計算架構、數據壓縮、索引、硬件加速

3.主流方法

深度神經網絡的壓縮與加速的主要方法有:參數剪枝、參數共享、低秩分解、緊性卷積核設計、知識蒸餾

參數剪枝:主要通過設計判斷參數重要與否的準則,移除冗餘的參數.可用於卷積層和全連接層,需要逐層逐步進行網絡壓縮。

參數共享:主要探索模型參數的冗餘性,利用Hash或量化等技術對權值進行壓縮.可用於卷積層和全連接層,需要逐層逐步進行網絡壓縮。既能適應模型重訓練,也能夠通過預訓練網路產生作用。

低秩分解:利用矩陣或張量分解技術估計並分解深度模型中的原始卷積核.可用於卷積層和全連接層,能夠在CPU/GPU的條件下,實現端對端的訓練。既能適應模型重訓練,也能夠通過預訓練網路產生作用。

緊性卷積核:緊性卷積核的設計主要通過設計特殊的結構化卷積核或緊性卷積計算單元,減少模型的存儲與計算複雜度.並且該種方法只能夠用於卷積核之外。能夠在CPU/GPU的條件下,實現端對端的訓練。只支持重訓練。

知識蒸餾:主要利用大型網絡的知識,並將其知識遷移到緊性蒸餾的模型中.可用於卷積層和全連接層,只支持重訓練。

 

4.深度神經網絡的壓縮與加速算法

4.1 參數剪枝

4.1.1 結構化方法

網絡/參數剪枝是通過對已有的訓練好的深度網絡模型移除冗餘的、信息量少的權值,從而減少網絡模型的參數,進而加速模型的計算和壓縮模型的存儲空間.不僅如此,通過剪枝網絡,能防止模型過擬合.以是否一次性刪除整個節點或濾波爲依據,參數剪枝工作可細分成非結構化剪枝和結構化剪枝.非結構化剪枝考慮每個濾波的每個元素,刪除濾波中元素爲0的參數,而結構化剪枝直接考慮刪除整個濾波結構化信息.

LeCun:最優化腦損失(optimal brain damage):這種學習方式模仿了哺乳動物的生物學習過程,通過尋找最小激活的突觸鏈接,然後在突觸刪減(synaptic pruning)過程中大大減少連接個數.

Hassibi和Stork提出了最優化腦手術(optimal brain surgeon)剪枝策略,利用反向傳播計算權值的二階偏導信息(hessian矩陣),同時利用此矩陣構建每個權值的顯著性得分,從而刪除低顯著性的權值.

Srinivas等人提出了不依賴於訓練數據(data-free pruning)和反向傳播,直接構建並排序權重的顯著性矩陣,刪除不顯著冗餘的節點.由於不依賴於訓練數據及後向傳播計算梯度信息,因此該網絡剪枝過程較爲快速.

韓鬆等人提出了一種基於低值連接的刪除策略(low-weight con-nection pruning),該剪枝方法包括3個階段,即訓練連接、刪除連接、重訓練權值.第1階段通過正常訓練,學習重要的連接;第2階段通過計算權值矩陣的範數,刪除節點權重的範數值小於指定的闌值的連接,將原始的密集網絡(dense network)變成稀疏網絡;第3階段通過重新訓練稀疏網絡,恢復網絡的識別精度.

以上剪枝方法通常引入非結構化的稀疏連接,在計算過程中會引起不規則的內存獲取,相反會影響網絡的計算效率.

4.1.2 非結構化方法

近幾年,基於結構化剪枝的深度網絡的壓縮方法陸續被提出,克服了非結構化稀疏連接導致的無法加速問題,其核心思想依靠濾波顯著性準則(即鑑定最不重要的濾波的準則),從而直接刪除顯著性濾波,加速網絡的計算.

2016年,Lebedev等人提出在傳統的深度模型的損失函數中加入結構化的稀疏項,利用隨機梯度下降法學習結構化稀疏的損失函數,並將小於給定閾值的濾波賦值爲0,從而測試階段直接刪除值爲0的整個卷積濾波.

溫偉等人通過對深度神經網絡的濾波、通道、濾波形狀、網絡層數(filters,  channels,  filter shapes,layer depth)的正則化限制加入到損失函數中,利用結構化稀疏學習的方式,學習結構化的卷積濾波.

Zhou等人將結構化稀疏的限制加入目標函數中,並利用前向後項分裂(forward-backward splitting)方法解決結構稀疏化限制的優化問題,並在訓練過程中直接決定網絡節點的個數與冗餘的節點.

另外,近年來,直接測量濾波的範數值直接判斷濾波的顯著性也相繼被提出,例如:直接刪除給定當前層最小L1範數的濾波,即移除相應的特徵圖(feature map),然後下一層的卷積濾波的通道數也相應地減少,最後通過重訓練的方式提高刪減後模型的識別精度.由於大量的ReLU非線性激活函數存在於主流的深度網絡中,使得輸出特徵圖高度稀疏化。

Hu等人利用此特點,計算每個濾波所對應輸出特徵圖的非零比例,作爲判斷濾波重要與否的標準.NVDIA公司Molchanov等人提出一種基於全局搜索顯著性濾波的策略,對需要刪除的濾波用0值代替,並對目標函數進行泰勒公式展開(taylor expansion),判斷使目標函數變換最小的濾波爲顯著濾波.通過卷積計算方式,可以建立當前層的濾波與下一層的卷積濾波的輸入通道存在一一對應關係,利用此特點

Luo等人探索下一層卷積核的輸入通道重要性,代替直接考慮當前層濾波,並建立一個有效的通道選擇優化函數,從而刪除冗餘的通道以及相應的當前層的濾波.以上基於結構化剪枝的深度網絡的壓縮方法,通過刪除卷積層的整個濾波,沒有引入其他額外的數據類型存儲,從而直接壓縮網絡的同時加速整個網絡的計算.

參數剪枝的缺點在於,簡單利用非結構化剪枝,無法加速稀疏化矩陣計算.雖然近年來,相關軟件與硬件口已被利用進行加速計算,但依靠軟硬件的非結構化剪枝方案還無法在所有深度學習框架下使用,另外硬件的依賴性會使得模型的使用成本提高.結構化剪枝不依賴軟硬件的支持,且能很好地嵌入目前主流的深度學習框架,但逐層固定的剪枝方式(layer一by一layer fixed manner)導致了網絡壓縮的低自適應能力、效率和效果.此外,上述的剪枝策略需要手動判斷每層的敏感性,因此需要大量的精力分析及逐層微調(fine-tuning).

4.2 參數共享

參數共享是通過設計一種映射將多個參數共享同一個數據,近年來,量化作爲參數共享的最直接表現形式,得到廣泛的應用.此外,Hash函數和結構化線性映射也可作爲參數共享的表現形式.下面這個表格將會不定時更新。

參數共享算法
提出者 算法 算法思想
     
     

本文作者從大量的文獻中總結了參數共享理念的發展歷程和存在的不足,文中皆有所體現,詳看原文,此處省略。

4.3 低秩分解

其核心是利用矩陣或者向量分解技術估計並分解深度模型中的原始卷積核,本文作者從大量的文獻中總結了參數共享理念的發展歷程和存在的不足,文中皆有所體現,詳看原文,此處省略。

4.4 緊性卷積核

將深度神經網絡的卷積核使用緊性的濾波器代替,有效壓縮深度網絡。

4.5 知識蒸餾

通過軟Softmax變換學習教師輸出的類別分佈,並將大型教師模型的知識精煉成較小的模型。

4.6 其他方法

  1. 全局均勻池化代替傳統的3層全連接層
  2. 基於卷積的快速傅里葉變換
  3. 使用Winograd算法
  4. 隨機空間採樣池化

5.數據集

5.1 評測標準

主要的測評標準是失真率和加速比,假設r爲壓縮和加速前的內存消耗或時間消耗,r*爲壓縮和加速前的內存消耗或時間消耗,則此時的失真率C和加速比分別爲:

C=\frac{r}{r*} 和S=\frac{r}{r*}

5.2 結果比較

6.壓縮和加速算法和模型選擇

在該模塊,本文詳盡闡述了各種壓縮和加速的算法和模型的選擇,本文在此省略。

 

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