?

神經網絡壓縮聯合優化方法的研究綜述

2024-04-09 01:41寧欣趙文堯宗易昕張玉貴陳灝周琦馬駿驍
智能系統學報 2024年1期
關鍵詞:剪枝輕量化神經網絡

寧欣,趙文堯,宗易昕,張玉貴,陳灝,周琦,馬駿驍

(1.中國科學院 半導體研究所, 北京 100083; 2.合肥工業大學 微電子學院, 安徽 合肥 230009; 3.中國科學院 前沿科學與教育局, 北京 100864; 4.南開大學 人工智能學院, 天津 300071)

深度神經網絡已經被成功應用在計算機視覺、自然語言處理等任務中,并在特定應用場景中取得了超越人類水平的成功。隨著深度神經網絡模型層數的加深、參數量的劇增,其計算復雜度也在不斷增加,這不但會導致推理速度變慢,而且在運行時會帶來巨大的功耗。如果需要實現模型在工業界的應用落地,則大多只能在存儲容量大、算力充足、供電穩定的服務器、工作站甚至數據中心部署,然而這會帶來網絡延遲問題、數據隱私安全問題以及硬件成本問題,因此對神經網絡壓縮以實現端側部署的研究意義重大。

移動互聯網的發展使得移動端設備得到了廣泛的普及與應用,正成為人類日常生活不可或缺的一部分。人臉解鎖、拍照識物以及語音助手等人工智能應用極大地方便了人們的生產生活,人們對更加智能、更加隱私、更加安全的設備的需求也在與日俱增。隨著智能制造、智能安防、智能家居以及自動駕駛等應用領域的興起,在嵌入式設備上部署神經網絡以達到自動監測和控制的需求也持續增加。相比于服務器和工作站,移動端和嵌入式設備具有存儲資源少、算力不足、功耗受限等問題,這限制了深度神經網絡在端側的部署應用。

目前,關于模型壓縮加速算法的文獻綜述[1-3]的研究重點主要在分別介紹剪枝、量化、知識蒸餾及輕量化網絡設計等方法上,對使用剪枝、量化、知識蒸餾等方法聯合壓縮加速這類新興的方法介紹的較為粗略且參考文獻的數量少,隨著新方法層出不窮,其參考價值有所下降。如文獻[1]并未總結多方法聯合壓縮;文獻[2]雖然總結了幾種混合壓縮加速方式,但是未整理知識蒸餾和剪枝結合的研究,且對知識蒸餾和量化結合的研究未進行詳細的剖析;文獻[3]雖然列舉了部分蒸餾與剪枝、蒸餾與量化結合的聯合優化方法,但是并未揭示這些研究的動機與思想。針對目前對聯合優化方法綜述的空缺,本文重點整理總結了剪枝、量化、知識蒸餾3種常用模型壓縮加速聯合優化的方法,總結歸納了聯合優化方法的動機與思想,希望對相關研究提供新思路。

1 神經網絡壓縮算法

1.1 神經網絡壓縮概述

神經網絡輕量化的方法有直接設計輕量級網絡和壓縮現有的神經網絡模型2種思路。

直接設計輕量級網絡分為人工設計輕量級網絡模型和基于神經網絡架構搜索(neural architecture search , NAS)的自動化神經網絡架構設計。人工設計輕量級神經網絡的思路是設計更加高效的卷積計算方式、構造更高效的神經網絡結構,如谷歌采用深度可分離卷積替代傳統卷積提出了MobileNet v1[4],并在此基礎上引入倒殘差結構(inverted residuals)和線性激活(linear bottlenecks)提出MobileNet v2[5]; Face++采用分組逐點卷積(pointwise group convolution)以及通道混洗(channel shuffle)構建了ShuffleNet v1[6],在此基礎上引入通道分割(channel split)降低訪存延遲和提高計算并行度提出了ShuffleNet v2[7];Iandola等[8]構建了Fire Module設計出SqueezeNet。雖然人工設計的高性能輕量化神經網絡計算效率極高,但是人工設計的方法要求設計者具有豐富的知識和經驗,設計難度大、成本高,且并非是最優解。通過NAS在給定候選神經網絡架構組成的搜索空間內按照一定的搜索策略尋求最優解的方式能夠創造出人工尚未設計的輕量級神經網絡,如谷歌使用NetAdapt算法搜索得到卷積核和通道的最佳數量,并引入擠壓和激勵(squeeze-and-excitation,SE)通道注意力機制和h-switch激活函數設計了MobileNet v3[9];谷歌利用強化學習方法學習NAS搜索策略構建了NasNet[10]和MnasNet[11],實現了輕量級網絡的自動設計。

神經網絡模型壓縮的算法主要有剪枝(pruning)、量化(quantization)及知識蒸餾(knowledge distillation, KD)。

1.2 常用壓縮算法

深度學習網絡壓縮旨在利用神經網絡參數和結構的冗余性對現有的模型進行壓縮,在不嚴重影響模型性能的情況下得到參數量更少、結構更加精簡的模型。流行的模型壓縮算法有剪枝、量化和知識蒸餾,上述多種方法進行聯合壓縮加速能夠綜合各種方法的優勢,獲得更好的壓縮比和加速效果,是近年來逐漸興起的研究方向。在介紹聯合壓縮方法之前先分別介紹各類壓縮方法。

1.2.1 剪枝

剪枝是指按照一定的準則判斷參數重要性并裁剪模型中冗余的參數來縮小網絡規模、精簡網絡結構,從而達到減少計算量和內存消耗的目的。剪枝通過剔除模型中冗余的參數降低了模型的復雜度,實現了模型的壓縮和加速,并一定程度上緩解了過擬合的問題。

根據剪枝粒度的不同,剪枝分為非結構化剪枝和結構化剪枝,結構化剪枝和非結構化剪枝示意如圖1所示。非結構化剪枝分為權重剪枝和神經元剪枝,是細粒度的剪枝方法,對每一個權重的重要性進行評估并分別移除,因此可以更好地平衡性能和壓縮率,但計算量通常較大;Lecun等[12]提最佳腦損傷 (optimal brain damage, OBD)算法,使用損失函數的Hessian矩陣作為參數重要性的判據對權重進行裁剪;Hassibi等[13]進一步提出最佳腦外科醫生(optimal brain surgeon, OBS)方法。OBD和OBS都需要計算Hessian矩陣,這增加了內存和計算成本。

圖1 各類剪枝方法剪枝后效果示意Fig.1 Schematic diagram of pruning effect of various pruning methods

由于權重矩陣經過非結構化剪枝后將裁剪的權重位置的參數置零從而產生稀疏矩陣,而對稀疏矩陣進行加速計算需要特定的硬件或者軟件庫來支持,否則被置零的參數也需要進行計算,因此業界普遍使用結構化剪枝進行模型的壓縮加速。結構化剪枝直接移除剪枝對象,隨之也去除了這些參數關聯的運算,是粗粒度的剪枝方法。按照剪枝的對象,結構化剪枝分為層剪枝、濾波器剪枝、通道剪枝、分組剪枝等。濾波器剪枝刪去整個卷積濾波器;Li等[14]、He等[15]分別使用L1范數、L2范數作為判定標準對模型進行濾波器級別的剪枝。通道剪枝對一組卷積中卷積核的某些通道進行剔除;Liu等[16]提出了Network Slimming方法,對批歸一化層引入縮放因子進行L1稀疏化,將較小的通道進行剔除;Luo等[17]采用貪婪策略修剪下一層激活值影響最小的通道,提出了Thinet方法。分組卷積將一組卷積中卷積核相同位置的權重裁剪,當多個濾波器具有相同稀疏模式時,卷積濾波器可表示為一個細化的稠密矩陣,從而能夠借助現有的矩陣計算加速庫進行計算,Wen等[18]通過group lasso正則化來學習網絡結構的稀疏性; Lebedev等[19]分組修剪卷積核張量將卷積轉化為稀疏矩陣的乘法運算進行加速。雖然結構化剪枝通過直接移除整個通道或層的參數來達到模型壓縮加速的目的,不需要額外的硬件和軟件庫的設計,但是由于剪枝粒度較粗,容易造成性能嚴重損失,因此結構化剪枝的研究重點在于如何平衡性能和壓縮率。

