摘要:預訓練語言模型如BERT等已經極大地提高了多項自然處理任務的性能,然而預訓練語言模型通常具需要很大計算資源,所以其很難在有限的資源設備上運行。為了加速推理、減小模型的尺寸而同時保留精度,首先提出了一個新穎的遷移蒸餾方法,它是一種基於遷移方法的知識蒸餾思路。利用整個新穎的KD方法,大量的知識編碼在一個大的“老師”BERT可以很好地被遷移到一個小的“學生”TinyBERT模型那里。我們引入一個新的兩階段學習TinyBERT學習框架,在預訓練階段和任務明確任務學習階段都采用遷移蒸餾方式,整個框架可以保證TinyBERT能夠捕捉到BERT中通用域和明確域的知識。
TinyBERT在經驗上是有效的,其性能能夠超過基線BERT的96%,容量小7.5倍,推理速度快9.4倍。同時,TinyBERT要比基線DistillBERT也明顯更優,只有其28%的參數,31%的推理時間。
構建TinyBERT,首先提出新的遷移蒸餾方法能夠從BERT中蒸餾知識嵌入,並構建多個損失函數:1)embedding層輸出;2)隱含層狀態和注意力矩陣;3)預測層的logits輸出
標准的transformer層包括多頭注意力(MHA)和全連接前饋網絡層(FFN),整體框架如下圖:
最小化目標函數,那么學生模型便可以從老師模型那里獲得知識:
Transformer-layer 蒸餾:
包括基於注意的蒸餾和基於隱含狀態的蒸餾。基於注意力的蒸餾受啟發於:通過BERT中的注意力權重可以獲取豐富的語言學知識,這些語言學知識含有語法和共指信息,這些信息都是自然語言理解的基礎,所以,學生模型應當學習擬合老師模型中的多頭注意力權重,通過如下目標函數:
在此,不僅蒸餾注意力矩陣的參數,而且還有蒸餾Transformer輸出層的參數,如下目標函數:
嵌入層蒸餾:
預測層蒸餾,同傳統蒸餾方式保持一致:
總損失:
模型訓練:
l 通用模式蒸餾
使用原始BERT預訓練方式,通過以上的蒸餾步驟獲取通用TinyBERT。經此步驟后,由於隱含層、嵌入層以及模型層數都減少了,通用TinyBERT效果要比BERT的表現差的多
l 確定任務蒸餾
需要一個增強明確任務的數據集,也就是使用數據做模型增強,數據增強是一個能夠擴展特定任務中訓練集的方法。通過學習更多任務相關的樣本,學生模型的泛化能力可以進一步提升。研究者在數據增強階段結合了 BERT 和 GloVe 的方法,進行詞級別的替換,以此來增強數據
這兩種策略是互補的:通用模式知識蒸餾能夠為確定任務蒸餾提供一個很好的初始化,而明確任務蒸餾可以聚焦學習特定任務知識。
實證研究結果表明,TinyBERT 是有效的,在 GLUE 基准上實現了與 BERT 相當(下降 3 個百分點)的效果,並且模型大小僅為 BERT 的 13.3%(BERT 是 TinyBERT 的 7.5 倍),推理速度是 BERT 的 9.4 倍。此外,TinyBERT 還顯著優於當前的 SOTA 基准方法(BERT-PKD),但參數僅為為后者的 28%,推理時間僅為后者的 31%左右
兩段式蒸餾方式:預訓練(知識蒸餾)+微調(知識蒸餾)
本質:在pre-training蒸餾一個general TinyBERT,然后再在general TinyBERT的基礎上利用task-bert上再蒸餾出fine-tuned TinyBERT
作者表示,之后他們會測試 TinyBERT 在中文任務上的表現、嘗試使用哪吒或 ALBERT 作為教師模型進行蒸餾,以及公開性能更好的模型等