神經網絡壓縮:Mimic(二)Distilling the Knowledge in a Neural Network

轉載請註明出處:西土城的搬磚日常

原文:arxiv

出版源:《Computer Science》, 2015, 14(7):38-39

問題摘要

在幾乎所有的機器學習算法當中,我們都可以通過對同一數據集進行多次學習得到數個不同的模型,並將各模型的預測結果作以加權作爲最終輸出這一簡單的方式來提高任務性能。然而顯然這一方法在計算代價上經常過於昂貴。而在這篇文獻當中作者提出了一種所謂的“蒸餾”法,將大規模的訓練模型中的細粒度知識遷移至小規模模型的訓練當中,使其學習的速度效率提高了很多,並且在小粒度的任務當中對於容易引起困惑的實例的分類效果得到了加強。

關鍵方法介紹:

在傳統的機器學習任務當中,我們在訓練模型和將模型配置到用戶端當中往往使用相似的模型,然而實際上這兩種場景是具有很大的區別的。而作者提出,我們可以訓練這種更爲普適的複雜模型,並且通過複雜模型的知識遷移,在小規模的specialized任務上大規模地減少訓練代價地得到高性能模型。簡言之,將整體訓練的知識遷移到專門的小模型之中。

在具有大量類別標籤的訓練任務中,一個複雜度很高的大模型地做法是爲這些大量的標籤分配概率分佈。然而這種處理方式存在一個負作用:與正確標籤相比,模型爲所有的誤標籤都分配了很小的概率;然而實際上對於不同的錯誤標籤,其被分配的概率仍然可能存在數個量級的懸殊差距。作者舉了一個例子:在識別一輛寶馬汽車的圖片時,分類器將該圖片識別爲垃圾車的概率是很小的,然而這種概率比起將其識別爲胡蘿蔔的可能是會大出很多。然而由於在宏觀上由於這些概率都很小,這一部分的知識很容易在訓練過程中淹沒。另一方面,複雜的訓練模型的訓練過程中,所有的參數都經過了很強的正則化,通過這樣的“蒸餾”方法,小模型的訓練會模仿大模型的訓練方式調整參數,效果要比從頭開始訓練的效果要好得多。

爲了實現上述的知識遷移,作者提出了在訓練小模型的時候,將訓練目標由傳統的ground truth的標籤更新爲所謂的soft target。soft target在訓練過程中可以提供更大的信息熵,將已訓練模型地知識更好地傳遞給新模型;並且由於在此目標之下不同訓練實例之間的梯度方差更小,小模型學習所需要的訓練數據將會大量減少,並且可以使用更高的學習率,模型的迭代速度將會顯著加快。

本文中所提出的上述soft target實際上就是已經訓練好的複雜模型的softmax層的輸出概率,而其中所提出的“蒸餾”方法在softmax層中引入了一個”溫度”參數T:

通過上述溫度參數的調整,softmax層的映射曲線更加平緩,因而實例的概率映射將更爲集中,便使得目標更加地"soft"。並且指出,當transfer set中的標籤可得時,將soft target和實際標籤的兩個目標共同使用作爲目標函數將使得其性能更加提高。在訓練過程中,作者將遷移樣本集中樣例輸入原複雜模型並通過上述蒸餾softmax得到soft target,並將其作爲目標,並在迭代過程中更新溫度,訓練出細粒度的模型。通過上述溫度參數的調整,softmax層的映射曲線更加平緩,因而實例的概率映射將更爲集中,便使得目標更加地”soft”。並且指出,當transfer set中的標籤可得時,將soft target和實際標籤的兩個目標共同使用作爲目標函數將使得其性能更加提高。在訓練過程中,作者將遷移樣本集中樣例輸入原複雜模型並通過上述蒸餾softmax得到soft target,並將其作爲目標,並在迭代過程中更新溫度,訓練出細粒度的模型。

在該論文之前,有研究提出了一種基於匹配softmax層之前的輸出層的方法進行知識遷移。而作者論證了這種logit匹配是上述蒸餾法的變異:

上述是基於soft target的交叉熵代價函數對於某一維度logit的梯度,當溫度較高時,對上式可以近似得到:

在T相對於logit數量較大的時候(T越大,分類的概率分佈越“軟”),可以進一步簡化爲:

在該情形下,目標函數就變成了優化zi和vi之間的平方誤差,這與上述介紹的方法是一致的。

實驗:

作者分別在MNIST數據集和ASR數據集上測試了上述方法。在MNIST數據集中,作者在大規模地減少網絡規模並且沒有做任何正則處理進行訓練時的情況下依然得到了很可觀的分類效果。而作者嘗試在訓練小網絡時沒有輸入任何含有3的輸入,而模型在訓練後依然能分類出相當數量的3的樣本。而當訓練集只取了7和8兩種輸入時,通過調整偏置,錯誤率依然控制在13.2%。而如下表所示,在語音識別當中使用蒸餾法的效果與同時訓練十個分類模型的效果相當。

同時,作者還在JFT數據集上測試了在規模巨大的數據樣本上訓練的generalized模型上通過蒸餾法訓練specialized的小模型地情況。通過分佈式計算的方式,這些細粒度小樣本的計算時間從數週迅速地縮短爲幾天,並且在粒度更細的任務中對於難以分類的樣本產生了更好地效果。在這一部分的配置在原文中有很多細節,如有興趣可以參考原文。下圖給出了蒸餾法對於細粒度任務的性能提升。同時,作者還在JFT數據集上測試了在規模巨大的數據樣本上訓練的generalized模型上通過蒸餾法訓練specialized的小模型地情況。通過分佈式計算的方式,這些細粒度小樣本的計算時間從數週迅速地縮短爲幾天,並且在粒度更細的任務中對於難以分類的樣本產生了更好地效果。在這一部分的配置在原文中有很多細節,如有興趣可以參考原文。下圖給出了蒸餾法對於細粒度任務的性能提升。

簡評:

這篇文章的出發點雖然頗爲工程,旨在通過這種方式提高深度學習模型在不同具體的用戶應用配置和部署的速度和效果。然而最值得參考的思想還是提出了一種將已有知識遷移到新任務中的方式。儘管在文章當中使用的源分佈域和目標域來源於同一數據分佈,但是其提出的知識遷移和模型正則化和抗過擬合能力的遷移是在Source Domain和Target Domain不同的情況下的遷移方法也有借鑑作用。

Reference

http://blog.csdn.net/zhongshaoyy/article/details/53582048
http://luofanghao.github.io/2016/07/20/%E8%AE%BA%E6%96%87%E7%AC%94%E8%AE%B0%20%E3%80%8ADistilling%20the%20Knowledge%20in%20a%20Neural%20Network%E3%80%8B/
https://zhuanlan.zhihu.com/p/24894102

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