根據剪枝率的作用范圍,剪枝還可以分為全局剪枝和局部剪枝。全局剪枝是對整個網絡模型指定一個全局剪枝率,按照一定的標準對所有參數進行裁剪使得網絡模型滿足整體的剪枝率;局部剪枝則是指定某一層的剪枝率,使得這一層被裁剪的參數量滿足剪枝率的要求。此外,根據剪枝是否一次完成可以將剪枝分為迭代剪枝和非迭代剪枝,其示意如圖2所示。

圖2 全局剪枝、局部剪枝、迭代剪枝、非迭代剪枝示意Fig.2 Schematic diagram of global pruning , local pruning, iterative pruning and non-iterative pruning

剪枝不僅可以用來進行模型的壓縮,還可以加速訓練過程。對訓練過程中計算的梯度進行剪枝可以降低反向傳播階段的計算量,從而起到了加速訓練的效果。Ye等[20]通過基于分布的閾值確定 (distribution based threshold determination,DBTD)方法計算過濾閾值,結合隨機剪枝算法對特征值梯度裁剪以降低反向傳播過程的計算量,加速了訓練的過程。

總結之前的研究,得到剪枝的優點主要包括:

1)降低計算量和內存消耗:剪枝通過減少神經網絡中的參數量來減少計算量和內存消耗,使網絡輕量化從而便于在嵌入式或移動端等資源受限的環境中部署。

2)降低過擬合風險:剪枝可以起到稀疏正則化作用,在合理的剪枝率設置情況下,剪枝通過去除神經網絡中冗余的連接提高模型的泛化能力,降低過擬合風險,提高模型性能。

剪枝的缺點主要包括:

1)訓練復雜度提升:由于剪枝可能會造成模型精度的下降,而且一些方法[21]在訓練過程中逐步提高剪枝率,因此需要對神經網絡迭代進行剪枝和訓練,消耗更多的計算資源和時間。

2)人工超參數調節:剪枝率、剪枝閾值等超參數一般需要人為指定,這需要算法工程師豐富的經驗。較低的剪枝率可能壓縮比達不到部署的要求;較高的剪枝率可能導致模型精度的嚴重下降。

1.2.2 量化

量化是指降低網絡參數的位寬來壓縮模型和高效計算??闪炕木W絡參數包括權重、激活、梯度和誤差等,各類網絡參數量化后的位寬既可以統一,也可以采用一定的策略組合不同的位寬來平衡壓縮率與精度。量化后的數據分布可以是均勻的也可以是非均勻的;均勻量化的數據分布間隔是統一的,實現較為簡單,但是容易受到量化前數據分布中的離群值的影響產生較大的精度損失;非均勻量化基于對數分布或聚類方法,在一定程度上降低量化帶來的精度損失。

根據量化后參數的位寬,量化分為INT8量化、極低比特量化、混合精度量化等,目前業界較為常用的量化方式為INT8量化。Tim等[22]將32位的梯度和激活值量化為特殊的8位浮點數實現并行加速;Jacob等[23]引入偽量化來模擬量化過程的誤差并將權重和激活值量化為8位定點數;低比特量化是基于二值化神經網絡[24]的改進,典型工作有二值量化[25-27]和三值量化[28-30],極低比特量化中乘法運算可以采用移位運算來替代,極大程度上壓縮加速了模型并簡化了硬件設計[31];極端追求高壓縮比和速度而使用極低比特量化會造成模型精度的嚴重下降,使用混合精度可以平衡壓縮加速和模型精度,Asit等[32]提出了寬低精度網絡 (wide reduce-precision network,WRPN)分別將權重和激活量化到2 bit和4 bit;Wang等[33]提出混合精度硬件感知自動量化(hardware-aware automated quantization with mixed precision , HAQ),引入強化學習自動找出每一層最合理的量化位寬;Zhang等[34]提出Learned quantization(LQnets)使量化器與網絡聯合訓練自適應調節量化位寬。除上述量化方法以外,Gong等[35]提出使用聚類方式量化參數數量龐大的模型,將k-means聚類用于量化全連接層參數。

根據量化是否涉及訓練,量化分為訓練后量化(post-training quantization , PTQ)和量化感知訓練(quantization-aware training , QAT),2種量化的一般流程如圖3所示。PTQ方法[27-29,32]在對訓練好的模型進行量化之后不再微調;而QAT方法[23,25-26,36]中量化因子可以在訓練中動態調整大小以達到最小的精度損失,因此一般比PTQ保持更高的精度。2類量化方法各有優缺點,PTQ方法精度損失較大,但不需要數據或者只要少量的校驗數據集進行校準,常用于非監督學習、小批量數據集的任務中;QAT方法量化模型效果好,但需要訓練過程復雜。

圖3 訓練后量化、量化感知訓練流程示意Fig.3 Schematic diagram of quantization and quantization perception training after training

此外,量化還可以用于分布式訓練加速,對訓練過程中產生的梯度進行量化可以在多級通訊傳輸梯度時減低傳輸帶寬的壓力,能夠更快地將梯度數據傳輸完畢。文獻[37-39]都對模型訓練過程中的梯度進行量化并且補償量化誤差,降低通訊延時并加快了收斂速度。

總結之前的研究,發現量化的優點主要包括:

1)節約存儲資源:量化降低參數位寬、節約存儲資源。以INT8量化[22-23]為例,量化后模型參數從32位浮點數壓縮為8位整數,模型占用存儲量理論上縮小為原來的1/4,這大大節約了存儲資源。

2)加速模型計算:在INT8量化[22-23]中,量化后計算量降低為原來的1/4,并且處理器進行整數計算的速度快于浮點數運算速度,因此模型推理速度有效提升。對于二值量化[25-27]和三值量化[28-29],浮點數乘法器可以使用更簡單快速的運算器來替代(如XNOR或pop-count邏輯門),這不但提高了運算速度,而且便于在計算資源受限的移動端或嵌入式設備部署模型。

3)降低功耗:一方面,模型計算量的降低節約了功耗;另一方面,模型存儲量的減少降低了訪存次數和對訪存帶寬的需求,這降低了DRAM訪存帶來的延遲和功耗。

量化的缺點主要包括:

1)模型精度損失:量化后模型的權重和激活值的位寬下降,導致模型精度下降,因此需要根據任務需求權衡模型精度和計算效率。

2)訓練過程復雜:為保證量化精度損失最小,在QAT[23,25-26,36]的過程中需要先插入偽量化節點再進行訓練,訓練過程更為復雜。

1.2.3 知識蒸餾

知識蒸餾是利用大型教師模型的知識來監督小型學生模型訓練的方法。與剪枝、量化從待壓縮模型中壓縮得到輕量化網絡模型不同的是,知識蒸餾的輕量化模型一般需要額外單獨設計,近年來使用剪枝、量化得到的輕量化模型作為學生模型的研究日益增多,并成為一種新的趨勢,本文將在第3節重點介紹。學生模型的選擇是知識蒸餾的難點和關鍵點,直接影響蒸餾效果,文獻[40]歸納了現有研究中的學生模型的選擇:“學生網絡通常被選擇為:1)教師網絡的簡化版本,層數更少、每層的通道也更少;2)保留網絡結構的教師網絡的量化版本;3)具有高效基本操作的小型網絡;4)具有優化的全局網絡結構的小型網絡;5)與教師相同的網絡?!?/p>

