綜述論文:當前深度神經網絡模型壓縮和加速方法速覽

本文全面概述了深度神經網絡的壓縮方法,主要可分爲參數修剪與共享、低秩分解、遷移/壓縮卷積濾波器和知識精煉,本論文對每一類方法的性能、相關應用、優點和缺陷等進行獨到的分析。機器之心簡要介紹了該論文,更詳細的內容請查看原論文。

大型神經網絡具備大量的層級與結點,所以考慮如何減小它們所須要的內存與計算量就顯得極爲重要,特別是對於在線學習和增量學習等實時應用。此外,近來智能可穿戴設備的流行也爲研究員提供了在資源(內存、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 環境中實現。而參數修剪和共享使用了不一樣的方法,如向量量化、二進制編碼和係數約束以執行這些任務,一般他們須要花一些處理步驟才能達到最終的目標。app

表 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等

機器之心編譯

參與:蔣思源、路雪、劉曉坤


本文爲機器之心編譯,轉載請聯繫本公衆號得到受權。

相關文章
相關標籤/搜索