[TOC]
1. 模型蒸餾
1. DistilBERT(2019.10.2)
知識蒸餾的基礎(chǔ)原理:
定義兩個網(wǎng)絡(luò)稼锅,teacher網(wǎng)絡(luò)和student網(wǎng)絡(luò),teacher網(wǎng)絡(luò)是預(yù)訓(xùn)練得到的大模型,student模型是想要學(xué)習(xí)和遷移得到的小模型。根據(jù)Hinton的文章鹦牛,一般的蒸餾模式是:把teacher網(wǎng)絡(luò)的輸出作為soft-label,student網(wǎng)絡(luò)學(xué)習(xí)的目標(biāo)是hard-label脊髓,交叉構(gòu)造三種loss來聯(lián)合訓(xùn)練,目的是時student網(wǎng)絡(luò)具備與teacher網(wǎng)絡(luò)同樣的推理目標(biāo)栅受。
模型簡述:
student的網(wǎng)絡(luò)解決與teacher的網(wǎng)絡(luò)結(jié)構(gòu)相同将硝,都是Bert。主要改動有:
- 對student網(wǎng)絡(luò)的構(gòu)造屏镊,就是從teacher網(wǎng)絡(luò)每兩層去掉一層依疼。因?yàn)椋髡哒{(diào)研發(fā)現(xiàn)而芥,隱層維度的變化比層數(shù)的變化對性能的影響較小律罢,所以只改變網(wǎng)絡(luò)層數(shù)。
- 因?yàn)閟tudent網(wǎng)絡(luò)的層數(shù)減少兩倍棍丐,所以去掉token type embedding和pooler误辑。
- 使用teacher網(wǎng)絡(luò)每兩層的一層的參數(shù)來初始化student網(wǎng)絡(luò)。
- 使用更大的batch歌逢,使用dynamic masking,去掉NSP任務(wù)巾钉。這幾點(diǎn)是從RoBERTa中取的經(jīng)。
三個loss:
-
, teacher模型得到的目標(biāo)概率分布是
,student模型得到的目標(biāo)概率分布是
秘案,然后計(jì)算兩個分布的KL散度:
砰苍。KL散度是衡量兩個分布的相關(guān)度,使用這個loss阱高,在訓(xùn)練的時候赚导,就可以把teacher網(wǎng)絡(luò)中豐富的先驗(yàn)知識帶進(jìn)訓(xùn)練過程。
這里使用softmax-temperature,使用來控制輸出概率的平滑度赤惊,在inference時吼旧,設(shè)置為1。
-
荐捻,就是bert中的masked語言模型的loss黍少。
-
,計(jì)算teacher網(wǎng)絡(luò)的hidden state和teacher網(wǎng)絡(luò)的hidden state的余弦相似度。
然后將三個loss加權(quán)想和:
實(shí)驗(yàn):
inference時間對比处面,大概提升了60%:
Ablation test結(jié)果厂置,可以看出Lce、Lcos魂角、參數(shù)初始化為結(jié)果影響較大:
2. TinyBert (2019.11.23)
主要貢獻(xiàn)
- 提出的蒸餾方法昵济,增加了對Transformer中attention層考量。
- 提出two-stage的蒸餾模式野揪,在pre-training和fine-tuning階段進(jìn)行相同的蒸餾访忿,驗(yàn)證效果更好。
- 實(shí)驗(yàn)證明結(jié)果很好斯稳。
模型簡述:
問題定義:
teacher模型(m)和student模型(n)的層通過一個函數(shù)映射海铆。student學(xué)teacher的過程就是通過最小化下面的目標(biāo)函數(shù):
各種loss的定義:
- Transformer-layer Distillation
- Embedding-layer Distillation
- Hidden-Layer Distillation
- Prediction-Layer Distillation
根據(jù)上面的定義,就可以最終得到student網(wǎng)絡(luò)的完整的loss:
實(shí)驗(yàn):
TinyBERT在經(jīng)驗(yàn)上是有效的挣惰,其性能能夠超過基線BERT的96%卧斟,容量小7.5倍,推理速度快9.4倍憎茂。同時珍语,TinyBERT要比基線DistillBERT也明顯更優(yōu),只有其28%的參數(shù)竖幔,31%的推理時間:
在 GLUE 基準(zhǔn)上實(shí)現(xiàn)了與 BERT 相當(dāng)(下降 3 個百分點(diǎn))的效果:
2. 模型結(jié)構(gòu)上的優(yōu)化
1.《Deformer:Decomposing Pre-trained Transformers for Faster Question Answering》
BERT模型做QA問題板乙,比如問答或者閱讀理解,需要將query和document拼接作為模型輸入拳氢,然后使用self-attention對輸入文本進(jìn)行多層的交互編碼募逞,之后使用線性分類器在document中尋找可能的答案序列。而通常document都非常的長馋评,所以就會有大量的計(jì)算凡辱。
這篇文章提出,將BERT模型做成兩段式的結(jié)構(gòu)栗恩,提前進(jìn)行一些運(yùn)算透乾。
有研究表明,在多層Transformer模型中磕秤,低層(low layers)的編碼主要關(guān)注一些局部的預(yù)言表層特征(比如詞性乳乌,語法等),到了高層(upper layer)才逐漸關(guān)注與下游任務(wù)相關(guān)的全局語義信息市咆。所以汉操,在low layers, ”文檔編碼能夠不依賴于問題“的假設(shè)是正確的。所以蒙兰,這篇文章的思路具體來說:在底層先對問題和文檔各自編碼磷瘤,在高層拼接問題和文檔的隱層表征再進(jìn)行交叉編碼芒篷。如下圖:
另外,作者實(shí)驗(yàn)發(fā)現(xiàn)這種結(jié)構(gòu)在SQuAD上精度損失比較大采缚,所以作者添加了兩個蒸餾損失項(xiàng)针炉。目的是最小化Defomer的高層表征和分類層logits與原始BERT模型的差異。
實(shí)驗(yàn):
在三個QA任務(wù)上扳抽,BERT和XLNet采用DeFormer分解后篡帕,取得了2.7-3.5倍的加速,節(jié)省內(nèi)存65.8-72.0%贸呢,效果損失只有0.6-1.8%镰烧。但還是很慢,達(dá)不到實(shí)時的效果楞陷。
2.《AlBert》
主要三個改變怔鳖,
- 使embedding層的維度(
)設(shè)置為遠(yuǎn)小于隱層的維度(
),然后通過矩陣分解,將
的矩陣分解為
,
固蛾,其中
,
為字典大小败砂,就是先將embedding的矩陣,映射到小維度的矩陣魏铅,然后再映射到大維度的隱層矩陣昌犹。這樣就可以使embedding層參數(shù)大大減小。
- 共享emcoder中的所有參數(shù)览芳。
- 將NSP任務(wù)改為SOP任務(wù)斜姥。
- 《》