導航:首頁 > 蒸餾問題 > 深度壓縮之蒸餾模型

深度壓縮之蒸餾模型

發布時間:2025-01-06 07:14:29

Ⅰ 深度學習模型壓縮演算法綜述

深度學習模型的壓縮與加速是當前研究的焦點,旨在解決大規模模型在資源有限設備上的部署難題。本文基於兩篇綜述文章,對剪枝與量化、低秩因子分解、遷移/壓縮卷積濾波器和蒸餾學習這四類主要方法進行了總結。

首先,剪枝與量化通過刪除冗餘參數和降低精度要求來減小模型規模。量化與二值化將權重由浮點數減少至1或2位,但對大型CNN的精度影響較大。網路剪枝則涉及刪除不重要連接,如全連接層和卷積層的權重,Han et al.的三步法是常見的方法,但需多次迭代和微調以補償精度損失。

低秩因子分解利用矩陣分解技術,如SVD和Tucker分解,將大矩陣縮小,減少內存佔用。然而,實現過程復雜,且局部分解限制了全局參數壓縮的潛力。

遷移/壓縮卷積濾波器通過卷積濾波器的變換,如Shang et al.和Zhai et al.的研究,實現對濾波器的壓縮,簡化模型結構。然而,這種方法在特定網路架構上的適用性和穩定性仍有待提高。

最後,蒸餾學習通過訓練小模型(學生模型)來利用大模型(教師模型)的知識,如FitNets和Lan et al.的ONE方法,降低了計算成本。但這也存在對特定任務限制和性能競爭性較弱的問題。

盡管這些方法都有其優點,但模型壓縮和加速仍面臨諸多挑戰,如對特定任務的適應性、計算成本的平衡以及理論上的指導等。後續研究將繼續探索更高效、更靈活的壓縮策略,以滿足資源受限設備的需求。

Ⅱ 深度學習模型壓縮方法綜述

深度學習模型壓縮技術旨在將龐大的復雜模型轉化為輕量級模型,以適應嵌入式設備的有限資源。本文將從模型壓縮技術概述、主要方法及實例分析進行綜合闡述。

模型壓縮問題定義在於,通過減小模型的參數量和計算復雜度,同時保持其性能不顯著下降,以適應設備計算資源的限制。模型壓縮技術分為「前端壓縮」和「後端壓縮」,前者幾乎不改變網路結構,僅減少網路層數或濾波器個數,後者則對網路結構進行大幅度改變,可能導致原有深度學習庫或硬體不兼容,維護成本較高。

知識蒸餾是將復雜模型的特徵和知識傳遞給小型模型的技術,使小型模型具備復雜模型的性能,同時保持快速計算速度。其關鍵在於設計監督特徵,如Soft Target(軟標簽)提供類間相似性,或使用大模型的中間層特徵圖或attention map作為指導信息。

輕量化模型架構設計強調在保留性能的同時優化模型結構,但缺乏廣泛通用准則,需結合經典論文和硬體平台特性進行實際部署。設計高效CNN架構需考慮深度可分離卷積block的計算效率,以及在不同NPU晶元平台上的性能測試結果。

模型剪枝技術旨在剔除權重矩陣中相對「不重要」的權值,降低計算資源消耗和提高實時性。剪枝演算法通過迭代過程逐步優化模型,直至達到目標精度。根據粒度不同,剪枝演算法可粗分為四種類型。

模型量化將神經網路的浮點演算法轉換為定點,旨在減少計算資源需求。量化過程分為將模型從FP32轉換為INT8的算術過程和使用INT8進行推理兩部分。量化方法主要有三種,依據量化階段不同分為兩種類型。加快推理速度的量化方法包括低精度量化、權重和激活量化等。

