蒸餾法第一節——從頭說起 Distilling the knowledge in a neural network

論文:G. Hinton, O. Vinyals, and J. Dean. Distilling the knowledge in a neural network. arXiv preprint arXiv:1503.02531, 2015.

 

        hinton大神2015年發表的蒸餾法,可以說掀起了一陣風潮啊~~本人很喜歡hinton大神的文章,當年SDAE看完也是這個感覺,simple is best!

       這個方法主要目的是解決這樣的問題,試想這樣幾個場景:1,爲了提高模型的效果,往往會在嘗試很多種算法模型,結果可能各個算法各有優劣,怎麼將這些模型有效的融合起來,發揮他們的優勢? 2,爲了追求效果好和模型的泛化能力,用了很深很大的神經網絡,結果在真實的工程應用中這個網絡太大了,速度太慢怎麼辦?3,以前項目有一個很好的模型,現在新來了一批數據集需要訓練一個新的模型,希望新學習的模型依然能繼承以前的優點,怎麼辦?

       MODEL COMPRESSION模型壓縮從一定程度上解決了一些這樣的問題,模型壓縮核心思想是用一個快速的緊湊的模型來近似一個慢的、大的、性能好的網絡(The main idea behind model compression is to use a fast and compact model to approximate the function learned by a slower, larger, but better performing model.“Model Compression”),後面大家提出了很多的方法來達到模型壓縮的問題。蒸餾法算是一種新的“壓縮”方法。

       設想現在已有一個訓練好的較大的網絡,我們怎麼去更好的學習這個網絡的“知識”?

       思想跟當年hard classification到soft classification很像,傳統基於神經網絡的分類任務是hard label,比如一張貓的照片,分類的標籤會給0或者1,這個信息量是很小的,那如果我們多告訴網絡一些信息,這張照片0.9的概率是貓,0.6的概率是老虎,0.1的概率是狗,這樣同樣的一張貓照片訓練樣本,信息量要多多了。蒸餾法學習的就是這樣的一個目標函數:概率! 我們在回想下一般情況下小網絡訓練效果不及大網絡的原因往往是大網絡(更深的網絡),有更好的泛化能力。(泛化能力是什麼意思呢?就是在已有知識學習後能有更強且準確的推理能力)現在設想有一個泛化能力差的小網絡,還有一個訓練的不錯泛化能力強的大網絡,我們把除訓練集以外的,大網絡擁有的“泛化知識”這部分告訴小網絡,是不是目標就達到了?            基於此, 有一個很巧妙的方法就是不用真實的0,1這種hard label,而用概率?概率的信息量豐富多了,比如剛纔的例子,還是一張貓的圖片,通過用蒸餾法去學習大網絡,我們不僅可以告訴小網絡這張圖是貓(因爲貓的概率最大0.9),而且這張照片也比較像老虎0.6,跟狗確實不大像0.1。基於此,相同的訓練集,小網絡就可以學習更多的大網絡的“泛化知識”,比直接用訓練集訓練小網絡效果要好得多。

       

        Distilling the knowledge in a neural network.論文的蒸餾法訓練學生網絡時考慮了兩方面信息。一是教師網絡的soften輸出

T作爲教師網絡,對應的softmax輸出概率爲:

某些情形,教師網絡是一個網絡時,aT表示的是輸出層的權重和(即softmax輸出,softmax(w*x));當教師網絡是多個時,對應多個神經網絡的輸出層的平均。

類似的,學生網絡輸出概率爲

所以我們的目標是希望學生網絡學習的這個概率和教師網絡的這個概率儘可能接近。

由於教師模型一般訓練的較好,所以PT非常接近於真實的標籤,所以我們加個大於1的鬆弛項,使得教師網絡的概率更有區分度,同樣的鬆弛項也加入到學生網絡中。

之後學生網絡訓練的目標函數就如下所示:

        其中前一項爲傳統的label的損失函數,學習的是數據集的0,1標籤,這一項也是原始最直接的目標,告訴網絡貓就是貓,狗就是狗;第二項爲從教師網絡學習的損失函數,學習教師網絡的“泛化知識”。

 

 

 

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