李宏毅機器學習課程筆記-13.2模型壓縮之知識蒸餾

知識蒸餾就是Knowledge Distillation。

Knowledge Distillation:https://arxiv.org/abs/1503.02531

Do Deep Nets Really Need to be Deep?:https://arxiv.org/abs/1312.6184

熟悉YOLO的讀者,可以根據這個倉庫感受一下剪枝和知識蒸餾:https://github.com/tanluren/yolov3-channel-and-layer-pruning

Student and Teacher

什麼是Knowledge Distillation?

我們可以讓一個較小的Student Net向較大的Teacher Net學習,使得Student Net的輸出儘可能接近Teacher Net的輸出。

普通的訓練方式爲僅在數據集上訓練Student Net,而Knowledge Distillation的思路是:即使Teacher Net的輸出並不一定是正確的,但Teacher Net可以提供一些數據集無法提供的信息,比如手寫數字圖片分類模型Teacher Net的輸出爲“1:0.7,7:0.2,9:0.1”,這不僅說明這張圖片像1,還可以說明1和7、9很相似

或者可以這麼理解:學生自己直接做題目太難了,讓學生學習下老師是怎麼想的可能會更好。

Ensemble

Knowledge Distillation有什麼用呢?

打Kaggle比賽時很多人的做法是ensemble(將多個model的結果進行平均)。Ensemble通常可以得到更好的精度,但現實中設備上不可能放這麼多個model,這時就可以利用Knowledge Distillation讓Student Net向Teacher Net學習,最終設備上只運行Student Net就可以。

Temperature

在分類任務中,網絡的最後一般有個softmax函數:\(y_i=\frac{e^{x_i}}{\sum_je^{x^j}}\),其中\(y_i\)是輸入屬於類別\(i\)的置信度。

在Knowledge Distillation中,我們需要對softmax函數進行調整:\(y_i=\frac{e^{\frac{x_i}{T}}}{\sum_je^{\frac{x^j}{T}}}\),其中\(T\)爲Temperature,一般是一個大於1的數,它的作用是使得Teacher Net輸出的屬於各個類別的置信度更加接近,如下圖所示。

img


Github(github.com):@chouxianyu

Github Pages(github.io):@臭鹹魚

知乎(zhihu.com):@臭鹹魚

博客園(cnblogs.com):@臭鹹魚

B站(bilibili.com):@絕版臭鹹魚

微信公衆號:@臭鹹魚

轉載請註明出處,歡迎討論和交流!


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