總結,模型壓縮方法包括知識蒸餾、輕量化模型架構設計、模型剪枝和模型量化。知識蒸餾通過傳遞復雜模型的知識給小型模型,輕量化模型架構關注高效設計,模型剪枝減少冗餘參數,模型量化將浮點模型轉換為定點模型,共同目標是提升模型在嵌入式設備上的部署效率與性能。

Ⅲ 什麼是模型壓縮、模型剪枝、模型蒸餾、模型稀疏化

模型壓縮(Model Compression)旨在減小機器學習模型的大小、復雜度和計算量,以便在資源受限的設備上部署和運行,提高模型的推理速度和效率。常見技術包括模型剪枝、模型蒸餾、模型稀疏化等。

模型剪枝(Model Pruning)是模型壓縮技術之一,通過去除模型中不必要的神經元、連接、層等,減小模型復雜度和參數數量。剪枝可以分為訓練時實時剪枝和訓練後離線剪枝。剪枝技術可以將大型模型壓縮至適合在資源受限設備上運行的大小,擴展了機器學習應用的可能性。

模型蒸餾(Model Distillation)是一種知識轉移技術,將大型深度神經網路的復雜知識「蒸餾」至小型模型中。通過訓練小型模型使其學習大型模型的預測結果,小型模型可以在資源受限設備上實現高效推理,同時具有與大型模型相近的性能和泛化能力。模型蒸餾技術包括加權蒸餾、多步蒸餾、自適應蒸餾等變體。

模型稀疏化(Model Sparsity)優化深度神經網路,通過減少或去除不必要的參數或層,獲得更輕量化的模型,提高推理速度和泛化能力。模型稀疏化方法包括參數裁剪等技術。稀疏化可以降低模型復雜度,但可能影響性能,需根據實際應用進行權衡。

模型壓縮、模型剪枝、模型蒸餾、模型稀疏化等技術,通過減小模型大小、復雜度和計算量,擴展了機器學習模型在資源受限場景的應用范圍,提升了模型的推理速度和泛化能力。

Ⅳ 詳解4種模型壓縮技術、模型蒸餾演算法

本文將深入解析深度學習中的四種模型壓縮技術和模型蒸餾演算法,包括Patient-KD、DistilBERT、DynaBERT和TinyBERT。


在模型壓縮的需求中,深度神經網路雖然具有強大的表達能力,但其訓練成本和模型大小增加,對部署在資源有限的端側設備如手機和IoT設備構成挑戰。為減小模型體積、提高速度和能耗,我們通常採用參數量減少、網路結構優化等手段。然而,直接設計小模型難度大,模型壓縮技術如蒸餾和量化則能在經典模型基礎上提升性能。


以蒸餾和量化為例,通過MobileNetV3_large模型,我們觀察到使用蒸餾後的模型精度顯著提升,而結合蒸餾和量化更進一步優化了精度和推理速度。模型壓縮的基本方法包括知識蒸餾、權重共享和低秩分解等。



1. Patient-KD


Patient-KD是為緩解BERT模型在資源需求上的挑戰而提出的,通過讓學生模型從教師網路的多個中間層而非僅最後一層學習,改善了泛化能力。實驗結果表明,Patient-KD在GLUE測試集上表現出色,尤其在某些任務上接近或超過BERT-Base。




2. DistilBERT


DistilBERT通過知識蒸餾,將大型BERT模型的知識遷移到輕量級模型中,顯著減小了參數量和計算成本,同時保持了大部分性能。實驗結果顯示DistilBERT在GLUE數據集上的表現優於BERT,且速度提高。




3. DynaBERT


DynaBERT提出了一種自適應寬度和深度的動態模型,可以根據任務需求動態調整網路結構,提供了更大的靈活性。實驗結果顯示,DynaBERT模型在大小、速度和性能上都具有優勢。




4. TinyBERT


TinyBERT針對BERT進行了知識蒸餾,尤其是Transformer層、嵌入層和預測層的蒸餾,顯著縮小了模型,提高了推理速度。在GLUE基準上,TinyBERT展示了顯著的性能提升。

