最近看了幾篇KD方法用于模型壓縮的文章,現總結如下:
- Knowledge Distillation 最先由 Hinton 提出的祥得,大意是說:小模型在分類的時候兔沃,光用訓練集里的 one-hot label 不好,因為這種標注把類別間的關系割裂開了级及。而如果讓小模型跟著大模型輸出的概率分布去學的話乒疏,就相當于給出了類別之間的相似性信息,提供了額外的監(jiān)督信號饮焦,因此學起來更容易怕吴。比如說識別手寫數字窍侧,同時標簽為 3 的圖片,可能有的比較像 8转绷,有的比較像2伟件,one-hot labels 區(qū)分不出來這個信息,但是一個 well-trained 大模型可以給出议经。因此斧账,修改一下損失函數,讓小模型在擬合訓練數據的 ground truth labels 的同時煞肾,也要擬合大模型輸出的概率分布咧织。這個方法叫做 KD Training (Knowledge Distillation Training)。
- 后來 Romero 又提出了 FitNet籍救,大意是說:直接讓小模型在輸出端模仿大模型习绢,這個對于小模型來說太難了,模型越深越難訓蝙昙,最后一層的監(jiān)督信號要傳到前面去還是挺難的闪萄。解決方案就是說,不如在中間加一些監(jiān)督信號奇颠。于是訓練的方法就是所謂的 hint training败去,把網絡中間的輸出也拿出來,讓大模型和小模型中間層的輸出也要盡量接近大刊,讓小模型去學習大模型做預測時的中間步驟。實際做的時候是用兩階段法:先用 hint training 去 pretrain 小模型前半部分的參數三椿,再用 KD Training 去訓練全體參數缺菌。
- Sergey在ICLR‘17上發(fā)表了一篇文章,他將NLP里面的Attention機制也引入到KD方法中搜锰。具體做法是student網絡不僅模仿teacher網絡softmax輸出伴郁,也模仿teacher網絡的feature map中的attention map蛋叼,attention map的獲取方法并不是唯一的焊傅,文中的做法是將網絡的feature map取絕對值。
- 圖森的王乃巖今年也出了兩篇用KD思想做網絡壓縮的文章狈涮,其中一篇和Sergey的引入attention的做法十分類似狐胎,只不過在論文中作者換了個名詞“Neuron Selectivity Transfer”,就是模仿teacher網絡中的神經元激活值比較大的區(qū)域歌馍,但是并沒有對feature map取絕對值握巢,而是直接用子網絡mimic母網絡的feature map;另一篇文章“DarkRank”的做法比較新穎松却,作者試圖將teacher網絡中一種特殊的知識遷移到student網絡中暴浦,文中叫“Cross Sample Similarities”溅话,意思是說如果有N個樣本,它們在student網絡中提取的特征之間的相似性大小要和這些樣本在teacher網絡中保持一致歌焦。
References:
https://www.zhihu.com/question/63942461