趙旭劍,李杭霖
(西南科技大學(xué) 計算機科學(xué)與技術(shù)學(xué)院,四川 綿陽 621010)
隨著深度神經(jīng)網(wǎng)絡(luò)(Deep Neural Network,DNN)的快速發(fā)展和應(yīng)用,對于深度神經(jīng)網(wǎng)絡(luò)的壓縮需求也愈發(fā)強烈。如表1 所示,神經(jīng)網(wǎng)絡(luò)的計算復(fù)雜度隨模型復(fù)雜度增加而增加,這為DNN 在有限資源設(shè)備的部署移植帶來了困難與挑戰(zhàn)。傳統(tǒng)的DNN 中通常含有龐大的參數(shù),這些參數(shù)一定程度上代表著模型復(fù)雜度,決定模型占有的空間大小,這些參數(shù)往往存在冗余[1]。因此,如何減少冗余信息并對深度神經(jīng)網(wǎng)絡(luò)模型進行壓縮的研究具有重要理論意義。
表1 經(jīng)典神經(jīng)網(wǎng)絡(luò)對比Tab.1 Comparison of classical neural networks
本文針對深度神經(jīng)網(wǎng)絡(luò)因模型存儲空間和計算量大而難移植至嵌入式或移動設(shè)備的問題,通過深入分析已有深度神經(jīng)網(wǎng)絡(luò)壓縮算法在占用內(nèi)存、運行速度及壓縮效果等方面的實驗性能,以mini-ImageNet 數(shù)據(jù)集為基礎(chǔ),融合知識蒸餾、結(jié)構(gòu)設(shè)計、網(wǎng)絡(luò)剪枝和參數(shù)量化的壓縮機制,基于AlexNet 建立深度神經(jīng)網(wǎng)絡(luò)壓縮模型,提出一種基于混合機制的深度神經(jīng)網(wǎng)絡(luò)優(yōu)化壓縮算法。
本文的主要工作如下:
1)系統(tǒng)分析了深度神經(jīng)網(wǎng)絡(luò)壓縮算法影響要素,提出了一個基于AlexNet 的影響要素分析研究框架。
2)提出了一種基于混合機制的深度神經(jīng)網(wǎng)絡(luò)壓縮優(yōu)化算法。采用知識蒸餾的思路設(shè)計學(xué)生網(wǎng)絡(luò)和教師網(wǎng)絡(luò)兩個神經(jīng)網(wǎng)絡(luò)作知識遷移,使學(xué)生網(wǎng)絡(luò)從教師網(wǎng)絡(luò)中學(xué)習(xí)“知識”,再通過對學(xué)生網(wǎng)絡(luò)進行結(jié)構(gòu)設(shè)計和網(wǎng)絡(luò)剪枝的操作來縮小學(xué)生網(wǎng)絡(luò)的體量大小,并通過參數(shù)量化進一步縮小學(xué)生網(wǎng)絡(luò)體積達到網(wǎng)絡(luò)壓縮的效果。
隨著深度學(xué)習(xí)的快速發(fā)展,對DNN 的計算量需求也越來越大,這無疑加速了對DNN 壓縮算法的研究,于是網(wǎng)絡(luò)剪枝、知識蒸餾、參數(shù)量化、結(jié)構(gòu)設(shè)計等壓縮算法相繼出現(xiàn)。
網(wǎng)絡(luò)剪枝[2]是為壓縮深度神經(jīng)網(wǎng)絡(luò)而提出的刪除權(quán)重張量中冗余參數(shù)的算法。早在20 世紀(jì)90 年代,LeCun 等[3]就提出了網(wǎng)絡(luò)剪枝的概念,主要步驟包括預(yù)訓(xùn)練、剪枝和微調(diào)。網(wǎng)絡(luò)剪枝的壓縮算法有多種實現(xiàn)方法,Wang 等[4]提出從零開始剪枝(prune from scratch)的方法并在CIFAR10 和ImageNet 數(shù)據(jù)集上進行驗證,該方法在進行網(wǎng)絡(luò)剪枝前隨機初始化權(quán)重以獲得多樣化的剪枝結(jié)構(gòu),甚至能夠獲得性能更優(yōu)的模型;Dong 等[5]提出將神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)搜索直接應(yīng)用于具有彈性通道和層尺寸的網(wǎng)絡(luò),通過最小化剪枝后網(wǎng)絡(luò)的損失來減少通道數(shù);Chen 等[6]提出為每個卷積層引入一個顯著性剪枝模塊(Saliency-and-Pruning Module,SPM),SPM 需要先學(xué)習(xí)并預(yù)測顯著性分?jǐn)?shù),然后將其應(yīng)用剪枝到每個通道,這種自適應(yīng)網(wǎng)絡(luò)剪枝方法能夠降低卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN)的計算量;Wen 等[7]對剪枝權(quán)重與神經(jīng)元的選擇作對比分析,在準(zhǔn)確率不受影響的條件下,得出結(jié)果為:對權(quán)重剪枝會導(dǎo)致剩余神經(jīng)元接受不同數(shù)量的輸入,利用不同GPU 進行加速的效果均不理想,稀疏剪枝實際上是令神經(jīng)網(wǎng)絡(luò)中的矩陣更稀疏,通過不同方法使某些神經(jīng)元失活,但實際上內(nèi)存的占用并未減少。
Hinton 等[8]首次提出知識蒸餾的概念,通過引入與教師網(wǎng)絡(luò)相關(guān)的軟目標(biāo)來促進學(xué)生網(wǎng)絡(luò)訓(xùn)練,達到知識遷移的目的,使學(xué)生網(wǎng)絡(luò)能學(xué)習(xí)來自教師網(wǎng)絡(luò)的隱藏信息。由于深度神經(jīng)網(wǎng)絡(luò)的網(wǎng)絡(luò)層數(shù)較多,且每層含有較多網(wǎng)絡(luò)參數(shù),Romero 等[9]提出使用回歸模塊來配準(zhǔn)部分學(xué)生網(wǎng)絡(luò)和部分教師網(wǎng)絡(luò)的輸出特征,并對輸出特征進行相應(yīng)處理,將網(wǎng)絡(luò)處理的重點放在特征層以更高效地進行知識蒸餾,知識蒸餾往往需要先預(yù)訓(xùn)練教師模型,再通過蒸餾將知識傳遞給學(xué)生模型,該訓(xùn)練過程會帶來運行速度的減慢。
參數(shù)量化的實現(xiàn)方法很多,它的中心思想是令多個參數(shù)共享取值。Vanhoucke 等[10]和Hwang 等[11]通過fixed-point 降低參數(shù)精度,令取值相近的參數(shù)共享一個數(shù)值。Chen 等[12]提出利用哈希桶的方式壓縮神經(jīng)網(wǎng)絡(luò),將神經(jīng)網(wǎng)絡(luò)的權(quán)值隨機劃分到多個哈希桶,其中同一哈希桶內(nèi)共享同一參數(shù)以實現(xiàn)神經(jīng)網(wǎng)絡(luò)的壓縮。之后,他們在此基礎(chǔ)上又提出一種新網(wǎng)絡(luò)FreshNets(Frequency-sensitive hashed Nets)[13],將網(wǎng)絡(luò)卷積核變換到頻率域并在頻率域進行隨機哈希,對重要性低的高頻部分使用更低的哈希位數(shù)表示,以實現(xiàn)更高壓縮。Gong等[14]通過K-means 聚類算法對參數(shù)進行聚類操作,每簇參數(shù)共享中心值以達到壓縮神經(jīng)網(wǎng)絡(luò)的目的。
調(diào)整神經(jīng)網(wǎng)絡(luò)架構(gòu)可以只需要比較少的參數(shù)達到壓縮神經(jīng)網(wǎng)絡(luò)的目的,該類方法統(tǒng)稱為結(jié)構(gòu)設(shè)計。深度可分離卷積是其中一個至關(guān)重要的理論,基于此衍生出各式各樣的網(wǎng)絡(luò)。Iandola 等[15]提出一種小網(wǎng)絡(luò)SqueezeNet,在達到AlexNet精度的情況下,只需要AlexNet 中50%的參數(shù)。Howard 等[16]提出基于移動端和嵌入式視覺應(yīng)用的MobileNets 模型,使用深度可分離卷積構(gòu)建輕量級DNN,結(jié)果表明MobileNets 在ImageNet 分類問題上有極佳的性能。Zhang 等[17]為了避免分組卷積帶來副作用,設(shè)計允許更多通道數(shù)的ShuffleNet,使用通道打亂操作來幫助信息在不同的通道間流動,利于編碼更多信息。
總而言之,現(xiàn)有的經(jīng)典神經(jīng)網(wǎng)絡(luò)壓縮算法在內(nèi)存占用、運行速度及壓縮效果的實驗性能上各有優(yōu)劣。針對以上問題,本文首先系統(tǒng)分析DNN 壓縮算法的影響要素,并提出一種基于混合機制的深度神經(jīng)網(wǎng)絡(luò)優(yōu)化算法提升壓縮效率,為深度神經(jīng)網(wǎng)絡(luò)在有限資源環(huán)境下的移動部署提供可行的解決方案。
本文基于AlexNet,在mini-ImageNet 數(shù)據(jù)集上,綜合考慮壓縮算法的結(jié)構(gòu)屬性和功能屬性,對網(wǎng)絡(luò)剪枝、線性參數(shù)量化、基于K-means 的聚類參數(shù)量化、知識蒸餾以及分組卷積五種神經(jīng)網(wǎng)絡(luò)壓縮算法進行性能評測,并從準(zhǔn)確率、壓縮比和加速比三個指標(biāo)進行分析。對比結(jié)果如表2 所示。
表2 不同壓縮算法對AlexNet的壓縮結(jié)果對比Tab.2 Compression results of different compression algorithms on AlexNet
在進行網(wǎng)絡(luò)剪枝操作時,首先訓(xùn)練未剪枝的神經(jīng)網(wǎng)絡(luò),設(shè)置刪減閾值為0.5,通過fine-tune 將剪枝后的模型重新在訓(xùn)練集上訓(xùn)練,以減少網(wǎng)絡(luò)剪枝帶來的損失。若剪枝后網(wǎng)絡(luò)的準(zhǔn)確率變化在5%以內(nèi),則結(jié)束剪枝操作;反之繼續(xù)剪枝。經(jīng)過網(wǎng)絡(luò)剪枝壓縮的神經(jīng)網(wǎng)絡(luò)壓縮比為1.03,準(zhǔn)確率小幅下降,運行速度和壓縮程度得到了小幅優(yōu)化。
線性參數(shù)量化和K-means 參數(shù)量化都將卷積層參數(shù)壓縮至4 b,雖然壓縮比與加速比相差不大,但線性參數(shù)量化會導(dǎo)致準(zhǔn)確率過低。因此,本文的混合機制在進行組合時選擇K-means 參數(shù)量化算法。
知識蒸餾的學(xué)生網(wǎng)絡(luò)構(gòu)造相對簡單,主要由3 個卷積層和1 個全連接層構(gòu)成。從表3 可以看出,經(jīng)過知識蒸餾后,網(wǎng)絡(luò)的準(zhǔn)確率相較于原始AlexNet 提高了0.61 個百分點,壓縮比達到了20.45,加速比也較其他經(jīng)典算法表現(xiàn)更出色。同時,可以看出,通過分組卷積調(diào)整神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)后,網(wǎng)絡(luò)的壓縮比和加速比也有小幅提升。
表3 壓縮算法實驗結(jié)果Tab.3 Experimental results of compression algorithms
知識蒸餾通過模型轉(zhuǎn)換將知識遷移到緊湊的模型上,顯著提升了壓縮性能,說明模型全局(結(jié)構(gòu))層面的優(yōu)化對算法具有積極影響。同時,從局部(參數(shù))的角度來看:網(wǎng)絡(luò)剪枝與分組卷積分別采用參數(shù)去繁與參數(shù)簡化的方法實現(xiàn)末端(參數(shù))的功能優(yōu)化,提高了算法壓縮性能;而參數(shù)量化則令多個參數(shù)共享數(shù)值,使用K-means 參數(shù)量化能優(yōu)化模型的運行速度和空間占用。因此,本文設(shè)計了一種融合壓縮算法結(jié)構(gòu)與功能特征,自全局向局部優(yōu)化的神經(jīng)網(wǎng)絡(luò)壓縮機制。
本文采用知識蒸餾設(shè)計一個體量較小的學(xué)生網(wǎng)絡(luò)和基于AlexNet 的教師網(wǎng)絡(luò)作知識遷移,使學(xué)生網(wǎng)絡(luò)從教師網(wǎng)絡(luò)中學(xué)習(xí)教師網(wǎng)絡(luò)學(xué)到的“知識”,再通過結(jié)構(gòu)設(shè)計、網(wǎng)絡(luò)剪枝縮小學(xué)生網(wǎng)絡(luò)的體量大小,并通過參數(shù)量化進一步縮小學(xué)生網(wǎng)絡(luò)。本文算法主要的模型結(jié)構(gòu)如圖1 所示。
圖1 本文算法的模型結(jié)構(gòu)Fig.1 Model structure of the proposed algorithm
本文首先基于知識蒸餾壓縮算法建立教師網(wǎng)絡(luò)和學(xué)生網(wǎng)絡(luò)兩個神經(jīng)網(wǎng)絡(luò),其中教師網(wǎng)絡(luò)結(jié)構(gòu)與AlexNet 結(jié)構(gòu)一致,學(xué)生網(wǎng)絡(luò)為3 層卷積層與1 層全連接層簡單組合而成的網(wǎng)絡(luò)。利用這兩個網(wǎng)絡(luò)進行知識遷移,其中教師網(wǎng)絡(luò)為“知識”輸出者,學(xué)生網(wǎng)絡(luò)為“知識”接受者,將學(xué)生網(wǎng)絡(luò)的訓(xùn)練結(jié)果與正確標(biāo)簽比對,用式(1)求得cross-entropy 并最小化它的值:
其中:H(A,B)是神經(jīng)網(wǎng)絡(luò)A和神經(jīng)網(wǎng)絡(luò)B的交叉熵;xi是樣本標(biāo)簽;PA(xi)是神經(jīng)網(wǎng)絡(luò)A判斷結(jié)果為樣本xi的概率;PB(xi)是神經(jīng)網(wǎng)絡(luò)B判斷結(jié)果為樣本xi的概率。
知識蒸餾過程可以大致劃分為兩個階段,如圖2 所示:第一階段是訓(xùn)練相對復(fù)雜或由多個模型集成的教師網(wǎng)絡(luò);第二階段是訓(xùn)練學(xué)生網(wǎng)絡(luò),它是參數(shù)量較小、結(jié)構(gòu)相對簡單的模型。損失函數(shù)用式(2)表示,主要由教師網(wǎng)絡(luò)訓(xùn)練結(jié)果經(jīng)蒸餾后與學(xué)生網(wǎng)絡(luò)訓(xùn)練結(jié)果的損失LossSOFT(q,q″)和學(xué)生網(wǎng)絡(luò)訓(xùn)練結(jié)果與標(biāo)簽的損失LossHARD(p,q)組合而成。
圖2 知識蒸餾流程Fig.2 Process of knowledge distillation
其中:p為樣本標(biāo)簽;q為學(xué)生網(wǎng)絡(luò)訓(xùn)練結(jié)果;q″為教師網(wǎng)絡(luò)經(jīng)蒸餾后的訓(xùn)練結(jié)果。
學(xué)生網(wǎng)絡(luò)和教師網(wǎng)絡(luò)對于任何輸入都能獲得輸出,輸出經(jīng)過Softmax 映射后同樣能輸出對應(yīng)類別的概率值。與普通Softmax 層不同,知識蒸餾的Softmax 層用式(3)表示,需要添加溫度參數(shù),避免輸出變?yōu)閛ne-hot 形式而損失教師網(wǎng)絡(luò)所攜帶的隱藏信息。其中:yi為輸出結(jié)果;xi為第i個輸入;xj為遍歷所有輸入;T為溫度參數(shù)。經(jīng)過知識蒸餾的神經(jīng)網(wǎng)絡(luò)效果對比如圖3 所示,雖然經(jīng)過知識蒸餾(Knowledge Distillation,KD)的學(xué)生網(wǎng)絡(luò)(KD)仍不如教師網(wǎng)絡(luò),但在測試集上的損失和準(zhǔn)確率都優(yōu)于未經(jīng)過知識蒸餾的學(xué)生網(wǎng)絡(luò)。
圖3 經(jīng)過知識蒸餾的神經(jīng)網(wǎng)絡(luò)的結(jié)果對比Fig.3 Comparison of results of neural networks after knowledge distillation
完成知識蒸餾后,學(xué)生網(wǎng)絡(luò)已經(jīng)學(xué)習(xí)到教師網(wǎng)絡(luò)所學(xué)過的“知識”,其中還包含帶有隱藏信息的“暗知識”。此時對學(xué)生網(wǎng)絡(luò)進行結(jié)構(gòu)設(shè)計,使它只需要比較少的參數(shù),就能夠進一步壓縮深度神經(jīng)網(wǎng)絡(luò)的空間大小。
利用深度可分離卷積對卷積神經(jīng)網(wǎng)絡(luò)進行結(jié)構(gòu)設(shè)計,該方法一般分為逐通道卷積和逐點卷積兩個步驟,如圖4 所示。其中逐通道卷積過程是將卷積核設(shè)為平面,設(shè)置卷積核數(shù)量與輸入通道數(shù)相等;逐點卷積過程則是將不同卷積核處理的數(shù)據(jù)連接起來。處理上一步的輸出特征圖,將新卷積核大小設(shè)置為1 × 1 的通道數(shù)以得到新輸出。此方法能明顯減少參數(shù)量。設(shè)輸入通道數(shù)為I,輸出通道數(shù)為O,卷積核大小為K×K,此時參數(shù)量減少至這樣做之所以能減少參數(shù)數(shù)量,是相當(dāng)于在逐通道卷積的過程中共享了參數(shù)。
圖4 深度可分離卷積Fig.4 Depthwise separable convolution
由于后續(xù)還需對學(xué)生網(wǎng)絡(luò)進行網(wǎng)絡(luò)剪枝,而對卷積層使用深度可分離卷積的方式會對剪枝結(jié)果產(chǎn)生較大影響,所以本文采用原理類似的分組卷積予以替換。分組卷積原理如圖5 所示,分組卷積輸出特征圖的每個通道只與輸入特征圖的部分通道有關(guān),這部分通道即為組。設(shè)輸入通道數(shù)為I,輸出通道數(shù)為O,卷積核大小為K×K,分為N組,則每一組的輸出通道數(shù)為,只需要將各分組的計算結(jié)果按照通道連接即可,用此方法的參數(shù)量為,一定程度上減少了卷積所需參數(shù)量。
圖5 分組卷積Fig.5 Group convolution
對學(xué)生網(wǎng)絡(luò)進行網(wǎng)絡(luò)剪枝操作能進一步縮小學(xué)生網(wǎng)絡(luò)的大小,網(wǎng)絡(luò)剪枝本質(zhì)是移除深度神經(jīng)網(wǎng)絡(luò)中的冗余參數(shù)。本文主要以權(quán)重為剪枝單元實現(xiàn)非結(jié)構(gòu)化剪枝,對學(xué)生網(wǎng)絡(luò)的網(wǎng)絡(luò)剪枝流程如圖6 所示。
圖6 網(wǎng)絡(luò)剪枝流程Fig.6 Flow of network pruning
首先訓(xùn)練未剪枝的學(xué)生網(wǎng)絡(luò);其次利用式(4)和式(5)計算L1、L2的取值,移除取值在設(shè)定閾值以外的權(quán)重;再利用原數(shù)據(jù)集對剪枝后的學(xué)生網(wǎng)絡(luò)進行訓(xùn)練微調(diào),以減少剪枝所帶來的損失;最后判斷剪枝后的網(wǎng)絡(luò)準(zhǔn)確率變化是否在5%范圍內(nèi)浮動,若是則結(jié)束算法,否則進行二次剪枝。
其中:yi為第i個樣本標(biāo)簽;為第i個輸出數(shù)據(jù);m為樣本數(shù)。
完成知識蒸餾、結(jié)構(gòu)設(shè)計、網(wǎng)絡(luò)剪枝后,對學(xué)生網(wǎng)絡(luò)進行參數(shù)量化操作進一步壓縮DNN。參數(shù)量化有許多不同實現(xiàn)方式:如利用K-means 等算法對神經(jīng)網(wǎng)絡(luò)的權(quán)重進行類別分簇;也可以將出現(xiàn)頻率高的簇用低比特代替,將頻率出現(xiàn)低的用高比特代替,如此能減少存儲空間,如Huffman encoding算法。
本文主要實現(xiàn)線性量化和基于K-means 的非線性量化兩種參數(shù)量化方法。線性量化計算便捷,如式(6)所示,設(shè)A和W都是類型為float32 的浮點數(shù),將A和W分別量化為int8類型的AQ和WQ后進行計算,能顯著提高運算速率,但量化后的AQ和WQ在一定程度上存在損失,a,b,c,d為常數(shù)。
基于K-means 的非線性參數(shù)量化過程如圖7 所示,對學(xué)生網(wǎng)絡(luò)中的權(quán)重進行K-means 聚類操作,將同一類別下的權(quán)重賦值為該類別的均值,分簇后只需要一個存儲類別的Tab1 和一個存儲類別與權(quán)重映射關(guān)系的Tab2 即可表示權(quán)重,能夠有效地減小所需存儲空間。
圖7 基于K-means的參數(shù)量化設(shè)計Fig.7 Parameter quantization design based on K-means
實驗采用mini-ImageNet 數(shù)據(jù)集(https://lyy.mpi-inf.mpg.de/mtl/download/Lmzjm9tX.html)。mini-ImageNet 數(shù)據(jù)集在元學(xué)習(xí)和小樣本學(xué)習(xí)領(lǐng)域應(yīng)用廣泛,是ImageNet 數(shù)據(jù)集的子集。
ImageNet 數(shù)據(jù)集是一個非常龐大的數(shù)據(jù)庫,主要用于對視覺識別的研究。ImageNet 數(shù)據(jù)集為超過1 400 萬張圖像標(biāo)記注釋,并給100 萬張以上的圖像提供了邊框,ImageNet 數(shù)據(jù)集中包含“氣球”“輪胎”等20 000 多個類別數(shù)據(jù),且每個類別均有不少于500 張圖像。訓(xùn)練如此龐大的數(shù)據(jù)集需要消耗大量計算資源,因此,2016 年GoogLe DeepMind 團隊在ImageNet 的基礎(chǔ)上提取出了它的子集mini-ImageNet。
DeepMind 團隊首次將mini-ImageNet 數(shù)據(jù)集用于小樣本學(xué)習(xí)研究,mini-ImageNet 數(shù)據(jù)集自此成為了元學(xué)習(xí)和小樣本領(lǐng)域的基準(zhǔn)數(shù)據(jù)集。mini-ImageNet 數(shù)據(jù)集內(nèi)共包含100 個類別,共60 000 張圖片,其中每類有600 個樣本,每張圖片的規(guī)格大小為84×84,圖片均為RGB 三通道彩色圖片。相較于CIFAR10 數(shù)據(jù)集,雖然mini-ImageNet 數(shù)據(jù)集更加復(fù)雜,但更適合進行原型設(shè)計和實驗研究。mini-ImageNet 的容量大小為2.86 GB,數(shù)據(jù)架構(gòu)如圖8 所示,其中images 里為所有的圖片樣本,train.csv、test.csv 文件內(nèi)均含兩列數(shù)據(jù),第1 列為文件名,第2 列為標(biāo)簽。
圖8 mini-ImageNet的數(shù)據(jù)架構(gòu)Fig.8 Data architecture of mini-ImageNet
首先對數(shù)據(jù)集進行劃分。如果按照給定的訓(xùn)練集和測試集進行劃分,即將100 個類別數(shù)據(jù)按照類別劃分給三個數(shù)據(jù)集,這并不契合本文的實驗需求,因此,首先將所有照片提取出來,通過train.csv 和test.csv 將照片保存到對應(yīng)標(biāo)簽的文件夾下,即將100 類數(shù)據(jù)保存到100 個文件夾中,文件夾名為類別名。將數(shù)據(jù)按照6∶2∶2 的比例劃分為訓(xùn)練集、驗證集和測試集,三個數(shù)據(jù)集內(nèi)均有100 個類別,數(shù)據(jù)集中每個類別的樣本數(shù)為劃分好的6∶2∶2。數(shù)據(jù)示例如圖9 所示。
圖9 數(shù)據(jù)示例Fig.9 Examples of data
對mini-ImageNet 數(shù)據(jù)集中的每個樣本進行預(yù)處理。與MNIST 手寫數(shù)據(jù)集不同,mini-ImageNet 是從原始ImageNet 數(shù)據(jù)集中選擇的一小部分子集,每個子集包含來自不同類別的圖像,這些圖像可能具有不同的尺寸和寬高比。在使用mini-ImageNet 進行訓(xùn)練和評估時,通常會將所有圖像調(diào)整為相同的大小,以便于輸入到模型中。由于本文主要基于AlexNet 設(shè)計算法實驗,故統(tǒng)一將圖片隨機裁剪到224×224 的像素大小,并進行隨機水平翻轉(zhuǎn)以達到數(shù)據(jù)增強的效果,減少過度擬合并提高模型的泛化能力。
實驗過程的壓縮比Cr和加速比Sr主要效仿失真率而來,利用式(7)和式(8)進行計算。準(zhǔn)確率Ar則利用式(9)計算。
其中:M為原模型,M'為經(jīng)壓縮后的模型;λ為原模型占用存儲大小,λ?為經(jīng)壓縮后模型占用存儲大??;γ為運行原模型耗時,γ?為運行經(jīng)壓縮后模型耗時;α為所有預(yù)測正確的樣本數(shù),α?為總樣本數(shù)量。
為了更充分地比較和分析本文算法與已有方法的實驗性能,本文的實驗設(shè)計分為兩個步驟:AlexNet 訓(xùn)練與壓縮算法性能評測,以實現(xiàn)Benchmark 性能分析。具體過程如下。
1)AlexNet 訓(xùn)練。將mini-ImageNet 數(shù)據(jù)集按照6∶2∶2 劃分為訓(xùn)練集、測試集和驗證集進行實驗,通過驗證集調(diào)整選擇在訓(xùn)練集得到的最優(yōu)的結(jié)果并應(yīng)用于測試集,須在訓(xùn)練前對圖片統(tǒng)一進行裁剪。經(jīng)迭代訓(xùn)練得到本文實驗的Benchmark 算法。
2)壓縮算法性能評測?;贏lexNet 對不同深度神經(jīng)網(wǎng)絡(luò)壓縮算法及組合算法進行算法性能評測。本文主要考慮了網(wǎng)絡(luò)剪枝、線性參數(shù)量化、基于K-means 的聚類參數(shù)量化、知識蒸餾以及分組卷積5 種神經(jīng)網(wǎng)絡(luò)壓縮算法的組合方法進行實驗。
基于以上分析設(shè)計,本文基于AlexNet 在mini-ImageNet數(shù)據(jù)集上進行了實驗比較與分析。實驗結(jié)果如表3 所示,其中:GC(Group Convolution)代表分組卷積,NP(Network Pruning)代表網(wǎng)絡(luò)剪枝,CQ(Clustering Quantization)代表聚類量化,LQ(Linear Quantization)代表線性量化,KD 代表知識蒸餾。實驗結(jié)果表明,本文算法(KD+GC+NP+CQ)在壓縮后的準(zhǔn)確率只降低了6.3%的情況下,壓縮后AlexNet 的容量減小了98.5%,壓縮性能較優(yōu)。在準(zhǔn)確率損失不嚴(yán)重的情況下,壓縮比隨著組合壓縮算法復(fù)雜度上升而增大,其中知識蒸餾顯著壓縮了神經(jīng)網(wǎng)絡(luò)模型,且對加速比的提升有較大優(yōu)化,分組卷積和網(wǎng)絡(luò)剪枝的加入很大程度上縮小了模型存儲空間,最后對模型進行基于K-means 的聚類參數(shù)量化操作,進一步壓縮加速模型。圖10 展示了AlexNet 在進行網(wǎng)絡(luò)剪枝時,在不同刪減閾值下的準(zhǔn)確率損失與壓縮比變化趨勢。
圖10 不同刪減閾值情況下的實驗結(jié)果比較Fig.10 Comparison of experimental results under different deletion thresholds
分析可知,隨著刪減閾值不斷增大,壓縮比和準(zhǔn)確率損失總體呈上升趨勢,當(dāng)刪減閾值為0.5 時出現(xiàn)一個轉(zhuǎn)折點,此時是最佳刪減閾值。從理論上而言,在進行網(wǎng)絡(luò)剪枝時,所刪減的網(wǎng)絡(luò)連接會隨著刪減閾值的增大而變多,從而使參數(shù)的稀疏矩陣中為零的值隨之增多,達到減小存儲空間的效果。AlexNet 的存儲占用隨著刪減閾值的增加而減小,與理論相同。在經(jīng)過最佳閾值點0.5 后,AlexNet 在(0.5,0.7]的閾值區(qū)間內(nèi)準(zhǔn)確率損失增長速率顯著,說明此時神經(jīng)網(wǎng)絡(luò)中重要程度高的連接比較多,而重要程度低的連接比較少。
圖11 展示了AlexNet 量化為不同比特條件下的準(zhǔn)確率損失與壓縮比變化趨勢。因為在進行K-means 聚類之前是利用隨機中心點初始化的,本文選取3 次實驗結(jié)果的平均值進行分析以避免實驗偶然性。
圖11 不同量化比特數(shù)情況下的實驗結(jié)果比較Fig.11 Comparison of experimental results under different quantization bit numbers
分析可知,模型的準(zhǔn)確率損失首先隨著量化比特數(shù)增加而上升,在4 b 時出現(xiàn)明顯轉(zhuǎn)折點,隨后呈現(xiàn)緩慢上升趨勢。當(dāng)量化模型參數(shù)為4 b(聚類簇數(shù)為16)時準(zhǔn)確率損失最小。理論上,在執(zhí)行參數(shù)量化對神經(jīng)網(wǎng)絡(luò)進行壓縮時,量化比特數(shù)越大,占用的存儲空間也越少。如圖11 所示,AlexNet 的壓縮比隨著量化比特數(shù)上升而穩(wěn)步上升,與理論結(jié)論一致。
圖12 展示了AlexNet 在不同分組條件下的準(zhǔn)確率損失情況。對AlexNet 使用1、2、4 組不同數(shù)量分組進行訓(xùn)練,分析可知,當(dāng)劃分分組數(shù)量為2 時,雖然在一定程度上減少了模型參數(shù),但準(zhǔn)確率損失比較嚴(yán)重;當(dāng)劃分分組為4 時,能更大程度壓縮模型的同時減小準(zhǔn)確率損失,也就是保證準(zhǔn)確率并減小模型參數(shù)存儲空間。理論上而言,分組卷積能帶來的模型效果要優(yōu)于標(biāo)準(zhǔn)的卷積網(wǎng)絡(luò),因為分組卷積類似于正則所帶來的效果,能夠減少訓(xùn)練參數(shù)的同時增加相鄰層之間對角相關(guān)性,避免過擬合的現(xiàn)象發(fā)生。分析可知,AlexNet 的準(zhǔn)確率隨分組的數(shù)目呈現(xiàn)先減小再增加的趨勢,故劃分組別為4 能帶來更好的壓縮效果。
圖12 不同分組情況下的準(zhǔn)確率損失對比Fig.12 Comparison of accuracy loss under different grouping conditions
本文針對深度神經(jīng)網(wǎng)絡(luò)因模型存儲和計算量大而難移植至嵌入式或移動設(shè)備的問題,系統(tǒng)分析了深度神經(jīng)網(wǎng)絡(luò)壓縮算法影響要素,提出了一個基于AlexNet 的影響要素分析研究框架;在此基礎(chǔ)上,提出了一種融合知識蒸餾、結(jié)構(gòu)設(shè)計、網(wǎng)絡(luò)剪枝和參數(shù)量化的混合機制的深度神經(jīng)網(wǎng)絡(luò)優(yōu)化壓縮算法。實驗結(jié)果表明,在準(zhǔn)確率降低了6.3%的條件下,存儲量壓縮比達到了89.42,加速比達到了1.08,為深度神經(jīng)網(wǎng)絡(luò)在移動設(shè)備等有限資源條件下的移動和部署提供了更大的可能性。