知識蒸餾是一種在繁瑣的模型中提煉知識並將其壓縮為單個模型的方法,以便可以將其部署到實際應用中。AI的教父Geoffrey Hinton和他在Google的兩個同事Oriol Vinyals和Jeff Dean於2015年引入了知識蒸餾。
知識蒸餾是指將笨拙的模型(教師)的學習行為轉移到較小的模型(學生),其中,教師產生的輸出被用作訓練學生的“軟目標”。通過應用此方法,作者發現他們在MNIST數據集上取得了令人驚訝的結果,並表明通過將模型集成中的知識提取到單個模型中可以獲得顯着的改進。
知識蒸餾用於圖像分類
Hinton和他的兩位合著者在論文中首先介紹了他們對圖像分類任務的知識蒸餾:在神經網絡中提煉知識。
如本文所述,知識蒸餾的最簡單形式是在具有軟目標分布的傳遞集上訓練蒸餾模型。到目前為止,我們應該知道有兩個目標用於訓練學生模型。一個是正確的標簽(硬目標),另一個是從教師網絡生成的軟標簽(軟目標)。
因此,目標函數是兩個不同目標函數的加權平均值。 第一個目標函數是學生預測和軟目標之間的交叉熵損失,第二個目標函數是學生輸出和正確標簽之間的交叉熵損失。 作者還提到,最好的結果通常是通過在第二目標函數上使用較低的權重來獲得的。
實驗結果如下所示
知識蒸餾用於目標檢測
Guobin Chen和他的合著者在NeurIPS 2017中發表了他們的知識蒸餾與提示學習相結合的對象檢測研究,該論文通過知識蒸餾學習有效的對象檢測模型。
在他們的方法中,他們還使用提示,該提示是從教師的中間層獲得的特征圖,用於指導學生盡可能地了解教師的行為。 此外,為了實現最佳的蒸餾知識,必須有一個適應層,該適應層將在后面討論。 Faster-RCNN是本文實驗中使用的目標檢測網絡。他們的學習方案如下圖所示:
目標函數如下:
其中RCN和RPN分別代表回歸分類網絡和區域提議網絡;N和M分別是RCN和RPN的批量大小;L_RCN,L_RPN和L_Hint分別是RCN,RPN和提示的損失;λ(通常為1)和γ(通常設置為0.5)是用於控制最終損耗的超參數。
Hint learning
Adriana Romero在《FitNets: Hints for Thin Deep Nets》一文中證明,通過利用教師網絡的中間表示作為提示來幫助學生進行訓練,可以提高學生網絡的性能。從這個意義上講,提示特征Z(從教師的中間層獲得的特征圖)和引導特征V(學生的中間層的特征圖)之間的損失是使用L1或L2距離計算的。
下圖顯示了從在WAYMO數據集上訓練的預訓練YOLOv4模型中提取的特征圖,這是我的與知識蒸餾進行目標檢測有關的項目之一。 在這些示例中,輸入圖像的大小調整為800x800。
知識蒸餾和提示學習
Hint learning的使用要求提示功能和引導功能應具有相同的形狀(高度x寬度x通道)。同樣,提示特征和引導特征將永遠不會在相似的特征空間中,因此,使用自適應層(通常是1x1卷積層)來幫助改善知識從教師到學生的轉移。
下圖描述了我在目標檢測項目中正在研究的學習方案,其中,我正在使用一個具有三個檢測級別的小型網絡,從預先訓練的YOLOv4中提取知識。
Guobin Chen在將知識蒸餾與Hint learning相結合進行目標檢測時顯示出優異的結果。
Conclusion
在這篇文章中,我簡要介紹了知識蒸餾和Hint learning。知識蒸餾被認為是一種將繁瑣的模型集成知識轉換成較小的蒸餾模型的有效方法。Hint learning和知識蒸餾的結合是提高神經網絡性能的一種非常強大的方案。
原文鏈接:
https://leantran.medium.com/a-gentle-introduction-to-knowledge-distillation-6ba069656420
本文來源於公眾號CV技術指南的論文分享系列,更多內容請掃描文末二維碼關注公眾號。
最近把公眾號(CV技術指南)所有的技術總結打包成了一個pdf,在公眾號中回復關鍵字“技術總結”可獲取。