LLMs的知識蒸餾:技術和應用 精華
知識蒸餾通過創建更小、更快、更易于部署的模型,釋放了大語言模型(LLM)在實際應用中的潛力。本文提供了知識蒸餾的全面指南,涵蓋視覺、自然語言處理(NLP)和語音領域中的算法、架構和應用。
大規模機器學習和深度學習模型越來越普遍。例如,據報道,GPT-4o有超過2000億個參數。然而,雖然訓練大型模型有助于提升最先進的性能,但部署這種龐大的模型,尤其是在邊緣設備上,并非易事。
此外,大多數數據科學建模工作側重于訓練單個大型模型或不同模型的集合,使其在通常不代表真實數據的保留驗證集上表現良好。
訓練和測試目標之間的這種不一致,導致開發出的機器學習模型在精選的驗證數據集上有不錯的準確率,但在對真實測試數據進行推理時,往往無法滿足性能、延遲和吞吐量的標準。
知識蒸餾通過捕獲并“提煉”復雜機器學習模型或模型集合中的知識,將其轉化為更易于部署的單個較小模型,且不會導致性能大幅下降,從而幫助克服這些挑戰。
什么是知識蒸餾?
知識蒸餾是指將知識從一個大型復雜的模型或一組模型轉移到可以在現實世界的約束下實際部署的單個較小模型的過程。本質上,它是一種模型壓縮形式,由Bucilua及其合作者于2006年首次成功演示。
知識蒸餾更常用于具有復雜架構(包含多個層和模型參數)的神經網絡模型。因此,隨著過去十年深度學習的興起,以及它在語音識別、圖像識別和自然語言處理等多個領域的成功,知識蒸餾技術在實際應用中受到了廣泛關注。
對于內存和計算能力有限的邊緣設備而言,部署大型深度神經網絡模型的挑戰尤為突出。為應對這一挑戰,人們首先提出了一種模型壓縮方法,將大型模型的知識轉移到訓練較小的模型中,同時不會顯著降低性能。Hinton及其同事將這種從較大模型學習小模型的過程正式定義為“知識蒸餾”框架。
如圖1所示,在知識蒸餾中,一個小型“學生”模型學習模仿大型“教師”模型,并利用教師的知識獲得相似或更高的準確率。在下一節中,我將更深入地研究知識蒸餾框架及其底層架構和機制。
深入研究知識蒸餾
知識蒸餾系統由三個主要組件構成:知識、蒸餾算法和師生架構。
知識
在神經網絡中,知識通常指學習到的權重和偏差。同時,大型深度神經網絡中的知識來源豐富多樣。典型的知識蒸餾使用logits(未經過softmax激活函數處理的神經網絡輸出)作為教師知識的來源,而其他方法則側重于中間層的權重或激活。其他相關知識還包括不同類型的激活和神經元之間的關系,或者教師模型本身的參數。
不同形式的知識可分為三種類型:基于響應的知識、基于特征的知識和基于關系的知識。圖2展示了教師模型中的這三種不同類型的知識。
基于響應的知識
如圖2所示,基于響應的知識側重于教師模型的最終輸出層。其假設是學生模型將學習模仿教師模型的預測。如圖3所示,這可以通過使用稱為蒸餾損失的損失函數來實現,該函數分別捕獲學生模型和教師模型的logit之間的差異。在訓練過程中,隨著這種損失逐漸最小化,學生模型將更擅長做出與教師模型相同的預測。
在圖像分類等計算機視覺任務中,軟目標包含基于響應的知識。軟目標表示輸出類別的概率分布,通常使用softmax函數進行估計。每個軟目標對知識的貢獻由一個稱為“溫度(temperature)”的參數進行調整?;谲浤繕说幕陧憫闹R蒸餾通常用于監督學習場景。
基于特征的知識
經過訓練的教師模型還能在中間層捕獲數據知識,這對于深度神經網絡尤為重要。中間層學習區分特定特征,這些知識可用于訓練學生模型。如圖4所示,目標是訓練學生模型學習與教師模型相同的特征激活。蒸餾損失函數通過最小化教師模型和學生模型的特征激活之間的差異來實現這一點。
基于關系的知識
除了神經網絡輸出層和中間層表示的知識外,捕獲特征圖之間關系的知識也可用于訓練學生模型。這種被稱為基于關系的知識如圖5所示。這種關系可以建模為特征圖、圖形、相似性矩陣、特征嵌入或基于特征表示的概率分布之間的相關性。
訓練
訓練學生模型和教師模型的方法主要有三種:離線蒸餾、在線蒸餾和自蒸餾。蒸餾訓練方法的分類取決于教師模型是否與學生模型同時被修改,如圖所示:
離線蒸餾
離線蒸餾是最常見的方法,即使用預訓練的教師模型來指導學生模型。在該方案中,首先在訓練數據集上對教師模型進行預訓練,然后從教師模型中提取知識來訓練學生模型。鑒于深度學習的最新進展,有各種各樣的預訓練神經網絡模型可供公開使用,可根據具體用例選擇作為教師模型。離線蒸餾是深度學習中一種成熟的技術,且更容易實現。
在線蒸餾
在離線蒸餾中,預訓練的教師模型通常是大容量的深度神經網絡。對于一些用例,可能無法獲得用于離線蒸餾的預訓練模型。為解決這一限制,可以使用在線蒸餾,教師模型和學生模型在單個端到端訓練過程中同時更新。在線蒸餾可以利用并行計算,因此是一種高效的方法。
自蒸餾
如圖6所示,在自蒸餾中,教師模型和學生模型使用相同的模型。例如,深度神經網絡深層的知識可用于訓練淺層。它可以被視為在線蒸餾的一個特殊情況,并以多種方式實例化。教師模型早期階段的知識可以轉移到后期階段,以訓練學生模型。
架構
師生網絡架構的設計對于高效的知識獲取和提煉至關重要。通常,更復雜的教師模型和更簡單的學生模型之間存在模型容量差距??梢酝ㄟ^高效的師生架構優化知識轉移,來縮小這種結構性差距。
由于深度神經網絡的深度和廣度,從深度神經網絡中傳輸知識并不簡單。知識遷移最常見的架構中,學生模型具有以下特點:
- 是教師模型的較淺版本,層數較少,每層神經元數量也較少;
- 是教師模型的量化版本;
- 是具有高效基本操作的較小網絡;
- 是具有優化全球網絡架構的較小網絡;
- 與教師模型相同。
除上述方法外,神經架構搜索等最新進展也可用于在給定特定教師模型的情況下,設計最佳的學生模型架構。
用于知識蒸餾的算法
在本節中,我將重點介紹用于訓練學生模型,以從教師模型中獲取知識的算法。
對抗性蒸餾
對抗性學習是最近在生成對抗網絡的背景下提出的概念,用于訓練生成器模型和判別器模型。生成器模型學習生成盡可能接近真實數據分布的合成數據樣本,判別器模型則學習區分真實數據和合成數據樣本。這個概念已應用于知識蒸餾,使學生模型和教師模型能夠更好地表示真實數據分布。
為實現學習真實數據分布的目標,對抗性學習可用于訓練生成器模型,以獲取合成訓練數據,或用于擴充原始訓練數據集。第二種基于對抗學習的蒸餾方法側重于判別器模型,根據logits或特征圖區分學生模型和教師模型的樣本。這種方法有助于學生模型更好地模仿教師模型。第三種基于對抗學習的蒸餾技術側重于在線蒸餾,同時優化學生模型和教師模型。
多教師蒸餾
在多教師蒸餾中,學生模型從多個不同的教師模型中獲取知識,如圖7所示。使用多個教師模型的集合可以為學生模型提供不同類型的知識,這可能比從單個教師模型獲得的知識更有益。
來自多個教師的知識可以合并為所有模型的平均響應。通常從教師那里轉移的知識類型基于logits和特征表示。
跨模態蒸餾
圖8展示了跨模態蒸餾訓練方案。在此方案中,教師模型在一種模態中進行訓練,其知識被提煉到需要不同模態知識的學生模型中。當在訓練或測試期間特定模態的數據或標簽不可用時,就需要跨模態傳遞知識。
跨模態蒸餾最常用于視覺領域。例如,在標記圖像數據上訓練的教師模型的知識,可用于對具有未標記輸入域(如光流、文本或音頻)的學生模型進行蒸餾。在這種情況下,從教師模型的圖像中學習到的特征用于學生模型的監督訓練??缒B蒸餾在視覺問答、圖像描述等應用中非常有用。
其他
除上述蒸餾算法外,還有幾種其他算法也應用于知識蒸餾。
- 基于圖的蒸餾使用圖來捕獲數據內部關系,而不是從教師到學生的單個實例知識。圖有兩種使用方式:作為知識轉移的手段,以及控制教師知識的轉移。在基于圖的蒸餾中,圖的每個頂點代表一個自監督教師,可能分別基于基于響應或基于特征的知識,如logits和特征圖。
- 基于注意力的蒸餾基于使用注意力圖從特征嵌入中轉移知識。
- 由于隱私、安全或保密原因,在沒有訓練數據集的情況下,無數據蒸餾基于合成數據。合成數據通常從預訓練教師模型的特征表示中生成。在其他應用中,生成對抗網絡(GANs)也用于生成合成訓練數據。
- 量化蒸餾用于將知識從高精度教師模型(如32位浮點型)轉移到低精度學生網絡(如8位)。
- 終身蒸餾基于持續學習、終身學習和元學習的學習機制,其中先前學到的知識被積累并轉移到未來的學習中。
- 基于神經架構搜索的蒸餾用于確定合適的學生模型架構,以優化從教師模型的學習。
知識蒸餾的應用
知識蒸餾已成功應用于多個機器學習和深度學習用例,如圖像識別、自然語言處理和語音識別。在本節中,我將重點介紹知識蒸餾技術的現有應用和未來潛力。
視覺
知識蒸餾在計算機視覺領域的應用廣泛。最先進的計算機視覺模型越來越多地基于深度神經網絡,這些網絡可從模型壓縮中受益,便于部署。知識蒸餾已成功用于以下用例:
- 圖像分類
- 人臉識別
- 圖像分割
- 動作識別
- 目標檢測
- 車道檢測
- 行人檢測
- 面部特征點檢測
- 位姿估計
- 視頻字幕
- 圖像檢索
- 陰影檢測
- 文本到圖像合成
- 視頻分類
- 視覺問答等
知識蒸餾還可用于跨分辨率人臉識別等特定用例,基于高分辨率人臉教師模型和低分辨率人臉學生模型的架構可以提高模型性能并降低延遲。由于知識蒸餾可以利用不同類型的知識,包括跨模態數據、多域、多任務和低分辨率數據,因此可以針對特定的視覺識別用例訓練各種提煉的學生模型。
自然語言處理
鑒于語言模型或翻譯模型等大容量深度神經網絡的廣泛應用,知識蒸餾在自然語言處理應用中的應用尤為重要。最先進的語言模型包含數十億個參數,例如,GPT-3包含1750億個參數,這比之前最先進的語言模型BERT(基本版本包含1.1億個參數)大了幾個數量級。
因此,知識蒸餾在自然語言處理中非常受歡迎,用于獲得快速、輕量級的模型,這些模型更易于訓練,計算成本更低。除了語言建模之外,知識蒸餾還用于以下自然語言處理用例:
- 神經機器翻譯
- 文本生成
- 問答
- 文檔檢索
- 文本識別
通過知識蒸餾,可以獲得高效、輕量級的自然語言處理模型,這些模型可以在較低的內存和計算要求下進行部署。師生訓練還可用于解決多語言自然語言處理問題,其中多語言模型的知識可以相互傳遞和共享。
案例研究:DistilBERT
DistilBERT是由Hugging Face開發的一種更小、更快、更便宜、更輕的BERT模型。在這里,作者預訓練了一個較小的BERT模型,該模型可以在各種自然語言處理任務上進行微調,并且具有相當高的準確率。在預訓練階段應用知識蒸餾,以獲得BERT模型的提煉版本,該版本的參數減少了40%(6600萬個參數對比1.1億個參數),推理速度提高了60%(在GLUE情感分析任務中,推理時間從668秒縮短到410秒),同時保持了相當于原始BERT模型準確率97%的模型性能。在DistilBERT中,學生模型具有與BERT相同的架構,并且是使用一種新的三元組損失獲得的,該損失結合了與語言建模、蒸餾和余弦距離損失相關的損失。
語音
最先進的語音識別模型也基于深度神經網絡?,F代自動語音識別(ASR)模型經過端到端訓練,基于包括卷積層、具有注意力機制的序列到序列模型,以及最近的Transformer架構。對于實時的設備端語音識別,獲得更小、更快的模型以實現有效性能至關重要。
語音領域中知識蒸餾的用例包括:
- 語音識別
- 口語識別
- 音頻分類
- 說話人識別
- 聲學事件檢測
- 語音合成
- 語音增強
- 抗噪ASR
- 多語言ASR
- 口音檢測
案例研究:Amazon Alexa的聲學建模
Parthasarathi和Strom(2019)利用師生訓練為100萬小時的未標記語音數據生成軟目標,而訓練數據集僅包含7000小時的標記語音。教師模型在所有輸出類上生成概率分布。學生模型在給定相同特征向量的情況下,也在輸出類上生成概率分布,目標函數優化這兩個分布之間的交叉熵損失。在這里,知識蒸餾有助于簡化在大量語音數據語料庫上生成目標標簽的過程。
結論
現代深度學習應用基于龐大的神經網絡,這些網絡容量大、內存占用高且推理延遲慢。將此類模型部署到生產環境是一項巨大的挑戰。知識蒸餾是一種巧妙的機制,用于訓練從大型復雜教師模型派生的更小、更輕、更快、更經濟的學生模型。在Hinton及其同事(2015年)提出知識蒸餾的概念之后,為生產用例獲取高效輕量級模型而采用的知識蒸餾方案大幅增加。知識蒸餾是一種基于不同類型的知識、訓練方案、架構和算法的復雜技術。知識蒸餾已經在計算機視覺、自然語言處理、語音等多個領域取得了巨大成功。
引用
[1] Distilling the Knowledge in a Neural Network. Hinton G, Vinyals O, Dean J (2015) NIPS Deep Learning and Representation Learning Workshop. https://arxiv.org/abs/1503.02531
[2] Model Compression. Bucilua C, Caruana R, Niculescu-Mizil A (2006) https://dl.acm.org/doi/10.1145/1150402.1150464
[3] Knowledge distillation: a survey. You J, Yu B, Maybank SJ, Tao D (2021) https://arxiv.org/abs/2006.05525
[4] DistilBERT, a distilled version of BERT: smaller, faster, cheaper and lighter (2019) Sanh V, Debut L, Chammond J, Wolf T. https://arxiv.org/abs/1910.01108v4
[5] Lessons from building acoustic models with a million hours of speech (2019) Parthasarathi SHK, Strom N. https://arxiv.org/abs/1904.01624
本文轉載自 ??柏企閱文??,作者: 柏企
