模型加速(一) 概述


 


概述

研究框架

淺層壓縮

模型裁剪

知識蒸餾

深層壓縮

量化

輕量級網絡

網絡結構搜索

總結


 

概述

  深度學習作為機器學習領域的分支,近年來在圖像識別與檢索自然語言處理語音識別等諸多領域中都展現出非常優越的性能。深度學習以人工神經網絡為基本架構,通過對數據表征進行學習,將底層特征表示轉化為高層特征表示,通過多層網絡模型完成學習任務。

  長期以來,深度學習研究人員致力於開發更深、更大的模型,達到更高的精度和准確度,同時也導致模型具有大量參數(例如 VGG16 有一億三千多萬個參數),存儲空間占用率高計算復雜的特性。為了達到優越的學習效果,必須使用 GPU 加速。對硬件的高要求使得深度網絡模型在實際應用中受到限制,諸如手機等便攜式以及嵌入式設備,無法滿足深度學習的大規模計算要求。

  因此,需要進行模型壓縮。壓縮網絡模型的最終目的是產生小規模、高精度及准確度的模型

  

  模型壓縮是指對深度學習使用的深度網絡進行重構、簡化以及加速的技術。

  • 重構:指利用深度網絡的典型模塊重新設計一個簡單的網絡結構
  • 簡化:指在現有深度網絡結構上進行參數壓縮層次以及維度的縮減;
  • 加速:指提高深度網絡訓練、預測的速度。

  

  網絡經過訓練之后,參數存在大量冗余,這些冗余的參數是不重要的、可以刪除的,去除這些參數並不影響網絡的精度。由於參數減少,網絡的計算得以簡化並且速度大幅提高,從而能提升網絡的整體性能。

  模型壓縮的思想最早可以追溯到1989年的Yann LeCun等前輩提出的論文,利用信息論的思想,通過刪除網絡中不重要的權重,使得神經網絡能夠更好地泛化,提高學習速率,達到壓縮網絡尺寸的目的。當時,並沒有什么深度網絡,並且連個深度網絡都很難訓練出來,不知道LeCun等是由於怎樣的需求想到了模型壓縮的思想。

  2015年,Han發表的Deep Compression是一篇對於模型壓縮方法的綜述型文章,將裁剪、權值共享和量化、編碼等方式運用在模型壓縮上,取得了非常好的效果,作為ICLR 2016的最佳論文。

研究框架

淺層壓縮

模型裁剪

  諸如卷積神經網絡這種網絡結構,存在大量的冗余參數,可以在不影響網絡性能的基礎上,裁剪掉一部分冗余參數。

知識蒸餾

  采用遷移學習,通過將預先訓練好教師模型輸出作為監督信號去訓練另外一個輕量化網絡

  這種模型壓縮是一種將大型教師網絡的知識轉移到較小的學生網絡的方法,將復雜、學習能力強的教師網絡學到的特征表示蒸餾出來,傳遞給參數量小、學習能力弱的學生網絡,一般可以提高學生網絡的精度。

  將教師模型的泛化能力傳遞給學生模型的一個有效方法是將教師模型產生的分類概率作為訓練學生模型的"軟目標",以指導學生網絡進行訓練,實現知識遷移。

對於上述內容的理解


   知識蒸餾,實際上是一種將深度模型的能力傳授給輕量化模型的過程。將訓練好的深度模型作為教師,作為一種軟目標。將輕量化模型作為學生,學生(輕量化模型)不僅學習教師(深度模型)的知識-- 軟目標,也接觸社會,理解自己對人生的感悟,即真實值 -- 硬目標。

  通過這種操作,使其學習到深度模型可以表達的能力,也避免深度模型自身的錯誤。也可謂是青出於藍的模型塑造過程。


   重點idea就是提出用soft target來輔助hard target一起訓練,而soft target來自於大模型的預測輸出。這里有人會問,明明true label(hard target)是完全正確的,為什么還要soft target呢

  hard target 包含的信息量(信息熵)很低,soft target包含的信息量大,擁有不同類之間關系的信息(比如同時分類驢和馬的時候,盡管某張圖片是馬,但是soft target就不會像hard target 那樣只有馬的index處的值為1,其余為0,而是在驢的部分也會有概率。)[5]

  這樣的好處是,這個圖像可能更像驢,而不會去像汽車或者狗之類的,而這樣的soft信息存在於概率中,以及label之間的高低相似性都存在於soft target中。但是如果soft targe是像這樣的信息[0.98 0.01 0.01],就意義不大了,
  知識蒸餾的過程還可以與注意力機制相結合,強迫學生卷積神經網絡模擬強大老師網絡注意力映射,從而可以模仿教師網絡。詳情可見paper

深層壓縮

量化

  量化就是將神經網絡的浮點運算轉換為定點運算。有利於:

  • 移動設備上實現網絡的實時運行
  • 對部署雲計算也有幫助

  神經網絡中的運算為浮點運算,一般而言,參數都是FP32(32位浮點數),通過量化,可以將一個參數采用低精度FP16(半精度浮點)和

  • INT8(8位定點整數)
  • INT4(4位定點整數)
  • INT1 (1位定點整數)

表示。

何為定點?


   定點表示,即約定機器數中的小數點位置是固定不變的。根據小數點固定的位置不同可以分為定點小數和定點整數。

 


  浮點量化的步驟:

  • 權重矩陣匯總找到參數最小值min,最大值max,確定映射區間Xscale和零點量化值Xzero_point.
  • 每個FP32值轉化為INT8值,公式如下,類似於歸一化的過程:

  量化卷積層通常需要 8bits、全連接層需要 4bits 。

輕量級網絡

  設計輕量級網絡,直接適用於移動和嵌入式設備。比較出名的就是MobileNet中提出的深度可分離卷積結構

  • MobileNet

  基於深度可分離卷積,核心思想就是將卷積核分解:

  其計算量相較於標准卷積下降8-9倍,同時精度下降很少(ImageNet上下降1%)。

  詳情可見:https://www.cnblogs.com/monologuesmw/p/12270137.html

  • ShuffleNet

  深度可分離卷積實現了網絡壓縮的目的,但是 1×1 卷積的計算消耗還是比較大, MobileNet在 1×1 的卷積中花費了 94.86%的計算時間,並且占有整個網絡模型中 75%的參數量。

  為了進一步減少參數量,ShuffleNet在1*1卷積上采用分組(group)操作。提出一種channel shuffle的方法,使分組后的1*1卷積可以共享信息。如下圖,左側是沒有信息互通,右側是使用了channel shuffle。

  • SqueezeNet

  SqueezeNet使用1*1卷積進行模型的壓縮-擴張。如下圖所示,模塊由Squeeze卷積層和Expand層組成。Squeeze卷積層使用1*1卷積,Expand層使用1*1卷積核3*3卷積的組合。

  這三部分構成了模型的核心部件Fire Module,如下圖所示:

網絡結構搜索

  網絡結構搜索一般采用神經結構搜索方法設計新的基線網絡,通過尋找新的尺度均勻地縮放網絡維度。MobileNet V3便是通過NAS模塊級搜索和NetAdapt層級搜索自動設計出的網絡結構。

總結

  本文闡述了現有模型壓縮的一些方法,其中,模型裁剪和知識蒸餾使用頻率較高,百度使用SE-ResNeXt在FGVC 2020比賽中占據榜首,其中便使用了知識蒸餾的方式

  本篇僅是對模型壓縮的一個掃盲式的總結,具體的操作方式和各種tricks需要在具體的文獻和代碼中挖掘。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM