引言
本文是DistilBERT1的閱讀筆記,
核心思想
DistilBERT是一個更小更快的BERT模型,類似ALBERT,也是用來給BERT瘦身的,
DistilBERT應用了基于三重損失(Triplet Loss)的知識蒸餾(knowledge distillation)方法,相比BERT模型,DistilBERT的引數量壓縮至原來的40%,同時帶來60%的推理速度提升,并且在多個下游任務上達到BERT模型效果的97%,
并且該模型可以放到像手機📲(on-device)這類設備上運行,具備的好處就是更好的隱私保護,一些隱私資料可以不用上傳到服務器,直接在手機端針對這些資料就可以為人們帶來個性化的服務,
模型剖析
DistilBERT的名字中Distil就是蒸餾的意思,我們先來看下什么是蒸餾,
蒸餾

蒸餾的解釋是加熱液體汽化,再使蒸氣液化,從而除去其中的雜質,
而這里的知識蒸餾是指將已經訓練好的模型包含的知識(Knowledge),蒸餾(Distill)提取到另一個模型里面去,
通常前者是一個較大的模型,后者是一個較小的模型,
從另外一個角度思考的話,我們讓小模型來學習大模型,因此,我們把大模型當成老師(Teacher),小模型當成學生(Student)2,
蒸餾的目標是讓學生模型學習到老師模型的泛化能力,而不是學習擬合訓練資料,理論上得到的結果會比單純擬合訓練資料要好,
訓練損失
為了將教師模型的知識傳輸到學生模型,DistilBERT采用了三重損失3:有監督MLM損失、蒸餾MLM損失和詞向量余弦損失,如下所示:
L
=
L
s
?
m
l
m
+
L
d
?
m
l
m
+
L
c
o
s
\mathcal{L}=\mathcal{L}^{s-mlm} + \mathcal{L}^{d-mlm}+\mathcal{L}^{cos}
L=Ls?mlm+Ld?mlm+Lcos
有監督MLM損失 利用掩碼語言模型訓練得到的損失,即通過輸入帶有掩碼的句子,得到每個掩碼位置在詞表空間上的概率分布,并利用交叉熵損失函式學習,有監督MLM損失的計算方法為:
L
s
?
m
l
m
=
?
∑
i
y
i
log
?
(
s
i
)
\mathcal{L}^{s-mlm}= -\sum_i y_i \log (s_i)
Ls?mlm=?i∑?yi?log(si?)
其中,
y
i
y_i
yi?表示第
i
i
i個類別的標簽;
s
i
s_i
si?表示學生模型對該類別的輸出概率,
蒸餾MLM損失 利用教師模型的概率作為指導信號,與學生模型的概率計算交叉熵損失進行學習,由于教師模型是已經訓練過的預訓練語言模型,其輸出的概率分布相比學生模型更加準確,能夠起到一定的監督訓練目的,因此,在預訓練語言模型的知識蒸餾中,通常將有監督MLM稱作硬標簽(Hard Label)訓練方法,將蒸餾MLM稱作軟標簽(Soft Label)訓練方法,硬標簽對應真實的MLM訓練標簽,而軟標簽是教師模型輸出的概率,蒸餾MLM損失的計算方法為:
L
d
?
m
l
m
=
?
∑
i
t
i
log
?
(
s
i
)
\mathcal{L}^{d-mlm} = -\sum_i t_i \log(s_i)
Ld?mlm=?i∑?ti?log(si?)
其中,
t
i
t_i
ti?表示教師模型對第
i
i
i個類別的輸出概率;
s
i
s_i
si?表示學生模型對該類別的輸出概率,對比上面兩個式子可以很容易看出有監督MLM損失和蒸餾MLM損失之間的區別,需要注意的是,當計算概率
t
i
t_i
ti?和
s
i
s_i
si?時,DistilBERT采用了帶有溫度系數的Softmax函式:
P
i
=
exp
?
(
z
i
/
T
)
∑
j
exp
?
(
z
j
/
T
)
P_i = \frac{\exp(z_i/T)}{\sum_j \exp(z_j/T)}
Pi?=∑j?exp(zj?/T)exp(zi?/T)?
其中,
P
i
P_i
Pi?表示帶有溫度的概率值,
t
i
t_i
ti?和
s
i
s_i
si?均使用該方法計算;
z
i
z_i
zi?和
z
j
z_j
zj?表示為激活的數值;
T
T
T表示蒸餾里面的溫度系數,用于控制輸出概率的平滑程度,在訓練階段,教師模型和學生模型設定同樣的溫度
T
T
T,此時一般將溫度系數設為
T
=
8
T=8
T=8,在推理階段,將溫度系數設成
T
=
1
T=1
T=1,還原標準的Softmax函式,
詞向量余弦損失 詞向量余弦損失用來對齊教師模型和學生模型的隱藏狀態向量的方向,從隱藏狀態維度拉近教師模型和學生模型的距離,如下:
L
c
o
s
=
cos
?
(
h
t
,
h
s
)
\mathcal{L}^{cos} = \cos(h^t,h^s)
Lcos=cos(ht,hs)
其中,
h
t
h^t
ht和
h
s
h^s
hs分別表示教師模型和學生模型最后一層的隱藏狀態輸出,
DistilBERT:一個蒸餾版本的BERT
學生模型結構 學生模型(DistilBERT)的基本結構是一個六層的BERT模型,同時去掉了標記型別嵌入和池化模塊(Pooler),線性層和層歸一化層已經被高度優化且證明有效,因此作者不改動,最后一層的隱藏向量大小,作者發現減少該值并不太影響模型效果,層數能影響模型效果和推理速度,因此作者注重于此引數優化,
學生模型初始化 教師模型直接使用了原版的BERT-base模型,由于教師模型和學生模型的前六層結構基本相同,為了最大化復用教師模型中的知識,學生模型使用了教師模型的前六層進行初始化,
蒸餾 DistilBERT 是在非常大的批次上使用動態掩碼利用梯度累積(每批次最多 4K 個樣本)進行蒸餾的,沒有下一句預測目標,
評估
GLUE : DistilBERT的引數量壓縮至原來的40%,并且在多個下游任務上達到BERT模型效果的97%,甚至在WNLI任務上超過了BERT,
IMDb準確率 :BERT(93.46) DistilBERT(92.82)
推理速度(跑了所有的GLUE任務):DistilBERT(410s) BERT(668s) ELMo(895s)
參考
DistilBERT, a distilled version of BERT: smaller, faster, cheaper and lighter ??
Distilling the knowledge in a neural network ??
自然語言處理——基于預訓練模型的方法 ??
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/303137.html
標籤:其他
