【BERT】BERT模型压缩技术概览
由于BERT參數眾多,模型龐大,推理速度較慢,在一些實時性要求較高、計算資源受限的場景,其應用會受到限制。因此,討論如何在不過多的損失BERT性能的條件下,對BERT進行模型壓縮,是一個非常有現實意義的問題。
本文先介紹模型壓縮的概念及常見方法;隨后,對目前出現的BERT剪枝的技術做一個整體的介紹。在后面的文章中,挑選一些典型的例子再進行深度的介紹。
作者&編輯 | 小Dream哥
1 模型壓縮?
所謂模型壓縮,就是在盡可能不改變模型效果的情況下,減少模型的尺寸,使得模型有更快的推理速度。
隨著深度學習技術越來越多的得到應用,模型壓縮越來越受到重視,因為當模型的準確度達到一定程度后,如何用更少的硬件成本去達到相同的效果,就變得很有價值;另一方面,隨著深度學習模型變得越來越“大”,在很多涉及邊緣計算的嵌入式設備中部署就變得困難,模型壓縮就變成一個必須的事情。
目前,模型壓縮主要有4種方法,包括如下:
1.parameter pruning and quantization
參數剪枝(parameter pruning),顧名思義,就是對模型的參數進行刪減;
量化(quantization)是一種通過降低數值精度來提高模型推理速度的方法,例如將通常的64位浮點型,轉化為16位浮點型進行運算。
2.low-rank factorization
通過低秩因式分解,將參數矩陣分解成兩個較小矩陣的乘積來逼近原始參數矩陣,降低模型的參數量,ALBERT中就用了這種方法。
3.transferred/compact convolutional filters
設計特殊結構的卷積濾波器以減少存儲和計算的復雜度。
4.knowledge distillation?
知識蒸餾,即先訓練一個大模型得到較好的效果;再設計和訓練一個小模型來獲得與大模型相當的效果。
[1] Cheng Y , Wang D , Zhou P , et al. A Survey of Model Compression and Acceleration for Deep Neural Networks[J]. 2017.
[2] ?Cheng J , Wang P S , Gang L I , et al. Recent advances in efficient computation of deep convolutional neural networks[J]. Frontiers of Information Technology & Electronic Engineering, 2018, 19(01):64-77.
[3]?Liu Z , Sun M , Zhou T , et al. Rethinking the Value of Network Pruning[J]. 2018.
[4]?Frankle J , Carbin M . The Lottery Ticket Hypothesis: Finding Sparse, Trainable Neural Networks[J]. 2018.
2 BERT模型壓縮
BERT模型的參數量巨大,這導致幾乎沒有BERT或者 BERT-Large 模型可直接在GPU及智能手機上應用,因此模型壓縮方法對于BERT的未來的應用前景非常有價值。下面介紹一些BERT模型壓縮的工作,可作參考。
(1) BERT剪枝
去掉BERT中不必要的部分,剪枝的內容包括權重大小剪枝、注意力剪枝、網絡層以及其他部分的剪枝等。還有一些方法也通過在訓練期間采用正則化的方式來提升剪枝能力(layer dropout)。
BERT模型包括輸入層(嵌入層),self-attention層,feed-forward等,針對BERT系列模型的結構,可采取的剪枝策略如下:
1)減少層數
在BERT模型的應用中,我們一般取第12層的hidden向量用于下游任務。可以根據不同的任務,接不同層進行finetune。
2)維度剪枝[1]
可以通過因式分解等方法,降低BERT隱藏層的維度,從而降低BERT的參數量。
3)Attention剪枝
在多頭注意力中,每頭維度是64,最終疊加注意力向量共768維。有研究[2]表明:在推理階段,大部分頭在被單獨去掉的時候,效果不會損失太多;將某一層的頭只保留1個,其余的頭去掉,對效果基本不會有什么影響。
[1] Compressing BERT: Studying the Effects of Weight Pruning on Transfer Learning
[2] Are Sixteen Heads Really Better than One?
[3] Pruning a BERT-based Question Answering Model
[4] Reducing Transformer Depth on Demand with Structured Dropout
[5] Reweighted Proximal Pruning for Large-Scale Language Representation
2) BERT權重因子分解
通過低秩因式分解,將參數矩陣分解成兩個較小矩陣的乘積來逼近原始參數矩陣,降低模型的參數量。最典型的就是ALBERT模型,其提出者認為,詞向量只是記憶了相對少量的詞語的信息,更多的語義和句法等信息時由隱藏層記憶的。因此,他們認為,詞嵌入的維度可以不必與隱藏層的維度一致,可以通過降低詞嵌入的維度的方式來減少參數量。
感興趣的同學看這篇博文詳細了解ALBERT的內容:
【NLP】ALBERT:更輕更快的NLP預訓練模型
[1] Structured Pruning of Large Language Models
[2] ALBERT: A Lite BERT for Self-supervised Learning of Language Representations
3)BERT知識蒸餾
知識蒸餾的本質是讓超大線下teacher模型來協助線上student模型的訓練,本質上是一種超大模型的知識遷移過程。
對Bert的知識蒸餾,研究的是如何將一個大型網絡的泛化能力,遷移到一個相對小型的網絡,從而達到以下兩個目標:
1) 不需要從零開始訓練小模型;
2) 蒸餾學習得到的模型效果優于直接訓練。
理論上來說,模型在訓練的時候需要盡可能多的神經元連接,而一旦訓練完成,其中的部分連接其實是冗余的,可以用一個相對緊湊的結構來代替。
[1] DistilBERT, a distilled version of BERT: smaller, faster, cheaper and lighter
[2] Distilling Task-Specific Knowledge from BERT into Simple Neural Networks
[3] Distilling Transformers into Simple Neural Networks with Unlabeled Transfer Data
[4] Attentive Student Meets Multi-Task Teacher: Improved Knowledge Distillation for Pretrained Models
[5] Patient Knowledge Distillation for BERT Model Compression
[6] TinyBERT: Distilling BERT for Natural Language Understanding
[7] MobileBERT: Task-Agnostic Compression of BERT by Progressive Knowledge Transfer
4)BERT量化
量化(quantization)是一種通過降低數值精度來提高模型推理速度的方法,例如將通常的64位浮點型,轉化為8位浮點型進行運算,BERT的量化的基本理論也是如此。
Q-BERT模型微調后的 BERT_BASE 模型同樣包含三部分:嵌入、基于 Transformer 的編碼器層、輸出層。BERT_BASE 模型不同層的參數大小為:嵌入 91MB、編碼器 325MB、輸出 0.01MB,減少了非常多。
量化過程更多涉及具體的工程化問題,想了解同學可以參考如下的論文了解。
[1]? Q8BERT: Quantized 8Bit BERT
[2] Q-BERT: Hessian Based Ultra Low Precision Quantization of BERT
總結
BERT模型在多種下游任務表現優異,但龐大的模型結果也帶來了訓練及推理速度過慢的問題,難以滿足對實時響應速度要求高的場景,模型輕量化就顯得非常重要。
后續我們分別詳細介紹不同類型的BERT模型壓縮方法。
下期預告:暫無
知識星球推薦
掃描上面的二維碼,就可以加入我們的星球,助你成長為一名合格的自然語言處理算法工程師。
知識星球主要有以下內容:
(1) 聊天機器人。
(2) 知識圖譜。
(3) NLP預訓練模型。
轉載文章請后臺聯系
侵權必究
往期文章
【完結】 12篇文章帶你完全進入NLP領域,掌握核心技術
【年終總結】2019年有三AI NLP做了什么,明年要做什么?
【NLP-詞向量】詞向量的由來及本質
【NLP-詞向量】從模型結構到損失函數詳解word2vec
【NLP-NER】什么是命名實體識別?
【NLP-NER】命名實體識別中最常用的兩種深度學習模型
【NLP-NER】如何使用BERT來做命名實體識別
【NLP-ChatBot】我們熟悉的聊天機器人都有哪幾類?
【NLP-ChatBot】搜索引擎的最終形態之問答系統(FAQ)詳述
【NLP-ChatBot】能干活的聊天機器人-對話系統概述
【知識圖譜】人工智能技術最重要基礎設施之一,知識圖譜你該學習的東西
【知識圖譜】知識表示:知識圖譜如何表示結構化的知識?
【知識圖譜】如何構建知識體系:知識圖譜搭建的第一步
【知識圖譜】獲取到知識后,如何進行存儲和便捷的檢索?
【知識圖譜】知識推理,知識圖譜里最“人工智能”的一段
【文本信息抽取與結構化】目前NLP領域最有應用價值的子任務之一
【文本信息抽取與結構化】詳聊文本的結構化【上】
【文本信息抽取與結構化】詳聊文本的結構化【下】
【信息抽取】NLP中關系抽取的概念,發展及其展望
【信息抽取】如何使用卷積神經網絡進行關系抽取
【NLP實戰】tensorflow詞向量訓練實戰
【NLP實戰系列】樸素貝葉斯文本分類實戰
【NLP實戰系列】Tensorflow命名實體識別實戰
【NLP實戰】如何基于Tensorflow搭建一個聊天機器人
【NLP實戰】基于ALBERT的文本相似度計算
總結
以上是生活随笔為你收集整理的【BERT】BERT模型压缩技术概览的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【每周CV论文】初学深度学习图像对比度增
- 下一篇: 【杂谈】有三AI开源项目中的代码和教程,