1. 程式人生 > 其它 >輕量化Bert模型

輕量化Bert模型

bert之類的預訓練模型在NLP各項任務上取得的效果是顯著的,但是因為bert的模型引數多,推斷速度慢等原因,導致bert在工業界上的應用很難普及,針對預訓練模型做模型壓縮是促進其在工業界應用的關鍵,今天介紹幾篇輕量化bert模型——DistillBert, ALBERT, TinyBert。

一. DistillBert

論文: DistilBERT, a distilled version of BERT: smaller, faster, cheaper and lighter

方法

DistillBert是在bert的基礎上用知識蒸餾技術訓練出來的小型化bert,具體做法如下:

  1. 給定原始的bert-base作為teacher網路。
  2. 在bert-base的基礎上將網路層數減半(也就是從原來的12層減少到6層)。
  3. 利用teacher的軟標籤和teacher的隱層引數來訓練student網路。

損失函式

訓練時的損失函式定義為三種損失函式的線性和,三種損失函式分別為:

  • \(Lce\)。這是teacher網路softmax層輸出的概率分佈和student網路softmax層輸出的概率分佈的交叉熵(注:MLM任務的輸出)。
  • \(Lmlm\)。這是student網路softmax層輸出的概率分佈和真實的one-hot標籤的交叉熵
  • \(Lcos\)。這是student網路隱層輸出和teacher網路隱層輸出的餘弦相似度值,
    在上面我們說student的網路層數只有6層,teacher網路的層數有12層,因此個人認為這裡在計算該損失的時候是用student的第1層對應teacher的第2層,student的第2層對應teacher的第4層,以此類推.

Student模型初始化

作者對student的初始化也做了些工作,作者用teacher的引數來初始化student的網路引數,
做法和上面類似,用teacher的第2層初始化student的第1層,teacher的第4層初始化student的第2層。

補充

  • 作者也解釋了為什麼減小網路的層數,而不減小隱層大小,作者認為在現代線性代數框架中,在張量計算中,降低最後一維(也就是隱層大小)的維度對計算效率提升不大,反倒是減小層數,也提升計算效率。
  • 另外作者在這裡移除了句子向量和\(pooler\)層,在這裡也沒有看到\(NSP\)任務的損失函式,因此個人認為作者也去除了NSP任務(主要是很多人證明該任務並沒有什麼效果)。
    整體上來說雖然方法簡單,但是效果還是很不錯的,模型大小減小了40%(66M),推斷速度提升了60%,但效能只降低了約3%。

二. ALBERT

論文:ALBERT: A LITE BERT FOR SELF-SUPERVISEDLEARNING OF LANGUAGE REPRESENTATIONS
Github: https://github.com/brightmart/albert_zh
ALBERT主要是從模型架構上做的改變,能極大的減小模型大小,但是沒有提升推斷速度。

方法

ALBERT主要做了三點改變:Factorized embedding parameterization ,Cross-layer parameter sharing ,Inter-sentence coherence loss 。

Factorized embedding parameterization

  • 在bert中採用的是embedding層的嵌入詞向量大小E等於隱層大小H,但作者認為embedding層只是做了詞嵌入,在這一層詞與詞之間是相互獨立的,詞嵌入後得到的向量包含的資訊也僅僅只有當前詞的資訊,因此向量長度不需要那麼大(我們常用的word2vec向量長度一般不超過300),但是隱層因為會和其他詞計算self-attention,因此隱層詞對應的向量是包含了上下文資訊的,此時含有的資訊是非常豐富的,用小的向量容易丟失資訊,需要將隱層大小設大一點。
  • 針對這樣的分析,作者認為像bert中embedding層和隱層大小設定為相等是不合理的(bert-base中,E=H=768)。而且在embedding層,有一個大的詞嵌入矩陣V x E。在這裡V為vocab size(通常比較大,bert中就是20000多),因此當E很大時,這裡的引數就非常多,又基於上面的分析,E可以不用設這麼大,
  • 因此作者在這裡做了一個矩陣分解,將矩陣\(V × H(E)\)分解為兩個小的矩陣\(V × E,\ E × H\)。在這裡將E設定為一個遠小於H的值,然後再經過一個矩陣\(E × H\)將詞向量維度對映到H。