Ⅳ 深度學習模型壓縮方法:知識蒸餾

知識蒸餾是深度學習模型壓縮方法中的一種,通過教師模型指導學生模型訓練,讓學生模型學習到教師模型的知識,以達到或媲美教師模型的泛化能力。其原理在於,使用一個提前訓練好的復雜模型(教師模型)在相同的數據下,將教師網路對該樣本的預測值作為學生模型的預測目標,以此讓學生模型學習到教師模型的泛化能力。知識蒸餾的過程涉及知識的多種分類,包括輸出特徵知識、中間特徵知識、關系特徵知識和結構特徵知識,分別對應不同的學習目標。蒸餾機制包括離線蒸餾、在線蒸餾和自蒸餾三種方式,各有優缺點。師生網路結構是知識轉移的一般載體,深度和寬度的復雜性要求知識從較深和較寬的神經網路轉移到較淺和較細的神經網路。蒸餾演算法有對抗蒸餾、多教師蒸餾、交叉模式蒸餾、基於圖形的蒸餾、無數據蒸餾、量化蒸餾等,各有特點。蒸餾流程包括四個步驟:知識的獲取、知識的提煉、高溫蒸餾和損失函數的計算。

Ⅵ 知識蒸餾 | 模型壓縮利器_良心總結

最近利用知識蒸餾的方法,對業務中的性能有了可觀的提升,因此在這里總結一波。本文主要從宏觀的角度分析一下各個蒸餾演算法的蒸餾方式,具體細節可以根據興趣閱讀論文~ 知識蒸餾是一種模型壓縮常見方法,用於模型壓縮指的是在teacher-student框架中,將復雜、學習能力強的網路學到的特徵表示「知識蒸餾」出來,傳遞給參數量小、學習能力弱的網路。從而我們會得到一個速度快,能力強的網路,因此這是一個概念上的模型壓縮方案。從另一個角度來說,蒸餾可以使得student學習到teacher中更加軟化的知識,這裡麵包含了類別間的信息,這是傳統one-hot label中所沒有的。由於蒸餾中軟化標簽的本質,因此蒸餾也可以被認為是一種正則化的策略。總結來說,知識蒸餾除了能夠學習到大模型的特徵表徵能力,也能學習到one-hot label中不存在的類別間信息。現有的知識蒸餾方法主要側重於兩點: 從teacher的什麼位置學習 和 用什麼方式學習 。以下的總結圖概述了本文要介紹的蒸餾方法。

目錄結構:

(1)KL:知識蒸餾:蒸餾開山之作
https://arxiv.org/pdf/1503.02531.pdf

如上圖所示,本文中直接利用KL散度來衡量教師模型和學生模型的輸出分布,通過最小化KL散度的方式,使得學生模型的輸出分布能夠盡可能的逼近教師模型,從而實現知識蒸餾的目的。KL散度是一種衡量兩個概率分布之間的差異的數學概念,有不懂的同學請出門左拐網路一下,右拐也行Google一下。

(2)FT:相關性因子加權學習法
https://arxiv.org/pdf/1802.04977.pdf
(3)PKT:概率分布學習法
https://arxiv.org/pdf/1803.10837.pdf

上述兩篇文章的作者認為學生一般都是不聰明的,為了讓學生能夠更好的理解教師模型,FT演算法這篇文章提出了一種新的知識轉移方式,如圖所示,利用卷積運算對教師模型的輸出進行編碼,並解碼(翻譯)給學生。而位於學生模塊部分也添加一個卷積操作,用來學習翻譯後的教師知識。實驗證明這種方式要比直接學習效果好。PKT演算法這篇文章提出了另一種新的知識轉移方式,如圖所示,該文章讓學生模型學習教師模型的概率分布,使得整體的學習更加容易,更魯棒。作者提出了一種通過匹配數據在特徵空間中的概率分布進行知識蒸餾,PKT演算法的另一個優勢是該方法可以直接轉移不同架構和維度層之間的知識。

