轉載:https://www.cnblogs.com/monologuesmw/p/13234804.html
知識蒸餾的思想最早是由Hinton大神在15年提出的一個黑科技,Hinton在一些報告中將該技術稱之為Dark Knowledge,技術上一般叫做知識蒸餾(Knowledge Distillation),是模型加速中的一種重要的手段。
現狀
深度學習經過多年的發展,已經建立了多種能夠執行復雜任務的復雜模型,然而面臨的問題是,如何將龐大的模型部署在移動設備上,從而便於即時的使用推廣。當然,可以將模型部署到雲上,並可以在需要它的服務時調用它,但這需要可靠的互聯網連接,這無疑在部署中添加了一道屏障。因此,需要的是一個可以在移動設備上運行的模型。
當然,也可以訓練一個在移動設備有限資源上可以運行的小型網絡。但是這種方法有一個問題,小型模型無法提取出生成預測的復雜特征,在復雜的外界條件中,精度往往不能滿足需求。至少目前還沒有某種小型算法可以滿足實際的要求,即使yolov3 v4的tiny版,由於網絡層數較淺,在實際檢測中也會常常出現不穩定的現象。雖然小型模型的集成可以得到很好的結果,但使用整個模型集成進行預測是很麻煩的,而且可能會在計算上過於昂貴,不能允許部署到大量用戶。
在這種情況下,通常使用兩種技術手段包含:
- 知識蒸餾
- 模型壓縮
知識蒸餾
知識蒸餾是提高移動設備深度學習模型性能的一種簡單方法,被廣泛應用於模型加速。而與模型剪枝不同的是,該項技術並不是通過對原有模型進行某種更改,而是通過原有模型訓練一個小模型,使小模型的表現趨近於原有模型。
在這個過程中,通過訓練一個龐大而復雜的網絡或集成模型,之后,利用訓練好的模型從給定的數據中提取重要的特征 產生好的預測(可以接受的)。利用這個復雜的模型訓練一個小模型,使這個小模型將能夠產生比較好的結果,甚至能夠復制復雜網絡的結果。
核心思想
知識蒸餾通過知識遷移的方式,將訓練好的大模型作為teacher model,通過teacher model訓練小模型(Student model)。也就是說,損失函數的構成包含兩部分,其一,是熟知將真實標簽(hard label)與預測值之間的損失,其二,則是teacher model的輸出(soft label)與預測值之間的損失。通過這種方式,讓小模型的精度趨近於大模型的精度。
那為什么在hard label的基礎上還需要添加soft label呢?也就是說,損失函數在已經有了正確的hard label作指引的條件下,為什么還需要添加soft label的指引?
其實,hard label攜帶的信息量很低,它只能給予模型是或不是的指引。例如,在貓狗分類中,hard label只能告訴模型它是貓不是狗,或者是狗不是貓。而soft label中會傳授諸如不同類別之間的相似度的信息。例如,一輛轎車被誤分為卡車的可能性很小,但這個可能性要比誤分為一只貓的可能性高很多,形成的soft label更有可能是[0.7, 0.29, 0.01]的形式。這更加有利於模型區分相似物體。當然,如果要區分的物體都是比較容易區分的,即產生[0.98, 0.01, 0.01]這樣的soft label與hard label就幾乎一致了。
細節補充
通過上述描述,可以理解Teacher Model與Student Model之間建立關聯是通過Loss,Teacher Model提供一個Soft label q與Student Model產生的預測p建立一個Loss CE(p, q),Student Model的預測p與真實值y建立一個Loss CE(p, y),因此,最終損失函數可以組合寫成:
L = CE(p, y) + αCE(p, q)
其中,CE表示交叉損失熵(Cross Entropy)。
這里的q是teacher model的輸出,也是student model的學習對象,對應於下式的P。
下式的qt表示teacher model logit的輸出,然而,將qt代入softmax函數中,可能不太合適,出現下面對T討論的情況。我們希望P可以具有傳遞相似信息的功能,因此,在softmax函數中增添了溫度T參數。
對T的討論:
- 當T -> inf時, 所有的類別會獲得相同的概率,就是一個均勻分布;
- 當T ->0時,則最大值會接近於1,其他值會趨近於0,近似於one hot編碼(hard label);
- 當T ->1時,就是softmax公式本身。