通用數(shù)據(jù)集上蒸餾,和特定數(shù)據(jù)集上蒸餾,并且在特定數(shù)據(jù)集上做數(shù)據(jù)增加效果會更好
TinyBERT中蒸餾的整體過程:首先進行通用蒸餾,然后用數(shù)據(jù)增強后的數(shù)據(jù),在特定任務(wù)上進行蒸餾,本文主要進行了第二階段的蒸餾,模型是利用第一階段得到的通用小模型tinybert-6l-768d-v2進行初始化。
知識的蒸餾通常是通過讓學(xué)生模型學(xué)習(xí)相關(guān)的蒸餾相損失函數(shù)實現(xiàn),在本實驗中,蒸餾的學(xué)習(xí)目標由兩個部分組成,分別是中間層的蒸餾損失和預(yù)測層的蒸餾損失。其中,中間層的蒸餾包括對Embedding層的蒸餾、對每個Transformer layer輸出的蒸餾、以及對每個Transformer中attention矩陣(softmax之前的結(jié)果)的蒸餾,三者均采用的是均方誤差損失函數(shù)。而預(yù)測層蒸餾的學(xué)習(xí)目標則是學(xué)生模型輸出的logits和教師模型輸出的logits的交叉熵損失。
蒸餾層的映射由于教師模型是12層,學(xué)生模型的層數(shù)少于教師模型的層數(shù),因此需要選擇一種layer mapping的方式。論文中采用了一種固定的映射方式,當(dāng)學(xué)生模型的層數(shù)為教師模型的1/2時,學(xué)生第i層的attention矩陣,需要學(xué)習(xí)教師的第2i+1層的attention矩陣,Transformer layer輸出同理。