(4)RKD:關系型學習法
https://arxiv.org/pdf/1904.05068.pdf
(5)CC:多輸入聯系型學習法
https://arxiv.org/pdf/1904.01802.pdf

所謂的單打獨斗就是一個樣本進行自我學習,單打獨斗的蒸餾方法使得學生模型只能學習教師模型的輸出表現,無法真正學習到教師模型的結構信息。而這兩篇文章的作者都提出了多個樣本之間進行合作學習的蒸餾學習方法,使得學生模型能夠更好的學習到教師模型的結構信息。RKD關系型學習演算法的核心是以多個教師模型的輸出為結構單元,取代傳統蒸餾學習中以單個教師模型輸出學習的方式,利用多輸出組合成結構單元,更能體現出教師模型的結構化特徵,使得學生模型得到更好的指導。CC多輸入聯系型學習法在上述RKD演算法的基礎上,為了更好的擴大類間差異,更好的縮小類間距離,CC演算法提出了兩種采樣方法:包括均衡類別采樣法和均衡超類別采樣法。所謂的均衡類別采樣法,即假設每個batch大小為48,則這48個樣本分布來自於6個類別,每個類別8個樣本,使得整體的學習樣本不像RKD演算法那樣是隨機的。

(1)Fitnet:階段性知識蒸餾
https://arxiv.org/pdf/1412.6550.pdf

FItnet這篇文章首次提出了從教室模型的中間層去進行蒸餾學習,而不僅僅關注教室模型的輸出。因為通過中間層的引導,使得學生模型進行了提前學習,使得最終的蒸餾學習效果變得更好。

(2)VID:互信息學習法
https://arxiv.org/pdf/1904.05835.pdf
(3)SP:相似性矩陣學習
https://arxiv.org/pdf/1907.09682.pdf
(4)AT:注意力學習法
https://arxiv.org/pdf/1612.03928.pdf

為了更好的表徵神經網路中間層的特徵,如上圖所示,本文列舉了三種不同形式的用於更好抽象的表徵中間層特徵的新的蒸餾形式。其中VID互信息學習法,將中間層知識蒸餾的最優性能定義為最大化教師和學生網路之間的互信息。那麼為什麼通過最大化互信息可以使得蒸餾學習變得有效呢?首先作者對互信息做了定義:互信息為[教師模型的熵值] - [已知學生模型的條件下的教師模型熵值]。而我們又有如下常識:當學生模型已知,能夠使得教師模型的熵很小,這說明學生模型以及獲得了能夠恢復教師模型所需要的「壓縮」知識,間接說明了此時學生模型已經學習的很好了。而這種情況下也就是說明上述公式中的熵很小,從而使得互信息會很大。作者從這個角度解釋了為什麼可以通過最大化互信息的方式來進行蒸餾學習。而在SP相似性矩陣學習法中,作者提出了一種新的知識蒸餾形式,該方法是作者觀察到相似語義的輸入往往會使得神經網路輸出相似的激活模式這一現象啟發得到的。該知識蒸餾方法被稱為保持相似性知識蒸餾(SPKD),該方法使得教師網路中相似(不同)激活的輸入樣本對,能夠在學生網路中產生相同(不同)的激活,從而指導學生網路的學習。而在AT注意力學習法中,作者認為注意力在人類視覺體驗中起著至關重要的作用。以圖像分類為例,注意力地圖展示了學習完成後的網路模型更關注於圖像的哪個區域,是網路模型學習成果的體現。本文通過迫使學生模型模仿強大的教師模型的注意力特徵圖,來顯著提高學生模型的性能。為此,本文提出了基於激活注意力地圖的蒸餾法。

(5)NST:基於濾波器的知識蒸餾
https://arxiv.org/pdf/1707.01219.pdf

