BERT模型蒸餾有哪些方法?

2021-02-15 PaperWeekly

©PaperWeekly 原創 · 作者|蔡傑

學校|北京大學碩士生

研究方向|問答系統

pretrain-利用大量的未標記數據通過一些自監督的學習方式學習豐富的語義和句法知識。例如:Bert 的 MLM,NSP 等等。

finetune-將預訓練過程中所學到的知識應用到子任務中,以達到優異的效果。

預訓練模型在各個領域雖然帶來了巨大的提升,但是也有一些致命的問題:

大存儲需求——預訓練模型一般都很大,少則幾百 M,大則幾 G,無法在有限資源的設備上部署。

Logit Distillation

知識蒸餾最早是 Hinton 在 15 年提出的一個黑科技技術,核心思想是通過遷移知識,從而通過訓練好的大模型得到更加適合推理的小模型。

論文標題:Distilling the Knowledge in a Neural Network

論文來源:NIPS 2014

論文連結:http://arxiv.org/abs/1503.02531

神經網絡通常使用 「softmax」 輸出層生成每個類別的概率:輸出層通過將

論文中用了對 softmax 的公式進行了推導,如果 T 遠高於對數的量級,且對數為零均值,則上圖公式(4)和公式(2)和幾乎相同。在 T 非常小的情況下,梯度會接近於 qi-pi,所以當多個類別的 pi 接近於 0 時,最終輸出的相似性信息是沒有體現在梯度中的,所以網絡會忽略掉這些信息;

所以,單純的用logits來蒸餾的方法是存在一些 bias 的,那能否有更準確以及更快速的蒸餾方法呢?Beyond Logit Distillation

論文標題:TinyBERT: Distilling BERT for Natural Language Understanding

論文來源:ICLR 2020

論文連結:http://arxiv.org/abs/1909.10351

代碼連結:https://github.com/huawei-noah/Pretrained-Language-Model

TINYBERT 提出了新的遷移蒸餾方法,蒸餾的 loss 可以從 4 個方面來構造:

Transformer Layer(Hidden States 和 Attention Matricies)

整個模型的 loss 是學生模型的每一層 loss 的求和:

構造的 Loss 都是清一色的 MSE 函數:

Embedding-layer DistillationHidden-layer DistillationSelf-Attention DistillationTarget Classifier Distillation

通過論文中的實證研究表明了 TinyBERT 的有效性,在 GLUE 上達到了與 BERT 相當(下降 3 個百分點)的效果,同時模型大小只有 BERT 的 13.3%(BERT 是 TinyBERT 的 7.5 倍),Inference 的速度是 BERT 的 9.4 倍。

此外,TinyBERT 還顯著優於當前的 SOTA 基準方法(BERT-PKD),但參數僅為為後者的 28%,推理時間僅為後者的 31%。

論文標題:FitNets : Hints for Thin Deep Nets

論文來源:ICLR 2015

論文連結:https://arxiv.org/abs/1412.6550

代碼連結:https://github.com/adri-romsor/FitNets

蒸餾時採用的中間層匹配本質上是一種正則化形式,Transformer 的分層蒸餾可能會導致過度正則化。

本文將 Hinton 的蒸餾 output 的 logits 的 idea 進行了擴展,不僅使用輸出的 logits,同時也用模型的中間層信息來作為 hints 來提高 student 模型的性能。通過這樣的方法可以訓練出一個 deeper 和 thinner 的 student 模型。



r 代表 hidden 層的一個額外的映射關係,Wr 是其中的參數,這是為了使得 hidden 層與 hint 層的神經元大小一致。

Fig. 1 (a) 作者選擇 FitNet 的一個隱藏層,作為學習層,去學習 teacher model 的某一層(引導層)。我們希望學習層能夠預測引導層的輸出。

Fig. 1 (b) 作者從一個訓練過的 teacher 網絡和一個隨機初始化的 FitNet 開始,在 FitNet 學習層的頂部加入一個由 Wr 參數化的回歸因子,將 FitNet 參數 WGuided 訓練到學習層,使 Eq.(3) 最小化 (Fig. 1 (b))。

最後,從預訓練的參數中,我們對整個 FitNet 的 Ws 的參數進行訓練,使 Eq.(2) 最小化 (Fig. 1 (c))。

從實驗結果上看,student 比 teacher 參數少,效果卻比 teacher 還要好,可能是因為網絡更深的原因,某種程度上說明了深層網絡的有效性,深層網絡的表示性能要更優一些。

