張 雷,楊薪穎
(沈陽(yáng)航空航天大學(xué)電子信息工程學(xué)院,遼寧 沈陽(yáng) 110136)
目前,深度卷積神經(jīng)網(wǎng)絡(luò)(DeepConvolutional Neural Network,DCNN)已經(jīng)廣泛應(yīng)用于圖像分類(lèi)[1]、人臉識(shí)別[2]、音頻分類(lèi)[3]和語(yǔ)音識(shí)別[4]等研究。在DCNN快速發(fā)展的同時(shí),網(wǎng)絡(luò)的層數(shù)和模型的體積也在不斷擴(kuò)大,規(guī)模的擴(kuò)大和計(jì)算復(fù)雜度的增加使得這些模型很難部署[5]和應(yīng)用于實(shí)時(shí)性要求較高的場(chǎng)景,阻礙了其在更廣闊領(lǐng)域的應(yīng)用和推廣,因此,優(yōu)化卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),壓縮并加速網(wǎng)絡(luò)模型已成為工業(yè)界和學(xué)術(shù)界亟待解決的難題之一。為了解決這一問(wèn)題,大量的網(wǎng)絡(luò)模型壓縮方法被相繼提出[6-11]。
目前具有代表性的網(wǎng)絡(luò)模型壓縮方法有五種:權(quán)重剪枝法、近端梯度法、知識(shí)蒸餾、深度可分離卷積和二值化。權(quán)重剪枝法[6]在早期的神經(jīng)網(wǎng)絡(luò)時(shí)期就已經(jīng)被提出,其主要通過(guò)減少網(wǎng)絡(luò)全連接層中的權(quán)重?cái)?shù)量,從而達(dá)到減少網(wǎng)絡(luò)中的冗余、提高網(wǎng)絡(luò)計(jì)算效率的要求,在不顯著影響精度的情況下刪除一部分網(wǎng)絡(luò)權(quán)重,最終可以減少數(shù)十倍的內(nèi)存需求。相對(duì)于傳統(tǒng)的隨機(jī)梯度下降法,近端梯度法[7]則是在目標(biāo)函數(shù)中加入L2范數(shù)正則化項(xiàng),產(chǎn)生稀疏模型,這種方法不僅可以避免過(guò)擬合問(wèn)題,而且提高了網(wǎng)絡(luò)收斂速度,縮短了訓(xùn)練時(shí)間。不同于以上兩種方法,知識(shí)蒸餾[8]法通過(guò)構(gòu)建出新的小網(wǎng)絡(luò)來(lái)達(dá)到壓縮模型的效果,將一個(gè)高精度且復(fù)雜的教師網(wǎng)絡(luò)轉(zhuǎn)換為一個(gè)結(jié)構(gòu)緊湊簡(jiǎn)單的學(xué)生網(wǎng)絡(luò),教師網(wǎng)絡(luò)將細(xì)粒度知識(shí)遷移到學(xué)生網(wǎng)絡(luò)中,進(jìn)而使學(xué)生網(wǎng)絡(luò)和教師網(wǎng)絡(luò)擁有同樣的性能。深度可分離卷積[9]與權(quán)重剪枝類(lèi)似,通過(guò)減少了參數(shù)數(shù)量來(lái)優(yōu)化網(wǎng)絡(luò)模型,其已經(jīng)廣泛應(yīng)用于一些輕量級(jí)網(wǎng)絡(luò)中,如Google所提出的Inception[12]、MobileNet[13]和SqueezeNet,該方法的核心思想是將一個(gè)完整的卷積運(yùn)算分為兩步,相比與標(biāo)準(zhǔn)的卷積操作,不僅可以有效的提取特征,還極大的減少了參數(shù)量,降低了運(yùn)算復(fù)雜度,通過(guò)深度可分離卷積,在CPU上可以實(shí)現(xiàn)2到4倍的加速,并且可以保持分類(lèi)精度。二值化網(wǎng)絡(luò)[10]又稱(chēng)為二進(jìn)制神經(jīng)網(wǎng)絡(luò),主要思想是將網(wǎng)絡(luò)參數(shù)值量化為+1或-1,使原本32位的浮點(diǎn)數(shù)參數(shù)量化至1位定點(diǎn)數(shù),此外,其純邏輯計(jì)算極大得壓縮了網(wǎng)絡(luò)模型,并保持了與原始模型中相同的參數(shù)數(shù)量,在分類(lèi)MNIST數(shù)據(jù)集時(shí),速度可提升7倍[14]。上述方法均已在模型壓縮與優(yōu)化加速技術(shù)中成功地應(yīng)用與普及。
本文結(jié)合深度可分離卷積和二值化網(wǎng)絡(luò)兩種模型壓縮方法,設(shè)計(jì)了一種深度可分離卷積二值化網(wǎng)絡(luò)模型,使用深度可分離卷積代替標(biāo)準(zhǔn)卷積,再對(duì)網(wǎng)絡(luò)進(jìn)行二值化,并通過(guò)實(shí)值教師網(wǎng)絡(luò)引導(dǎo)訓(xùn)練使二值化網(wǎng)絡(luò)模型在最大化壓縮的同時(shí)保持了分類(lèi)精度。實(shí)驗(yàn)結(jié)果表明,深度可分離卷積二值化網(wǎng)絡(luò)在分類(lèi)精度略有損失的情況下,可以大幅減少內(nèi)存占用、提高計(jì)算速度,有利于移動(dòng)端部署。
在本節(jié)中,構(gòu)建了一個(gè)基礎(chǔ)的深度卷積神經(jīng)網(wǎng)絡(luò)DCNN-8,并詳細(xì)介紹了在DCNN-8的基礎(chǔ)上采用的兩種優(yōu)化方法:深度可分離卷積和二值化網(wǎng)絡(luò)。
深度卷積神經(jīng)網(wǎng)絡(luò)是最成功的深度學(xué)習(xí)算法之一[15],作為一種有監(jiān)督的學(xué)習(xí)算法,其無(wú)需人工對(duì)圖像進(jìn)行大量而復(fù)雜的特征提取,而是通過(guò)網(wǎng)絡(luò)中的卷積運(yùn)算提取特征,達(dá)到分類(lèi)識(shí)別的目的,與傳統(tǒng)機(jī)器學(xué)習(xí)方法[16]相比具有更強(qiáng)的特征學(xué)習(xí)能力和表達(dá)能力。
本文搭建的DCNN-8包含8個(gè)卷積層,2個(gè)最大池化層、1個(gè)特征融合層、2個(gè)全連接層和一個(gè)Softmax分類(lèi)層,每一個(gè)卷積層的卷積核尺寸為5×5,且都包含批標(biāo)準(zhǔn)化和修正線性單元,具體的網(wǎng)絡(luò)結(jié)構(gòu)如圖1所示。
圖1 DCNN-8網(wǎng)絡(luò)結(jié)構(gòu)圖
深度可分離卷積(depthwise separable convolution)由逐通道卷積(depthwise,DW)和逐點(diǎn)卷積(pointwise,PW)兩個(gè)部分組成,相比與標(biāo)準(zhǔn)的卷積操作,其參數(shù)數(shù)量和運(yùn)算成本相對(duì)較低。
圖2 標(biāo)準(zhǔn)卷積方式
圖3 深度可分離卷積方式
圖2、圖3分別為標(biāo)準(zhǔn)卷積和深度可分離卷積,在標(biāo)準(zhǔn)的卷積操作中假設(shè)步長(zhǎng)為1,大小為H×W×N的輸入特征映射,生成H×W×M的特征映射,其中H表示特征圖的高度,W表示特征圖的寬度,N表示輸入通道的數(shù)量,M為輸出通道的數(shù)量。標(biāo)準(zhǔn)卷積由K×K×N×M的卷積核計(jì)算,其中K是卷積核的尺寸,所以標(biāo)準(zhǔn)卷積參數(shù)量為
Pc=N×M×K×K
(1)
深度可分卷積包括兩層:逐通道卷積和1×1逐點(diǎn)卷積,其參數(shù)量如下
Ps=N×K×K+1×1×N×M
(2)
深度可分離卷積參數(shù)量與標(biāo)準(zhǔn)卷積參數(shù)量之比為
(3)
標(biāo)準(zhǔn)的卷積同時(shí)增強(qiáng)了空間相關(guān)性和通道相關(guān)性,而深度可分卷積首先增強(qiáng)空間相關(guān)性,然后增強(qiáng)了通道相關(guān)性。因此,使用深度可分離卷積,不僅可以對(duì)輸入特征圖進(jìn)行有效的提取,保持網(wǎng)絡(luò)分類(lèi)精度,還大大減少了參數(shù)數(shù)量和運(yùn)算成本。
在本文搭建的DCNN-8中,使用卷積核尺寸為5×5(K=5)的深度可分離卷積來(lái)代替?zhèn)鹘y(tǒng)的卷積,根據(jù)式(3),采用深度可分卷積代替后,卷積層的總參數(shù)數(shù)量減少了10倍以上。
二值化網(wǎng)絡(luò)(Binary neural network,BNN)被認(rèn)為是將分類(lèi)模型部署到資源有限的設(shè)備上最有前途的模型壓縮方法之一[7]。
網(wǎng)絡(luò)權(quán)重和激活值通過(guò)sign函數(shù)進(jìn)行二值化,其值被限制為+1或-1
(4)
式中x為真實(shí)變量值,xb為二值化后的變量值。通過(guò)二值化,使網(wǎng)絡(luò)權(quán)重和激活值的精度降低到1位,然后將32個(gè)二值化變量存儲(chǔ)在一個(gè)32位的寄存器中,因此,二值化后的模型壓縮比最大可以達(dá)到32倍。
在二值化網(wǎng)絡(luò)的卷積層中,由于權(quán)重和激活值都被限制為+1或-1,因此可以用輕量級(jí)的按位同或(XNOR)操作和計(jì)算二進(jìn)制串中1的數(shù)量(popcount)操作代替浮點(diǎn)型的復(fù)雜矩陣乘法運(yùn)算
Xb*Wb=popcount(XNOR(Xb,Wb))
(5)
式中Xb和Wb分別為二值化后的激活值和權(quán)重矩陣。
二值化網(wǎng)絡(luò)作為壓縮算法中的極端情況,其擁有高壓縮比、高加速比的性能優(yōu)勢(shì),但是缺陷也較為明顯。由于二值化網(wǎng)絡(luò)將數(shù)值精度降低到+1或-1,卷積層輸出的特征圖很難攜帶足夠的特征信息并保證輸出值的范圍適合下一層的二值化操作,如果直接使用sign函數(shù)對(duì)網(wǎng)絡(luò)中傳遞的實(shí)數(shù)值進(jìn)行二值化可能會(huì)導(dǎo)致特征圖攜帶的特征信息過(guò)低,最終影響網(wǎng)絡(luò)的分類(lèi)精度,并且二值化網(wǎng)絡(luò)在傳播時(shí)采用的是±1,無(wú)法直接計(jì)算梯度信息,因此二值化網(wǎng)絡(luò)一直缺乏有效的訓(xùn)練算法。針對(duì)以上問(wèn)題,文獻(xiàn)[17]中提出Rsign和RPReLu函數(shù),通過(guò)使用可學(xué)習(xí)參數(shù)讓網(wǎng)絡(luò)學(xué)習(xí)到最適合的二值化閾值和激活值的分布,如圖4所示,通過(guò)使用Rsign、RPReLu,緩解了二值化網(wǎng)絡(luò)對(duì)于特征分布學(xué)習(xí)的困難,獲得了良好的二值化特征,使網(wǎng)絡(luò)的性能得到提高。
圖4 Rsign和RPReLu函數(shù)
Rsign公式如下
(6)
RPReLu公式如下
(7)
式中xi是RPReLu在第i個(gè)通道的輸入,βi是控制負(fù)部分斜率的可學(xué)習(xí)系數(shù),γi和ζi是移動(dòng)分布的可學(xué)習(xí)位移量。
針對(duì)經(jīng)過(guò)深度可分離卷積處理的DCNN-8(SDCNN-8),本文采用Rsign、RPReLu替換Relu激活函數(shù)作為二值化方法,如圖5所示,將網(wǎng)絡(luò)模型進(jìn)一步壓縮。
圖5 二值化結(jié)構(gòu)
本文為了彌補(bǔ)二值化導(dǎo)致的精度損失,通過(guò)實(shí)值教師網(wǎng)絡(luò)來(lái)引導(dǎo)學(xué)生網(wǎng)絡(luò)的訓(xùn)練,DCNN-8作為實(shí)值教師網(wǎng)絡(luò),學(xué)生網(wǎng)絡(luò)即為經(jīng)過(guò)深度可分離卷積處理的二值化DCNN-8(SBDCNN-8)。實(shí)值教師網(wǎng)絡(luò)通過(guò)引入溫度參數(shù)得到軟化后的概率分布
(8)
式中T為溫度參數(shù),zi為softmax層輸出的分類(lèi)類(lèi)別概率。若T越大,則概率分布越緩和,實(shí)值教師網(wǎng)絡(luò)隱含的知識(shí)更容易被學(xué)生網(wǎng)絡(luò)學(xué)習(xí),此時(shí)學(xué)生網(wǎng)絡(luò)的損失函數(shù)為
(9)
本文實(shí)驗(yàn)所使用的服務(wù)器配置及軟件環(huán)境的配置如表1所示,實(shí)驗(yàn)在Windows10系統(tǒng)下運(yùn)行,使用 NVIDIA GeForce GTX 1060和CUDA進(jìn)行加速訓(xùn)練。
表1 實(shí)驗(yàn)環(huán)境配置
本文實(shí)驗(yàn)使用的數(shù)據(jù)集是由牛津大學(xué)Visual Geometry Group發(fā)布的公開(kāi)數(shù)據(jù)集17flowers,其中包含了在英國(guó)比較常見(jiàn)的17種花,例如水仙,向日葵,洋甘菊等,如圖6所示。數(shù)據(jù)集中的圖像具有較高的空間復(fù)雜度和較大的類(lèi)內(nèi)差距,具體表現(xiàn)為數(shù)據(jù)集中的花卉圖像具有多種形狀、角度和光照條件。整個(gè)數(shù)據(jù)集共有1360張圖片,每種花包含80張圖片,選取其中60張圖片作為訓(xùn)練集,20張圖片作為測(cè)試集,并將圖片尺寸統(tǒng)一縮放成128×128,便于網(wǎng)絡(luò)輸入。
圖6 17flowers數(shù)據(jù)集
對(duì)SBDCNN-8使用兩階段式訓(xùn)練策略進(jìn)行訓(xùn)練:第一階段,首先在該訓(xùn)練集上訓(xùn)練DCNN-8,將預(yù)訓(xùn)練好的DCNN-8作為實(shí)值教師網(wǎng)絡(luò),然后對(duì)SBDCNN-8的激活值進(jìn)行二值化、權(quán)重采用實(shí)值進(jìn)行訓(xùn)練,共訓(xùn)練100輪;第二階段,加載第一階段保存的網(wǎng)絡(luò)模型,并對(duì)權(quán)重進(jìn)行二值化,然后繼續(xù)訓(xùn)練。訓(xùn)練時(shí)超參數(shù)α設(shè)置為0.8,采用Adam優(yōu)化算法,批大小設(shè)置為32,學(xué)習(xí)率設(shè)置為0.0005。
圖6 不同溫度參數(shù)下SBDCNN-8的平均測(cè)試集準(zhǔn)確率
為了測(cè)試溫度參數(shù)對(duì)于模型性能的影響,接下來(lái)在不同溫度參數(shù)下對(duì)SBDCNN-8進(jìn)行訓(xùn)練。當(dāng)訓(xùn)練損失值達(dá)到最低并且穩(wěn)定時(shí)終止訓(xùn)練,對(duì)測(cè)試集進(jìn)行測(cè)試時(shí)溫度參數(shù)設(shè)置為1,在每個(gè)溫度參數(shù)下重復(fù)訓(xùn)練4次,取其平均準(zhǔn)確率,如圖7所示。當(dāng)溫度參數(shù)小于20時(shí),隨著溫度參數(shù)的增加,測(cè)試集準(zhǔn)確率逐漸上升,溫度參數(shù)為20時(shí),平均測(cè)試集準(zhǔn)確率最高,達(dá)到96.6%。
為評(píng)估SBDCNN-8的性能,本文從權(quán)重位寬、激活值位寬、參數(shù)量、分類(lèi)精度、內(nèi)存占用以及計(jì)算時(shí)間等方面與DCNN-8和SDCNN-8進(jìn)行對(duì)比。表2為不同網(wǎng)絡(luò)模型的參數(shù)比較,SBDCNN-8的參數(shù)位寬僅為1位,參數(shù)量?jī)H為8.4M。
表2 不同網(wǎng)絡(luò)模型的參數(shù)比較
為公平的測(cè)試不同網(wǎng)絡(luò)模型的分類(lèi)精度,實(shí)驗(yàn)過(guò)程采用四折交叉驗(yàn)證。首先使用相同的訓(xùn)練集訓(xùn)練三種網(wǎng)絡(luò)模型,SBDCNN-8和實(shí)值教師網(wǎng)絡(luò)的溫度參數(shù)設(shè)置為20,然后在同一測(cè)試集上進(jìn)行測(cè)試,測(cè)試結(jié)果如表3所示。
表3 不同網(wǎng)絡(luò)模型的測(cè)試結(jié)果
從測(cè)試結(jié)果可以看出,全精度的實(shí)值網(wǎng)絡(luò)DCNN-8的平均準(zhǔn)確率為99.1%,SDCNN-8的平均準(zhǔn)確率為98.4%,SBDCNN-8的平均準(zhǔn)確率為96.9%,與實(shí)值網(wǎng)絡(luò)相比,深度可分離卷積和二值化后網(wǎng)絡(luò)的準(zhǔn)確率下降約2.2%。圖6為三種網(wǎng)絡(luò)模型訓(xùn)練時(shí)的損失值曲線,反映了模型的訓(xùn)練進(jìn)程,當(dāng)?shù)喆芜_(dá)到150輪時(shí),三種網(wǎng)絡(luò)模型的損失值均達(dá)到平緩,其中DCNN-8的損失值最低,SBDCNN-8的損失值最高。
圖6 不同網(wǎng)絡(luò)模型訓(xùn)練時(shí)的損失值曲線
表4 不同網(wǎng)絡(luò)模型的性能比較
表4為各個(gè)網(wǎng)絡(luò)模型的性能比較,DCNN-8和SDCNN-8作為實(shí)值網(wǎng)絡(luò)其分類(lèi)精度較高,但是卻消耗了大量的內(nèi)存空間和計(jì)算時(shí)間,而SBDCNN-8在分類(lèi)精度僅損失2.2%的情況下,內(nèi)存占用相對(duì)于DCNN-8減少了25倍、計(jì)算時(shí)間節(jié)省了18倍,這對(duì)于部署在資源較少的移動(dòng)端設(shè)備上尤為重要。
本文提出一種基于深度可分離卷積二值化網(wǎng)絡(luò)的模型壓縮與優(yōu)化加速的方法,通過(guò)深度可分卷積代替標(biāo)準(zhǔn)卷積并對(duì)網(wǎng)絡(luò)進(jìn)行二值化,大幅減少了內(nèi)存占用和計(jì)算時(shí)間。通過(guò)實(shí)值的教師網(wǎng)絡(luò)引導(dǎo)訓(xùn)練,避免了網(wǎng)絡(luò)二值化后分類(lèi)精度的大幅下降。在下一步工作中,將繼續(xù)對(duì)模型壓縮和優(yōu)化加速方法進(jìn)行研究,并將本文提出的方法移植到資源有限的移動(dòng)設(shè)備上,實(shí)現(xiàn)硬件部署。