教師模型向學生模型傳遞的知識包括預測概率、特征圖、注意力映射、結構特征等。知識蒸餾中的知識類型有輸出特征知識、中間特征知識、關系特征知識以及結構特征知識。早在2006年Buciluǎ等[41]就已經提出使用小模型模仿大模型特征來提升小模型性能的方法,但直到2015年Hinton等[42]將溫度因子T引入softmax函數得到軟化的概率分布作為小模型的軟標簽進行模仿后,知識蒸餾方法才開始得到更為廣泛的關注。硬標簽與軟標簽示意如圖4所示。Mirzadeh等[43]發現,并非教師模型性能越高對學生模型的學習越有利,當教師模型和學生模型存在容量差異過大時,學生模型直接模仿教師網絡的輸出特征知識往往效果不佳,為此他們提出了助教策略來縮小教師模型與學生模型之間的容量差距以取得更好的蒸餾效果。教師模型的輸出特征知識提供的信息有限,教師模型的中間層同樣也含有重要的知識,Romero等[44]提出了FitNets方法以訓練在當時難以優化的深層神經網絡,首次使用了教師模型的特征圖作為學生模型的模仿對象;Zagoruyko等[45]基于FitNets使用注意力圖代替特征圖,提出了注意力轉移(attention transfer)方法。中間特征知識往往憑經驗選取,并且僅使學生模型的中間層模仿相對應的教師模型的中間層;Junho等[46]將2個特征層的內積定義為FSP矩陣并以此表示這2個層之間的關系,學生模型通過教師模型的解決方案流程 (flow of the solution process,FSP)矩陣學習其關系特征,首次引入了關系特征知識;Xu等[47]綜合了輸出特征、中間特征和關系特征作為結構特征知識提出了整體知識蒸餾(integral knowledge distillation,IKD),將知識蒸餾從分類問題拓展到人體姿態估計問題。隨著研究的開展,知識的選取從最初的輸出特征發展到中間特征、關系特征以及融合前3種特征的結構特征,知識蒸餾的應用也從最初的分類任務拓展到其他任務中。

圖4 硬標簽與軟標簽示意Fig.4 Hard label and soft label

根據教師模型是否和學生模型一起更新參數可以分為離線蒸餾(offline distillation)、在線蒸餾(online distillation)以及自蒸餾(self distillation)。離線蒸餾通常需要先得到訓練完備的高性能教師模型然后再進行知識蒸餾得到輕量化的學生模型,因此訓練過程一般分為2個階段;在離線蒸餾學習的過程中教師模型只進行推理而不更新參數,大部分研究[41-45]使用離線蒸餾學習范式。離線蒸餾方法簡單易行,但是需要高性能的教師模型,而且不能保證教師模型與學生模型匹配。針對離線蒸餾的訓練周期長、師生模型容量差距[43]的問題,在線蒸餾對高性能教師模型沒有嚴格要求,蒸餾過程中教師模型與學生模型同步更新參數,因此只需要一個階段就可以完成訓練。自蒸餾是學生模型從自身進行蒸餾的特殊的在線蒸餾方法,無需額外構造教師模型,通過將深層信息回傳給淺層指導訓練[48]或迭代前模型指導迭代后模型訓練[49]的方式實現模型性能的提升。離線蒸餾、在線蒸餾和自蒸餾如圖5所示。

圖5 離線蒸餾、在線蒸餾、自蒸餾示意Fig.5 Schematic diagram of off-line distillation, on-line distillation and self-distillation

總結之前的研究,我們發現知識蒸餾的優點主要包括:

1)提高學生模型精度:學生模型同時學習教師模型的知識和標簽訓練后的精度往往高于直接使用標簽訓練的小模型的精度,甚至能夠達到接近教師模型的精度,有“青出于藍而勝于藍”的效果。

2)無需人工設置壓縮率:與剪枝、量化等輕量化算法通過壓縮原始模型得到輕量化模型不同,知識蒸餾一般需要額外構造輕量化模型作為學生模型,不需要人工設置壓縮率。

3)便于與其他輕量化算法結合:經過知識蒸餾后得到的高性能的輕量化模型還能繼續使用剪枝、量化等方法進行進一步的壓縮加速以達到更高的壓縮率;或者使用知識蒸餾恢復壓縮后模型的精度。

知識蒸餾的缺點主要包括:

1)訓練過程復雜:離線蒸餾一般需要先訓練得到高性能教師模型然后再使用教師模型對學生模型進行知識蒸餾,這增大了訓練成本和時間。除此之外,知識蒸餾需要針對不同的任務構造合適的損失函數以達到知識傳遞的效果,這增加了訓練的計算復雜度。

2)使用場景局限:知識蒸餾使用場景受限有網絡結構和應用場景兩方面原因。在網絡結構方面,知識蒸餾算法通常用于壓縮結構化的神經網絡如卷積神經網絡,但對于非結構化神經網絡如循環神經網絡或圖神經網絡知識蒸餾算法需要針對其特殊結構改進;在應用場景方面,由于知識的定義和蒸餾損失函數的構造上的困難,知識蒸餾方法最廣泛的應用仍是在分類任務。

3)模型匹配與超參數調節問題:當教師模型和學生模型容量差異過大時學生模型的性能可能反而下降[46],因此師生模型的匹配是知識蒸餾面臨的挑戰。此外,知識蒸餾中的超參數如溫度因子、權重因子的設定和調節也需要一定的經驗。

1.3 模型壓縮加速評價指標

1.3.1 壓縮程度評價指標

參數減少量是評價模型參數量減少的絕對值,壓縮率是評價模型參數量減少的相對值。前者為模型壓縮后減少的參數量,后者為原模型參數的存儲量與壓縮后模型參數的存儲量的比值。壓縮率定義為

式中:μ為壓縮前模型的存儲量,μ′為壓縮后模型的存儲量。

1.3.2 加速效果評價指標

浮點運算數(floating point operations, FLOPs)是評價模型計算復雜度的指標,可以用來衡量模型加速效果的絕對值。對于計算機視覺任務而言,每秒傳輸幀數(frames per second, FPS)是衡量模型每秒處理的圖片數的重要指標。此外,在同一硬件設備上的推理時間可以用來衡量模型加速的相對值,加速率定義為

式中:ν為壓縮前模型的推理時間,ν′為壓縮后模型的推理時間。

1.3.3 模型性能評價指標

不同任務對模型性能有不同的評價指標,模型的性能不嚴重損失是模型壓縮的一個重要前提。常見的計算機視覺任務有分類、目標檢測、語義分割等,詳細介紹各個任務的性能評價指標并不是本文的重點,因此在這里只列舉分類任務和目標檢測任務的常用指標。

在分類任務中常使用準確率和錯誤率來評判模型的性能,準確率是指預測結果中排名靠前的k個值的準確率,k一般取1或5;相反的,錯誤率表示預測結果中排名靠前的k個值的錯誤率。

在目標檢測任務中常使用mAP@k作為模型性能的評價指標,平均精度 (mean average precision, mAP)表示在交并比(intersection over union,IoU)閾值為k的條件下各個檢測類平均精度(average precision , AP)的平均值。AP是綜合了準確度(precision)和召回率(recall)的每個檢測類別的評價指標,設某一類別C的精度(precision)與召回率(recall)的函數為P(x),則AP定義為

IoU是衡量網絡模型預測框與真實框重合程度的指標,定義為

式中:模型預測框P與真實框GT重疊區域的面積為S∩,模型預測框P與真實框GT覆蓋的總面積為S∪。

2 神經網絡壓縮聯合優化方法

盡管各種壓縮方法都從獨特的角度對模型壓縮和加速做了深入的研究,但目前大多數研究都局限于各自的方向中,而涉及到如何有效結合各種方法進行聯合優化的問題時,因其問題的復雜度較高還未形成成熟的研究。本文總結大量文獻所提出的聯合壓縮加速方法,將其按照組合類型分為“知識蒸餾+剪枝”、“知識蒸餾+量化”和“剪枝+量化”3類,將在下文一一闡述。

2.1 知識蒸餾+剪枝

知識蒸餾與剪枝聯合進行模型壓縮加速主要應用于卷積神經網絡[50-61],近年來也出現了對Transformer模型[62-63]及強化學習代理網絡[64,65]的壓縮加速。結合方式主要分為先剪枝后蒸餾[50-58,65]、先蒸餾后剪枝[51,59]、邊蒸餾邊剪枝[60-63]3類。

本文調研的剪枝與知識蒸餾相結合的文獻中所使用的剪枝、知識蒸餾方法及兩者之間的結合方式統計如表1所示。

表1 本文所整理的“知識蒸餾+剪枝”文獻方法匯總Table 1 Summary of the literature methods of “knowledge distillation + pruning” organized in this paper

