12层的bert参数量_只需一个损失函数、一个超参数即可压缩BERT,MSRA提出模型压缩新方法...
機器之心報道,參與:魔王。
論文鏈接:https://arxiv.org/pdf/2002.02925.pdf
這篇論文提出了一種新型模型壓縮方法,能夠通過逐步模塊替換(progressive module replacing)有效地壓縮 BERT。該方法首先將原版 BERT 分割成多個模塊,并構建更加緊湊的替代模塊;然后,用替代模塊隨機替換原始模塊,訓練替代模塊來模仿原始模塊的行為。在訓練過程中,研究者逐步增加模塊的替換概率,從而實現原始模型與緊湊模型之間的更深層次交互,使得訓練過程流暢進行。
與之前用于 BERT 壓縮的知識蒸餾方法相比,該方法僅利用一個損失函數和一個超參數,將開發者從調參這一繁瑣過程中解放出來。該方法在 GLUE 基準上的性能優于現有的知識蒸餾方法,為模型壓縮開啟了新方向。
模型壓縮方法知多少
隨著深度學習的流行,很多巨大的神經模型誕生,并在多個領域中取得當前最優性能。尤其是在自然語言處理(NLP)領域中,預訓練和調參已經成為其中大多數任務的新規范。基于 Transformer 的預訓練模型在自然語言理解(NLU)和自然語言生成(NLG)領域中成為主流。這些模型從其「過參數化」屬性中獲益,它們往往包含數百萬甚至數十億個參數,這就使得此類模型計算成本高昂,且從內存消耗和高延遲的角度來看其計算是低效的。這一缺陷極大地阻礙了此類模型在生產環境中的應用。
為了解決該問題,研究者提出很多神經網絡壓縮技術。一般而言,這些技術可分為三類:量化、權重剪枝和知識蒸餾(KD)。其中,KD 能夠壓縮預訓練語言模型,并因此得到了極大關注。KD 利用大型教師模型「教」緊湊的學生模型模仿教師的行為,從而將教師模型中嵌入的知識遷移到較小的模型中。但是,學生模型的性能狀況取決于設計良好的蒸餾損失函數,正是這個函數使得學生模型模仿教師行為。近期關于 KD 的研究甚至利用更復雜的模型特定蒸餾損失函數,以實現更好的性能。
模型壓縮新思路——Theseus 壓縮
與顯式地利用蒸餾損失函數來最小化教師模型與學生模型距離的 KD 不同,該研究提出一種新型模型壓縮方法。研究者受到著名哲學思想實驗「忒修斯之船」的啟發(如果船上的木頭逐漸被替換,直到所有的木頭都不是原來的木頭,那這艘船還是原來的那艘船嗎?),提出了 Theseus Compression for BERT (BERT-of-Theseus),該方法逐步將 BERT 的原始模塊替換成參數更少的替代模塊。研究者將原始模型叫做「前輩」(predecessor),將壓縮后的模型叫做「接替者」(successor),分別對應 KD 中的教師和學生。
該方法的工作流程如下圖 1 所示:首先為每個前輩模塊(即前輩模型中的模塊)指定一個替代(接替者)模塊;然后在訓練階段中以一定概率用替代模塊隨機替換對應的前輩模塊,并按照新舊模塊組合的方式繼續訓練;模型收斂后,將所有接替者模塊組合成接替者模型,進而執行推斷。這樣,就可以將大型前輩模型壓縮成緊湊的接替者模型了。
圖 1:BERT-of-Theseus 的工作流程。Theseus 壓縮與 KD 的思路有些類似,都鼓勵壓縮模型模仿原始模型的行為,但 Theseus 壓縮有很多獨特的優勢。
首先,Theseus 壓縮在壓縮過程中僅使用任務特定的損失函數。而基于 KD 的方法除了使用任務特定的損失函數外,還把一或多個蒸餾損失函數作為優化目標。Theseus 方法在整個壓縮過程中僅使用一個損失函數,從而聯結不同的階段,使壓縮以完全端到端的形式進行。此外,為不同任務和數據集選擇多個損失函數并平衡每個損失函數的權重,通常是一件耗時費力的事。
其次,與近期研究 [15] 不同,Theseus 壓縮不使用 Transformer 特定特征進行壓縮,這就為壓縮廣泛模型提供了可能性。
第三,與 KD 僅使用原始模型執行推斷不同,該方法允許前輩模型與壓縮后的接替者模型共同訓練,從而實現更深層次的梯度級交互,并簡化訓練過程。此外,混合了前輩模塊和接替者模塊的不同模塊組合添加了額外的正則化項(類似于 Dropout)。該方法還基于課程學習(Curriculum Learning)方法來驅動模塊替換,將模塊替換概率從低到高逐漸增加,從而實現優異的 BERT 壓縮性能。
該研究的貢獻如下:
- 提出新方法 Theseus 壓縮。該方法僅使用一個損失函數和一個超參數,為模型壓縮提供了新方向。
- 利用該方法壓縮得到的 BERT 模型運算速度是之前的 1.94 倍,并且保留了原始模型超過 98% 的性能,優于其它基于 KD 的壓縮基線。
BERT-of-Theseus
接下來,我們來看模塊替換和課程學習方法。BERT-of-Theseus 方法的工作流程參見圖 1。
在該示例中,研究者將一個 6 層的前輩模型 P = {prd_1, .., prd_3} 壓縮成 3 層的接替者模型 S = {scc_1, .., scc_3}。prd_i 和 scc_i 分別包含兩個層和一個層。(a) 在模塊替換訓練階段,以概率 p 將每個前輩模塊 prd_i 替換成對應的接替者模塊 scc_i。(b) 在接替者微調和推斷階段,把所有接替者模塊 scc_1..3 組合到一起,以執行計算。
圖 2:恒定模塊替換率和替換調度器的替換曲線。該圖用不同灰度表示 Theseus 壓縮的兩個階段:1)模塊壓縮,2)接替者微調。實驗
現在,我們來看 Theseus Compression for BERT 的實驗結果。研究者對比了 BERT-of-Theseus 和其它壓縮方法,并通過進一步實驗來分析結果。
基線
如表 1 所示,研究者對比了新方法與現有方法的層數、參數量、損失函數、外部數據使用和模型無關性。
表 1:不同 BERT 壓縮方法的對比。「CE」和「MSE」分別表示交叉熵和均方差,「KD」表示知識蒸餾的損失函數,「CETASK」和「CEMLM」分別表示在下游任務上和在遮蔽語言建模預訓練任務中計算得到的交叉熵。其它損失函數參見相關論文。
實驗結果
表 2 展示了模型在 GLUE 開發集上的實驗結果。研究者將其預測結果提交至 GLUE 測試服務器,得到了官方排行榜結果,詳見表 3。
表 2:在 GLUE 開發集上的實驗結果。每個數據集下的數字表示數據集中的訓練樣本數量。表 3:在 GLUE 服務器測試集上的實驗結果。每個數據集下的數字表示數據集中的訓練樣本數量。通用模型
作者也提供了一個在 MNLI 上壓縮的 6 層繼承者模型權重,可供直接微調使用,在 GLUE 上也取得了超過 DistillBERT 的表現。借助 transformers 庫可以輕松使用三行代碼加載這個模型權重:
from transformers import AutoTokenizer, AutoModel tokenizer = AutoTokenizer.frompretrained("canwenxu/BERT-of-Theseus-MNLI") model = AutoModel.frompretrained("canwenxu/BERT-of-Theseus-MNLI")模型壓縮后,研究者在其它句子分類任務上微調接替者模型,并與 DistillBERT 的性能進行對比(參見表 4)。這一通用模型在 MRPC 上實現了同等性能,且在其它句子級任務中的性能顯著優于 DistillBERT。
表 4:該研究訓練出的通用模型在 GLUE-dev 上的實驗結果。 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的12层的bert参数量_只需一个损失函数、一个超参数即可压缩BERT,MSRA提出模型压缩新方法...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 铺砖问题JAVA_java彩色瓷砖编程题
- 下一篇: c语言程序设计字符处理周信东,“电子科技