葉漢民, 李志波, 程小輝, 周穎慧
(桂林理工大學(xué)信息科學(xué)與工程學(xué)院;廣西嵌入式技術(shù)與智能系統(tǒng)重點實驗室,廣西 桂林 541004)
目前,深度神經(jīng)網(wǎng)絡(luò)[1]以自動學(xué)習(xí)目標(biāo)深度特征、模型泛化能力強等諸多優(yōu)點成為工業(yè)界及學(xué)術(shù)界的熱點研究領(lǐng)域,同時帶來了神經(jīng)網(wǎng)絡(luò)在時間和空間復(fù)雜度上導(dǎo)致的計算資源緊張問題,進一步制約先進神經(jīng)網(wǎng)絡(luò)模型在有限計算資源條件下的應(yīng)用擴展。網(wǎng)絡(luò)通過壓縮與加速可以將先進的神經(jīng)網(wǎng)絡(luò)模型部署于嵌入式系統(tǒng)或便攜式設(shè)備,擺脫對存儲和計算資源的硬性要求,推廣深度神經(jīng)網(wǎng)絡(luò)的應(yīng)用領(lǐng)域[2]。因此如何保證模型精確度前提下使得計算資源最小化是深度神經(jīng)網(wǎng)絡(luò)壓縮的關(guān)鍵問題。
網(wǎng)絡(luò)剪枝能夠在獲得較大的壓縮比的同時對網(wǎng)絡(luò)中的精度影響較小,加速模型推理運算性能,有效減少模型計算存儲的內(nèi)存消耗。現(xiàn)有對網(wǎng)絡(luò)剪枝開展的研究包含:對于非結(jié)構(gòu)化剪枝而言,Han等[3]首次提出訓(xùn)練-剪枝-微調(diào)經(jīng)典剪枝策略,但通過該方式帶來額外的計算及訓(xùn)練時間代價。Blalock 等[4]以剪枝后的梯度范數(shù)為準(zhǔn)則,對剪枝后梯度范數(shù)減少最少的權(quán)重進行剪枝,并提出標(biāo)準(zhǔn)化基準(zhǔn)指標(biāo),防止陷入對比剪枝方法時的常見誤區(qū)。Chen等[5]利用深度強化學(xué)習(xí)技術(shù),結(jié)合動態(tài)剪枝信息及靜態(tài)剪枝信息,通過減少動態(tài)剪枝的存儲空間需求,解決平衡動態(tài)靈活性和存儲空間的矛盾。Molchanov等[6]通過泰勒分解理論化來移除對損失影響的參數(shù),利用反向傳播梯度的度量來解決在不損壞網(wǎng)絡(luò)時對哪些參數(shù)進行修剪;在進行全局及局部剪枝時,Li等[7]考慮到所選標(biāo)準(zhǔn)能夠應(yīng)用于網(wǎng)絡(luò)架構(gòu)中所有的參數(shù)或過濾器,采用逐層局部剪枝方法時可以避免層崩潰現(xiàn)象,得到更好的剪枝效果,但時間開銷成本較大。
綜合以上研究,本文在非結(jié)構(gòu)剪枝結(jié)構(gòu)下進行稀疏性訓(xùn)練,在進行網(wǎng)絡(luò)初始化引入隨機掩碼,計算和保留貢獻程度較大的權(quán)重參數(shù),通過動態(tài)更新網(wǎng)絡(luò)中掩碼分布及權(quán)重數(shù)量完成模型參數(shù)遍歷,將得到的精簡網(wǎng)絡(luò)模型基于公共數(shù)據(jù)集CIFAR10/100 進行剪枝方法性能測試。
基于幅值權(quán)重剪枝[8]并沒有減小網(wǎng)絡(luò)計算成本,而是通過剔除對于對結(jié)果影響精度較小的卷積核,將網(wǎng)絡(luò)的這些影響較小的卷積核以及特征圖進行一并移除,在減少計算成本的同時避免產(chǎn)生稀疏連接結(jié)構(gòu)。利用稀疏化尺度因子[9]進行網(wǎng)絡(luò)剪枝,主要通過批量規(guī)范化層縮放因子γ 衡量不同通道的必要性,移除對結(jié)果貢獻度較小的通道,加速網(wǎng)絡(luò)參數(shù)運算,實現(xiàn)網(wǎng)絡(luò)架構(gòu)的精簡。通過結(jié)構(gòu)化學(xué)習(xí)思想[10]可以有效規(guī)范參數(shù)最大可能稀疏,使用網(wǎng)絡(luò)權(quán)重以組的方式調(diào)制到零附近,實現(xiàn)學(xué)習(xí)參數(shù)結(jié)構(gòu)化稀疏,進行網(wǎng)絡(luò)推理的加速。當(dāng)網(wǎng)絡(luò)剪枝在不依賴于訓(xùn)練數(shù)據(jù)時[11],采用相同數(shù)量卷積單元過濾器及其對應(yīng)卷積層進行剪枝,將分值低的卷積單元進行過濾,通過結(jié)構(gòu)化剪枝去除卷積濾波器及內(nèi)核,可以直接對神經(jīng)網(wǎng)絡(luò)加速并部署,但應(yīng)對比改變網(wǎng)絡(luò)層次的輸入所導(dǎo)致輸出維度的差異。
近年來,在不影響性能情況下能夠進行大量剪枝連接,最精細粒度可以對卷積核內(nèi)參數(shù)修剪,剪枝權(quán)重不受約束限制,但大多數(shù)網(wǎng)絡(luò)處理架構(gòu)及硬件無法對稀疏矩陣運算進行加速處理。彩票假設(shè)[12]揭示隨機初始化網(wǎng)絡(luò)架構(gòu)中存在的一個經(jīng)單獨訓(xùn)練可達到與原網(wǎng)絡(luò)在同等條件下性能相似的精簡網(wǎng)絡(luò),可以通過保留原網(wǎng)絡(luò)初始化權(quán)重進行訓(xùn)練,確定最小權(quán)重位置,創(chuàng)建相應(yīng)的剪枝掩碼,隨后使用初始化權(quán)重進行網(wǎng)絡(luò)初始化,按照得到的掩碼進行修剪,并通過實驗證明了修剪發(fā)現(xiàn)的中獎彩票網(wǎng)絡(luò)架構(gòu)比原始網(wǎng)絡(luò)學(xué)習(xí)能力更強,能夠達到更高準(zhǔn)確度和泛化能力。為避免產(chǎn)生額外訓(xùn)練時間開銷,將權(quán)重的連接敏感度[13]作為是否剪枝的評判標(biāo)準(zhǔn),利用損失函數(shù)及連接敏感度的梯度進行剪枝,隨后對剪枝的網(wǎng)絡(luò)進行再訓(xùn)練,移除不重要的連接,節(jié)省了剪枝-微調(diào)迭代周期。此外,為避免梯度傳遞出現(xiàn)問題,采用迭代突觸流剪枝思想[14]有效解決網(wǎng)絡(luò)崩塌及過早剪枝導(dǎo)致網(wǎng)絡(luò)不可訓(xùn)練等問題,該方法在不需要額外數(shù)據(jù)樣本支撐時持平或超越軟剪枝測試性能。
本文使用Data ={xi,yi}ni=1表示訓(xùn)練數(shù)據(jù)集合,xi、yi分別為神經(jīng)網(wǎng)絡(luò)中訓(xùn)練的標(biāo)簽和樣本原始標(biāo)簽,n為樣本數(shù)量。由于本文在CIFAR10/100 數(shù)據(jù)集在進行算法驗證,網(wǎng)絡(luò)初始化定義為具有H 層的神經(jīng)網(wǎng)絡(luò)用于分類任務(wù)T。其中:wH(wH∈RmH)表示第H 層中的權(quán)重值;mH代表第H 層中的權(quán)重數(shù)量;f(W1,W2,W3,…,WH;x)為網(wǎng)絡(luò)輸入。分類目標(biāo)則是在網(wǎng)絡(luò)和目標(biāo)標(biāo)簽的輸出上使得誤差函數(shù)最小化,即l(f(W1,W2,…,WH;xi),yi),通過不斷優(yōu)化誤差函數(shù)來加速模型收斂速度,并在測試數(shù)據(jù)集上進行性能測試,以獲得最佳網(wǎng)絡(luò)精簡模型。
在開展神經(jīng)網(wǎng)絡(luò)的剪枝研究中,其背后假設(shè)神經(jīng)網(wǎng)絡(luò)通常是過度參數(shù)化的,可通過一個參數(shù)量更少的網(wǎng)絡(luò)獲得相似性能,在空間、時間、效率及應(yīng)用等方面資源利用達到最大合理化。通過設(shè)定數(shù)據(jù)集Data 及稀疏度k等變量,網(wǎng)絡(luò)剪枝可寫成以下約束優(yōu)化[13]問題,即:
式中:l(·)為損失函數(shù);w為網(wǎng)絡(luò)參數(shù);m為網(wǎng)絡(luò)參數(shù)數(shù)量總和為標(biāo)準(zhǔn)L0 范數(shù)。
在進行優(yōu)化目標(biāo)問題時,通常采取增加稀疏性懲罰措施。對于結(jié)果稀疏性而言,需要迭代調(diào)整超參數(shù)才能獲得較好性能。此外,可以將上述問題轉(zhuǎn)化為通過某種策略移除網(wǎng)絡(luò)架構(gòu)中冗余參數(shù)或連接方式,冗余連接可定義為
式中:si為顯著性程度;w(i)為網(wǎng)絡(luò)權(quán)重;Hii為海森矩陣值
本文在開展剪枝實驗時,對于每個稀疏連接層,在經(jīng)歷一輪訓(xùn)練時,利用隨機掩碼(0,1)進行網(wǎng)絡(luò)初始化,修剪部分接近零的最低權(quán)重,隨后增加新的隨機權(quán)重替換已被修剪過的權(quán)重,迭代執(zhí)行修剪移除權(quán)重與增加隨機權(quán)重的過程進行網(wǎng)絡(luò)訓(xùn)練。通過線性縮放權(quán)重比例遍歷網(wǎng)絡(luò),實現(xiàn)網(wǎng)絡(luò)模型稀疏訓(xùn)練。在網(wǎng)絡(luò)剪枝訓(xùn)練中,掩碼的初始化設(shè)置是隨機的,逐漸對其進行調(diào)整,同時在網(wǎng)絡(luò)中各層之間保持相同的稀疏級別。其基本流程:①利用隨機掩碼初始化神經(jīng)網(wǎng)絡(luò)模型;②設(shè)置網(wǎng)絡(luò)層的權(quán)重保留比例,計算并保存網(wǎng)絡(luò)指定稀疏度的權(quán)重③剔除相對較小且接近0 的權(quán)重,增加同等數(shù)量隨機權(quán)重進行網(wǎng)絡(luò)訓(xùn)練與更新;④線性縮放權(quán)重保留比例并遍歷網(wǎng)絡(luò)中所有參數(shù),最終保存權(quán)重數(shù)量等同于②中權(quán)重數(shù)量;⑤迭代執(zhí)行流程③~④,最終獲得精簡剪枝模型。
本實驗使用隨機梯度下降作為梯度優(yōu)化器,為保證網(wǎng)絡(luò)訓(xùn)練高效性,所以在架構(gòu)中引進批量規(guī)范化層(Batch-Normalization,BN)層。在訓(xùn)練過程當(dāng)中,BN層[9]能夠計算不同批次樣本數(shù)據(jù)的平均值及方差,改善梯度在網(wǎng)絡(luò)中的傳遞,加速訓(xùn)練過程的收斂,即:
式中:x(i)是小批量樣本中第i條數(shù)據(jù);μβ、σ2β分別為樣本均值和方差;mβ為小批量的數(shù)值。通過零均值及標(biāo)準(zhǔn)化的x^(i)為
為避免分母出現(xiàn)零的情況發(fā)生,使網(wǎng)絡(luò)輸出結(jié)果存在意義,采用ε 進行平滑,一般取值為ε =0.001。通過BN處理后的輸出為
式中,γ、β是網(wǎng)絡(luò)結(jié)構(gòu)特征圖的學(xué)習(xí)參數(shù)。
本文結(jié)合稀疏性剪枝策略對深度神經(jīng)網(wǎng)絡(luò)進行剪枝,并實驗驗證其實用性。實驗使用公共數(shù)據(jù)集CIFAR10[15]與CIFAR100[16]作為實驗對象,本文基于稀疏化卷積網(wǎng)絡(luò)進行非結(jié)構(gòu)化剪枝方法實驗,設(shè)置對比方法包含:文獻[12]中在基于幅值的剪枝模式進行權(quán)重初始化,揭示稀疏架構(gòu)和初始化聯(lián)合訓(xùn)練機制;文獻[13]是基于網(wǎng)絡(luò)初始化進行修剪優(yōu)化,利用深度網(wǎng)絡(luò)的連接模板來反饋權(quán)重重要性;文獻[14]中通過保持梯度流在訓(xùn)練前挑選最精簡的網(wǎng)絡(luò)結(jié)構(gòu),這些方法都和隨機初始化網(wǎng)絡(luò)進行稀疏訓(xùn)練有一定聯(lián)系,因此后續(xù)測試主要與這些方法進行對比。采用Pytorch 軟件深度學(xué)習(xí)框架進行網(wǎng)絡(luò)剪枝訓(xùn)練,在配置為NVIDIA RTX 1080Ti,顯存11G的GPU云平臺上運算。
本實驗基于CIFAR10/100 數(shù)據(jù)集進行算法驗證,該數(shù)據(jù)集可以直觀反饋剪枝方法的時效性。CIFAR10/100 數(shù)據(jù)集由Alex Krizhevsky 等人收集而來,CIFAR10 中樣本總量達60 000 個,可以劃分為10個類別,每類中包含6 000 個樣本,每張樣本尺寸大小為32 ×32。CIFAR100 則包含100 個類別,樣本尺寸及總數(shù)量與CIFAR10 保持一致。選取經(jīng)典的VGG 和ResNet作為待剪枝網(wǎng)絡(luò),其中VGG網(wǎng)絡(luò)作為沒有跨層連接網(wǎng)絡(luò)架構(gòu)代表,而ResNet作為跨層連接網(wǎng)絡(luò)架構(gòu)代表,能夠有效反映網(wǎng)絡(luò)壓縮對于網(wǎng)絡(luò)模型的效果。實驗通過測試剪枝后模型的準(zhǔn)確率、剪枝比率、參數(shù)量進行與其他算法對比。其中準(zhǔn)確率反映的是剪枝后網(wǎng)絡(luò)在數(shù)據(jù)集測試中Top-1 的分類效果。剪枝比率分別設(shè)置為90%、95%和98%進行實驗對比。參數(shù)量則反映網(wǎng)絡(luò)模型使用內(nèi)存大小,通過減少模型參數(shù)量提高模型的壓縮效率。
本文在數(shù)據(jù)集CIFAR10/100 上進行訓(xùn)練時,單個訓(xùn)練batch設(shè)置為64,單個測試batch 設(shè)置為50,累計訓(xùn)練160 輪epoch;初始學(xué)習(xí)率為0.1。為更好地使模型收斂更快,性能測試達到最佳,在訓(xùn)練總進度達到50%、75%時分別對學(xué)習(xí)率進行衰減調(diào)整,衰減后的學(xué)習(xí)速率設(shè)置為之前學(xué)習(xí)率的0.1 倍。在整個迭代剪枝訓(xùn)練過程中,首先采用Kaiming方法進行初始化,利用隨機梯度下降方法優(yōu)化梯度在架構(gòu)中的傳遞,動量參數(shù)設(shè)置為0.9,衰退因子設(shè)置為0.000 1。
表1 為在CIFAR10/100 數(shù)據(jù)集上對ResNet-32 網(wǎng)絡(luò)架構(gòu)中進行修剪并對比實驗結(jié)果。為了確保不同算法實驗數(shù)據(jù)的精確度,分別在相同實驗環(huán)境進行對比。實驗在本文配置的云平臺網(wǎng)絡(luò)設(shè)備條件下進行運算,單次訓(xùn)練及測試時間約為1.5 h。在未對ResNet-32網(wǎng)絡(luò)架構(gòu)進行剪枝操作時,CIFAR10/100 基線的測試準(zhǔn)確度分別為93.09%和74.54%。基于ResNet-32 架構(gòu)分別進行90%、95%、98%剪枝操作后,卷積層和線性層參數(shù)量總和分別為0.19、0.1、0.05MB,參數(shù)量在一定程度上進行了大批量的剔除。為了更直觀地對比不同方法在剪枝過程中精度變化情況,選取具有代表性的3張基于ResNet-32架構(gòu)方法實驗圖,如圖1所示。
圖1 兩個數(shù)據(jù)集不同剪枝率訓(xùn)練效果對比
表1 在CIFAR10/100 上基于ResNet-32 架構(gòu)方法對比實驗%
在修剪ResNet-32 模型使其減少相當(dāng)參數(shù)量時,CIFAR10/100 數(shù)據(jù)集上識別結(jié)果表明:
(1)CIFAR10 數(shù)據(jù)集。當(dāng)在大剪枝比率98%的測試下,本文方法基于CIFAR10 數(shù)據(jù)集上的識別準(zhǔn)確度為89.27%,分別比文獻[13-14]中提高1.65%、比文獻[14]中提高0.61%,比文獻[12]中精度提升0.22%。文獻[12]中采用基于剪枝尋找最佳網(wǎng)絡(luò)架構(gòu)的策略對網(wǎng)絡(luò)學(xué)習(xí)率敏感度較高,如果學(xué)習(xí)率選取不當(dāng)易導(dǎo)致模型訓(xùn)練出現(xiàn)振蕩問題,故需要在訓(xùn)練開始時設(shè)定較小的學(xué)習(xí)率,待模型對數(shù)據(jù)的適應(yīng)程度較好時采用預(yù)先設(shè)定的學(xué)習(xí)率進行剪枝訓(xùn)練,避免精度出現(xiàn)較大程度衰退。方法對比實驗基于CIFAR10 數(shù)據(jù)集識別性能相當(dāng)時,而面向較為復(fù)雜數(shù)據(jù)集CIFAR100時,本文方法對比其他方法在識別精度上有明顯提升。
(2)CIFAR100 數(shù)據(jù)集。當(dāng)網(wǎng)絡(luò)設(shè)置較大剪枝率98%時,剔除網(wǎng)絡(luò)中大量冗余參數(shù)時,本文方法圖像識別精度達到60.18%,分別比文獻[12-13]中精度提高0.19%、5.59%,比文獻[14]中準(zhǔn)確度上升0.71%,而當(dāng)剪枝率為95%時,本文算法雖在CIFAR10 數(shù)據(jù)集上較文獻[14]中算法準(zhǔn)確度降低了0.43%,但在CIFAR100 數(shù)據(jù)集上的識別精度提高1.00%。當(dāng)剪枝率為90%時,本文方法基于CIFIA10 數(shù)據(jù)集上較其他方法的測試準(zhǔn)確度相當(dāng),但在CIFAR100 數(shù)據(jù)集上的識別精度優(yōu)于文獻[12-13]中的算法性能。在層內(nèi)保持比率下降的趨勢下,一些特殊層中的保持比率不盡相同,ResNet-32 網(wǎng)絡(luò)架構(gòu)中下采樣層的保持比率要高于它的相鄰層。
表2 為在基于CIFAR10/100 數(shù)據(jù)集在VGG19 網(wǎng)絡(luò)模型開展對比實驗結(jié)果。為了確保不同算法實驗數(shù)據(jù)的精準(zhǔn)度,分別在同等實驗環(huán)境下進行算法性能的測試。實驗首先在未剪枝的條件下基于VGG-19 模型進行識別,其次再進行不同剪枝比例條件下的精度識別測試。實驗在本文配置的云平臺網(wǎng)絡(luò)設(shè)備條件下進行運算,網(wǎng)絡(luò)模型進行單次訓(xùn)練及測試時間約為1.5 h。在未對VGG-19 網(wǎng)絡(luò)架構(gòu)進行剪枝操作時,在數(shù)據(jù)集CIFAR10/100 上基線測試準(zhǔn)確度分別為93.91%和72.85%。基于VGG-19 架構(gòu)分別進行剪枝率90%、95%、98%操作后,卷積層和線性層參數(shù)量總和分別為2.01、1.02、0.41MB。為更直觀地觀察不同方法在剪枝過程中精度變化情況,選取代表性的3 張基于VGG-19 架構(gòu)的方法對比測試圖,如圖2 所示。
圖2 不同數(shù)據(jù)集剪枝比例效果對比
表2 在CIFAR10/100上基于VGG19網(wǎng)絡(luò)架構(gòu)方法對比實驗%
在修剪VGG-19 模型使其減少相當(dāng)參數(shù)量時,有效剔除模型中冗余參數(shù),得到精簡網(wǎng)絡(luò)模型。根據(jù)CIFAR10/100 數(shù)據(jù)集上精度測試表明:
(1)CIFAR10 數(shù)據(jù)集。當(dāng)網(wǎng)絡(luò)剪枝率分別設(shè)定為90%、95%和98%時,本文方法識別精度分為達到93.87%、93.38%和92.76%,對比方法在CIFAR10 數(shù)據(jù)集上識別精度相當(dāng),文獻[12]中方法在較大剪枝率98%基于CIFAR10的準(zhǔn)確率僅為10.00%,準(zhǔn)確度出現(xiàn)顯著下降,表明該方法在剔除大規(guī)模的參數(shù)時出現(xiàn)某些層保留很少權(quán)重的現(xiàn)象,導(dǎo)致網(wǎng)絡(luò)性能出現(xiàn)退化。在較大剪枝率98%條件測試下,本文方法在目標(biāo)數(shù)據(jù)集上識別精度為92.76%,比文獻[14]中對應(yīng)數(shù)據(jù)集上提高0.85%。
(2)CIFAR100 數(shù)據(jù)集。本文方法基于CIFAR100數(shù)據(jù)集進行模型測試時,剪枝率依次設(shè)置為90%、95%和98%時,模型識別精度達到69.91%、71.37%和69.14%。當(dāng)剪枝率為95%時,模型識別精度分別比算法[12-14]分別提高1.22%、0.11%和5.22%,文獻[13]中采用權(quán)重連接衡量策略進行剪枝,通過計算損失函數(shù)與權(quán)重關(guān)聯(lián)梯度對權(quán)重置零,但基于CIFAR100數(shù)據(jù)集進行大剪枝率時,準(zhǔn)確度出現(xiàn)驟減情況,在一定程度上說明在高剪枝率的條件下基于多目標(biāo)識別易出現(xiàn)誤差。本文方法基于網(wǎng)絡(luò)架構(gòu)的測試中發(fā)現(xiàn)VGG的衰減速率明顯低于ResNet架構(gòu),準(zhǔn)確度不會出現(xiàn)驟減現(xiàn)象,說明網(wǎng)絡(luò)中權(quán)重分布較為均衡,梯度流在網(wǎng)絡(luò)中傳播趨于穩(wěn)定。
本文采用初始化剪枝方式,不需要單獨對待剪枝網(wǎng)絡(luò)進行預(yù)訓(xùn)練,通過迭代更新訓(xùn)練中掩碼及權(quán)重參數(shù)得出精簡網(wǎng)絡(luò)結(jié)構(gòu),網(wǎng)絡(luò)運算量和參數(shù)量得到大幅度減少。通過在不同數(shù)據(jù)集及不同網(wǎng)絡(luò)架構(gòu)中的性能測試,對比其他剪枝網(wǎng)絡(luò)性能測試結(jié)果表明:①本文方法在同等實驗條件下剪枝率逐漸提高時模型精度不會出現(xiàn)驟減現(xiàn)象;②基于VGG 與ResNet 網(wǎng)絡(luò)模型在相對較大剪枝率95%、98%條件設(shè)置下,模型準(zhǔn)確度較其他經(jīng)典算法有明顯提高;③未來將對輕量級神經(jīng)網(wǎng)絡(luò)開展剪枝優(yōu)化研究,同時融合知識蒸餾的相關(guān)策略和方法,得到更大程度壓縮的網(wǎng)絡(luò)模型。