微調預訓練模型的新姿勢——自集成和自蒸餾


轉載來源:https://zhuanlan.zhihu.com/p/133804801

論文:Improving BERT Fine-Tuning via Self-Ensemble and Self-Distillation
鏈接:https://arxiv.org/abs/2002.10345
作者:Yige Xu, Xipeng Qiu, Ligao Zhou, Xuanjing Huang

本文提出了一種自集成和自蒸餾的fine-tuning方法,在不引入外部資源和不顯著增加訓練時間的前提下,可以進一步增強fine-tuning的效果。
alt
自蒸餾的前世今生——what、why、how?

1、什麼是自蒸餾?

知識蒸餾(Knowledge Distillation)指的是將預訓練好的教師模型(Teacher Model)的知識通過蒸餾的方式遷移到學生模型(Student Model)。自蒸餾(Self-Distillation)則指的是自己蒸餾到自己,Teacher Model就是Student Model的集成版本,稱爲自集成(Self-Ensemble)。集成模型在是刷榜利器,因此我們希望在訓練過程中不同time step的模型也可以集成。爲了不增加訓練開銷,我們選擇一種參數平均的方式來進行自集成。

與同期的工作FastBERT的自蒸餾(高層蒸餾到底層)不同,本文的自蒸餾指的是過去time step蒸餾到當前time step。在Fine-tune過程中,目標函數除了有來自標籤的監督信號以外,還有來自過去time step的監督信號。本文的自蒸餾是爲了進一步提高準確率而不是模型壓縮。

2、爲什麼要自蒸餾?

I. 在一般的Fine-tune流程當中,我們通常只關注某一個epoch結束之後的模型參數,而不關心在Fine-tune過程中某個time step的參數。那麼Fine-tune的中間過程是否有什麼值得我們挖掘的信息呢?

II. 在一般的訓練過程當中,我們通常將數據集劃分成一個個mini-batch,依次通過模型進行訓練。如果某一個mini-batch的數據質量不過關,可能會將模型參數帶歪,因此是否可以尋找一種方式來減緩“帶歪”的趨勢呢?

III.好的teacher可以教出更好的學生,而好的學生可以進一步集成爲更好的教師,通過迭代可以進行自我增強。

3、如何進行自蒸餾?

在本文中,我們提出了兩種自蒸餾的方式:Self-Distillation-Averaged(SDA)和Self-Distillation-Voted(SDV)。在SDA中,我們首先計算出過去K個time step參數的平均值作爲Teacher Model。在SDV中,我們將過去K個time step的參數視爲K個Teacher Model。

SDA的目標函數計算方式如下:
£θ(x,y)=CE(BERT(x,θ),y)+λMSE(BERT(x,θ),BERT(x,θˉ)) \pounds _{\theta }(x,y)=CE(BERT(x,\theta ),y)+\lambda MSE(BERT(x,\theta ),BERT(x,\bar{\theta}))
其中θˉ=1Kk=1Kθtk\bar{\theta} = \frac{1}{K}\sum_{k=1}^{K}\theta_{t-k}
SDV的目標函數計算方式如下:
£θ(x,y)=CE(BERT(x,θ),y)+λMSE(BERT(x,θ),1Kk=1KBERT(x,θtk)) \pounds _{\theta }(x,y)=CE(BERT(x,\theta ),y)+\lambda MSE(BERT(x,\theta ),\frac{1}{K}\sum_{k=1}^{K}BERT(x,\theta_{t-k}))

4、通過自蒸餾我們可以得到什麼?

更穩定的訓練過程

我們在SNLI數據集當中隨機抽取了1500條訓練數據組成一個迷你訓練集。不改變模型參數初始化,只改變數據訓練順序。通過在這個迷你訓練集上的實驗,我們發現SDA和SDV加持下的訓練更爲穩定,準確率的均值更高、方差更低。

alt

更高的準確率

在SDA和SDV加持下,可以有效提升在下游任務Fine-tune BERT的性能。
alt

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