2.1.1 先剪枝后蒸餾

先剪枝后蒸餾方法按照知識蒸餾中師生模型的選擇細分為3種方法,如圖6所示。

圖6 先剪枝后蒸餾方法分類示意Fig.6 Schematic diagram of pruning before distillation method classification

深度神經網絡在剪枝后精度往往會下降,微調能夠在一定程度上恢復剪枝后的模型精度,但當裁剪掉過多的參數時,剪枝后模型容量會大幅度下降以至于無法恢復到原來的精度。學生網絡的設計是知識蒸餾的難點和關鍵點,直接影響知識蒸餾后模型的性能。文獻[66]通過實驗證明:學生模型和教師模型網絡結構的相似性與最終的蒸餾性能呈正相關,即教師模型與學生模型結構越相似,蒸餾效果越好?;谏鲜霈F象,可以對教師模型剪枝來構造結構相似的學生模型,使用知識蒸餾替代微調的過程彌補剪枝造成的精度損失,實現剪枝和知識蒸餾方法的互補結合。在這類方法的知識蒸餾過程中,通常使用剪枝后模型作為學生模型,剪枝前模型作為教師模型以達到更好的知識傳遞效果[50-55,65],但也有個別方法使用額外構造的高精度教師模型[54]。很多研究[16,50-51,65,67-68]組合已提出的剪枝和知識蒸餾方法來進行聯合壓縮和加速,如Li等[67]使用未剪枝的單次多檢測器 (single shot multiple detector, SSD)作為教師模型對Network Slimming剪枝[16]后SSD目標檢測模型進行在線蒸餾以提高檢測精度。針對手動調參的局限性,Wu等[50]在剪枝和知識蒸餾聯合壓縮的基礎上引入了超參數自動優化算法,利用現有的模型剪枝技術設計學生模型并在知識蒸餾過程中使用NNI(neural network intelligence)自動參數調整工具自動優化知識蒸餾中的3個重要的超參數:溫度因子、權重因子及剪枝率,以自動得到最優的實驗壓縮效果,克服手動調參的局限性。Xu等[65]在深度強化學習中結合剪枝和策略蒸餾[68],對深度Q網絡 (deep Q-network, DQN)代理網絡進行壓縮以部署在資源有限的嵌入式系統中。Wu等[51]探究了6種不同的剪枝方法與知識蒸餾的結合,實驗證明了先剪枝后蒸餾的方法的效果與剪枝方法、模型結構、數據集大小相關,需要多方面聯合優化,為后續針對特定應用設計剪枝與知識蒸餾聯合壓縮方法提供了理論支持。

上述研究中剪枝和知識蒸餾都利用已提出的方法,許多研究都針對特定的應用場景設計了新的剪枝或知識蒸餾方法以實現更好的模型壓縮加速效果。在模型中有非連續卷積(如倒殘差結構[9])的情況下,并不能直接應用常規剪枝方法,Aflalo等[52]將背包問題表述為一種新的剪枝方法,并提出了一種新的知識蒸餾方法內知識蒸餾(inner knowledge distillation, IKD)用于彌補剪枝造成的精度損失;IKD方法利用剪枝前后師生結構相似性使用網絡內層的特征圖作為知識引導學生模型學習教師模型的內層映射;在他們的方法中,先對原始模型背包剪枝得到輕量化的學生模型,再使用原始模型作為教師模型進行IKD恢復精度。針對少樣本知識蒸餾的場景,Zhou等[53]提出了漸進特征分布蒸餾 (progressive feature distribution distillation, PFDD)旨在恢復少樣本場景下模型剪枝造成的精度損失;PFDD方法使用特征圖作為蒸餾知識,使用中間特征層的Gram矩陣計算最大平均差異 (maximum mean discrepancy,MDD)作為蒸餾損失來訓練學生模型以匹配教師模型的特征圖,并使用漸進式訓練策略重點關注損失函數中占比最大的損失,以充分利用樣本信息。在該方法中,先使用Network Slimming剪枝[16]得到學生模型,再使用原始模型作為教師模型對學生模型進行PFDD以恢復精度損失。

廣泛應用于軍事和民用的孔徑合成雷達(synthetic aperture radar , SAR)自動目標識別(automatic target recognition , ATR)對網絡模型的實時性和準確性有嚴格要求,對于SAR ATR場景部署的網絡模型往往需要輕量化網絡設計、剪枝、蒸餾等多種方法聯合進行壓縮加速,且需要針對其特殊性對傳統壓縮方法進行改造。Zhang等[54]聯合通道剪枝、知識蒸餾和權重共享實現了SAR目標檢測模型的壓縮加速,他們首先使用逐層通道迭代剪枝得到輕量化模型,然后使用高性能預訓練模型作為教師模型對剪枝后模型知識蒸餾,最后使用k-means實現權值共享進一步壓縮模型。與先前方法不同的是,該方法知識蒸餾階段使用高性能SAR目標檢測網絡作為教師模型,而非剪枝前的原始模型。Chen等[55]針對SAR ATR場景,使用稠密連接和非對稱卷積設計了一種新型的DC-ACM YOLOv3(densely connected and ACMassisted YOLOv3)目標檢測器,并命名為Tiny YOLOv3-Lite,然后使用通道剪枝降低參數量,并提出了一種新的知識蒸餾方法特征相互關系知識蒸餾 (feature inter-relationship knowledge distillation,FIR KD)進一步提升模型精度。Wang等[56]使用SE模塊構建了輕量化的CA-Net,提出了一種基于注意力的結構化剪枝方法用于壓縮CA-Net,并提出了一種基于橋接的知識蒸餾方法恢復剪枝后CA-Net的精度。

現有的先剪枝后蒸餾的聯合壓縮方法[50-56,65]發展趨勢為從直接使用已提出的剪枝、知識蒸餾方法進行聯合發展[16,50-51,65,67-68]為針對特定應用場景設計相應的剪枝、知識蒸餾方法進行聯合[51,53-56],都使用剪枝后的模型作為學生模型進行知識蒸餾,剪枝的目的是解決知識蒸餾中學生模型的構造問題,蒸餾的目的則是彌補由于剪枝造成的精度損失,2種方法聯合發揮了更好的壓縮效果。

教師模型的選擇直接決定了知識蒸餾的效果,盲目組合高性能教師模型和輕量化的學生模型往往效果不盡人意,當復雜教師模型和簡單學生模型之間容量差異過大時,知識蒸餾效果往往不佳[43]。文獻[69]也表明,當學生模型沒有足夠的函數擬合能力時,受過較少訓練的教師模型蒸餾效果更好,而使用剪枝后模型作為學生模型會進一步拉大教師模型與學生模型的容量差距,這可能影響知識蒸餾的效果?;谝陨嫌^點,文獻[57-58]使用剪枝后的模型作為教師模型以降低師生模型容量差異。Aghli等[57]提出了一種聯合剪枝和知識蒸餾用于壓縮具有殘差結構的神經網絡的方法,針對殘差塊連接的特點,使用激活值的平均零點百分比(average percentage of zeros ,APoZ) 作為神經元重要性判據進行剪枝;并提出了一種新的知識蒸餾方法,將剪枝后的模型作為教師模型、額外構造的輕量化的網絡作為學生模型,通過分層最小化師生特征圖之間的余弦相似度損失以使得學生模型模仿教師模型的特征圖。Park等[58]提出了Prune then distill方法,使用剪枝后的模型作為教師模型對額外構造的輕量化學生模型進行知識蒸餾。

上述先剪枝后蒸餾的方法中師生組合方式截然不同,前者[50-27,65]使用剪枝后的模型作為知識蒸餾中的學生模型,而后者[57-58]使用剪枝后的模型作為知識蒸餾中的教師模型,產生上述不同的根本原因在于指導思想不同。前者使用知識蒸餾來彌補剪枝造成的精度損失,其工作中心在于盡可能提高剪枝率;而后者使用剪枝來降低知識蒸餾中師生模型的容量差異,其工作中心在于盡可能提高蒸餾效果。

2.1.2 先蒸餾后剪枝