實驗也說明了 Hint 損失的重要性,Hint 損失在某種程度上彌補了交叉熵和 KD loss 損失的信息,而這種丟失的信息在某種程度上可以被更深層的網絡來彌補。

Dynamic Early Exit

通過分辨簡單樣本和複雜樣本,有針對性的去優化網絡性能,加快 inference 的速度,具體可參考之前寫的 FastBert。

論文標題:FastBERT: a Self-distilling BERT with Adaptive Inference Time

論文來源:ACL 2020

論文連結:https://arxiv.org/abs/2004.02178

代碼連結:https://github.com/autoliuweijie/FastBERT

為了在保證模型性能的前提下提高其效率,本文提出了一種新的具有自適應推斷時間的速度可調快速 bert。推理速度可根據不同需求靈活調整,同時避免了樣本的冗餘計算。此外,該模型採用了一種獨特的自蒸餾機制進行微調,有更強的計算效能與最小的性能損失。

原 BERT 模型為主幹(Backbone),每個分類器稱為分支(Branch),其中分支 Classifier 都是由最後一層的分類器蒸餾而來,在預訓練和微調階段都只調整主幹參數,finetune 之後主幹參數 freeze,把最後一層classifier蒸餾到每一層 student classifier 中。

之所以叫自蒸餾,因為 student 和 teacher 都是由一個模型得到的,以往的 KD 都是兩個模型,student 模型經過參數初始化,讓 teacher 模型去優化 student 模型。

一共包含以下幾個階段:

Pre-training:和 BERT 預訓練的流程一致,主要是要得到一個預訓練模型。

Fine-tuning for Backbone:Backbone 的微調,也就是訓練一個 Bert 的分類器,預訓練模型後添加一層 classifier,classifier 的參數用於後期的指導訓練。

Self-distillation for branch:分支(branch)的自蒸餾,每一層都有一個 student 的 classfier,由微調過的 Bert 的最後一層 classifier 蒸餾而來,每個 branch 都有一個 classifier。

Adaptive inference:自適應 inference,可以根據樣本的難易程度決定樣本要走幾層分支分類器,簡單的樣本可以在底層直接給結果,困難的繼續往高層走。

同類的文章還有:

論文標題:DeeBERT: Dynamic Early Exiting for Accelerating BERT Inference

論文來源:ACL 2020

論文連結:https://arxiv.org/abs/2004.12993

代碼連結:https://github.com/castorini/DeeBERT

論文標題:DynaBERT: Dynamic BERT with Adaptive Width and Depth

論文來源:NeurIPS 2020

論文連結:https://arxiv.org/abs/2004.04037

代碼連結:https://github.com/huawei-noah/Pretrained-Language-Model/tree/master/DynaBERT

如何才能讓更多的優質內容以更短路逕到達讀者群體,縮短讀者尋找優質內容的成本呢?答案就是:你不認識的人。

總有一些你不認識的人,知道你想知道的東西。PaperWeekly 或許可以成為一座橋梁,促使不同背景、不同方向的學者和學術靈感相互碰撞,迸發出更多的可能性。 

PaperWeekly 鼓勵高校實驗室或個人,在我們的平臺上分享各類優質內容,可以是最新論文解讀,也可以是學習心得技術乾貨。我們的目的只有一個,讓知識真正流動起來。

📝 來稿標準:

• 稿件確係個人原創作品,來稿需註明作者個人信息(姓名+學校/工作單位+學歷/職位+研究方向) 

• 如果文章並非首發,請在投稿時提醒並附上所有已發布連結 

• PaperWeekly 默認每篇文章都是首發,均會添加「原創」標誌

📬 投稿郵箱:

• 投稿郵箱:hr@paperweekly.site 

• 所有文章配圖,請單獨在附件中發送 

• 請留下即時聯繫方式(微信或手機),以便我們在編輯發布時和作者溝通

🔍

現在,在「知乎」也能找到我們了

進入知乎首頁搜索「PaperWeekly」

點擊「關注」訂閱我們的專欄吧

關於PaperWeekly

PaperWeekly 是一個推薦、解讀、討論、報導人工智慧前沿論文成果的學術平臺。如果你研究或從事 AI 領域,歡迎在公眾號後臺點擊「交流群」,小助手將把你帶入 PaperWeekly 的交流群裡。

