轉自:https://zhuanlan.zhihu.com/p/30548590
大型神經網絡具有大量的層級與結點,因此考慮如何減少它們所需要的內存與計算量就顯得極為重要,特別是對於在線學習和增量學習等實時應用。此外,近來智能可穿戴設備的流行也為研究員提供了在資源(內存、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)——用於評估模型性能和近期基准的主要數據集。最后,我們總結並討論了現有的挑戰和可能的發展方向。