先蒸餾后剪枝方法通常對知識蒸餾得到的學生模型進一步壓縮以得到更加輕量化的模型,如圖7所示。

圖7 先蒸餾后剪枝方法分類示意Fig.7 Schematic diagram of classification by distillation before pruning

文獻[59,70]使用先蒸餾后剪枝的方法來聯合2種壓縮方法,即先進行知識蒸餾得到高精度的學生模型,然后對學生模型進行剪枝以進一步壓縮模型。Li等[70]聯合剪枝和知識蒸餾壓縮語音識別系統的聲學模型,即先使用知識蒸餾得到高精度的學生模型,然后對學生模型進行權重剪枝以進一步壓縮模型參數,最后對剪枝后的模型進行微調恢復模型精度,剪枝和微調迭代進行以最大程度壓縮模型。Che等[59]提出了聯合剪枝和知識蒸餾的方法知識蒸餾和剪枝聯合方案 (hybrid approach on knowledge distillation and pruning,HKDP),使用一種分階段知識蒸餾方法以得到高性能的學生模型,然后使用一種基于隨機梯度下降(stochastic gradient descent,SGD)的迭代剪枝方法進一步壓縮學生模型;在分階段知識蒸餾中,學生模型在一輪訓練中只優化某一階段的網絡參數,其他參數凍結;在SGD迭代剪枝中,每一輪剪枝后微調以恢復模型精度,迭代修剪直到模型被壓縮到目標剪枝率。文獻[59,70]在剪枝階段使用硬標簽進行微調,缺乏教師模型的監督信息,因而模型性能恢復有限。Prakosa等[71]提出了先蒸餾再剪枝后蒸餾的方法,即先知識蒸餾得到高性能的學生模型,再剪枝進一步壓縮學生模型,最后使用知識蒸餾恢復剪枝后學生模型的精度。

先剪枝后蒸餾[50-58,65]和先蒸餾后剪枝[67,72]2類方法在聯合順序上截然相反,其根本原因在于算法設計的出發點不同。先剪枝后蒸餾旨在利用知識蒸餾彌補由于剪枝造成的精度損失,而先蒸餾后剪枝旨在進一步壓縮本就輕量級的學生模型。

2.1.3 邊剪枝邊蒸餾

邊剪枝邊蒸餾方法按照知識蒸餾中師生模型的選擇細分為2種方法,如圖8所示。

圖8 邊剪枝邊蒸餾分類示意Fig.8 Schematic diagram of distillation classification while pruning

上述研究所提出的方法中,無論是先剪枝后蒸餾[50-58,65]、先蒸餾后剪枝[67,72]還是先蒸餾再剪枝后蒸餾[71],其剪枝和蒸餾階段分別進行,學生模型在剪枝的過程中缺乏高精度模型的監督,使得模型剪枝后往往難以保持精度,且訓練過程復雜、周期長、計算成本高,因此有研究[60-63]提出了端到端的壓縮加速方案,即邊剪枝邊蒸餾。在邊剪枝邊蒸餾的方案中,所使用的剪枝方案一般為迭代剪枝,知識蒸餾中學生模型一般都是剪枝后的模型,教師模型可以是剪枝前的模型[60,62-63]也可以是額外構造的高性能模型[61],使用知識蒸餾替代每輪剪枝后的微調過程,實現剪枝和知識蒸餾的結合。Chen等[60]提出了邊剪枝邊蒸餾的聯合壓縮方法,在迭代剪枝的一輪修剪中,先剔除模型中冗余參數并將其作為學生模型,再使用原始模型作為教師模型進行知識蒸餾以恢復模型精度。Yao等[61]結合知識蒸餾和通道剪枝來壓縮語義分割網絡,所使用的通道剪枝方法使用批量歸一化(batch normalization,BN)層的L1范數作為評價通道重要性指標,邊剪枝邊蒸餾逐步壓縮模型。Cui等[62]結合結構化剪枝和密集知識蒸餾提出了聯合模型壓縮 (joint model compression, JMC)方法用于大型Transformer壓縮,提出了一種新的直接重要性剪枝感知結構化剪枝(direct importance-aware structured pruning , DISP)方法,和一種采用多對一層映射策略的密集知識蒸餾(dense knowledge distillation , DKD)以更全面地利用分層語言知識進行蒸餾;JMC方法將DISP和DKD聯合,在一輪迭代剪枝中,先使用DISP修剪層數較少的學生模型,再使用DKD恢復模型精度,不斷迭代直到達到目標剪枝率。由于自注意力機制的引入,視覺自注意力模型 (vision transformer, ViT)模型結構復雜、參數冗余度低,直接使用卷積神經網絡(convolutional neural network,CNN)的剪枝方法來壓縮ViT會造成精度嚴重損失,Xu等[63]將知識蒸餾引入ViT的剪枝過程中,提出了知識蒸餾集成剪枝(knowledge dsitillation integrated pruning , KDIP),在待剪枝層之前引入一個重要性得分學習模塊來評估刪減參數矩陣的每個維度,以確保刪減模型冗余的維度,并使用知識蒸餾彌補剪枝引起的精度損失,反復迭代修剪直到達到目標剪枝率。

綜上所述,知識蒸餾作為一種高性能輕量化模型的訓練方法可以有效彌補剪枝造成的精度損失,同時剪枝可以作為知識蒸餾中學生模型[50-56,65]或教師模型[57-58]的構造來源。絕大多數的研究都針對特定場景對剪枝或蒸餾方法進行了優化,但是剪枝和知識蒸餾的結合方式基本分為先剪枝后蒸餾、先蒸餾后剪枝、邊剪枝邊蒸餾3類。

2.2 知識蒸餾+量化

知識蒸餾與量化聯合進行模型壓縮加速結合方式主要有先量化后蒸餾[72-78]和邊量化邊蒸餾[74,77]兩大類。根據學生模型的來源,先量化后蒸餾這一類可以分為學生模型單獨設計[76]和學生模型由量化得到[30,72,74-75,77-78]2種情況,

本文調研的量化與知識蒸餾相結合的文獻中所使用的量化、知識蒸餾方法及兩者之間的結合方式統計如表2所示。

表2 本文所整理的“知識蒸餾+量化”文獻方法匯總Table 2 Summarizes the literature methods of "knowledge distillation + quantization" organized in this paper

2.2.1 先量化后蒸餾

先量化后蒸餾方法按照知識蒸餾中師生模型的選擇細分為3種方法,如圖9所示。

圖9 先量化后蒸餾方法分類示意Fig.9 Schematic diagram of quantization before distillation method classification

文獻[72]證明知識蒸餾能夠很大程度上彌補由于量化導致的模型參數位寬減少而造成的模型精度損失,因此知識蒸餾常用來代替量化后的微調過程以獲得更高精度的輕量化網絡模型,基于這種思想提出的聯合優化方法往往需要先量化壓縮得到低位寬模型再使用知識蒸餾彌補量化造成的精度損失,是兩階段的模型壓縮加速方法。Mishra等[73]首次結合知識蒸餾與量化提出了Apprentice方法,針對不同的訓練過程提出了3種方案,論證了3種方案各自的優缺點并通過實驗證明了方案3在恢復極低比特量化精度上效果最優。量化蒸餾 (quantized distillation, QD)[79]方法在4、8 bit量化時具有良好的性能,但在2 bit及以下量化的時候具有嚴重精度損失,Min等[74]針對QD在三值網絡上的不足與SAR目標檢測應用場景的特殊性,提出了漸進蒸餾(gradually distillation , GD)訓練方法,設計了一種輕量化的三值微型卷積神經網絡(micro convolutional neural network,MCNN),并使用未訓練的全精度教師模型與學生模型MCNN進行在線蒸餾,得到了高精度的實時SAR目標檢測器。

