bert模型裁剪及標籤平滑在短文本意圖識別中的效果分析

1、bert網絡模型base有12層,

隱含層大小:H=768,

詞向量參數矩陣:W = V*H,V大概在兩萬多,

12個attention head,

每個投的QKV矩陣:H * (H/12)

前饋層參數量是H * 4H = 768 * 3072

所以可以發現參數部分集中在詞向量和前饋層

實際上對於部分下游任務,可能並不需要這麼大的參數量,有些下游任務的特徵可能比較明顯,使用大網絡耗時就比較嚴重了,而且容易fine-tuning的時候過擬合,所以可以對網絡進行裁剪;

把網絡比作一個長方形,寬就是它的廣度,長就是它的深度,所以我們可以從這兩個方面來裁剪模型,縮減長度(12層變成6層、8層等),縮減寬度(12個頭變成6個亦或者768維變成512維);個人理解:長度提取的是不同形式的特徵,如第一層是詞向量表達,第二層是字與字之間的關係,第三層是字與句子之間的關係等等,那麼寬度就是每一層的這個特徵能不能全部提取出來,可能768維就是提取第一層詞向量表達的最優解,512維只能提取詞向量的一部分信息。

我這裏首先實驗了一下對層數進行裁剪:分別裁成了2、4、6層,7層還在訓練中。裁剪的過程就是對ckpt這個預訓練好的模型讀取它的圖,然後抽取出你想要的那一層的參數即可,再保存。

結果就是:

2層:89.93%
4層:89.98%
6層:91.59%
12層:92.42%

接下來會看看其他層的結果

還有一點,就是你下載的預訓練模型可能只有100多M,但是你finetuning之後就有1個多G了,那是因爲你裏面保存了很多無用的信息,例如梯度等,這部分信息在預測的時候是沒有用的,你可以選擇把這一部分信息刪除了,

2、意圖識別類似於一個分類任務,真實標籤向量其中一個位置1,其餘位置全是0,那麼在訓練的過程中就會出現模型會盡力趨向真實標籤,當前意圖的結果與其他意圖差別越大越好,這樣就會導致模型過於相信預測的結果了,另一個方面,模型的泛化能力也會降低,容易導致過擬合。

標籤平滑操作很簡單,就是對真實標籤進行平滑

1、原來是[1, 0, 0]

2、e = 0.1,K= 3,新的分佈 = (1-e) * 原分佈 + e * [1/K, 1/K, 1/K]

3、新的分佈 = 0.9 * [1,0,0] + 0.1 * [1/3, 1/3, 1/3]

e的值是可以改變的,這個也會影響最後的結果:

未平滑:92.42%
e = 0.1:92.31%
e = 0.2:92.47%
e = 0.25:92.42%
e = 0.3:92.09%

平滑的結果有提升,但提升不是很明顯,模型的泛化能力按道理來說是提升的,不過還要繼續觀察在其他樣本上的表現

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