張邦源,沈 韜,曾 凱
(昆明理工大學(xué),云南 昆明 650500)
隨著深度學(xué)習(xí)[1]的不斷發(fā)展,卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN)在計(jì)算機(jī)視覺、自然語言處理、語音識(shí)別等領(lǐng)域都取得了顯著進(jìn)展,并且CNN 已被證明在圖像分類[2-6]、目標(biāo)檢測(cè)[7-10]和語義分割[11-13]等領(lǐng)域是可靠的,因此在實(shí)踐中得到了廣泛的應(yīng)用。
為了追求更高的精度,近年來,CNN 模型的計(jì)算規(guī)模變得更加龐大,網(wǎng)絡(luò)結(jié)構(gòu)更加復(fù)雜、不規(guī)則且參數(shù)量巨大,對(duì)運(yùn)算平臺(tái)的存儲(chǔ)容量和計(jì)算能力也提出了較高的要求,這就限制了CNN 等算法在功耗和性能受限的嵌入式平臺(tái)上的發(fā)展。
因此,很多研究人員開始提出各種模型壓縮算法和技術(shù),即容忍一定的精度下降,來降低CNN的運(yùn)算強(qiáng)度和模型參數(shù)量。其中,量化模型由于在硬件上移植會(huì)非常方便,因此神經(jīng)網(wǎng)絡(luò)模型的量化是一項(xiàng)有效的解決方案。神經(jīng)網(wǎng)絡(luò)二值化能夠最大限度地降低模型的存儲(chǔ)占用和模型的計(jì)算量,將神經(jīng)網(wǎng)絡(luò)中原本32 位浮點(diǎn)數(shù)參數(shù)量化至1 位定點(diǎn)數(shù),降低了模型部署的存儲(chǔ)資源消耗,同時(shí)極大加速了神經(jīng)網(wǎng)絡(luò)的推斷過程。二值化神經(jīng)網(wǎng)絡(luò)(Binarized Neural Network,BNN)由于可以實(shí)現(xiàn)極高的壓縮比和加速效果,所以它是推動(dòng)以深度神經(jīng)網(wǎng)絡(luò)為代表的人工智能模型,在資源受限和功耗受限的移動(dòng)端設(shè)備和嵌入式設(shè)備上落地應(yīng)用的一種非常有潛力的技術(shù)。
二值化神經(jīng)網(wǎng)絡(luò)最初源于Courbariaux 的BinaryNet[14],在近幾年的發(fā)展中,各種二值化的優(yōu)化方法被不斷提出,如XNOR-Net[15]、BNN+[16]、BinaryDenseNet[17]、Bi-Real Net[18]、MeliusNet[19]、IRNet[20]、ReActNet[21]等。
二值化神經(jīng)網(wǎng)絡(luò)的提出是為了解決現(xiàn)階段神經(jīng)網(wǎng)絡(luò)存在的浮點(diǎn)運(yùn)算冗余、運(yùn)算速度低、對(duì)硬件設(shè)備內(nèi)存占用過高的問題。研究者期望無須借助片外存儲(chǔ)設(shè)備,通過二值化處理就可以將神經(jīng)網(wǎng)絡(luò)模型應(yīng)用在資源受限的硬件設(shè)備上,從而提高網(wǎng)絡(luò)模型計(jì)算的實(shí)時(shí)性。事實(shí)上,早在20 世紀(jì)50 年代,研究者提出的人工神經(jīng)網(wǎng)絡(luò)模型就是一種二值神經(jīng)網(wǎng)絡(luò),但是二值神經(jīng)網(wǎng)絡(luò)一直受困于缺乏有效的反向傳播算法。相比之下,全精度神經(jīng)網(wǎng)絡(luò)因?yàn)橛芯_的梯度下降算法,可以很好地完成深度神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí),從而取代二值化神經(jīng)網(wǎng)絡(luò)成為神經(jīng)網(wǎng)絡(luò)研究中的主流。
直到2015 年,Courbariaux 等人[22]提出的BinaryConnect,第一次把全精度網(wǎng)絡(luò)中的權(quán)重進(jìn)行1 bit 量化,這為二值化卷積神經(jīng)網(wǎng)絡(luò)的誕生打下了基礎(chǔ)。Courbariaux 等人[14]在另一篇文章中進(jìn)一步介紹了BNN,在BinaryConnect 中只將權(quán)重量化到了1 bit,而BNN 進(jìn)一步將激活值也變成1 bit,既減少了內(nèi)存消耗,也將許多乘加操作簡(jiǎn)化成了按位操作XNOR-Count。以上二值化方法具有節(jié)省計(jì)算資源的優(yōu)點(diǎn),因?yàn)樗鼈円苑浅:?jiǎn)單的方式量化網(wǎng)絡(luò)。但是,由于不考慮二值化在前向和反向過程中的影響,這些方法不可避免地會(huì)在很多任務(wù)中造成精度損失。
近年來,研究人員從不同方向入手,對(duì)二值化卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行優(yōu)化,使其得到了較大發(fā)展??紤]到權(quán)重二值量化的誤差,Rastegari 等人[15]提出了XNOR-Net,引入尺度因子縮小二值化的權(quán)重與全精度權(quán)重的誤差,并將網(wǎng)絡(luò)中第一層和最后一層保留為全精度權(quán)重,同時(shí)改變網(wǎng)絡(luò)中的卷積層和批歸一化(Batch Normalization,BN)層的順序,在alexnet 上將權(quán)重量化到1 bit 時(shí),能夠達(dá)到跟浮點(diǎn)權(quán)重一樣的性能。BinaryDenseNet、Bi-Real Net和MeliusNet 的3 篇論文[17-19]在網(wǎng)絡(luò)結(jié)構(gòu)中加入shortcut 和concat 操作,增強(qiáng)模型的質(zhì)量和容量,從而提升性能。Qin 等人[20]提出的IR-Net 用一個(gè)自適應(yīng)誤差衰減估計(jì)器(Error Decay Estimator,EDE)來減少訓(xùn)練中的梯度誤差,并用其他可微的函數(shù)來代替Sign函數(shù),并且在訓(xùn)練過程中不斷地逼近真正的Sign,使得整個(gè)訓(xùn)練過程中梯度傳遞得更加平滑。
雖然二值化卷積神經(jīng)網(wǎng)絡(luò)近年來得到巨大發(fā)展,但是其中依舊存在一些問題沒有得到太多的關(guān)注,例如:
(1)二值化卷積神經(jīng)網(wǎng)絡(luò)中特征圖的負(fù)值信息是否同樣重要?在降采樣層使用最大池化(MaxPooling)操作進(jìn)行降采樣時(shí),只保留了池化塊中的最大值,而這個(gè)值一般是大于0 的,這樣就導(dǎo)致降采樣層特征圖負(fù)值信息的丟失。
(2)二值化網(wǎng)絡(luò)中,全精度特征圖在進(jìn)行二值化操作時(shí),對(duì)于分布不均的特征圖,在數(shù)值較小的區(qū)域會(huì)全被二值化為-1,數(shù)值較大的區(qū)域則被二值化為+1,如此二值化后的特征圖在局部將無法保留細(xì)節(jié)特征。
鑒于國(guó)內(nèi)外研究中存在的問題,本文有針對(duì)性地做出了研究,主要貢獻(xiàn)有以下3 點(diǎn):
(1)提出了一種新的池化方法——最小池化(MinPooling),即在池化操作時(shí),保留每個(gè)池化塊中最小的值,并結(jié)合最大池化和最小池化設(shè)計(jì)出一種新的降采樣層,有效保留了特征圖中的正負(fù)值信息。
(2)提出特征圖分塊偏移二值化,通過改變?nèi)忍卣鲌D的分布,使二值化卷積神經(jīng)網(wǎng)絡(luò)得到保留了細(xì)節(jié)信息的二值化特征圖,提高了二值化網(wǎng)絡(luò)的特征提取能力。
(3)為了驗(yàn)證二值化卷積神經(jīng)網(wǎng)絡(luò)中負(fù)值信息與正值信息擁有同樣的重要性,本文進(jìn)行了大量實(shí)驗(yàn)。實(shí)驗(yàn)表明,在降采樣層使用最大和最小池化比僅使用最大池化或者僅使用最小池化效果更好。實(shí)驗(yàn)還驗(yàn)證了特征圖分塊偏移二值化對(duì)網(wǎng)絡(luò)性能的提升。在CIFAR100 數(shù)據(jù)集上,本文提出的方法比目前所有的二值化網(wǎng)絡(luò)提升了3.08%的準(zhǔn)確率,與全精度網(wǎng)絡(luò)的準(zhǔn)確率差距僅有1.37%。通過消融實(shí)驗(yàn)證明,相對(duì)于基準(zhǔn)模型,使用最大最小池化提升了2.47%的準(zhǔn)確率,使用特征圖分塊偏移二值化提升了0.98%的準(zhǔn)確率,兩者同時(shí)使用提升了3.72%的準(zhǔn)確率。
在全精度卷積神經(jīng)網(wǎng)絡(luò)中,卷積核權(quán)重和中間層的激活值都是32 位浮點(diǎn)型的。二值化卷積神經(jīng)網(wǎng)絡(luò)在全精度網(wǎng)絡(luò)的全精度卷積核的權(quán)重和激活值二值化為{+1,-1}。
在卷積神經(jīng)網(wǎng)絡(luò)的前向推理過程中,卷積運(yùn)算包含了大量的浮點(diǎn)運(yùn)算,包括浮點(diǎn)乘法和浮點(diǎn)加法。大量的浮點(diǎn)運(yùn)算造成了卷積神經(jīng)網(wǎng)絡(luò)在前向推理過程中效率低下的問題,并且32 位浮點(diǎn)數(shù)權(quán)重需要占用較大的存儲(chǔ)空間。卷積神經(jīng)網(wǎng)絡(luò)的二值化方法有以下優(yōu)勢(shì):
(1)能夠有效減少存儲(chǔ)消耗。相比全精度網(wǎng)絡(luò)的32 位浮點(diǎn)數(shù)權(quán)重,量化到{+1,-1}的二值化卷積神經(jīng)網(wǎng)絡(luò)在實(shí)際部署模型時(shí),每個(gè)權(quán)重僅占用1 bit,可以達(dá)到32 倍的存儲(chǔ)空間壓縮。
(2)降低卷積計(jì)算復(fù)雜度。當(dāng)權(quán)重和激活值量化為{+1,-1}時(shí),網(wǎng)絡(luò)中卷積層的大量浮點(diǎn)乘法操作可以使用位運(yùn)算代替,從而能夠大幅度提高計(jì)算速度,降低計(jì)算能耗,并且利于現(xiàn)場(chǎng)可編程門陣列(Field Programmable Gate Array,F(xiàn)PGA)等硬件的部署。
網(wǎng)絡(luò)二值化的目標(biāo)是通過二值化函數(shù)權(quán)值和激活值量化為{+1,-1}。二值化方法主要有確定型(Deterministic)和隨機(jī)型(Stochastic)兩種。其中確定型方法采用符號(hào)函數(shù)作為二值化函數(shù),即大于等于0 時(shí)為+1,小于0 時(shí)則為-1,可以表示為:
式中:x為網(wǎng)絡(luò)模型中全精度的特征值(或權(quán)重);xb為二值化后的特征值(或權(quán)重);Sign是符號(hào)函數(shù)。
另一種方法是隨機(jī)型,即以一定的概率進(jìn)行二值化。隨機(jī)型方法利用概率生成函數(shù)σ生成輸入數(shù)據(jù)x取值的概率圖,然后根據(jù)概率圖決定x的量化輸出,其中概率生成函數(shù)σ使用“hard sigmoid”函數(shù),則其計(jì)算方式為:
式中:x為網(wǎng)絡(luò)模型中全精度的特征值(或權(quán)重);min 表示取最小函數(shù);max 表示取最大函數(shù);clip為截取函數(shù);σ為得到的概率生成函數(shù)。
隨機(jī)式二值化方法的二值化函數(shù)為:
式中:x為網(wǎng)絡(luò)模型中全精度的特征值(或權(quán)重);xb為二值化后的特征值(或權(quán)重);σ為得到的概率生成函數(shù);p為全精度值量化為+1 的概率。
隨機(jī)二值化比符號(hào)函數(shù)更具吸引力,但需要額外的計(jì)算,而且硬件難以實(shí)現(xiàn),因?yàn)樗枰布a(chǎn)生隨機(jī)比特。相比隨機(jī)式方法,確定式方法更利于硬件部署,所以本文采用確定式方法作為二值化激活方法。
二值化卷積是二值化卷積神經(jīng)網(wǎng)絡(luò)的重要組成單元之一,對(duì)于一個(gè)全精度的卷積神經(jīng)網(wǎng)絡(luò),假設(shè)其某一層的輸入特征圖為I,該卷積層的權(quán)重為W,二值化后得到的特征圖為Ib,權(quán)重為Wb。為了近似全精度的權(quán)重,減少量化誤差,XNOR-Net 提出全精度的縮放因子α,并使用二值的權(quán)重以及一個(gè)縮放因子代替全精度的權(quán)重,即W ≈αWb,則二值化的卷積為:
式中:Z為二值化卷積的輸出特征圖;?表示卷積運(yùn)算;⊕表示沒有乘法的卷積計(jì)算。
縮放因子α的計(jì)算公式為:
縮放因子的引入使二值化卷積神經(jīng)網(wǎng)絡(luò)能更接近全精度的卷積神經(jīng)網(wǎng)絡(luò),但這樣做增加了網(wǎng)絡(luò)中的浮點(diǎn)運(yùn)算。
與訓(xùn)練全精度神經(jīng)網(wǎng)絡(luò)模型類似,在訓(xùn)練二值化卷積神經(jīng)網(wǎng)絡(luò)時(shí),仍然可以直接采用基于梯度下降的反向傳播(Back Propagation,BP)算法來更新參數(shù)。然而,二值化函數(shù)(如Sign函數(shù))通常是不可微的,函數(shù)的部分導(dǎo)數(shù)值會(huì)消失,如Sign函數(shù)導(dǎo)數(shù)值幾乎都為0。因此,常用的基于梯度下降的BP算法不能直接用于二進(jìn)制權(quán)值的更新。
Hinton 等人[23]提出一種名為直接估計(jì)器(Straight-Through Estimator,STE)的技術(shù),用于解決符號(hào)函數(shù)二值化訓(xùn)練深度網(wǎng)絡(luò)時(shí)出現(xiàn)的梯度消失問題。STE 的定義如下:
通過STE,可以使用與全精度神經(jīng)網(wǎng)絡(luò)相同的梯度下降法,直接訓(xùn)練二值神經(jīng)網(wǎng)絡(luò)。但由于Sign的實(shí)際梯度與STE 之間存在明顯的梯度不匹配,極易導(dǎo)致反向傳播誤差積累的問題,致使網(wǎng)絡(luò)訓(xùn)練偏離正常的極值點(diǎn),使得二值網(wǎng)絡(luò)優(yōu)化不足,從而嚴(yán)重降低性能。對(duì)于近似Sign函數(shù)梯度的方波梯度,除了[-1,+1]范圍之內(nèi)的參數(shù)梯度不匹配外,還存在[-1,+1]范圍之外的參數(shù)將不被更新的問題。精心設(shè)計(jì)的二值化近似函數(shù)可以緩解反向傳播中的梯度失配問題。Bi-RealNet 提供了一個(gè)自定義的近似Sign函數(shù)ApproxSign,來替換Sign函數(shù),進(jìn)行反向傳播中的梯度計(jì)算。該梯度以三角波形式近似Sign函數(shù)的梯度,擁有與沖激函數(shù)更高的相似度,因而更貼近于Sign函數(shù)梯度的計(jì)算。
本文主要研究二值化卷積神經(jīng)網(wǎng)絡(luò)在降采樣層保留負(fù)值特征信息的重要性和在特征圖二值化激活時(shí)特征圖局部信息丟失的問題。針對(duì)第一個(gè)問題,本文提出了新的池化方法——最大最小池化(Max-MinPooling);針對(duì)第二個(gè)問題,提出了基于特征圖分塊偏移的二值化方法。
多分支與單路二值化卷積神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)如圖1 所示。
圖1 多分支與單路二值化卷積神經(jīng)網(wǎng)絡(luò)
從圖1 可以看出,在多分支的二值化卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)中,shortcut 結(jié)構(gòu)在兩個(gè)基本塊之間傳遞了浮點(diǎn)特征信息,增加了網(wǎng)絡(luò)的信息流,但這樣的結(jié)構(gòu)中,網(wǎng)絡(luò)需要額外的空間來存儲(chǔ)全精度的特征值。然而,在單路的結(jié)構(gòu)中,網(wǎng)絡(luò)在卷積求出浮點(diǎn)特征值后,可以立即進(jìn)行二值化,不需要再對(duì)浮點(diǎn)特征值進(jìn)行存儲(chǔ),減少了硬件的存儲(chǔ)開銷,并且在單路的二值化卷積神經(jīng)網(wǎng)絡(luò)中,可以在模型訓(xùn)練結(jié)束后,將BN 層以及二值激活層進(jìn)行合并,從而有效簡(jiǎn)化模型,提高運(yùn)算效率,具體合并方法在3.4節(jié)中詳細(xì)介紹。
在卷積神經(jīng)網(wǎng)絡(luò)的下采樣層,圖像分辨率會(huì)直接降低4 倍,這個(gè)過程中的信息損失是不可逆的,而在二值化卷積神經(jīng)網(wǎng)絡(luò)中,會(huì)存在更加嚴(yán)重的信息丟失。目前的二值化卷積神經(jīng)網(wǎng)絡(luò)有以下兩種常用的下采樣操作:
(1)最大池化作為下采樣層。最大池化只取覆蓋區(qū)域中的最大值,其他的值都丟棄。最大池化操作在不增加額外卷積運(yùn)算和參數(shù)的前提下減小輸入大小,使得神經(jīng)網(wǎng)絡(luò)能夠?qū)W⒂谧钪匾脑?。在全精度的網(wǎng)絡(luò)中,通常認(rèn)為最重要的元素是最大的數(shù),但在一個(gè)特征圖中,往往會(huì)出現(xiàn)在一個(gè)池化塊里最大數(shù)并非絕對(duì)值最大的情況。不同于全精度網(wǎng)絡(luò),二值化卷積神經(jīng)網(wǎng)絡(luò)中負(fù)值的特征值也是至關(guān)重要的,而最大池化卻忽略了負(fù)值特征信息。
(2)使用步長(zhǎng)為2 的卷積層來進(jìn)行下采樣。這種方法可以保留更多的信息。在目前的二值化卷積神經(jīng)網(wǎng)絡(luò)中,通常使用全精度的卷積來計(jì)算,避免造成較大的精度損失,但這樣又帶來了大量的全精度卷積運(yùn)算和額外的存儲(chǔ)空間消耗。
在二值化卷積神經(jīng)網(wǎng)絡(luò)中,特征圖中的正負(fù)值是帶有等量的信息的,所以不能只關(guān)注正值特征信息,而最大池化在每個(gè)池化塊中只保留了最大值,池化后的結(jié)果大部分為正,主要保留了特征圖中的正值信息,這樣會(huì)導(dǎo)致大量的負(fù)值信息丟失。基于此,本文提出了一種新的池化方法——最小池化,如圖2 所示,即在池化操作時(shí),保留每個(gè)池化塊中最小的值。基于此,結(jié)合最大池化和最小池化設(shè)計(jì)出一種新的降采樣層——最大最小池化(Max-MinPooling),有效保留了特征圖中的正負(fù)值信息。
圖2 最大池化及最小池化
如圖3 所示,在降采樣層分別使用最大池化和最小池化,并將兩種池化后的結(jié)果拼接在一起,作為降采樣層的輸出。
圖3 基于最大最小池化方法的降采樣層
卷積神經(jīng)網(wǎng)絡(luò)的內(nèi)在特性是學(xué)習(xí)從輸入圖像到輸出的映射。一個(gè)性能良好的二值化卷積神經(jīng)網(wǎng)絡(luò)應(yīng)該擁有與全精度網(wǎng)絡(luò)接近的學(xué)習(xí)能力。然而,離散的量化值限制了二值化卷積神經(jīng)網(wǎng)絡(luò)像全精度網(wǎng)絡(luò)一樣學(xué)習(xí)豐富的分布表示。為了解決這一問題,XNOR-Net 引入了縮放因子,將權(quán)重的分布近似于全精度網(wǎng)絡(luò);IR-Net 提出Libra-PB 將權(quán)重量化值的量化誤差和二值參數(shù)的信息熵同時(shí)作為優(yōu)化目標(biāo)。
不同于關(guān)注對(duì)權(quán)重的優(yōu)化,本文的研究關(guān)注對(duì)二值化特征圖分布的優(yōu)化。在全精度特征圖中添加一個(gè)微小的偏移,會(huì)導(dǎo)致絕對(duì)值較小的部分特征值符號(hào)發(fā)生改變,這會(huì)極大地影響二值化后特征圖的+1,-1 分布,進(jìn)而影響網(wǎng)絡(luò)最終性能。但在訓(xùn)練一個(gè)網(wǎng)絡(luò)之前是無法提前找到合適的偏移量并設(shè)置在網(wǎng)絡(luò)中的,所以在二值化前的全精度特征值中引入了可學(xué)習(xí)的偏移,以增強(qiáng)二值卷積神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)二值特征圖分布的能力,減少特征圖二值化過程中的信息丟失。加入偏移后的二值函數(shù)可以表示為:
式中:x為網(wǎng)絡(luò)模型中全精度的特征值(或權(quán)重);Sign為符號(hào)函數(shù);b為特征圖的偏移量。
在全精度網(wǎng)絡(luò)中,因?yàn)闄?quán)重和激活是連續(xù)的實(shí)值,對(duì)特征圖的微小偏移量只會(huì)使特征圖平移,并不會(huì)改變特征圖的整體分布。然而,對(duì)于二值化網(wǎng)絡(luò)來說,因?yàn)槎祷W(wǎng)絡(luò)的激活值只能是{-1,+1},在符號(hào)函數(shù)上加入一個(gè)小的偏移,可能會(huì)輸出完全不同的二值化特征圖,這將直接影響二值化特征圖的信息量,對(duì)最終的準(zhǔn)確性產(chǎn)生重大影響。
為了更直觀地說明,繪制了實(shí)值輸入特征圖及二值化特征圖,如圖4。
圖4 偏移量對(duì)二值特征圖的影響
從圖4 可以看出,未偏移的二值特征圖中眼睛和嘴巴附近有嚴(yán)重的細(xì)節(jié)信息丟失,加偏移的二值特征圖能有效地改善未偏移的二值特征圖中的信息丟失問題,但卻完全丟失了左手的信息。因此,對(duì)全精度特征值進(jìn)行的偏移雖然在一定程度上改善了二值化激活中信息丟失的問題,但局部的細(xì)節(jié)信息丟失卻是無法避免的。基于此問題,如圖4(a),如果將特征圖分塊,在每一塊中使用不同的分布偏移,這樣在顏色較淺(特征值較大)的區(qū)域加上正偏移量,在顏色較深(特征值較小)的區(qū)域加上負(fù)偏移量,就能保證二值化時(shí)不會(huì)出現(xiàn)局部特征值全為+1 或-1 的情況,有效保留了特征圖局部細(xì)節(jié)信息,從而得到保留了更多細(xì)節(jié)信息的二值化特征圖。如圖5,分塊二值化的二值特征圖更好地保留了特征圖信息。
圖5 基于特征圖分塊偏移的二值化特征圖
圖6 展示了一個(gè)更明顯的例子,可以看出,未偏移的二值特征圖中的臉部信息基本完全丟失;加偏移的二值特征圖中鼻子附近有所改善,但信息丟失依舊嚴(yán)重;特征圖分塊偏移的二值特征圖中保留了人臉上的細(xì)節(jié)信息。因此,對(duì)于特征值分布不均的全精度特征圖,使用分塊偏移的二值化方法效果更好。
圖6 使用不同方法得到的二值化特征圖對(duì)比
對(duì)于BN 層,需要先計(jì)算一個(gè)minibatch 中元素的均值方差,然后對(duì)于x需要減去均值μ除以標(biāo)準(zhǔn)差,最后利用縮放因子γ和偏移β進(jìn)行仿射變換,即可得到最終的BN 輸出,具體過程如下:
式中:xi為BN 前的特征值;x^i為特征值進(jìn)行標(biāo)準(zhǔn)差標(biāo)準(zhǔn)化后的值。
BN 層與二值化激活層的融合為:
式中:yi為BN 后的輸出特征值;t為BN 層與二值化激活層融合后,二值量化的新閾值。
二值化卷積的輸出特征值xi為[-9,+9]區(qū)間內(nèi)的整數(shù),可以將t向上取整,則有:
式中:Ceil()為向上取整函數(shù)。BN 層和二值化激活層融合后可表示為:
其中,Sign(γ)和tI均可在模型訓(xùn)練好后求出,這樣就簡(jiǎn)化了網(wǎng)絡(luò)的前向傳播過程,即只需將二值化卷積計(jì)算出的特征值和提前計(jì)算好的二值化閾值進(jìn)行比較,即可得到二值化的特征值。
為了驗(yàn)證本文提出的方法的有效性,使用Vggsmall 作為基準(zhǔn)模型,對(duì)其進(jìn)行二值化。Vggsmall是VGG 在小數(shù)據(jù)集上的衍生模型,包含了6 個(gè)卷積層和1 個(gè)全連接層,采取3 次下采樣。相比VGG 系列模型,Vggsmall具有更淺的網(wǎng)絡(luò)層和更少的參數(shù)量,在小數(shù)據(jù)集中擁有更高的參數(shù)效率。將Vggsmall 中除第一層卷積層和全連接層外全部進(jìn)行二值化,得到本節(jié)實(shí)驗(yàn)采用的二值化網(wǎng)絡(luò)模型,如圖7 所示,并在4 個(gè)常用的小型數(shù)據(jù)集MNIST[24]、SVHN[25]、CIFAR-10、CIFAR-100[26]上訓(xùn)練和測(cè)試該模型。為了更客觀地評(píng)價(jià)所提方法的有效性,將使用上述方法得到的實(shí)驗(yàn)結(jié)果與經(jīng)典的二值化模型進(jìn)行比較,評(píng)價(jià)指標(biāo)是準(zhǔn)確率(Accuracy),計(jì)算方法是預(yù)測(cè)正確的樣本數(shù)除以總樣本數(shù)。
圖7 二值化VGG-Small 結(jié)構(gòu)
在MNIST 和SVHN 數(shù)據(jù)集上進(jìn)行實(shí)驗(yàn)的結(jié)果如表1 所示,在MNIST 數(shù)據(jù)集上,本文模型達(dá)到了98.63%的準(zhǔn)確率,與其他二值化模型相比,本文模型基本能夠保持同樣的精度,而且在模型大小上本文模型小于其他模型。
表1 MNIST 數(shù)據(jù)集與SVHN 數(shù)據(jù)集的實(shí)驗(yàn)結(jié)果
在CIFAR-10 和CIFAR-100 數(shù)據(jù)集上的實(shí)驗(yàn)結(jié)果如表2 所示。在CIFAR-10 數(shù)據(jù)集上,本文模型取得了91.27%的準(zhǔn)確率,與全精度的網(wǎng)絡(luò)僅相差0.63%;在CIFAR-100 數(shù)據(jù)集上,本文模型取得了71.86%的準(zhǔn)確率,與全精度的網(wǎng)絡(luò)僅相差0.37%。與其他二值化模型相比,本文模型取得了更好的效果,超越了BNN、XNOR 這種同樣沒有額外分支的二值化模型。此外,ReActNet、IR-Net、Bi-RealNet-18 這類模型在CIFAR 數(shù)據(jù)集上存在過擬合現(xiàn)象,本文模型因?yàn)闆]有了額外分支,在這種小型數(shù)據(jù)集上有效避免了過擬合。因此,本文模型不僅在模型大小上有一定的優(yōu)勢(shì),而且在精度上也得到了提升。在CIFAR-100 數(shù)據(jù)集上實(shí)驗(yàn)得到的損失曲線和準(zhǔn)確率曲線如圖8 和圖9 所示。
表2 CIFAR-10 數(shù)據(jù)集與CIFAR-100 數(shù)據(jù)集的實(shí)驗(yàn)結(jié)果
為了驗(yàn)證本文提出的最大最小池化和特征圖分塊偏移二值化在模型中的提升效果,本文在CIFAR-100 數(shù)據(jù)集上進(jìn)行了大量的對(duì)比實(shí)驗(yàn)。
3.3.1 不同特征圖分塊大小的實(shí)驗(yàn)結(jié)果
上文提出對(duì)全精度特征圖分塊后進(jìn)行不同程度的偏移再二值化,能夠在二值化特征圖中有效保留局部細(xì)節(jié)信息,提升二值化卷積神經(jīng)網(wǎng)絡(luò)的性能。而特征圖分塊方式與大小影響了二值化的性能,因此對(duì)不同的分塊方式進(jìn)行了對(duì)比實(shí)驗(yàn)。
(1)實(shí)驗(yàn)1。無論特征圖大小,統(tǒng)一按照一定的塊尺寸對(duì)特征圖分塊,按照2×2,4×4,8×8,16×16 4種不同尺寸分塊得到的實(shí)驗(yàn)結(jié)果如表3 所示。從實(shí)驗(yàn)結(jié)果可以看出,使用該分塊方式時(shí),將特征圖按照8×8 尺寸分塊得到的效果最優(yōu)。
(2)實(shí)驗(yàn)2。根據(jù)特征圖大小,將尺寸較大的特征圖分成較大的塊,將尺寸較小的特征圖分成較小的塊,即按照一定的比例將特征圖分塊,實(shí)驗(yàn)結(jié)果如表4 所示。從實(shí)驗(yàn)結(jié)果可以看出,使用該分塊方式時(shí),特征圖按照(H/2)×(W/2)(H和W分別代表特征圖的高度和寬度)分塊得到的效果最優(yōu)。根據(jù)以上實(shí)驗(yàn)結(jié)果,第2 種分塊方式優(yōu)于第1 種分塊方式。
表4 特征圖按不同比例分塊得到的準(zhǔn)確度對(duì)比
3.3.2 不同池化方式的實(shí)驗(yàn)結(jié)果
VGG-small 網(wǎng)絡(luò)在每一次降采樣操作之后的卷積層進(jìn)行通道數(shù)擴(kuò)張,Max-MinPooling 在降采樣層進(jìn)行了通道數(shù)擴(kuò)張。為了排除降采樣層擴(kuò)張通道數(shù)這一操作的影響,本文使用不同降采樣方法做對(duì)比實(shí)驗(yàn),實(shí)驗(yàn)結(jié)果如表5 所示。從實(shí)驗(yàn)結(jié)果可以看出,降采樣層擴(kuò)張通道數(shù)能夠給網(wǎng)絡(luò)帶來一定的增益,使用最大最小池化方法明顯優(yōu)于僅使用最大池化或者最小池化。
表5 不同降采樣方法下模型準(zhǔn)確率對(duì)比
3.3.3 消融實(shí)驗(yàn)
為了驗(yàn)證所提方法的有效性,對(duì)兩種方法進(jìn)行了消融實(shí)驗(yàn),實(shí)驗(yàn)結(jié)果如表6 所示。由表6 可知,本文提出的兩種方法都為二值化卷積神經(jīng)網(wǎng)絡(luò)帶來了增益。
表6 消融實(shí)驗(yàn)設(shè)置及對(duì)應(yīng)準(zhǔn)確率對(duì)比
本文提出了一種基于特征圖分塊偏移激活的二值化卷積神經(jīng)網(wǎng)絡(luò),解決了二值化卷積神經(jīng)網(wǎng)絡(luò)中信息丟失的問題。本文所提出的最大最小池化方法,充分考慮了二值化卷積神經(jīng)網(wǎng)絡(luò)中正負(fù)值信息的重要性,有效減少了二值化卷積神經(jīng)網(wǎng)絡(luò)中降采樣層的信息損失。此外,本文提出的特征圖分塊偏移的二值化方法,關(guān)注了特征圖的細(xì)節(jié)信息,保留了特征圖二值化激活過程中的局部細(xì)節(jié)信息,有效增強(qiáng)了二值化網(wǎng)絡(luò)學(xué)習(xí)特征圖分布的能力。在公開數(shù)據(jù)集CIFAR-100 上的實(shí)驗(yàn)表明,本文提出的方法提高了二值化卷積神經(jīng)網(wǎng)絡(luò)模型的性能。
考慮到二值化網(wǎng)絡(luò)提出的最初目的,就是在性能受限的嵌入式平臺(tái)上實(shí)現(xiàn)深度學(xué)習(xí)算法的部署,未來的工作將針對(duì)FPGA 特性進(jìn)行網(wǎng)絡(luò)模型優(yōu)化,將模型移植到FPGA 開發(fā)板上。