文獻[40]發現,并非教師模型性能越高對學生模型的學習越有利,當復雜教師模型和簡單學生模型之間容量差異過大時,學生模型直接模仿教師網絡的輸出特征知識往往效果不佳,而使用量化后的低位寬網絡作為學生模型會進一步拉大教師模型與學生模型的容量差距,這嚴重影響知識蒸餾的效果,因此許多研究的重點在于如何降低兩者之間的差距以達到更好的知識蒸餾效果。針對模型容量差距問題和Apprentice方法[73]中的初始化問題,Kim等[75]提出了量化感知知識蒸餾(quantization-aware knowledge distillation,QKD)方法使用SS+CS+TU 3階段訓練以得到更高精度的量化后低位寬模型,緩解了模型容量差距和初始化問題的影響,得到了更高效的輕量化網絡。Okuno等[76]提出了“無損AI”(lossless AI)的模型壓縮概念,并提出一種知識蒸餾方法將BN層統計數據凍結以進行推理結果的對齊,并使用量化前的全精度模型作為教師模型、量化后的模型作為學生模型進行知識蒸餾,從而保證模型壓縮前后推理結果之間的一致性。

大多數模型壓縮方法[61,70,72,74,76-78,80]將量化后的低位寬模型用于部署,而Wei等[81]提出的量化模仿(quantization mimic)方法中最終部署的是全精度的輕量化學生模型。Quantization Mimic方法[81]使用量化后的低位寬網絡作為教師模型、全精度的輕量化網絡作為學生模型以降低教師模型與學生模型之間的容量差距,從而達到更好的知識蒸餾效果。此外,Wei等[81]還使用量化對教師模型和學生模型的輸出特征圖進行離散化以促進2個網絡輸出特征圖之間的匹配,從而降低學生模型的模仿難度。與3.2.1節先剪枝后蒸餾方法的師生組合類似,上述先量化后蒸餾的方法中師生組合方式截然不同,前者[64,73-78]使用量化后的模型作為知識蒸餾中的學生模型,而后者[76]使用量化后的模型作為知識蒸餾中的教師模型。其根本原因也在于基本思想不同,前者使用知識蒸餾彌補由于量化造成的精度損失,以盡可能達到更低的量化位寬,其重點在于量化壓縮;后者使用量化來降低師生容量差距,以盡可能地提高蒸餾精度,其重點在于知識蒸餾。

在知識蒸餾中,一個常見的問題是如何構造學生模型使之能夠與教師模型匹配從而達到更好的蒸餾效果,而量化正是構造輕量化學生模型的常見方法,現有的大多數研究[64,73-77]都使用量化的方式獲得輕量化的模型作為知識蒸餾中的學生模型。文獻[77]將使用全精度模型作為教師模型指導量化后的低位寬模型作為學生模型進行知識蒸餾的方法定義為自蒸餾量化。不同于大多數研究需要額外構造高性能的全精度教師模型,自蒸餾量化[75,77,80]在整個模型壓縮的過程中只需要一個全精度模型,無需另外構造并訓練一個高性能網絡作為教師模型,這拓展了“量化+知識蒸餾”方法的使用范圍。

如上文所述,知識蒸餾的使用場景受限于知識的定義和損失函數的構造通常應用在計算機視覺中的分類問題中,若要拓展到其他領域,需要根據應用場景定義知識和構造相應的損失函數。Kim等[78]針對Transformer的特點改進了先前用于QAT的知識蒸餾技術,他們使用注意力圖損失替代注意力得分損失并逐層引導量化的Transformer模型的知識蒸餾,實現了Transformer模型在2 bit及以下位寬QAT量化的最佳精度。

隨著人們對數據隱私和安全保護意識的提高,在某些特定應用場景下用于模型壓縮的數據集的獲取變得越來越困難,但是對大規模冗余模型輕量化的需求仍然存在,這就需要無數據模型壓縮技術。針對數據隱私和安全性導致的無數據集情況下的模型壓縮問題,Choi等[80]將對抗學習與知識蒸餾、量化相結合,提出了對抗性知識蒸餾量化方法,使用生成器合成的樣本作為全精度教師模型和由教師模型量化得來的學生模型的輸入,并將生成的數據與教師模型中的原始數據進行批量歸一化層的匹配以保證生成器生成與原始數據相似的對抗性樣本,用于學生模型的知識蒸餾。

2.2.2 邊量化邊蒸餾

邊量化邊蒸餾方法中教師模型通常為原始模型,學生模型為量化后模型,如圖10所示。

圖10 邊量化邊蒸餾方法分類示意Fig.10 Schematic diagram of the classification of side quantization side distillation method

上述量化和知識蒸餾結合的方法量化和知識蒸餾的過程分別進行,訓練周期長、成本高,有研究[74,77]提出了邊量化邊蒸餾訓練方法。這類方法中的量化一般使用QAT,使用知識蒸餾作為量化模型感知訓練的方法,實現量化和知識蒸餾的結合。Polino等[79]分別針對量化后低位寬模型的知識蒸餾和全精度模型的量化提出了量化蒸餾(quantized distillation, QD)和可微分量化(differentiable quantization, DQ);QD使用待壓縮的模型A和高精度高延遲的模型B等2個模型,使用模型B作為教師模型對量化后的模型A進行迭代知識蒸餾最終得到用于部署的學生模型;DQ則是一種的PTQ方法,通過在量化后微調彌補量化造成的精度損失。Si等[77]提出了低比特量化蒸餾 (distillation for low bit quantization,DLBQ)方法使用特殊的知識蒸餾框架來提高極低比特量化模型的精度,為克服容量差距的問題,他們通過教師模型和學生模型共享全連接層參數來降低知識遷移的難度,此外,通過分析教師模型輸出中重要的數值提出了選擇性知識蒸餾,以進行更有針對性的知識蒸餾。DLBQ雖然實現了極低比特量化模型的知識蒸餾,但是由于共享全連接層的原因必須確保教師模型和學生模型在全連接層之前共享相同的輸出通道,因此該方法僅適用于網絡深度不同,但最終卷積通道數相同的情況。QD方法[79]和DLBQ方法[77]都實現了邊量化邊蒸餾的模型壓縮加速,即在模型壓縮的過程中量化和蒸餾同時進行,但量化模型位寬仍然取決于量化方法的選擇,因此不一定是平衡壓縮率和精度的最優解。

綜上所述,知識蒸餾作為一種訓練高性能的輕量化模型的方法通常用于彌補由于量化造成的精度損失,同時量化是構造知識蒸餾所需的輕量化學生網絡的一種方式[72,74-75,79-80]。針對知識蒸餾中模型容量差距問題可以使用量化后模型作為教師模型[76]或者設計合適的訓練方案[73,75-76,78]以保證知識更好的傳遞。特別的,在考慮數據安全與隱私性的領域,可以使用對抗學習生成樣本來進行知識蒸餾[78]。

總結3.2節和3.3節所概述的“知識蒸餾+剪枝”和“知識蒸餾+量化”的聯合方法,兩者具有許多共同的基本思想。首先,知識蒸餾作為一種輕量化網絡的高性能訓練方法,能夠有效彌補由于剪枝或量化造成的精度損失,同時剪枝或量化可以為知識蒸餾提供足夠輕量化的學生模型,因此大部分研究[30,50,65]使用剪枝或量化壓縮后的模型作為學生模型,使用壓縮前的模型作為教師模型進行知識蒸餾以獲取高性能輕量化網絡。但是由于知識蒸餾中的師生模型容量差距過大會影響蒸餾效果,有些研究[57-58,76]使用剪枝或量化后的模型作為教師模型以降低容量差距、提升蒸餾效果。由于知識蒸餾和剪枝、量化兩階段結合訓練周期長、成本高,且簡單的組合2種壓縮方法往往達不到最佳的壓縮加速效果,不少研究[60-63,78-79]提出了邊剪枝或量化邊蒸餾的端到端的壓縮加速方法,其中的剪枝或量化往往都是迭代進行,并引入蒸餾損失指導模型的訓練過程。

2.3 剪枝+量化

剪枝與量化聯合進行模型壓縮加速主要應用于卷積神經網絡[64,72,80,82-86],近年來也出現了應用于語音增強[87]、自然語言處理[88]和強化學習[64]的情景。剪枝與量化的結合方式主要分為先剪枝后量化[80,83,84,87-89]和邊剪枝邊量化[64,85-86]。剪枝操作根據其剪枝粒度的不同可分為結構化剪枝和非結構化剪枝。量化操作根據其量化精度的不同可分為固定精度量化,即所有權重量化精度一致;動態精度量化,即網絡不同部分各自選擇適合的精度;以及離散值量化,即保留少部分精度不變的離散值作為量化后的權重值,其余權重均量化為這些離散值。

