Knowledge Distillation

從模型壓縮的角度調查了有關蒸餾相關的進展。與視覺應用型論文不同模型壓縮的論文開源的比例並不多,相比較之下蒸餾相關工作算是開源比例大的。下面主要從是否開源或實現兩方面按照發表時間列出相關論文和實現。並在有源碼實現了論文中做了進一步相關方法的調查。
##一、知識蒸餾相關論文和進展survey:(開源或有第三方實現)

  • 2014-NIPS-Do Deep Nets Really Need to be Deep?

    • 論文連接:點我
    • 方法:文章採用一種模型壓縮(model compression)的方法模擬深度網絡訓練淺層網絡,新的淺層模型的準確率能夠達到和深度模型幾乎一樣的效果。(但直接訓練淺層網絡得到的準確率和深度網絡還是沒法比的)
    • 蒸餾類型:在softmax之前作特徵匹配,Hinton稱之爲logit匹配
    • 實現方式:
      • 1、訓練一個優秀的複雜的深度網絡
      • 2、用深度網絡監督尋訓練淺層網絡(通過softmax前的特徵作L2 loss監督訓練)
    • 復現性:當前我們使用的方法即爲該方法
    • 注意事項:
      • 1、採用訓練好的深度網絡和 unlabeled data 共同訓練淺層網絡。unlabeled的樣本最好不能只是將deep model的訓練集中的label去掉而得到的樣本,因爲deep model往往在這些樣本點上有overfitting;
      • 2、unlabel的樣本數需要比deep model的訓練集中的樣本數要多得多,這樣才能更可能的近似原來的這個deep model,unlabeled set 比 train set更大時會work best。
  • 2015-NIPS-Distilling the Knowledge in a Neural Network(Hinton系統詮釋蒸餾)

    • 論文鏈接:點我
    • 方法: 該方法與之前論文方法不同的是採用在softmax層內特徵匹配的策略。其本質上是使用softmax的輸出得分作爲監督,但爲了使得到的得分vector更soft,在softmax層加上了蒸餾溫度T,使蒸餾的性能顯著提升。
    • 蒸餾類型:在softmax層進行特徵匹配
    • 實現方式(分兩階段):
      • 原始模型訓練階段:
          1. 根據提出的目標問題,設計一個或多個複雜網絡(N1,N2,…,Nt)。
          1. 收集足夠的訓練數據,按照常規CNN模型訓練流程,並行的訓練1中的多個網絡得到。得到(M1,M2,…,Mt)
      • 淺層模型訓練階段:
          1. 根據(N1,N2,…,Nt)設計一個簡單網絡N0。
          1. 收集簡單模型訓練數據,此處的訓練數據可以是訓練原始網絡的有標籤數據,也可以是額外的無標籤數據。
          1. 將2中收集到的樣本輸入原始模型(M1,M2,…,Mt),修改原始模型softmax層中溫度參數T爲一個較大值如T=20。每一個樣本在每個原始模型可以得到其最終的分類概率向量,選取其中概率至最大即爲該模型對於當前樣本的判定結果。對於t個原始模型就可以t概率向量。然後對t概率向量求取均值作爲當前樣本最後的概率輸出向量,記爲soft_target,保存。 
          1. 標籤融合2中收集到的數據定義爲hard_target,有標籤數據的hard_target取值爲其標籤值1,無標籤數據hard_taret取值爲0。Target = ahard_target + bsoft_target(a+b=1)。Target最終作爲訓練數據的標籤去訓練精簡模型。參數a,b是用於控制標籤融合權重的,推薦經驗值爲(a=0.1 b=0.9)
          1. 設置精簡模型softmax層溫度參數與原始複雜模型產生Soft-target時所採用的溫度,按照常規模型訓練精簡網絡模型。
          1. 部署時將精簡模型中的softmax溫度參數重置爲1,即採用最原始的softmax
    • 復現性:無官方開源,下面使第三方實現:
    • 注意事項:訓練時將淺層網絡溫度與深層網絡一致,部署時將淺層網絡溫度置1.
  • 2015-ICLR-FitNets:HINTS FOR THIN DEEP NETS

    • 論文鏈接:點我
    • 方法:這篇論文的蒸餾方式與前兩篇有所不同。其一,從網絡結構上,該文目的是蒸餾一個更深但是複雜度比較小的網絡,其二,對於蒸餾更深的網絡,本文提出使用在中間層加入loss的方法,如此分成兩個loss來訓練,最後得到比複雜模型更好的結果。

      如上圖,之所以有Wr是因爲teacher network的層輸出與小網絡的往往是不一樣的,因此需要這樣一個mapping來匹配,並且這個mapping也是需要學習的。paper中提到說用多加一個conv層的方法比較節省參數(其實也比較符合邏輯),然後這個conv層不加padding,不stride。
    • 蒸餾類型:多loss,向更窄更深壓縮網絡
    • 實現方式:
      • 兩階段法:先用 hint training 去 pretrain 小模型前半部分的參數,再用 KD Training 去訓練全體參數。
      • (1)Teacher網絡的某一中間層的權值爲Wt=Whint,Student網絡的某一中間層的權值爲Ws=Wguided。使用一個映射函數Wr來使得Wguided的維度匹配Whint,得到Ws'。其中對於Wr的訓練使用MSEloss
      • (2)改造softmax的loss(即爲Hinton論文的方法): 
    • 復現性:
    • 注意事項:teacher和student網絡結構不類似的話,上述方法就失效了
  • 2016-AAAI-Face Model Compression by Distilling Knowledge from Neurons(湯曉歐組)

    • 論文鏈接:點我
    • 方法:本文將知識蒸餾研究到人臉識別任務中。監督訓練方式迴歸到logit匹配形式(softmax類別數原因難收斂),並提出神經元選擇策略,去除神經元噪聲,使特徵更精準。
    • 蒸餾類型:採用logit方式進行特徵監督匹配,神經元選擇是該論文的重頭戲。
    • 實現方式:
      • 1、logit匹配訓練
      • 2、神經元選擇(具體過程還需讀論文)
    • 復現性:
  • 2017-ICLR-Paying More Attention to Attention: Improving the Performance of Convolutional Neural Networks via Attention Transfer

    • 論文鏈接:點我
    • 方法:將注意力模型用於Teacher-Student蒸餾過程
    • 蒸餾類型:深度學習注意力機制 + 知識蒸餾(文中提到把teacher模型中loss對input的導數作爲知識傳遞給student模型,因爲loss對input的導數反映了網絡output的變化對於input的敏感程度,如果某個像素一個小的變化對於對於網絡輸出有一個大的影響,我們就可以認爲網絡"pay attention"那個像素)
    • 實現方式:需要具體讀論文
    • 復現性:
  • 2017-NIPS and AISTATS-Data-Free Knowledge Distillation For Deep Neural Networks

    • 論文鏈接:點我
    • 方法:通過重構元數據的方式進行知識蒸餾。應用場景是當訓練數據由於隱私等問題對於student模型不可用的時候,如何通過extra metadata的方式解決。
    • 蒸餾類型:元數據重構解決蒸餾數據問題
    • 實現方式:需要具體讀論文
    • 復現性:
  • 2018-AAAI-Rocket Launching: A Universal and Efficient Framework for Training Well-performing Light Net (阿里+清華合作)

    • 論文鏈接:點我
    • 論文解讀:點我
    • 方法:teacher和student共享部分網絡,同時一起訓練。讓teacher從頭至尾一直指導student,loss是加權網絡的cross entropy和兩個網絡的feature的regression。
    • 蒸餾類型:
    • 復現性:
    • 注意事項:teacher和student同時訓練會導致teacher的精度降低,雖然作者加入了gradient block來緩解student對teacher的影響,但是這樣一定程度還是會影響student提升的效果。
  • 2018-AAAI-DarkRank: Accelerating Deep Metric Learning via Cross Sample Similarities Transfer(圖森)

    • 論文鏈接:點我
    • 論文解讀:點我
    • 方法:該論文從一個新的視角對Teacher和Student網絡間的loss進行了設計,將不同樣本之間的相似性排序融入到監督訓練中,並融合了softmax、Verify loss、triplet loss共同訓練student。(該方法在小數據集下的行人再識別上做的實驗)
    • 實現方式:(如下圖) 
    • 復現性:

