看這個圖,就知道現在知識蒸餾的大致做法了。差不多就是在做模型裁剪,有時候我也覺得奇怪,按理說老師教學生不應該青出於藍而勝於藍嗎?從這里看,student模型除了性能有優勢,精確率是沒有優勢的。
萬字綜述 | 一文讀懂知識蒸餾
知識蒸餾綜述
本文梳理了用於簡單分類任務的各種知識蒸餾(KD)策略,並實現了一系列經典的知識蒸餾技術。
- 知識蒸餾論文綜述: Knowledge Distillation: A Survey
- 知識蒸餾論文分類: https://github.com/FLHonker/Awesome-Knowledge-Distillation
摘要
近年來,深度神經網絡在工業界和學術界都取得了成功,尤其是在計算機視覺任務方面。深度學習的巨大成功主要歸因於其可擴展性以編碼大規模數據並操縱數十億個模型參數。但是,將這些繁瑣的深度模型部署在資源有限的設備(例如,移動電話和嵌入式設備)上是一個挑戰,這不僅是因為計算復雜性高,而且還有龐大的存儲需求。為此,已經開發了多種模型壓縮和加速技術。作為模型壓縮和加速的代表類型,知識蒸餾有效地從大型教師模型中學習小型學生模型。它已迅速受到業界的關注。本文從知識類別,訓練框架,師生架構,蒸餾算法,性能比較和應用的角度對知識蒸餾進行了全面的調查。此外,簡要概述了知識蒸餾中的挑戰,並討論和轉發了對未來研究的評論。
知識蒸餾簡介
知識蒸餾,已經受到業界越來越多的關注。大型深度模型在實踐中往往會獲得良好的性能,因為當考慮新數據時,過度參數化會提高泛化性能。在知識蒸餾中,小模型(學生模型)通常是由一個大模型(教師模型)監督,算法的關鍵問題是如何從老師模型轉換的知識傳授給學生模型。一個知識蒸餾系統由三個主要部分組成:知識,蒸餾算法,和師生架構。
知識蒸餾框架
用於模型壓縮的知識蒸餾類似於人類學習的方式。受此啟發,最近的知識蒸餾方法已擴展到師生學習,相互學習,輔助教學,終身學習和自學。知識蒸餾的大多數擴展都集中在壓縮深度神經網絡上。由此產生的輕量級學生網絡可以輕松部署在視覺識別,語音識別和自然語言處理(NLP)等應用程序中。此外,知識蒸餾中的知識從一種模型到另一種模型的轉移可以擴展到其他任務,例如對抗攻擊,數據增強,數據隱私和安全性。通過知識蒸餾的動機進行模型壓縮,知識轉移的思想已被進一步用於壓縮訓練數據,即數據集蒸餾,這將知識從大型數據集轉移到小型數據集以減輕深度模型的訓練負擔。
早期知識蒸餾框架通常包含一個或多個大型的預訓練教師模型和小型的學生模型。教師模型通常比學生模型大得多。主要思想是在教師模型的指導下訓練高效的學生模型以獲得相當的准確性。來自教師模型的監督信號(通常稱為教師模型學到的“知識”)可以幫助學生模型模仿教師模型的行為。
在典型的圖像分類任務中,logit(例如深層神經網絡中最后一層的輸出)被用作教師模型中知識的載體,而訓練數據樣本未明確提供該模型。例如,貓的圖像被錯誤地歸類為狗的可能性非常低,但是這種錯誤的可能性仍然比將貓誤認為汽車的可能性高很多倍。另一個示例是,手寫數字2的圖像與數字3相比,與數字7更相似。這種由教師模型學習的知識也稱為暗知識(“dark knowledge”)。
早期的知識蒸餾中轉移 dark knowledge 的方法如下。給定對數向量
z作為深度模型的最后一個全連接層的輸出,則
zi是第 i 類的對數,則輸入屬於第 i 類的概率
pi可以為 由softmax 函數估算:
pi=exp(zi)∑jexp(zj)因此,通過教師模型獲得的軟目標的預測包含暗知識,並且可以用作監督者,以將知識從教師模型轉移到學生模型。同樣,one-hot 標簽也稱為硬目標。關於軟目標和硬目標的直觀示例如圖3所示。此外,引入溫度因子T來控制每個軟目標的重要性:
pi=exp(zi/T)∑jexp(zj/T)較高的溫度會在各個類別上產生較弱的概率分布。具體來說,當
T→∞時,所有類別都具有相同的概率。當
T→0時,軟目標變為 one-hot 標記,即硬目標。教師模型提供的軟目標(distillation loss)和ground-truth label提供的硬目標(student loss)對於提高學生模型的績效都非常重要。
定義蒸餾損失以匹配教師模型和學生模型之間的 logits ,即:
LD(p(zt,T),p(zs,T))=∑i−pi(zti,T)log(pi(zsi,T))其中
zt和
zs分別是教師和學生模型的logits。教師模型的logits通過交叉熵梯度與學生模型的 logits 匹配, 然后可以將相對於 logit
zsi的梯度評估為:
∂LD(p(zt,T),p(zs,T))∂zsi=pi(zsi,T)−pi(zti,T)T=1T(exp(zsi/T)∑jexp(zsj