本文調研的剪枝與量化相結合的文獻中所使用的剪枝、量化方法及兩者之間的結合方式統計如表3所示。

表3 本文所整理的“剪枝+量化”文獻方法匯總Table 3 Summary of the literature methods of “pruning + quantification” organized in this paper

2.3.1 先剪枝后量化

先剪枝后量化結合方式按照剪枝方法分為結構化剪枝和非結構化剪枝2類,又按照量化方法細分為5種方式,如圖11所示。

1)不同粒度的剪枝方法。

剪枝操作根據剪枝粒度的不同可分為非結構化剪枝和結構化剪枝兩大類。早期的方法中更多使用非結構化剪枝,其以權重為剪枝單位,通過權重大小來衡量權重的重要程度,對于值較小的權重則將其剪枝。該方法的優勢在于剪枝后能更好地維持原網絡的高性能,而劣勢在于計算量相對較大。剪枝程度通常使用設置的超參數閾值來控制,在超參數的選擇上也有很多方案,Han等[89]設置權重閾值,對低于該閾值的權重進行剪枝;而Paupamah等[82]通過實驗調整設置合適的剪枝率,對網絡不斷剪枝直到當前剪枝率已達到預先設定值。相比而言,設置剪枝率閾值能夠更有效地控制網絡的壓縮程度。此外,值得注意的是,Paupamah等[82]的研究還表明剪枝操作可用于輕量化網絡結構的進一步壓縮和復雜網絡過擬合的抑制。

目前使用更多的剪枝方法為結構化剪枝,其以卷積核通道或整個卷積核等整體結構為剪枝單位。其優勢主要在于計算量及所需要的權重存儲空間相對較小。通常的結構化剪枝方法使用一定的指標來衡量整體結構的重要性,對于不重要的結構進行剪枝,如Liberatori等[83]使用卷積核權重的L1范數作為衡量指標,對于一定量L1范數值較小的卷積核進行剪枝,剪枝的卷積核數量由預設的超參數剪枝率控制。

目前除上述提到的常用結構化剪枝方法外,也有一系列各具特色的新結構化剪枝方法被提出,以用于滿足更高的需求。Chang等[84]提出了一種基于批歸一化層不同通道規模系數的分布來進行剪枝的方法變分通道分布剪枝 (variational channel distribution prune,VCD prune)。該方法考察批歸一化層不同通道規模系數的分布,將該分布擬合為正態分布,并考慮該正態分布的方差。方差大意味著該通道重要性相對較低,應進行剪枝。對于剪枝程度,使用超參數方差閾值進行控制。Qi等[87]提出了一種輸出輸入通道聯合的稀疏度正則化剪枝方法。該方法考慮了2個連續層中前一層輸出通道和下一層對應輸入通道之間的關聯性,構造了輸入輸出通道聯合正則項,通過正則項約束來控制權重值從而進行剪枝。在具體剪枝過程中,通道權重的平方和作為相應的重要性衡量指標。每一迭代輪次均設置特定的剪枝率,在達到當前輪次剪枝率后,對網絡進行重訓練以提升其預測準確率。此外,對于如ResNet等包含多分支連接的網絡,僅考慮主通路層的關聯性,而暫時忽略其他分支連接。Wu等[88]提出基于稀疏度參數的參數剪枝方法,使用某通道中小于均值的權重數占通道總權重數的比例來表示稀疏度,稀疏度趨近于1,證明該通道重要性相對越低,故應被剪枝。在進行剪枝時,使用稀疏度閾值作為超參數控制剪枝程度。

可以看到,上述結構化剪枝方法雖各具特色,但其共同點在于提出了不同于傳統結構化剪枝方法的重要性衡量指標。這些指標相對于傳統結構化剪枝方法更為精細,有助于降低剪枝操作對預測精度帶來的損失。傳統非結構化剪枝注重精度,而結構化剪枝注重計算量與存儲空間的降低,這些新方法則是非結構化剪枝與結構化剪枝的折中。

此外,還有一些新剪枝方法能夠在特定情況下進行高效剪枝。Zheng等[85]提出基于帶偏置的置換塊對角掩碼矩陣的剪枝方法。塊對角掩碼矩陣會以掩碼形式保留當前塊對角線位置的權重,而將非對角線位置的權重置0,而偏置代表塊對角掩碼矩陣當前對角線的偏移量。該方法較一般的結構化剪枝方法精度更高,同時偏移的方式便于基于FPGA的壓縮加速設備的硬件實現,在獲得精度的同時也實現了高效。

2)不同精度的量化方法。

量化方法根據量化精度的不同可分為固定精度量化、動態精度量化和離散值量化3大類。目前最常用的量化方法即為固定精度量化,主要優勢在于便于實現,且通常量化為8 bit整型,便于權重的存儲,但也可根據實際情況調節,如文獻[83]中同時使用了8 bit固定精度量化和動態精度量化。一般在使用固定精度量化方法時,不僅會進行量化操作,還包含其他修正步驟,以避免直接量化帶來模型性能的大幅下降。Zheng等[85]在使用固定精度量化方法時,首先對權重進行歸一化,再對其進行對稱均勻量化。量化后,使用飽和操作對權重進行進一步修正。Qi等[87]基于固定精度量化提出了增量式量化方法,即量化與重訓練交替。在選取待量化權重時,可通過量化誤差最小化方法或網絡預測準確率波動最小化方法。在重訓練過程中,需要先將浮點數權重值轉化為固定精度再進行重訓練。

動態精度量化與固定精度量化類似,其區別在于動態精度量化會使用特定方法對網絡不同結構部分計算對應的最適合的量化精度。Paupamah等[82]使用的動態精度量化方法以通道為量化精度選擇單位,每個通道統一使用最適合當前通道的量化位數。Chang等[84]提出基于批歸一化層不同通道規模系數分布的混合精度量化方法。該方法與本文所使用的剪枝方法均基于所擬合的批歸一化層規模系數分布來進行,即方差越大,通道能容忍的量化誤差也越大,因而可以降低量化位數??梢钥吹?,動態精度量化的過程更為復雜,計算量比固定精度量化大,但降低了量化操作對網絡性能的影響,同時減少了次要權重的存儲精度,也節約了存儲空間。

離散值量化與上述2種量化方法差別較大,該方法以原精度存儲少量權重作為離散值,而其余權重均量化為上述離散值,僅存儲其對應的索引,從而實現模型壓縮。離散值量化相較固定精度量化精度更高,而相較動態精度量化計算量和權重所需存儲空間都很少。離散值的選擇方法也有多種,最為常見的情況是,在基于聚類的離散值量化方法中,選擇聚類中心作為離散值。Han等[89]提出的聚類量化方法和Wu等[88]提出的參數量化方法就是典型的基于聚類的量化方法,上述方法也均使用聚類中心作為離散值。在使用基于聚類的量化方法時,聚類的質量最終會影響量化的質量,因此上述研究也涉及如何對其中的聚類過程進行優化。首先,對于聚類類別數,Wu等[88]通過實驗方法選取類別數以實現模型精度和計算代價的較好平衡。其次,對于聚類中心初始化,Han等[89]提出了隨機初始化、基于密度的初始化及線性初始化3種方法,并通過實驗證明了線性初始化方法的最優性。值得注意的是,由于離散值量化的量化策略不同于前2種量化方法,其前向傳播和反向傳播過程與前2種方法相比也有一定差異。Han等[89]指出,前向傳播過程會記錄每個權重的值和索引,在反向傳播時相同索引的權重的梯度值進行相加,合成為一個梯度值,再用該值對離散化的權重值進行更新,最終訓練得到一組離散化權重。

2.3.2 邊剪枝邊量化

邊剪枝邊量化方法按照剪枝和量化方法的結合方式細分為3種方法,如圖12所示。

圖12 邊剪枝邊量化方法分類示意Fig.12 Schematic diagram of side pruning and side quantization method classification