##二、知識蒸餾相關論文和進展survey:(未開源或無第三方實現)

  • 2017-ICLR and CVPR-Learning Loss for Knowledge Distillation with Conditional Adversarial Networks

    • 論文鏈接:點我
    • 方法:主要通過條件GAN和KD(知識蒸餾)的形式對監督loss進行協同學習,作者認爲直接使用L2loss太過武斷,一定程度上限制了student模型的自主學習空間。
    • 蒸餾類型:對損失函數進行改進(CAN + KD)
    • 實現方式:學生網絡是生成器,判別器是一個多層感知機網絡,生成器和判別器迭代優化,生成器的目標是生成讓判別器無法辨別的logits。某種程度上,這個工作也可以理解成對損失函數做了改進。
  • 2017-CVPR-Knowledge Projection for Effective Design of Thinner and Faster Deep Neural Networks

    • 論文鏈接:點我
    • 方法:類似於Fitnets形式採用多loss形式蒸餾student網絡
    • 蒸餾類型:同Fitnets屬於多loss
  • 2017-CVPR-Moonshine: Distilling with Cheap Convolutions

    • 論文鏈接:點我
    • 方法:將深度學習注意力機制融合到知識蒸餾中
  • 2017-CVPR-A Gift from Knowledge Distillation:Fast Optimization, Network Minimization and Transfer Learning(韓國科學院)

    • 論文鏈接:點我
    • 方法:該論文想法獨特,畫風清奇。之前的文章都是把大模型的輸出當成小模型要去擬合的目標,該論文一改此做法,他不擬合大模型的輸出,而是去擬合大模型與小模型層與層之間的關係,並認爲這纔是真正要轉移和蒸餾的知識。
    • 蒸餾類型:通過擬合Teacher網絡和Student網絡的層與層之間的關係進行蒸餾
    • 實現方式(二階段法):
      • 1、先根據大模型的 FSP 矩陣調整小模型參數,使得小模型層間關係也和大模型的層間關係類似;
      • 2、然後直接用原損失函數(如交叉熵)繼續精調小模型參數。 

##附:

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