相關焦點

  • Bert與模型蒸餾: PKD和DistillBert
    而目前模型變小的技術大概有四種:模型量化:即把float值變為int8,可以直接將模型降為原來的四分之一。速度也會有提高。矩陣分解:大矩陣分解為小矩陣的乘積去擬合,可以顯著降低size。模型結構改動:比如更多的參數共享,更高效的層次計算等。本文介紹的就是知識蒸餾這一部分。
  • 【模型壓縮系列】二:模型蒸餾
    摘要: 本篇為模型壓縮系列文章的第二部分,上一篇通過直觀的思路引出三種壓縮方式,包括模型替換、模型蒸餾和協同訓練,並詳細介紹了模型替換在貝殼真實業務場景的實踐。本篇我們繼續介紹對模型蒸餾的探索。相比於上篇在模型替換上的實驗,小貝技能數據沒有任何變化,模型由12層的bert-base改用24層的bert-large,最終大模型的accuracy由0.8813提升到了0.8824。在大模型相差不多的前提下,知識蒸餾的結果達到了0.8786,遠高於模型替換0.86數量級的結果。相比於同模型finetune,在此任務上蒸餾同樣有優異的表現。
  • 模型壓縮:量化、剪枝和蒸餾
    PyTorch 模型的剪枝操作可以通過torch.nn.utils.prune 工具實現。量化和剪枝是最常用的模型壓縮方法,有成熟的配套工具,但為了保證一定精度,其壓縮比一般較小,還不足以讓BERT 在行動裝置的晶片上運行。
  • 模型壓縮之知識蒸餾
    假如說甲層有 M 個輸出通道,乙層有 N 個輸出通道,就構建一個 M*N 的矩陣來表示這兩層間的關係,其中 (i, j) 元是甲層第 i 個通道 和 乙層第 j 個通道的內積(因此此方法需要甲乙兩層 feature map 的形狀相同
  • 模型推理加速系列|如何用ONNX加速BERT特徵抽取(附代碼)
    Pytorch 模型轉為 ONNX 大致有以下4個步驟:基於transformers載入PyTorch模型。創建偽輸入(dummy inputs),並利用偽輸入在模型中前向inference,換一句話說用偽輸入走一遍推理網絡並在這個過程中追蹤記錄操作集合。
  • 模型蒸餾開山之作:Distilling the Knowledge in a Neural Network
    動機:    其中一種潛在的解決方法是,將cubersome model中的信息(knowledge)壓縮到一個單獨的模型(single model),將此過程稱為distilling(蒸餾)。2的樣本更像數字3,哪些數字2的樣本更像數字7。
  • 【Github】BERT-train2deploy:BERT模型從訓練到部署
    ,網上多數文章只提到了模型的訓練方法,後面的生產部署及調用並沒有說明。訓練模型就直接使用BERT的分類方法,把原來的run_classifier.py 複製出來並修改為 run_mobile.py。關於訓練的代碼網上很多,就不展開說明了,主要有以下方法:#-#手機評論情感分類數據處理 2019/3/12#labels: -1負面 0中性 1正面class SetimentProcessor(DataProcessor): def get_train_examples(self, data_dir): """See base class
  • ACL 2020 | MobileBERT:一種與任務無關的模型壓縮方法
    目前很多預訓練模型的壓縮方法都是和下遊任務相關的,一般做法都是把 pre-train 的模型在下遊任務上 fine-tune 之後,進行縮小操作(蒸餾,裁剪等等)。蒸餾完的模型要麼淺,要麼窄,但是這兩種模型都有自己的缺點,淺的表示能力不足,窄的不好訓練(畢竟還是要考慮後續 fine-tune 的)。
  • 華為諾亞方舟開源哪吒、TinyBERT模型,可直接下載使用
    項目地址:https://github.com/huawei-noah/Pretrained-Language-Model根據 GitHub 上的介紹,這一項目是諾亞方舟實驗室用來開源各種預訓練模型的項目,目前有兩個,日後不排除有更多模型加入進來。
  • 知識蒸餾-Distilling the knowledge in a neural network
    但是在deployment stage (部署階段)則會有很多限制,比如計算資源,計算速度要求等。知識蒸餾就是為了滿足這種需求而設計的一種模型壓縮的方法。知識蒸餾的概念最早是在2006年由Bulica提出的,在2014年Hinton對知識蒸餾做了歸納和發展。知識蒸餾的主要思想是訓練一個小的網絡模型來模仿一個預先訓練好的大型網絡或者集成的網絡。
  • 解密 BERT
    沒錯,BERT就是這樣,它徹底改變了我們設計NLP模型的方式。BERT之後,許多NLP架構、訓練方法與語言模型如雨後春筍般湧現,比如谷歌的TransformerXL、OpenAI’s GPT-2、 XLNet、ERNIE2.0、 RoBERTa等。
  • Teacher模型線上授課,蒸餾訓練速度提升2.3倍
    可是你知道嗎,在深度學習領域,模型訓練也是可以採用網課形式,不用那麼震驚,這個真的有!這就是今天要講的LF AI基金會的EDL項目基於飛槳深度學習平臺推出的服務型蒸餾訓練方案!但受限於推理速度,顯存資源等要求,大模型通常無法直接部署,需要對模型進行壓縮。目前主流的壓縮方法有裁剪、量化、知識蒸餾等。
  • 深度學習三大謎團:集成、知識蒸餾和自蒸餾
    )是一種「古老」而強大的方法。 但正如上面提到,在(1)模型係數只是簡單的求平均;(2)訓練數據集完全相同;(3)每個模型架構完全相同 下,集成的方法都能夠做到性能提升。 因此,無論是使用集成的方式,還是直接求平均的方式,都能夠帶來一些性能優勢,但由於特徵的稀缺性,在蒸餾後,性能必然會有一定下降。
  • BERT原理解讀及HuggingFace Transformers微調入門
    BERT使用了兩個巧妙方法來無監督地訓練模型:Masked Language Modeling和Next Sentence Prediction。這兩個方法可以無需花費時間和人力標註數據,以較低成本無監督地得到訓練數據。圖1就是一個輸入輸出樣例。
  • NLP集大成之預訓練模型綜述
    在CV領域,預訓練模型通常使用監督訓練;但在NLP領域,通常是缺少大量監督數據的,只有在翻譯任務上有足夠大量的數據,所以CoVe預訓練模型就是在翻譯數據上訓練的。NLP中常見的預訓練任務有以下幾種:語言模型類語言模型(LM)LM通常特指自回歸語言模型或單向語言模型,其思想是用前T個詞預測第T+1個詞。
  • Keras入門(七)使用Flask+Keras-bert構建模型預測服務
    在文章NLP(三十四)使用keras-bert實現序列標註任務中,我們介紹了如何使用keras-bert模塊,利用BERT中文預訓練模型來實現序列標註任務的模型訓練、模型評估和模型預測。其中,模型預測是通過加載生成的h5文件來實現的。  本文將會介紹如何使用Flask構建模型預測的HTTP服務。
  • AI新視野 | 數據蒸餾Dataset Distillation
    我們將方法命名為數據集蒸餾,這些圖像是蒸餾圖像。但為什麼數據集蒸餾有用呢?在給定的數據集中編碼多少數據,以及它的壓縮性如何,這是個純粹的科學問題。此外,與傳統的常常使用數萬個梯度下降步驟的訓練相比,給定一些蒸餾圖像,我們可以更加有效地給網絡「加載」整個數據集的知識。一個關鍵問題是,是否有可能將數據集壓縮為一小組合成數據樣本。
  • 深度學習中的3個秘密:集成,知識蒸餾和蒸餾
    神秘之處3:自蒸餾 注意,知識蒸餾至少直觀上是有意義的:教師集成模型的測試準確率為84.8%,所以單個學生模型的測試準確率可以達到83.8%。神經網絡的原因是執行(層次特性學習) —— 單個Fi模型,儘管使用不同的隨機初始化,仍有能力學習相同的特性集。因此,與單個網絡相比,它們的平均幾乎無法提供額外的能力。然而,在線性設置中,每個Fi使用一組不同的特定的特徵。因此,儘管結合這些特徵(使用集合或直接訓練平均值)確實有優勢,但由於特徵的稀缺性,它們不能被提煉成單個模型。
  • 集成、知識蒸餾和自蒸餾
    注意,知識蒸餾至少在直觀上是有意義的:教師集成模型的測試準確率為84.8%,因此學生個體模型可以達到83.8%。以下現象稱為自蒸餾(或 「做自己的老師" )完全令人驚訝——通過對同一架構的單個模型執行知識蒸餾,測試的準確性也可以得到提高。(請參見上面的圖2。)
  • 深度學習中的3個秘密:集成,知識蒸餾和自蒸餾
    神秘之處3:自蒸餾 注意,知識蒸餾至少直觀上是有意義的:教師集成模型的測試準確率為84.8%,所以單個學生模型的測試準確率可以達到83.8%。神經網絡的原因是執行(層次特性學習) —— 單個Fi模型,儘管使用不同的隨機初始化,仍有能力學習相同的特性集。因此,與單個網絡相比,它們的平均幾乎無法提供額外的能力。然而,在線性設置中,每個Fi使用一組不同的特定的特徵。因此,儘管結合這些特徵(使用集合或直接訓練平均值)確實有優勢,但由於特徵的稀缺性,它們不能被提煉成單個模型。