先剪枝后量化的結合方式下,剪枝操作與量化操作依然是兩階段操作,一個階段進行優化時無法兼顧另一個階段,很難保證2個階段同時達到最優。因此,一系列邊剪枝邊量化的方法被提出,這些方法中剪枝和量化操作相互關聯、共同優化,最終得到最優的剪枝量化聯合策略。

Tung等[86]提出并行剪枝量化策略,該策略將剪枝過程和量化過程結合,每次迭代會對剪枝和量化同時進行優化。每次迭代過程中,并行剪枝量化操作包含3個步驟。首先,進行非結構化剪枝操作。其次,進行分區操作,對未剪枝區域進行分區。最后,進行離散值量化操作,同一區間的權重均量化為一個離散值,該離散值由該區間內所有權重求均值得到。該方法在每一迭代輪次內部依然是先剪枝后量化的過程,但每一迭代輪次的并行剪枝量化操作完成后均進行重訓練以實現精度恢復,在每一次重訓練的過程中均實現了對于剪枝和量化過程的同步優化,因而優于一般的先剪枝后量化策略。當然,該方法相比一般的先剪枝后量化的過程付出的計算代價也是更大的。

針對傳統神經網絡設計過程中網絡結構搜索,及網絡壓縮過程中剪枝、量化各階段分離的問題,Wang等[64]提出了將網絡結構搜索、剪枝、量化3階段合并的輕量化網絡設計策略。該方法基于超網絡架構設計和精度預測器設計實現。超網絡架構設計即神經網絡中如卷積核大小等超參數可以變動,而剪枝過程隨著超網絡訓練使得內部結構改變從而實現。這里使用結構化剪枝,對卷積核通道進行剪枝。對于精度預測器設計,其輸入為網絡結構策略編碼,輸出為預測精度估計。在精度預測器的微調階段,對于原網絡加入量化過程,使精度預測器由網絡策略編碼、量化策略編碼得到預測準確率。使用該預測器,可以同時得到最優的網絡結構策略和量化策略,即最優的剪枝操作和量化操作。該方法通過學習網絡架構設計的方式可協同進行剪枝和量化策略的調優,其中蘊含著元學習的思想。

Gil等[93]提出了一種高效協同完成剪枝與量化操作的深度神經網絡壓縮方法,即均勻變分網絡量化器(uniform variational network quantizer,UVNQ)。其中的剪枝方法為基于網絡正則化隨機失活技術(dropout)的非結構化剪枝,即為每個神經元設置對應的隨機失活幾率以進行剪枝。其中的量化方法為動態精度量化,即對每個權重使用不同的量化精度,其量化精度由上述訓練得到的剪枝幾率來控制。本文提出的方法作為協同完成剪枝與量化操作的方法,其協同主要體現在剪枝與量化操作之間的關聯性。在訓練開始前,需要給出一個代表最大量化精度的超參數,該超參數為剪枝幾率設置了邊界值,以保證在訓練過程中網絡表現不會大幅下降;在訓練結束剪枝完成后,量化操作的量化精度也要通過剪枝幾率計算得到。

從上述文獻可以看出,邊剪枝邊量化策略通常比先剪枝后量化策略計算量大,這正是兩階段協同調優以降低網絡壓縮后性能損失的代價。在實現剪枝量化協同的方式上,Tung等[86]和Gil等[93]的研究更多是先剪枝后量化方法的延申,將先剪枝后量化的過程多次迭代,或是使先進行的剪枝操作和后進行的量化操作產生關聯;而Wang等[64]的研究相當于是各種剪枝策略與各種量化策略的組合,相較而言考慮了更多協同調優的可能性,也更易取得較好的效果,但同樣地計算量也會更大。

綜上所述,剪枝操作通過調整模型結構進行模型壓縮,而量化操作通過調整參數存儲量進行模型壓縮。對于剪枝與量化的結合,可以按照次序進行操作[80,83-84,87-89],也可以協同進行[64,85-86],兩階段操作互相影響,共同優化。大部分研究都根據需求對剪枝或量化方法進行了改進,但剪枝和量化的基本結合方式還是可以分為先剪枝后量化、邊剪枝邊量化兩大類。

3 結束語

神經網絡在端側部署離不開模型壓縮加速技術,日益高漲的產業需求正推動其蓬勃發展。但目前的方法在產品化實際部署水平上還有很大的發展空間,下面是幾個值得關注和探討的重點研究方向。

3.1 多方法深度聯合

現有的聯合模型壓縮方法往往以一種方法為主、另一種方法為輔,使用多階段的訓練完成模型的輕量化壓縮,如先剪枝后蒸餾、先量化后蒸餾的方法,雖然這種結合方式可以直接使用已經提出的成熟的模型壓縮方法,但是往往具有訓練過程復雜、周期長的缺點?,F有的端到端的訓練方法如邊剪枝邊蒸餾、邊量化邊蒸餾往往需要設計新的模型壓縮方法,因此探究將多種成熟的模型壓縮方法聯合同時進行壓縮的端到端的訓練框架是未來研究的方向。此外,對于同時結合剪枝、量化和知識蒸餾進行模型壓縮的研究尚未成熟,有待進一步研究。

3.2 最優方案高效選擇

如何選擇最優的模型壓縮方案和合適的超參數,在保證精度不嚴重損失的前提下最大程度的實現網絡模型的壓縮和加速,從而盡可能縮短開發周期、增加產品的市場競爭力,正成為業界的核心需求。因此探究如何更快速高效地實現壓縮加速,而非重復嘗試不同的壓縮方案和超參數組合,正成為產業應用落地急需解決的問題。

3.3 自適應模型壓縮

現有的模型壓縮方法中的各種超參數都需要手工調節,如量化后模型的位寬、剪枝模型的剪枝率、知識蒸餾的溫度因子等,這些超參數的選擇需要經驗,且不一定是平衡模型壓縮率和精度的最優解。因此研究不依賴于人工設定超參數的自動模型壓縮方法很值得探究。

3.4 多場景模型壓縮

一方面,現有的模型壓縮方法往往需要有標簽的數據進行微調以恢復模型精度,這將延長模型訓練周期。在無監督學習和數據隱私安全性高的場景下往往無法獲得具有標簽的數據,因此無數據或少數據的模型壓縮方法也有待研究。另一方面,目前壓縮加速方法多應用于計算機視覺領域的卷積神經網絡,而還有大量其他結構的模型應用于不同的場景,如應用于自然語言處理的長短期記憶模型(long short-term memory , LSTM)、用于知識圖譜領域的圖神經網絡(group neural network , GNN)及對抗學習領域的生成對抗網絡(generative adversarial network , GAN)等,針對這些模型的壓縮加速方法需要對現有的方法進行改進,有待進一步研究。

3.5 軟硬件協同設計

目前大多數模型壓縮加速算法僅從軟件層面對模型進行優化,并未考慮硬件平臺是否支持其特殊的運算,這導致了算法僅僅壓縮模型而不能加速模型。如大多數硬件中算數邏輯單元(arithmetic and logic unit , ALU)的數據位寬固定,對于不同量化位寬的模型計算并不能很好地支持,往往需要符號位拓展才能適配,業界常用INT8量化作為取舍;此外,大多數硬件對非結構化剪枝后的稀疏化矩陣的計算并不支持,而非結構化剪枝能夠細粒度地剔除冗余參數,在模型壓縮的同時保持模型精度,業界常用結構化通道剪枝作為取舍?;谏鲜霈F象,軟硬件協同設計在一開始就考慮軟硬件的功能劃分和適配問題,能夠減少產品的迭代次數、加快上市時間,是未來業界的研究熱點。

猜你喜歡
剪枝輕量化神經網絡
人到晚年宜“剪枝”
汽車輕量化集成制造專題主編
基于YOLOv4-Tiny模型剪枝算法
神經網絡抑制無線通信干擾探究
一種輕量化自卸半掛車結構設計
一種輕量化自卸半掛車結構設計
剪枝
瞄準掛車輕量化 鑼響掛車正式掛牌成立
基于神經網絡的拉矯機控制模型建立
復數神經網絡在基于WiFi的室內LBS應用
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合