(6)FSP:授之以魚不如授之以漁
http://openaccess.thecvf.com/content_cvpr_2017/papers/Yim_A_Gift_From_CVPR_2017_paper.pdf

和之前對中間層特徵進行直接學習的方式不同,本文提出了一個偏哲學的論點:授之以魚不如授之以漁。具體來說就是,如上圖所示,本文將教師模型網路層與層之間的映射關系作為學生網路學習的目標,而不是像之前提到的直接對教師模型的中間結果進行學習。通過讓學生學習這種獲得特徵的方法,而不是直接學習特徵本身,文章的結果顯示,這種方式確實有助於提高學生模型的魯棒性。

(1)AB:激活邊界學習
https://arxiv.org/abs/1811.03233.pdf
(2)利用對抗樣本進行激活邊界學習
https://arxiv.org/abs/1805.05532.pdf

在分類任務中,小模型真正的缺陷更多的在於對邊界樣本(難例樣本)的分類困難。而這真是我們在分類任務中最關心的問題。而教師模型處理邊界的能力一定是要優於學生模型的。因此嘗試用學生模型學習教師模型的邊界分布,這將是蒸餾學習的新思路。本部分列舉了兩種不同的邊界學習方法。AB激活邊界學習法,通過最大化邊界誤差的方式,來引導學生模型學習更強的邊界約束能力。利用對抗樣本進行邊界激活學習的方法,首先定義一個基類並通過基類找到各個類別中的對抗邊界,最終通過對抗邊界樣本進行蒸餾學習。

(1)be your own teacherr
https://arxiv.org/pdf/1905.08094.pdf
(2)強制拉近類內距離:regularzing class-wise
https://arxiv.org/pdf/2003.13964.pdf
(3)類內的魯棒性學習:Data-Distortion Guided
https://www.researchgate.net/publication/335476911_Data-Distortion_Guided_Self-Distillation_for_Deep_Neural_Networks

由於我們不一定可以在所有任務中都順利的獲取教師模型,有的大模型由於數據的缺失,很難被正常的訓練出來。基於這種情況,很多研究者提出了自我學習的策略。簡單來說該策略就是自己作為自己的老師,進行自我優化。本部分列舉了三種自學習的方式。be your own teacher這篇文章將網路較深部分的知識壓縮到較淺部分,也就是說該蒸餾策略的教師模型和學生模型來自與同一個模型,這大大降低了蒸餾學習的復雜度,並且通過增加額外的訓練檢測模型,在不增加前向推理時間的前提下提升了自我學習的能力。舉例來說,如上圖中以resnet50為例,在每個block之後都接出一個bottleneck作為隱藏層的監督輸出模塊,並接出一個全連接層作為每個子模塊的子分類器。每個子分類器都作為一個小的學生模型,其對應的教師模型為主分類層的輸出,最終實現自我蒸餾的學習。另外兩篇文章的思路主要從同一個類內的樣本出發進行自我學習。其中強制拉近類內距離這篇文章,在訓練的過程中,首先我們會從數據迭代器中提取batch1大小的數據,同時選出和當前batch1中類別相同的樣本形成batch2,並將兩個batch的樣本組合起來進行聯合訓練。具體來說就是每一此計算loss時,從batch1和batch2中各挑選出一個同類樣本,在loss計算中盡可能的是的這兩個同類樣本的輸出分布一致,這種方式是一種廣義上的自我學習的策略,且這種訓練方式能夠強制減小類內的差異,且可以利用這種方式減小某些過度自信的異常值的預測。其中增強類內魯棒性這篇文章,也是從對同一個類別的樣本進行聯合學習,具體操作如下:對輸入batch中每個圖片利用不同的數據增強方式增強層兩份輸入,這兩份輸入的標簽為同一個類別,將兩份輸入特徵concat之後通過卷積層提取全局特徵,並將得到的特徵向量進行對應的切分,在訓練過程中通過最小化切分後特徵向量間的差異,從而增強同一個類內的多樣性提升魯棒性,該過程也可以被認為是自己和自己學習。

