本文全面概述了深度神經網路的壓縮方法,主要可分為引數修剪與共享、低秩分解、遷移/壓縮卷積濾波器和知識精煉,本論文對每一類方法的效能、相關應用、優勢和缺陷等進行獨到的分析。機器之心簡要介紹了該論文,更詳細的內容請檢視原論文。
大型神經網路具有大量的層級與結點,因此考慮如何減少它們所需要的記憶體與計算量就顯得極為重要,特別是對於線上學習和增量學習等實時應用。此外,近來智慧可穿戴裝置的流行也為研究員提供了在資源(記憶體、CPU、能耗和頻寬等)有限的行動式裝置上部署深度學習應用提供了機會。高效的深度學習方法可以顯著地影響分散式系統、嵌入式裝置和用於人工智慧的 FPGA 等。典型的例子是 ResNet-50[5],它有 50 層卷積網路、超過 95MB 的儲存需求和計算每一張圖片所需要的浮點數乘法時間。如果剪枝一些冗餘的權重後,其大概能節約 75% 的引數和 50% 的計算時間。對於只有兆位元組資源的手機和 FPGA 等裝置,如何使用這些方法壓縮模型就很重要了。
實現這個目標需要聯合多個學科以尋找解決方案,包括但不限於機器學習、最優化、計算機架構、資料壓縮、索引和硬體設計等。在本論文中,我們回顧了在壓縮和加速深度神經網路方面的工作,它們廣泛受到了深度學習社群的關注,並且近年來已經實現了很大的進展。
我們將這些方法分為四個類別:引數修剪和共享、低秩分解、遷移/壓縮卷積濾波器和知識精煉等。基於引數修剪(parameter pruning)和共享的方法關注於探索模型引數中冗餘的部分,並嘗試去除冗餘和不重要的引數。基於低秩分解(Low-rank factorization)技術的方法使用矩陣/張量分解以估計深層 CNN 中最具資訊量的引數。基於遷移/壓縮卷積濾波器(transferred/compact convolutional filters)的方法設計了特殊結構的卷積濾波器以減少儲存和計算的複雜度。而知識精煉(knowledge distillation)則學習了一個精煉模型,即訓練一個更加緊湊的神經網路以再現大型網路的輸出結果。
在表 1 中,我們簡單地總結了這四種方法。通常引數修剪和分享、低秩分解和知識精煉方法可以通過全連線層和卷積層用於 DNN,它們能實現有競爭力的效能。另外,使用遷移/壓縮濾波器的方法只適用於全卷積神經網路。低秩分解和遷移/壓縮濾波器的方法提供了一種端到端的流程,並且它們很容易直接在 CPU/GPU 環境中實現。而引數修剪和共享使用了不同的方法,如向量量化、二進位制編碼和係數約束以執行這些任務,通常他們需要花一些處理步驟才能達到最終的目標。
表 1. 不同的模型壓縮方法。
至於訓練協議,基於引數修剪/共享、低秩分解的模型可以從預訓練的模型中抽取或者從頭開始訓練,這些訓練比較靈活高效。而遷移/壓縮濾波器和知識精煉模型只支援從頭開始訓練。這些方法獨立設計,互為補充。例如,遷移層和引數修剪/共享可以一起使用,模型量化/二進位制化(binarization)可以和低秩分解一起使用,以實現進一步提速。論文作者詳細介紹了每一類方法,包括特性、優勢和缺陷等。
引數修剪和共享
根據減少冗餘(資訊冗餘或引數空間冗餘)的方式,這些技術可以進一步分為三類:模型量化和二進位制化、引數共享和結構化矩陣(structural matrix)。
A. 量化和二進位制化
網路量化通過減少表示每個權重所需的位元數來壓縮原始網路。Gong et al. [6] 和 Wu et al. [7] 對引數值使用 K 均值標量量化。Vanhoucke et al. [8] 展示了 8 位元引數量化可以在準確率損失極小的同時實現大幅加速。[9] 中的研究在基於隨機修約(stochastic rounding)的 CNN 訓練中使用 16 位元定點表示法(fixed-point representation),顯著降低記憶體和浮點運算,同時分類準確率幾乎沒有受到損失。
[10] 提出的方法是首先修剪不重要的連線,重新訓練稀疏連線的網路。然後使用權重共享量化連線的權重,再對量化後的權重和碼本(codebook)使用霍夫曼編碼,以進一步降低壓縮率。如圖 1 所示,該方法首先通過正常的網路訓練來學習連線,然後再修剪權重較小的連線,最後重新訓練網路來學習剩餘稀疏連線的最終權重。
缺陷:此類二元網路的準確率在處理大型 CNN 網路如 GoogleNet 時會大大降低。另一個缺陷是現有的二進位制化方法都基於簡單的矩陣近似,忽視了二進位制化對準確率損失的影響。
圖 1. [10] 中提到的三階段壓縮方法:修剪、量化(quantization)和霍夫曼編碼。修剪減少了需要編碼的權重數量,量化和霍夫曼編碼減少了用於對每個權重編碼的位元數。稀疏表示的後設資料包含壓縮率。壓縮機制不會帶來任何準確率損失。
B. 剪枝和共享
網路剪枝和共享已經被用於降低網路複雜度和解決過擬合問題。有一種早期應用的剪枝方法稱為偏差權重衰減(Biased Weight Decay),其中最優腦損傷(Optimal Brain Damage)和最優腦手術(Optimal Brain Surgeon)方法基於損失函式的 Hessian 矩陣減少連線的數量,他們的研究表明這種剪枝方法的精確度比基於重要性的剪枝方法(比如 weight dDecay 方法)更高。
缺陷:剪枝和共享方法存在一些潛在的問題。首先,若使用了 L1 或 L2 正則化,則剪枝方法需要更多的迭代次數才能收斂,此外,所有的剪枝方法都需要手動設定層的敏感度,即需要精調超引數,在某些應用中會顯得很冗長繁重。
C. 設計結構化矩陣
如果一個 m x n 階矩陣只需要少於 m×n 個引數來描述,就是一個結構化矩陣(structured matrix)。通常這樣的結構不僅能減少記憶體消耗,還能通過快速的矩陣-向量乘法和梯度計算顯著加快推理和訓練的速度。
低秩分解和稀疏性
一個典型的 CNN 卷積核是一個 4D 張量,需要注意的是這些張量中可能存在大量的冗餘。而基於張量分解的思想也許是減少冗餘的很有潛力的方法。而全連線層也可以當成一個 2D 矩陣,低秩分解同樣可行。
所有近似過程都是一層接著一層做的,在一個層經過低秩濾波器近似之後,該層的引數就被固定了,而之前的層已經用一種重構誤差標準(reconstruction error criterion)微調過。這是壓縮 2D 卷積層的典型低秩方法,如圖 2 所示。
圖 2. CNN 模型壓縮的低秩近似(Low-rank approximation)。左:原始卷積層。右:使用秩 K 進行低秩約束的卷積層。
表 2. 低秩模型及其基線模型在 ILSVRC-2012 資料集上的效能對比。
缺陷:低秩方法很適合模型壓縮和加速,該方法補充了深度學習的近期發展,如 dropout、修正單元(rectified unit)和 maxout。但是,低秩方法的實現並不容易,因為它涉及計算成本高昂的分解操作。另一個問題是目前的方法逐層執行低秩近似,無法執行非常重要的全域性引數壓縮,因為不同的層具備不同的資訊。最後,分解需要大量的重新訓練來達到收斂。
遷移/壓縮卷積濾波器
使用遷移卷積層對 CNN 模型進行壓縮受到 [42] 中研究的啟發,該論文介紹了等變群論(equivariant group theory)。使 x 作為輸入,Φ(·) 作為網路或層,T (·) 作為變換矩陣。則等變概念可以定義為:
即使用變換矩陣 T (·) 轉換輸入 x,然後將其傳送至網路或層Φ(·),其結果和先將 x 對映到網路再變換對映後的表徵結果一致。
根據該理論,將變換矩陣應用到層或濾波器Φ(·) 來對整個網路模型進行壓縮是合理的。
表 3. 基於遷移卷積濾波器的不同方法在 CIFAR-10 和 CIFAR-100 資料集上的效能對比。
缺陷:將遷移資訊應用到卷積濾波器的方法需要解決幾個問題。首先,這些方法的效能可與寬/平坦的架構(如 VGGNet)相媲美,但是無法與較窄/特殊的架構(如 GoogleNet、Residual Net)相比。其次,遷移假設有時過於強大以致於無法指導演算法,使得在某些資料集上的結果不穩定。
知識精煉
據我們所知,Caruana 等人 [49] 首先提出利用知識遷移(KT)來壓縮模型。他們通過整合強分類器標註的偽資料訓練了一個壓縮模型,並再現了原大型網路的輸出結果。然而他們的工作僅限於淺層網路。這個想法近來在 [50] 中擴充套件為知識精煉(Knowledge Distillation/KD),它可以將深度和寬度的網路壓縮為淺層模型,該壓縮模型模仿了複雜模型所能實現的功能。KD 的基本思想是通過軟 softmax 學習教師輸出的類別分佈而降大型教師模型(teacher model)的知識精煉為較小的模型。
[51] 中的工作引入了 KD 壓縮框架,即通過遵循學生-教師的正規化減少深度網路的訓練量,這種學生-教師的正規化即通過軟化教師的輸出而懲罰學生。該框架將深層網路(教師)的整合壓縮為相同深度的學生網路。為了完成這一點,學生學要訓練以預測教師的輸出,即真實的分類標籤。儘管 KD 方法十分簡單,但它同樣在各種影像分類任務中表現出期望的結果。
缺點:基於 KD 的方法能令更深的模型變得更加淺而顯著地降低計算成本。但是也有一些缺點,例如 KD 方法只能用於具有 Softmax 損失函式分類任務,這阻礙了其應用。另一個缺點是模型的假設有時太嚴格了,以至於其效能有時比不上其它方法。
表 4. 模型壓縮不同的代表性研究中使用的基線模型。
討論與挑戰
深度模型的壓縮和加速技術還處在早期階段,目前還存在以下挑戰:
- 大多數目前的頂尖方法都建立在設計完善的 CNN 模型的基礎上,這限制了改變配置的自由度(例如,網路結構和超引數)。為了處理更加複雜的任務,還需要更加可靠的模型壓縮方法。
- 剪枝是一種壓縮和加速 CNN 的有效方式。目前大多數的剪枝技術都是以減少神經元之間的連線設計的。另一方面,對通道進行剪枝可以直接減小特徵對映的寬度並壓縮模型。這很有效,但也存在挑戰,因為減少通道會顯著地改變下一層的輸入。確定這類問題的解決方式同樣很重要。
- 正如之前所提到的,結構化矩陣和遷移卷積濾波器方法必須使模型具有人類先驗知識,這對模型的效能和穩定性有顯著的影響。研究如何控制強加先驗知識的影響是很重要的。
- 知識精煉(knowledge distillation/KD)方法有很多益處比如不需要特定的硬體或實現就能直接加速模型。開發基於 KD 的方法並探索如何提升效能仍然值得一試。
- 多種小型平臺(例如,移動裝置、機器人、自動駕駛汽車)的硬體限制仍然是阻礙深層 CNN 擴充套件的主要問題。如何全面利用有限的可用計算資源以及如何為這些平臺設計特定的壓縮方法仍然是個挑戰。
論文:A Survey of Model Compression and Acceleration for Deep Neural Networks
論文連結:https://arxiv.org/abs/1710.09282
深層卷積神經網路(CNN)目前已經在很多視覺識別任務中達到了非常準確的表現。然而,目前的深層卷積神經網路模型非常耗費計算資源和記憶體,面臨著在終端部署和低延遲需求場景下難以應用的問題。因此,一種很自然的解決方案就是在保證分類準確率不顯著下降的前提下對深層卷積神經網路進行壓縮和加速。近年來,該領域實現了極大的發展。我們將在本論文中介紹近期壓縮和加速 CNN 模型的先進技術。這些技術可以大致分為四類:引數修剪和共享(parameter pruning and sharing)、低秩分解(low-rank factorization)、遷移/壓縮卷積濾波器(transfered/compact convolutional filter)和知識精煉(knowledge distillation)。引數修剪和共享的方法將在論文開頭詳細描述,其他幾類方法也都會在文中介紹。我們對每一類方法的效能、相關應用、優勢和缺陷等進行獨到的分析。然後本文將介紹幾個最近的其他成功方法,如動態網路和隨機深度網路(stochastic depths network)。之後,我們將研究評估矩陣(evaluation matrix)——用於評估模型效能和近期基準的主要資料集。最後,我們總結並討論了現有的挑戰和可能的發展方向。
選自arXiv
作者:Yu Cheng等
機器之心編譯
參與:蔣思源、路雪、劉曉坤
本文為機器之心編譯,轉載請聯絡本公眾號獲得授權。