天天看點

hint-based learning快速了解

FITNETS: HINTS FOR THIN DEEP NETS

論文位址:https://arxiv.org/abs/1412.6550

這篇論文主要是研究如何在更深的學生網絡上取得更好的效果。之前提出的知識蒸餾,是用比較小的學生模型來模仿比較大的老師模型的知識、資訊、輸出,在這裡為了取得更好的表現,我們希望學生模型更大一點更深一點,更為了防止更深的網絡在模仿時出錯,我們不隻考慮老師模型的最終輸出,也考慮模仿中間層的輸出,來指導學生模型的訓練。

隻考慮單純的知識轉移的蒸餾過程,核心點是對softmax層的輸入添加了溫度參數。

學生網絡的輸出

P S τ = s o f t m a x ( a S τ ) P^{\tau}_S=softmax(\frac{a_S}{\tau}) PSτ​=softmax(τaS​​)

老師網絡的軟化輸出(軟标簽):

P S τ = s o f t m a x ( a S τ ) P^{\tau}_S=softmax(\frac{a_S}{\tau}) PSτ​=softmax(τaS​​)

最終的損失函數是由兩部分組成的,一個是學生輸出和硬标簽的差距,一個是學生輸出和軟标簽的差距。

L K D ( W s ) = H ( y t r u e , P s ) + λ H ( P T τ , P S τ ) L_{KD}(W_s)=H(y_{true},P_s)+\lambda H(P^{\tau}_T,P^{\tau}_S) LKD​(Ws​)=H(ytrue​,Ps​)+λH(PTτ​,PSτ​)

H H H在這裡是交叉熵損失, λ \lambda λ是平衡兩個損失的權重。

在面對比較深的學生模型時,引入了一個hint的概念。A hint is defined as the output of a teacher’s hidden layer responsible for guiding the student’s learning process。hint指的是用來指導學生模型學習過程的老師模型的中間層的輸出。在這裡要考慮到的一點是,老師模型和學生模型的結構不一樣,是以中間層的差距也會很大,比如說大小和通道數。是以為了讓老師模型的hint層和學生模型的guided層相比對,我們會在學生模型的guided層後面加一個回歸層,使得兩個輸出的大小之類的保持一緻。

最終的損失函數是:

L H T ( W G u i d e d , W r ) = 1 2 | u h ( x ; W H i n t ) − r ( v g ( x ; W G u i d e d ) ; W r ) | 2 L_{HT}(W_{Guided},W_r)=\frac{1}{2}|u_h(x;W_{Hint})-r(v_g(x;W_{Guided});W_r)|^2 LHT​(WGuided​,Wr​)=21​|uh​(x;WHint​)−r(vg​(x;WGuided​);Wr​)|2

在這裡 r r r表示的就是我們加上去的回歸層, W h i n t W_{hint} Whint​和 W G u i d e d W_{Guided} WGuided​分别是老師模型中的hint層和學生模型中的guided層的參數。 u h u_h uh​和 r r r都是非線性的,并且兩個的輸出需要是可比的(這也是添加回歸層的目的:可比)。

使用全連接配接層作為回歸層會需要太多的參數并且有更多的記憶體和計算損耗,是以可以使用卷積層。

在進行訓練時,hint learning的部分和knowledge distillation的部分是分開的。首先是對學生模型的中間層參數進行訓練,假設學生模型的初始參數是 W S W_S WS​,老師模型的初始參數是 W T W_T WT​,從開始到老師模型的hint層的參數為 W H i n t W_{Hint} WHint​,從開始到學生模型的guided層的參數為 W G u i d e d W_{Guided} WGuided​。學生模型的guided層後面的回歸層參數為 W r W_r Wr​。第一部分訓練目的是讓guided層學習hint層,我們最小化hint層和回歸層輸出的差距,對guided層以及之前的層的參數進行調整,這就是學習老師模型的中間層的資訊。

在第一部分訓練結束後,我們再在已經調整好的參數基礎上,進行整體的蒸餾。

hint-based learning快速了解

第一張圖是整體的比較,第二張圖代表着hint-learning,第三張圖就是傳統的知識蒸餾。圖中的 W G u i d e d ∗ W^*_{Guided} WGuided∗​指的是經過調整後的guided層以及之前層的參數,其餘的層的參數還是初始值,不需要再次進行更改。

前面的沒什麼難了解的,最後翻譯一下conclusion部分。

我們提出了一個新的可以将大而深的網絡壓縮成瘦而更深的網絡的方法,也就是引入一個中間層hint來指導學生模型訓練過程。我們能用這個方法來訓練參數比較小的特别深的學生模型,這種模型泛化更好并且運作起來也比老師模型快。我們的實驗表明用教師模型的中間層作為hint要比用分類結果作為hint效果好得多。我們在benchmark資料集上的結果表明啊能力不太強的深度網絡也能提取出比擁有它10倍參數的網絡能提取的更好的特征表達。我們的hint-based learning效果建議我們應該更努力的尋找新的訓練政策來充分體用深度網絡的能力。

繼續閱讀