(1)DML:互相學習
https://arxiv.org/pdf/1706.00384.pdf
(2)知識嫁接
https://arxiv.org/pdf/2001.05868.pdf

與自學習類似的是互相學習策略中不存在教師模型,與自學習不同的是互相學習的方式通用是多個模型之間的學習,而自學習僅僅只有一個模型。其中DML:互相學習這篇文章就是一種典型的互相學習的方式,DML是在訓練過程中,幾個需要反向傳播的待訓學生網路協同學習,互相傳遞知識。每個互相學習的網路都有一個標準的分類Loss和互學習Loss,其中互學習Loss是一個KL散度。 具體而言,兩個網路的softmax輸出為p1,p2.則互學習的意義在於,對於Net1(Net2亦然),對了提高其泛化能力,使用Net2的p2作為一種後驗概率,然後最小化p1,p2的KL散度。而知識蒸餾這篇文章更像是一種廣義上的互相學習方法,該文章的主要是思想是並行地訓練多個網路,對所有網路的參數進行重要性排序,並另一個並行網路中的更有效的權重替換到當前網路的不重要權重的位置,在訓練過程中通過這種重要性權重的互相替換實現互相學習。

(1)GAN對抗學習
https://arxiv.org/pdf/1709.00513.pdf
(2)無監督對抗學習
https://arxiv.org/pdf/1904.01186.pdf

本部分主要列舉了兩種利用GAN網路進行蒸餾的文章。GAN對抗學習這篇文章就是典型的利用生成對抗網路的例子,具體來說,學生網路作為生成器,生成對應的輸出結果,而教師網路用來表徵GT信息,而鑒別器主要被用來鑒別學生網路的輸出和教師網路的輸出,最終學習的目的就是是的學生網路能夠欺騙鑒別器,是的鑒別起無法區分出學生網路和教師網路的輸出。最終實現學生網路學習到了教師網路的輸出特徵和分布。而無監督對抗學習這篇文章的出發點有點不一樣,由於一些實踐問題(如隱私、法律等問題),給定深度網路的訓練數據往往不可用,除了一些介面之外,給定網路的架構也是未知的。基於此,本文提出了一種利用生成對抗網路訓練高效深度神經網路的新框架。講預先訓練好的教師網路看作一個固定的鑒別器,利用該鑒別器產生的訓練樣本可以得到最大的鑒別結果。然後,利用生成的數據和教師網路,同時訓練出模型尺寸較小、計算復雜度較低的高效網路。

閱讀全文

與深度壓縮之蒸餾模型相關的資料

熱點內容
反滲透直飲機怎麼看膜 瀏覽:788
鹼性水用哪個凈水器 瀏覽:128
陽離子交換膜能否讓水通過 瀏覽:752
集裝箱edi箱型代碼45b2 瀏覽:468
工地接市政污水管 瀏覽:784
蘭州廢水cod測定儀怎麼樣 瀏覽:190
污水處理證的考取需要什麼條件 瀏覽:561
吸附濃縮處理廢水 瀏覽:105
東莞醫用純水設備電話多少 瀏覽:328
除保溫瓶水垢 瀏覽:996
5000噸污水廠設計方案 瀏覽:711
為什麼反滲透前要先軟化水質 瀏覽:415
河南農村生活污水治理 瀏覽:406
純水產水量怎麼算 瀏覽:402
生活污水處理工藝技術指標 瀏覽:433
水垢重怎麼過濾 瀏覽:667
cx4汽油濾芯更換多少錢 瀏覽:37
凈水器的哪個濾芯可以除鉛 瀏覽:584
什麼是污水管收積率 瀏覽:403
礦泉水和蒸餾水哪個長期飲用 瀏覽:93