耿麗麗,牛保寧
1.太原理工大學(xué)信息與計(jì)算機(jī)學(xué)院,太原 030024
2.山西財經(jīng)大學(xué)實(shí)驗(yàn)中心,太原 030006
深度學(xué)習(xí)作為機(jī)器學(xué)習(xí)領(lǐng)域的分支,近年來在圖像識別與檢索、自然語言處理、語音識別等諸多領(lǐng)域中都展現(xiàn)出非常優(yōu)越的性能。深度學(xué)習(xí)以人工神經(jīng)網(wǎng)絡(luò)為基本架構(gòu),通過對數(shù)據(jù)表征進(jìn)行學(xué)習(xí),將底層特征表示轉(zhuǎn)化為高層特征表示,通過多層網(wǎng)絡(luò)模型完成學(xué)習(xí)任務(wù)。自2016年AlphaGo擊敗人類頂尖選手,深度學(xué)習(xí)引起人們普遍關(guān)注,同時深度學(xué)習(xí)的概念也為大眾所熟知。長期以來,深度學(xué)習(xí)研究人員致力于開發(fā)更深、更大的模型,達(dá)到更高的精度和準(zhǔn)確度,同時也導(dǎo)致模型具有大量參數(shù)(例如VGG16有一億三千多萬個參數(shù)),存儲空間占用率高,計(jì)算復(fù)雜的特性。矩陣運(yùn)算損耗了龐大的計(jì)算資源,并且需要足夠的功率;數(shù)十億的網(wǎng)絡(luò)參數(shù)需要大量的存儲開銷;為了達(dá)到優(yōu)越的學(xué)習(xí)效果,必須使用GPU加速。對硬件的高要求使得深度網(wǎng)絡(luò)模型在實(shí)際應(yīng)用中受到限制,諸如手機(jī)等便攜式以及嵌入式設(shè)備,無法滿足深度學(xué)習(xí)的大規(guī)模計(jì)算要求。因此,在保證網(wǎng)絡(luò)模型精度及準(zhǔn)確度的條件下,壓縮網(wǎng)絡(luò)模型成為一個亟待解決的問題。
精度和準(zhǔn)確度一般作為評價網(wǎng)絡(luò)模型的標(biāo)準(zhǔn),許多文章中將精度和準(zhǔn)確度理解為一個概念,實(shí)際是有一定差別的。精度指的是數(shù)據(jù)測量的重復(fù)性如何,即多次測量數(shù)據(jù)值的離散度,多次測量值集中則精度高,測量值分散則精度低。準(zhǔn)確度則是評價測量值和真實(shí)值之間偏差的一個指標(biāo),反映的是測量值與真實(shí)值之間的關(guān)系。壓縮網(wǎng)絡(luò)模型的最終目的是產(chǎn)生小規(guī)模、高精度及準(zhǔn)確度的模型。
壓縮的一般意義是通過減少數(shù)據(jù)大小以節(jié)省存儲空間和提高傳輸速率。文中模型壓縮是指對深度學(xué)習(xí)使用的深度網(wǎng)絡(luò)進(jìn)行重構(gòu)、簡化以及加速的技術(shù)。重構(gòu)即指利用深度網(wǎng)絡(luò)的典型模塊重新設(shè)計(jì)一個簡單的網(wǎng)絡(luò)結(jié)構(gòu);簡化指在現(xiàn)有深度網(wǎng)絡(luò)結(jié)構(gòu)上進(jìn)行參數(shù)壓縮、層次以及維度的縮減;加速即是提高深度網(wǎng)絡(luò)訓(xùn)練、預(yù)測的速度。
深度神經(jīng)網(wǎng)絡(luò)(deep neural networks,DNN)模型以卷積神經(jīng)網(wǎng)絡(luò)為代表,得到廣大研究人員的青睞。卷積神經(jīng)網(wǎng)絡(luò)一般是由輸入層、卷積層、激活函數(shù)、池化層以及全連接層構(gòu)成的前饋神經(jīng)網(wǎng)絡(luò),其中卷積層和全連接層含有大量的參數(shù),網(wǎng)絡(luò)經(jīng)過訓(xùn)練之后,參數(shù)存在大量冗余,這些冗余的參數(shù)是不重要的、可以刪除的,去除這些參數(shù)并不影響網(wǎng)絡(luò)的精度。由于參數(shù)減少,網(wǎng)絡(luò)的計(jì)算得以簡化并且速度大幅提高,從而能提升網(wǎng)絡(luò)的整體性能。壓縮網(wǎng)絡(luò)這一思想早在文獻(xiàn)[1]中就由LeCun等人提出,利用信息論的思想,通過刪除網(wǎng)絡(luò)中不重要的權(quán)重,使得神經(jīng)網(wǎng)絡(luò)能夠更好地泛化,提高學(xué)習(xí)速率,達(dá)到壓縮網(wǎng)絡(luò)尺寸的目的。Han等[2]發(fā)表的一篇有關(guān)模型壓縮方法的綜述型文章,作為2016年ICLR的最佳論文,引起了模型壓縮研究的熱潮。文獻(xiàn)[3-4]對近年來模型壓縮方法進(jìn)行了綜述。
深度神經(jīng)網(wǎng)絡(luò)模型中的參數(shù)決定了模型的復(fù)雜程度,因此研究人員將減少網(wǎng)絡(luò)參數(shù)作為壓縮優(yōu)化模型的主要研究方向。另外,網(wǎng)絡(luò)模型的深度也影響計(jì)算時間以及存儲空間,因此縮減模型層次也是模型壓縮的一個途徑。
近年來,許多研究人員在網(wǎng)絡(luò)模型壓縮和加速領(lǐng)域進(jìn)行了大量研究,提出了眾多壓縮方法,本文根據(jù)模型壓縮后對網(wǎng)絡(luò)結(jié)構(gòu)的影響,將模型壓縮方法分為兩大類:淺層壓縮和深層壓縮。模型壓縮方法框架如圖1描述。
Fig.1 Model compression classification圖1 模型壓縮分類
淺層壓縮(見第2章):減少參數(shù)和模型層次都不會改變網(wǎng)絡(luò)的結(jié)構(gòu)。主要包括濾波器級別的剪枝、知識蒸餾。這些方法不會改變網(wǎng)絡(luò)的基本結(jié)構(gòu),因此將其歸為淺層壓縮。
Table 1 Comparison of network compression methods表1 網(wǎng)絡(luò)壓縮方法對比
深層壓縮(見第3章):會改變卷積核或者網(wǎng)絡(luò)層級結(jié)構(gòu)。包括量化、輕量級網(wǎng)絡(luò)設(shè)計(jì)、結(jié)構(gòu)搜索方法。
本文分別從淺層壓縮和深層壓縮兩大類對深度神經(jīng)網(wǎng)絡(luò)模型壓縮方法進(jìn)行分析:首先分析了淺層壓縮方法中模型裁剪以及知識蒸餾的一般壓縮流程。在模型裁剪部分對權(quán)重裁剪、通道裁剪、核裁剪、神經(jīng)元裁剪四種裁剪方法進(jìn)行對比分析。其次對深層壓縮方法進(jìn)行分析,并列舉了當(dāng)前新的研究成果。表1為這幾種壓縮方法的對比描述,列出了各方法的優(yōu)缺點(diǎn)、應(yīng)用網(wǎng)絡(luò)層以及一般適用的網(wǎng)絡(luò)模型。
模型裁剪是模型壓縮使用最廣泛的方法。由于卷積神經(jīng)網(wǎng)絡(luò)中有大量的冗余參數(shù),裁剪掉一定比例的參數(shù)之后,不影響網(wǎng)絡(luò)的性能。傳統(tǒng)意義上的裁剪流程一般包括:預(yù)訓(xùn)練原始模型;按照某種規(guī)則,對濾波器進(jìn)行排序;保留排序靠前的一定比例濾波器,其余被裁剪;對裁剪后的模型進(jìn)行微調(diào)再訓(xùn)練,最后達(dá)到相同甚至比原模型更高的精度。
3.1.1 權(quán)重裁剪
權(quán)重裁剪一般是通過在目標(biāo)函數(shù)中引入一個正則化項(xiàng),使權(quán)重趨向稀疏化。權(quán)重裁剪的基本流程:
第一步,在網(wǎng)絡(luò)損失函數(shù)中加入一個正則化項(xiàng),使得網(wǎng)絡(luò)稀疏化;
第二步,設(shè)置一個裁剪閾值,刪除權(quán)重低于閾值的所有節(jié)點(diǎn);
第三步,對網(wǎng)絡(luò)參數(shù)進(jìn)行微調(diào)之后再訓(xùn)練網(wǎng)絡(luò);
第四步,迭代進(jìn)行下一輪裁剪。
裁剪方法一般是迭代進(jìn)行,逐層裁剪,每裁剪一部分權(quán)重對網(wǎng)絡(luò)進(jìn)行一次修復(fù),這樣可以在裁剪過程中保證網(wǎng)絡(luò)的精度。
文獻(xiàn)[5]提出了一種基于熵的方法來評價濾波器的重要性,裁掉不重要的濾波器權(quán)重,得到了一個更小的網(wǎng)絡(luò)模型。在VGG-16上實(shí)現(xiàn)了16.64%壓縮率,在RESNET-50上實(shí)現(xiàn)了1.47%壓縮率,同時兩者精度均下降1個百分點(diǎn)。文獻(xiàn)[6]提出一種基于能量感知的卷積神經(jīng)網(wǎng)絡(luò)裁剪算法,直接利用卷積神經(jīng)網(wǎng)絡(luò)的能耗大小排序進(jìn)行裁剪,這種方法對卷積網(wǎng)絡(luò)分層裁剪,每裁剪完一層利用最小二乘法進(jìn)行局部微調(diào),恢復(fù)其精度。裁剪完所有層之后再進(jìn)行網(wǎng)絡(luò)全局調(diào)整。采用這種方法使得AlexNet和GoogleNet的能耗分別降低了73%和38%,精度損失小于1個百分點(diǎn)。
3.1.2 通道裁剪
通道裁剪是直接將網(wǎng)絡(luò)中卷積層的整個通道刪除。與權(quán)重刪除相比,通道裁剪屬于粗粒度裁剪,隨著通道的刪除,與之相聯(lián)系的神經(jīng)元也全部被刪除掉,裁剪力度較大,精度損失也相對較大。較之權(quán)重裁剪,它的優(yōu)點(diǎn)在于:首先,它不產(chǎn)生稀疏矩陣,因此不需要特殊的軟件或硬件來針對所得到的模型進(jìn)行計(jì)算;其次,在推理階段不需要巨大的磁盤存儲和內(nèi)存運(yùn)行時間。
文獻(xiàn)[7]提出的一種基于遺傳算法的通道裁剪方法,用于對超深卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行壓縮。根據(jù)每一層通道的靈敏度,逐層裁剪網(wǎng)絡(luò)模型,之后再進(jìn)行微調(diào)。文中將通道選擇描述為一個搜索問題,用遺傳算法進(jìn)行求解。在VGG上參數(shù)規(guī)模壓縮了80%,浮點(diǎn)數(shù)計(jì)算壓縮了30%。文獻(xiàn)[8]通過基于LASSO回歸的通道選擇方法和利用最小二乘重構(gòu)進(jìn)行有效的網(wǎng)絡(luò)裁剪。通過此種方法可以使VGG-16在僅增加0.3%的誤差下達(dá)到5倍的加速。
3.1.3 核裁剪
卷積神經(jīng)網(wǎng)絡(luò)的核心部分是卷積核,卷積核中包含有大量的參數(shù),裁剪卷積核也是有效的壓縮方法。通過對卷積核參數(shù)進(jìn)行低秩分解,增加稀疏性,減小運(yùn)算消耗。
文獻(xiàn)[9]提出一種特征映射核裁剪方法。設(shè)計(jì)了選擇最小對抗性裁剪掩碼策略,根據(jù)這種策略可以隨機(jī)生成裁剪模板,并使用驗(yàn)證集來選擇最佳掩碼對網(wǎng)絡(luò)進(jìn)行裁剪。這種方法與傳統(tǒng)的迭代裁剪相比,消耗的時間更少。權(quán)重裁剪往往會造成網(wǎng)絡(luò)模型的不規(guī)則稀疏性,不能充分降低卷積層中的計(jì)算成本,而對卷積核的低秩分解則可以保證網(wǎng)絡(luò)模型稀疏性的同時簡化矩陣計(jì)算,降低計(jì)算成本。文獻(xiàn)[10]提出一種卷積神經(jīng)網(wǎng)絡(luò)加速方法,通過裁剪濾波器及其連接的特征映射,大大降低了計(jì)算成本。與權(quán)重裁剪相比,這種方法不會導(dǎo)致不規(guī)則稀疏連接。因此,不需要稀疏卷積庫的支持。文獻(xiàn)[11]提出了一個基于泰勒展開的裁剪準(zhǔn)則,基于該準(zhǔn)則,在細(xì)粒度分類任務(wù)中,裁剪后的卷積神經(jīng)網(wǎng)絡(luò)性能優(yōu)越。
3.1.4 神經(jīng)元裁剪
神經(jīng)網(wǎng)絡(luò)在接收到輸入之后,并不是所有的神經(jīng)元都被激活,相當(dāng)大一部分神經(jīng)元的輸出值為零,這些為零的神經(jīng)元被認(rèn)為是多余的,刪除它們并不會影響網(wǎng)絡(luò)的精度。因此,出現(xiàn)了針對神經(jīng)元裁剪的研究。
文獻(xiàn)[12]中對激活值為零的神經(jīng)元進(jìn)行裁剪,之后利用裁剪前的權(quán)重再初始化網(wǎng)絡(luò),對網(wǎng)絡(luò)進(jìn)行再訓(xùn)練。裁剪和訓(xùn)練迭代交替進(jìn)行,不斷減少網(wǎng)絡(luò)中的零激活神經(jīng)元,可以極大地壓縮網(wǎng)絡(luò)規(guī)模,是一種迭代優(yōu)化網(wǎng)絡(luò)的方法。在LeNet和VGG-16上的實(shí)驗(yàn)表明,這種方法可以使壓縮率達(dá)到2,同時保證模型精度,甚至在裁剪之后可以獲得更高的精度。但是文章中并沒有說明實(shí)驗(yàn)采用的數(shù)據(jù)類型以及數(shù)據(jù)規(guī)模,對于大型數(shù)據(jù)集以及特定類型的數(shù)據(jù)集是否適用有待進(jìn)一步驗(yàn)證。
另外,在文獻(xiàn)[13]中作者指出,裁剪之后仍能保持模型性能并不是歸功于所選擇的特定裁剪標(biāo)準(zhǔn),而是由于深層神經(jīng)網(wǎng)絡(luò)的固有可塑性,這種可塑性使得網(wǎng)絡(luò)在精調(diào)后能夠恢復(fù)裁剪造成的精度損失,因此隨機(jī)裁剪也可以達(dá)到在保證精度的同時極大地壓縮網(wǎng)絡(luò)的目標(biāo)。文中對VGG-16和ResNet-50進(jìn)行了評估,結(jié)果表明,采用一種簡單的隨機(jī)裁剪策略,可以顯著提高目標(biāo)檢測速度,同時保持與原網(wǎng)絡(luò)模型相同的精度。采用裁剪方法對模型進(jìn)行壓縮的相關(guān)文獻(xiàn)還包括文獻(xiàn)[14-22]。其中文獻(xiàn)[22]提出一種混合裁剪方法,結(jié)合核裁剪以及權(quán)重裁剪進(jìn)行模型壓縮,在精度降低很小的情況下,獲得了較好的壓縮倍率。
以上裁剪方法都是針對卷積層進(jìn)行,神經(jīng)網(wǎng)絡(luò)的全連接層同樣包含大量參數(shù),對全連接層進(jìn)行裁剪能極大地縮小參數(shù)量。文獻(xiàn)[23]提出一種基于權(quán)值相似性的剪枝方法,通過計(jì)算權(quán)值矩陣相似性刪除隱含層單元,實(shí)現(xiàn)全連接層的壓縮,模型參數(shù)減少了76.83%,精度降低只有0.1個百分點(diǎn)。但是該方法沒有降低模型運(yùn)算量,因?yàn)榫矸e網(wǎng)絡(luò)的運(yùn)算大部分集中于卷積層。表2為模型裁剪方法對比描述。
表3列舉了幾種典型裁剪壓縮方法的模型性能參數(shù)對比,包括模型訓(xùn)練所使用的數(shù)據(jù)集、Top-k精度、參數(shù)減少量/壓縮率以及浮點(diǎn)運(yùn)算次數(shù)(Flops)減少量/加速率這幾項(xiàng)指標(biāo)。深度神經(jīng)網(wǎng)絡(luò)模型訓(xùn)練采用Mnist手寫數(shù)字集、ImageNet圖像集、Cifar10/100圖像集居多,此外也有采用目標(biāo)檢測、語音識別等數(shù)據(jù)集。Mnist數(shù)據(jù)集包含60 000張28×28像素的訓(xùn)練圖像和10 000張測試圖像,是手寫數(shù)字的灰度圖像。Cifar10/100數(shù)據(jù)集共有60 000個32×32像素的彩色圖像,分為50 000個訓(xùn)練圖像和10 000個測試圖像,10/100個分類。ImageNet數(shù)據(jù)集是目前深度學(xué)習(xí)圖像領(lǐng)域應(yīng)用非常多的一個數(shù)據(jù)集,關(guān)于圖像分類、定位、檢測等研究工作大多基于此數(shù)據(jù)集展開。ImageNet數(shù)據(jù)集包含大約1 500萬幅全尺寸圖片,2.2萬個分類。Top-k精度在分類檢測中是指預(yù)測向量中排名前k個值的準(zhǔn)確率,一般取k為1、5。參數(shù)減少量和壓縮率是評價模型參數(shù)量的絕對值和相對值,壓縮率為原參數(shù)量與壓縮后參數(shù)量的比值。Flops是評價模型的運(yùn)算復(fù)雜度以及加速率指標(biāo),以每秒浮點(diǎn)運(yùn)算次數(shù)來評價模型效率是模型設(shè)計(jì)中最常用的方法。
Table 2 Comparison of cutting and compression methods表2 裁剪壓縮方法總體對比
Table 3 Comparison of typical cutting and compression methods表3 典型裁剪壓縮方法性能對比
裁剪對模型精度有一定影響,小規(guī)模網(wǎng)絡(luò)模型,壓縮后精度下降要大于大規(guī)模網(wǎng)絡(luò)模型,同時也與選用的數(shù)據(jù)集有關(guān),大數(shù)據(jù)集的網(wǎng)絡(luò)對精度影響要小于小數(shù)據(jù)集網(wǎng)絡(luò),這也充分說明了大規(guī)模網(wǎng)絡(luò)的參數(shù)冗余度更高,更適于壓縮。
知識蒸餾是另一種常見的模型壓縮方法,Hinton等[24]提出知識蒸餾的概念。這種模型壓縮是一種將大型教師網(wǎng)絡(luò)的知識轉(zhuǎn)移到較小的學(xué)生網(wǎng)絡(luò)的方法,將復(fù)雜、學(xué)習(xí)能力強(qiáng)的教師網(wǎng)絡(luò)學(xué)到的特征表示蒸餾出來,傳遞給參數(shù)量小、學(xué)習(xí)能力弱的學(xué)生網(wǎng)絡(luò),一般可以提高學(xué)生網(wǎng)絡(luò)的精度。教師網(wǎng)絡(luò)和學(xué)生網(wǎng)絡(luò)可以是同構(gòu)也可以是異構(gòu)的,教師網(wǎng)絡(luò)傳遞的知識一般包括概率分布、輸出的特征、中間層特征映射、注意力映射、中間過程,在神經(jīng)元級別上監(jiān)督學(xué)生網(wǎng)絡(luò)訓(xùn)練,提高模型參數(shù)的利用率。
蒸餾模型采用遷移學(xué)習(xí),通過將預(yù)先訓(xùn)練好的教師模型輸出作為監(jiān)督信號去訓(xùn)練另外一個輕量化網(wǎng)絡(luò)。將教師模型的泛化能力傳遞給學(xué)生模型的一個有效方法是將教師模型產(chǎn)生的分類概率作為訓(xùn)練學(xué)生模型的“軟目標(biāo)”,以指導(dǎo)學(xué)生網(wǎng)絡(luò)進(jìn)行訓(xùn)練,實(shí)現(xiàn)知識遷移。Hinton等[24]認(rèn)為,最好的訓(xùn)練目標(biāo)函數(shù)L是軟目標(biāo)和硬目標(biāo)兩者的結(jié)合。如下公式:
知識蒸餾不僅僅是縮減網(wǎng)絡(luò)的規(guī)模,其重點(diǎn)在于減化網(wǎng)絡(luò)結(jié)構(gòu)的同時如何保留網(wǎng)絡(luò)中的知識。文獻(xiàn)[25]通過定義卷積神經(jīng)網(wǎng)絡(luò)的注意力機(jī)制,強(qiáng)迫學(xué)生卷積神經(jīng)網(wǎng)絡(luò)模擬強(qiáng)大的教師網(wǎng)絡(luò)注意力映射,從而顯著提高其性能。文中提出基于響應(yīng)圖和基于梯度兩種利用熱力圖傳輸注意力方法。注意力傳輸?shù)淖饔檬菍⒔處熅W(wǎng)絡(luò)某層的空間注意力映射傳遞給學(xué)生網(wǎng)絡(luò),讓學(xué)生網(wǎng)絡(luò)相應(yīng)層的空間注意力映射可以模仿教師網(wǎng)絡(luò),從而達(dá)到知識蒸餾的目的。文獻(xiàn)[26]提出一種結(jié)構(gòu)稀疏學(xué)習(xí)(learning structured sparsity,SSL)方法來規(guī)范濾波器、通道、濾波器形狀和網(wǎng)絡(luò)層深度。SSL可以從較大的卷積網(wǎng)絡(luò)中學(xué)習(xí)一個緊湊的結(jié)構(gòu),以降低計(jì)算成本,提高分類精度。
文獻(xiàn)[27]采用教師-學(xué)生算法,將深度網(wǎng)絡(luò)與隨機(jī)森林相結(jié)合,生成一個精度高、緊湊性好的學(xué)生網(wǎng)絡(luò)模型。在訓(xùn)練過程中使用一個額外的數(shù)據(jù)集來防止教師模型(T-Model)過擬合,這個新的軟目標(biāo)數(shù)據(jù)集能夠捕獲比原始硬目標(biāo)數(shù)據(jù)更多的信息。提出一種新的估計(jì)行人姿態(tài)方向的方法,實(shí)驗(yàn)結(jié)果表明,該算法在姿態(tài)定位方面的分類性能優(yōu)于基于卷積網(wǎng)絡(luò)的其他最先進(jìn)方法。另外,由于模型結(jié)構(gòu)簡單,參數(shù)少,所提出的學(xué)生模型(S-Model)的計(jì)算速度快于其他深度卷積神經(jīng)網(wǎng)絡(luò)。如表4。
Table 4 Performance analysis of typical knowledge distillation methods表4 知識蒸餾典型方法性能分析
在文獻(xiàn)[28]中,作者用一種新的知識蒸餾算法對18層卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行壓縮,得到一個兩層的用于實(shí)時SAR(synthetic aperture radar)識別系統(tǒng)的網(wǎng)絡(luò)模型。它是一個三元網(wǎng)絡(luò),所有權(quán)重都是-1,0,1。系統(tǒng)遵循師生范式,Dcnn是教師網(wǎng)絡(luò),Mcnn是學(xué)生網(wǎng)絡(luò)。在Mstar數(shù)據(jù)集上的實(shí)驗(yàn)表明,所提出的Mcnn算法能夠獲得與Dcnn基本相同的高識別率。然而,與Dcnn相比,所提出的Mcnn的內(nèi)存占用被壓縮了99.45%,計(jì)算量減少了92.20%。
徐喆等[29]將衡量樣本相近關(guān)系的比例因子引入知識蒸餾算法,通過調(diào)節(jié)神經(jīng)元參數(shù),增強(qiáng)網(wǎng)絡(luò)的泛化能力,在準(zhǔn)確率和分類時間上都有所提升。
量化就是將神經(jīng)網(wǎng)絡(luò)的浮點(diǎn)運(yùn)算轉(zhuǎn)換為定點(diǎn)運(yùn)算。這不僅可以在移動設(shè)備上實(shí)現(xiàn)網(wǎng)絡(luò)的實(shí)時運(yùn)行,同時對部署云計(jì)算也有幫助。
神經(jīng)網(wǎng)絡(luò)中的運(yùn)算為浮點(diǎn)運(yùn)算。一般而言,神經(jīng)網(wǎng)絡(luò)模型的參數(shù)都是FP32(32位浮點(diǎn)數(shù))表示,可以通過量化,犧牲精度來降低每一個權(quán)值所占空間,采用低精度FP16(半精度浮點(diǎn)數(shù))和INT8(8位定點(diǎn)整數(shù))表示,甚至將其量化為INT4(4位定點(diǎn)整數(shù))或INT1(1位定點(diǎn)整數(shù)),模型尺寸也隨之縮小。浮點(diǎn)數(shù)量化可以分為兩個步驟(以INT8為例):
第一步,在權(quán)重矩陣中找到參數(shù)最小值min和最大值max,確定映射區(qū)間xscale和零點(diǎn)量化值xzero_point。
第二步,將權(quán)重矩陣中的每個FP32值轉(zhuǎn)換為INT8類型值。如下公式:
量化的常用策略是將32位的權(quán)值量化為1位或2位,將極大地減少模型大小并節(jié)省內(nèi)存。但實(shí)驗(yàn)結(jié)果表明,權(quán)值量化后的網(wǎng)絡(luò)性能明顯下降,這對于性能要求高的任務(wù)來說是一大損失。為了平衡網(wǎng)絡(luò)規(guī)模和性能之間的矛盾,出現(xiàn)了3位、INT8等新的量化方法,在深度神經(jīng)網(wǎng)絡(luò)性能損失最小的同時盡可能節(jié)省占用空間。
目前的量化方法主要包括:
二值化神經(jīng)網(wǎng)絡(luò):具有二進(jìn)制權(quán)重、激活單元以及參數(shù)梯度[30-36]。
三值化神經(jīng)網(wǎng)絡(luò):權(quán)重為(+1,0,-1)的神經(jīng)網(wǎng)絡(luò)[37]。
INT8量化:將模型從FP32轉(zhuǎn)換為INT8,以及使用INT8進(jìn)行推理[38-40]。
其他量化[41-48]。
二值化、三值化網(wǎng)絡(luò)基于簡單的矩陣逼近,忽略對精度的影響,因此當(dāng)處理大型的卷積神經(jīng)網(wǎng)絡(luò)時,這種壓縮后的網(wǎng)絡(luò)精度會明顯降低。
文獻(xiàn)[2]表明量化卷積層通常需要8 bit,全連接層需要4 bit以避免顯著的精度損失。
表5列舉了典型量化壓縮方法性能參數(shù)??梢钥闯鲈贗mageNet大型數(shù)據(jù)集上進(jìn)行模型量化壓縮后,精度下降明顯,錯誤率提高,在小型數(shù)據(jù)集上精度沒有大幅降低,因此量化效果受限于數(shù)據(jù)集的選擇。對全連接層參數(shù)量化,不能顯著降低運(yùn)算復(fù)雜度,因?yàn)檫\(yùn)算量集中在卷積層。
網(wǎng)絡(luò)模型壓縮的另一種思路是設(shè)計(jì)一個輕量級網(wǎng)絡(luò),直接適用于移動和嵌入式設(shè)備。一般使用深度可分的卷積結(jié)構(gòu)來構(gòu)建輕量級深層神經(jīng)網(wǎng)絡(luò),通過改變或重組網(wǎng)絡(luò)結(jié)構(gòu)以及使用高效的計(jì)算方法來簡化網(wǎng)絡(luò),使網(wǎng)絡(luò)結(jié)構(gòu)更加緊湊。
Table 5 Weight and network accuracy in quantification表5 量化中的權(quán)重位和網(wǎng)絡(luò)準(zhǔn)確率
4.2.1 MobileNet
Google提出的MobileNet[49]網(wǎng)絡(luò)模型是適用于移動和嵌入式設(shè)備的有效模型。MobileNet模型是基于深度可分離卷積的,其核心思想就是卷積核分解,將標(biāo)準(zhǔn)卷積分解為深度方向卷積和1×1卷積,這樣可以有效減少網(wǎng)絡(luò)參數(shù)。卷積核分解,實(shí)際是將K×K×M的卷積分解成K×K×1的卷積和1×1×M的卷積,其中K是卷積核大小,M是卷積核的通道數(shù)。其中K×K×1的卷積稱為深度可分離卷積,它對前一層輸出的特征映射的通道進(jìn)行K×K的卷積來提取空間特征,然后使用1×1的卷積將通道的信息線性組合起來,1×1卷積也稱為點(diǎn)積。如圖2。
圖2中K為原始卷積核的大小,F(xiàn)為輸入特征映射尺寸,深度卷積和標(biāo)準(zhǔn)卷積的計(jì)算代價可通過以下公式比較,可以看出分解后深度卷積的運(yùn)算量降至1/K2左右。
在MobileNet網(wǎng)絡(luò)中使用3×3深度卷積,其計(jì)算量比標(biāo)準(zhǔn)卷積下降89%左右,同時精度下降很少。此外,算法中還引入了一個寬度因子α來縮減網(wǎng)絡(luò)寬度而不是縮減層數(shù)。與標(biāo)準(zhǔn)卷積相比,深度分離卷積使得模型在ImageNet數(shù)據(jù)集上的精度只降低1個百分點(diǎn),同時參數(shù)規(guī)模減少了86%。MobileNet V2[50]模型是對MobileNet的改進(jìn),該模型中引入了殘差結(jié)構(gòu),使用線性激活函數(shù)代替ReLU激活函數(shù)來減少特征損失,從而提升了MobileNet的性能。
Fig.2 Decomposition convolution圖2 分解卷積
4.2.2 ShuffleNet
雖然分離卷積之后,實(shí)現(xiàn)了網(wǎng)絡(luò)壓縮的目的,但是1×1卷積的計(jì)算消耗還是比較大,MobileNet在1×1的卷積中花費(fèi)了94.86%的計(jì)算時間,并且占有整個網(wǎng)絡(luò)模型中75%的參數(shù)量。為進(jìn)一步減少計(jì)算量,Zhang等人[51]提出在1×1的卷積上采用分組(group)操作,由于使用1×1卷積的作用是為了整合所有通道的信息,如果使用分組操作就無法使所有通道共享信息,因此又提出了一種channel shuffle的方法。如圖3,雖然對1×1的卷積使用了分組操作,但會產(chǎn)生信息不流通的問題,于是在上一層生成的特征映射中增加一個channel shuffle操作。首先將每個分組中的通道細(xì)分為幾個組,然后在下一層中輸入不同的細(xì)分組,使得每個分組都可以接受到上一層不同組的特征信息,解決信息互通的問題,同時還降低了模型計(jì)算量。如圖3左邊顯示分組卷積之間沒有信息互通。圖3右邊Channle Shuffle操作將特征映射進(jìn)行細(xì)分之后分配給下一層中的不同組卷積。
Fig.3 Channel Shuffle structure圖3 Channel Shuffle結(jié)構(gòu)
SuffleNet V2[52]是SuffleNet的改進(jìn)版,其引入通道分割(channel split)操作,該操作將每個單元的特征通道輸入分為兩個分支,一個分支保持不變,另一個分支由三個卷積操作組成,兩個1×1卷積和一個3×3深度卷積。與ShuffleNet不同的是,這里的1×1卷積不再是組卷積。卷積操作之后,把兩個分支通過Concat操作拼接起來,使通道數(shù)量保持不變。然后通過ShuffleNet結(jié)構(gòu)中的Channel Shuffle操作進(jìn)行分支間的信息互通。Channel Shuffle之后,開始進(jìn)行下一個單元的運(yùn)算。
文中還指出有效的網(wǎng)絡(luò)架構(gòu)設(shè)計(jì)應(yīng)該考慮兩個原則。首先,應(yīng)使用直接度量(如速度),而不是間接度量(如Flops)。僅使用Flops作為計(jì)算復(fù)雜度的唯一指標(biāo)是不夠的,在某些如組卷積操作中,內(nèi)存的訪問成本占很大一部分運(yùn)行時間,可能成為計(jì)算能力強(qiáng)的設(shè)備(如GPU)的瓶頸。其次,根據(jù)平臺的不同,使用相同的Flops操作其運(yùn)行時間也不同,應(yīng)在目標(biāo)平臺上評估度量網(wǎng)絡(luò)能效。
文章還提出了有效的網(wǎng)絡(luò)架構(gòu)設(shè)計(jì)需要遵循的4個準(zhǔn)則:(1)使用等通道寬度;(2)避免過度使用組卷積,增加內(nèi)存存取成本;(3)降低網(wǎng)絡(luò)碎片化程度,避免因此降低網(wǎng)絡(luò)并行度;(4)減少元素級操作。
4.2.3 SqueezeNet
介紹SqueezeNet[53]這篇是ICLR 2017的文章,使用的是分類網(wǎng)絡(luò)中的代表AlexNet,SqueezeNet將AlexNet模型參數(shù)減少了99.79%,只有0.5 MB大小。設(shè)計(jì)者在網(wǎng)絡(luò)結(jié)構(gòu)中引入了稱為Fire Module的模塊,該模塊由Squeeze卷積層和Expand層組成。Squeeze卷積層只使用1×1卷積,Expand層使用1×1卷積和3×3卷積的組合。如圖4,F(xiàn)ire Module模塊中有3個可調(diào)參數(shù)S1×1、E1×1、E3×3。S1×1是Squeeze卷積層中1×1卷積的個數(shù),E1×1是Expand層1×1卷積的個數(shù),E3×3是Expand層3×3卷積的個數(shù)。SqueezeNet使用1×1卷積代替3×3卷積,參數(shù)減少了1/9,同時令參數(shù)S1×1<E1×1+E3×3,可以限制輸入通道的數(shù)量,減少總參數(shù)量,在SqueezeNet結(jié)構(gòu)中池化層也有所減少。與MobileNet相比,Top-1降低了1個百分點(diǎn),GPU速度提高了10%。
Fig.4 Fire module圖4 Fire模塊
Xception[54]也是一種經(jīng)典的輕量級網(wǎng)絡(luò),其認(rèn)為通道和空間的相關(guān)性在卷積操作中是可以分解的,通過分解卷積中的這兩部分,可以減小通道和空間上的運(yùn)算,從而提高模型性能。
Xception卷積分解與以上幾種網(wǎng)絡(luò)卷積分解的不同之處在于:深度分離卷積是先進(jìn)行深卷積操作,然后進(jìn)行點(diǎn)積操作;Xception則與之相反,先進(jìn)行點(diǎn)積操作,然后進(jìn)行深卷積操作。
除了以上幾種經(jīng)典的輕量級神經(jīng)網(wǎng)絡(luò),還有許多其他效果不錯的網(wǎng)絡(luò)設(shè)計(jì)。
文獻(xiàn)[55]介紹了一種用于可視化和時序數(shù)據(jù)建模的通用的卷積神經(jīng)網(wǎng)絡(luò)EspNetv2。文獻(xiàn)[56]中設(shè)計(jì)了一種基于注意力機(jī)制的輕量級卷積神經(jīng)網(wǎng)絡(luò)TANet。網(wǎng)絡(luò)由reduction module、self-attention operation、group convolution三部分組成。其中reduction module可以減少池化操作帶來的信息損失。selfattention operation使模型能夠集中學(xué)習(xí)圖像中的重要部分,group convolution實(shí)現(xiàn)了模型壓縮和多分支融合。該網(wǎng)絡(luò)可以在移動設(shè)備上進(jìn)行有效的浮游生物分類。
文獻(xiàn)[57]提出一種使用迭代硬閾值(iterative hard thresholding,IHT)的方法來訓(xùn)練瘦深度神經(jīng)網(wǎng)絡(luò)(skinny deep neural networks,SDNN)。SDNN擁有比卷積神經(jīng)網(wǎng)絡(luò)更少的參數(shù),但可以獲得更好的性能。使用IHT方法通過兩個階段來訓(xùn)練一個SDNN,首先執(zhí)行硬閾值,用小激活降低連接,并微調(diào)其他重要的過濾器,之后重新激活凍結(jié)的連接,訓(xùn)練整個網(wǎng)絡(luò)以提高其總體識別能力。
文獻(xiàn)[58]提出一種簡單、高度模塊化的圖像分類網(wǎng)絡(luò)體系結(jié)構(gòu),只需要設(shè)置超參數(shù)即可重復(fù)構(gòu)造具有相同拓?fù)渥儞Q的塊。揭示了一個稱之為“基數(shù)”的新的維度,通過增大基數(shù)可以提高分類精度,比構(gòu)造更深、更寬的網(wǎng)絡(luò)更有效。
文獻(xiàn)[59]提出一種基于輕量級卷積神經(jīng)網(wǎng)絡(luò)資源約束下估計(jì)人群計(jì)數(shù)和生成密度圖的新方法。該網(wǎng)絡(luò)由3個組件組成:基本特征提取器(basic feature extractor,BFE)、堆疊的卷積模塊(stacked àtrous convolution module,SACM)和上下文融合模塊(context fusion module,CFM)。BFE用降低的空間分辨率對基本特征信息編碼,通過SACM中的短流水線來生成各種上下文信息。CFM從上述組件中提取特征圖生成上下文融合密度圖,整個網(wǎng)絡(luò)以首尾相連的方式進(jìn)行訓(xùn)練,并使用壓縮因子來限制其大小。
文獻(xiàn)[60]提出一個小特征提取網(wǎng)絡(luò)(feature distilled network,F(xiàn)DN),通過模仿一個更深的網(wǎng)絡(luò)中間表示來進(jìn)行跟蹤。引入一種移位拼接方法來減少運(yùn)算,針對提取出來的特征,提出一種尺度自適應(yīng)鑒別相關(guān)濾波器,用于視覺跟蹤,以處理目標(biāo)的尺度變化。與目前最先進(jìn)的深度跟蹤器相比,速度提高了5倍。
表6對比了幾種典型的輕量級網(wǎng)絡(luò)模型性能。在ImageNet數(shù)據(jù)集上Xception的精度較優(yōu),但參數(shù)規(guī)模也較大,說明模型精度與規(guī)模之間的正比關(guān)系。
隨著模型壓縮研究的進(jìn)展,人們逐漸開始關(guān)注神經(jīng)網(wǎng)絡(luò)自身的結(jié)構(gòu)問題,深度神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)在深度學(xué)習(xí)中是起決定作用的關(guān)鍵要素,每一類任務(wù)都有其最適合的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),簡化深度神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)可以極大地壓縮網(wǎng)絡(luò)模型,因此關(guān)于網(wǎng)絡(luò)結(jié)構(gòu)搜索方法的研究引起了研究人員越來越多的關(guān)注。
網(wǎng)絡(luò)結(jié)構(gòu)搜索一般采用神經(jīng)結(jié)構(gòu)搜索方法設(shè)計(jì)新的基線網(wǎng)絡(luò),通過尋找新的尺度均勻地縮放網(wǎng)絡(luò)維度。文獻(xiàn)[61]是關(guān)于神經(jīng)結(jié)構(gòu)搜索(neural architecture search,NAS)算法的一篇綜述文章,體系結(jié)構(gòu)搜索正處于快速發(fā)展階段,不斷涌現(xiàn)出許多新的研究方法。
NAS是一種自動設(shè)計(jì)神經(jīng)網(wǎng)絡(luò)的技術(shù),可以通過某種算法自動設(shè)計(jì)出高性能的網(wǎng)絡(luò)結(jié)構(gòu),有效地降低神經(jīng)網(wǎng)絡(luò)的使用和實(shí)現(xiàn)成本,這些神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)已經(jīng)在性能上逐漸超過人工設(shè)計(jì)的網(wǎng)絡(luò)結(jié)構(gòu)。
NAS方法的原理是給定一個搜索空間,用某種搜索算法從中搜索出一個最優(yōu)神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),每次迭代產(chǎn)生的神經(jīng)網(wǎng)絡(luò)稱為子網(wǎng)絡(luò),訓(xùn)練這些子網(wǎng)絡(luò),評估其性能,直到找到最優(yōu)子網(wǎng)絡(luò)。其中搜索空間定義了被算法搜索到的神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)、大小,也決定了NAS算法的搜索時間。
文獻(xiàn)[62]用強(qiáng)化學(xué)習(xí)解決NAS問題,將強(qiáng)化學(xué)習(xí)算法應(yīng)用于模型預(yù)測,使用循環(huán)神經(jīng)網(wǎng)絡(luò)控制器預(yù)測參數(shù),自動產(chǎn)生一個神經(jīng)網(wǎng)絡(luò),但面臨計(jì)算量大的問題,實(shí)驗(yàn)使用了800個GPU。文獻(xiàn)[63]提出了一種稱為NASNet體系結(jié)構(gòu)的方法,利用搜索方法在感興趣的數(shù)據(jù)集中找到良好的卷積體系結(jié)構(gòu),通過搜索CIFAR-10數(shù)據(jù)集上最好的卷積層,預(yù)測出基本塊(building block),然后將該塊應(yīng)用到ImageNet數(shù)據(jù)集中,方法是將塊的更多副本堆疊在一起,根據(jù)每個塊各自的參數(shù)設(shè)計(jì)一個卷積結(jié)構(gòu),這樣既降低了搜索空間的大小,還增強(qiáng)了網(wǎng)絡(luò)結(jié)構(gòu)的泛化性。
Table 6 Performance comparison of lightweight network表6 輕量級網(wǎng)絡(luò)性能對比
基于離散空間的搜索算法存在計(jì)算量大的問題,文獻(xiàn)[64]提出了一種稱為可微結(jié)構(gòu)搜索(differentiable architecture search,DARTS)的算法,將搜索空間轉(zhuǎn)化為連續(xù)的領(lǐng)域,通過采用梯度下降的方式來進(jìn)行優(yōu)化,這種方法可以得到更高的精度,節(jié)省計(jì)算資源,也可以同時進(jìn)行卷積和循環(huán)結(jié)構(gòu)的搜索。
文獻(xiàn)[65]提出了彩票假設(shè):認(rèn)為網(wǎng)絡(luò)中包含中獎網(wǎng)絡(luò)即子網(wǎng)(中獎彩票),并設(shè)計(jì)了一種識別中獎彩票的算法。在訓(xùn)練時,該網(wǎng)絡(luò)在相同的迭代次數(shù)中達(dá)到與原始網(wǎng)絡(luò)相當(dāng)?shù)臏y試精度。它們之間的連接權(quán)重具有初始權(quán)重,這使得訓(xùn)練特別有效,雖然網(wǎng)絡(luò)裁剪技術(shù)可以使訓(xùn)練后的網(wǎng)絡(luò)參數(shù)減少90%以上,但是裁剪必須是在網(wǎng)絡(luò)訓(xùn)練之后進(jìn)行,如果直接對網(wǎng)絡(luò)進(jìn)行裁剪,將會極大地影響網(wǎng)絡(luò)精度,而中獎彩票網(wǎng)絡(luò)則比原來的網(wǎng)絡(luò)學(xué)習(xí)更快,可以達(dá)到更高的測試精度。
文獻(xiàn)[66]提出了一種自動移動神經(jīng)結(jié)構(gòu)搜索(automated mobile neural architecture search,MNAs)方法,將模型延遲明確地納入到主要目標(biāo)中,從而使搜索能夠識別出一個在準(zhǔn)確性和延遲之間取得良好平衡的模型。通過在移動電話上執(zhí)行模型來直接測量真實(shí)世界的推理延遲,而不是通過代理任務(wù)來進(jìn)行學(xué)習(xí)培訓(xùn)。文獻(xiàn)[67]也考慮到傳統(tǒng)的神經(jīng)結(jié)構(gòu)搜索算法計(jì)算量過大,需要利用代理,在代理任務(wù)上優(yōu)化的體系結(jié)構(gòu)不能保證在目標(biāo)任務(wù)上是最優(yōu)的。提出一種可直接學(xué)習(xí)大型目標(biāo)任務(wù)體系結(jié)構(gòu)和目標(biāo)硬件平臺的無代理神經(jīng)結(jié)構(gòu)搜索,解決了高內(nèi)存消耗問題,并將計(jì)算成本降低到相同水平的常規(guī)訓(xùn)練。
Bergomi等人在2019年Nature Machine Intelligence發(fā)文[68]提出根據(jù)拓?fù)鋽?shù)據(jù)分析理論(TDA)可以使神經(jīng)網(wǎng)絡(luò)從局部特征理解全局特征,通過TDA選擇過濾器來觀察數(shù)據(jù),找到網(wǎng)絡(luò)的拓?fù)涮卣?。研究解決了以下簡單問題:當(dāng)訓(xùn)練一個深層次的神經(jīng)網(wǎng)絡(luò)來區(qū)分路徑時,如何告訴網(wǎng)絡(luò),它只需要關(guān)心簡單的幾何形狀,比如圓和三角形,它的工作就會容易得多,以便使它探索一個更有限的可能特征空間。
基于網(wǎng)絡(luò)結(jié)構(gòu)搜索的方法實(shí)現(xiàn)深度神經(jīng)網(wǎng)絡(luò)壓縮正逐漸成為模型壓縮領(lǐng)域的主流方法。相關(guān)文獻(xiàn)還包括文獻(xiàn)[69-83]。
通過表7中參數(shù)的比較,可以看出結(jié)構(gòu)搜索方法所設(shè)計(jì)的模型精度、參數(shù)量指標(biāo)都較優(yōu),但是運(yùn)算量很大,計(jì)算復(fù)雜,搜索時間長是結(jié)構(gòu)搜索方法的瓶頸。
通過以上模型壓縮方法的介紹,目前深度神經(jīng)網(wǎng)絡(luò)模型壓縮主要是針對深度卷積網(wǎng)絡(luò)進(jìn)行簡化。不同的壓縮方法作用網(wǎng)絡(luò)層不同,也有各自的優(yōu)缺點(diǎn)。以下對各種壓縮方法的特點(diǎn)進(jìn)行總結(jié)并指出未來的研究方向。
(1)模型裁剪是深度神經(jīng)網(wǎng)絡(luò)模型壓縮研究方法中使用最多的一種有效方法,但是不同的裁剪方法都針對特定任務(wù)的分類,無法適用于多目標(biāo)任務(wù),由于神經(jīng)網(wǎng)絡(luò)自身的可塑性,裁剪之后幾乎都可以在保證一定精度的同時達(dá)到網(wǎng)絡(luò)壓縮的效果。傳統(tǒng)裁剪方法需要在多個待測閾值上進(jìn)行反復(fù)迭代,手動設(shè)置靈敏度,對參數(shù)進(jìn)行微調(diào),不僅耗時而且計(jì)算量大,同時由于權(quán)重閾值在網(wǎng)絡(luò)所有層共享,因此難以尋找到一個合適的閾值。
目前大多數(shù)已有研究工作都專注于設(shè)計(jì)用于濾波器排序的準(zhǔn)則,排序準(zhǔn)則和真實(shí)模型分類、檢測的準(zhǔn)則是不一樣的,采用分段式獨(dú)立的裁剪方式無法得到神經(jīng)網(wǎng)絡(luò)的最優(yōu)性能。在模型壓縮過程中,預(yù)訓(xùn)練、排序和微調(diào)是相互獨(dú)立的,很難保證最后模型的性能。此外,傳統(tǒng)的裁剪方法都采取統(tǒng)一的裁剪比例,但網(wǎng)絡(luò)不同層的參數(shù)其冗余程度不一樣,相同的裁剪比例勢必會造成裁剪的過度和欠缺??傊眉艨梢杂行У貕嚎s模型,其關(guān)鍵是如何衡量權(quán)重對于模型的重要性,如何選擇需要裁剪掉的權(quán)重值有眾多策略,但對于深度學(xué)習(xí)來說,沒有理論解釋哪一種策略是最優(yōu)策略。
Table 7 Performance comparison of typical NAS networks表7 典型NAS網(wǎng)絡(luò)性能對比
如何對裁剪操作進(jìn)行形式化描述與推理,以得到一個更加理論化的選擇標(biāo)準(zhǔn),是下一步亟待解決的問題。
(2)知識蒸餾方法中教師模型信息的豐富程度在模型訓(xùn)練過程中起著至關(guān)重要的作用。信息越豐富,訓(xùn)練效果越好,知識蒸餾可以很好地進(jìn)行小規(guī)模網(wǎng)絡(luò)的訓(xùn)練。但與主流的裁剪、量化等技術(shù)相比,還存在一定的差距,學(xué)生網(wǎng)絡(luò)結(jié)構(gòu)的構(gòu)造一般是由人工指定的,最后的訓(xùn)練效果也會因此有很大差異。
因此,如何根據(jù)教師網(wǎng)絡(luò)結(jié)構(gòu)來設(shè)計(jì)一個合理、能夠獲取較高模型性能的學(xué)生網(wǎng)絡(luò)結(jié)構(gòu),是未來的一個研究重點(diǎn)。
(3)參數(shù)量化算法,無論是二值量化、三值量化或者多值量化,其本質(zhì)都是將多個權(quán)重映射到一個數(shù)值,實(shí)現(xiàn)權(quán)重共享,從而降低存儲以及運(yùn)算開銷。參數(shù)量化作為一種主流的模型壓縮技術(shù),能夠以很小的精度損失實(shí)現(xiàn)模型體積的大幅減小。其不足之處一方面在于量化實(shí)現(xiàn)難度大、準(zhǔn)確性不穩(wěn)定,網(wǎng)絡(luò)經(jīng)過量化之后,很難再進(jìn)行其他改變;另一方面,通用性較差,往往需要特定的硬件支持,一種量化方法需要開發(fā)一套專門的運(yùn)行庫,增加了實(shí)現(xiàn)難度和維護(hù)成本。
(4)輕量級網(wǎng)絡(luò)因?yàn)槠湓O(shè)計(jì)方法是借鑒已有的深度神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),采用經(jīng)典的網(wǎng)絡(luò)模塊重新架構(gòu)神經(jīng)網(wǎng)絡(luò),不是對已有網(wǎng)絡(luò)模型的簡化,由于其模型簡單、存儲空間占用低、計(jì)算簡化等性能將其歸于模型壓縮研究范疇。輕量級網(wǎng)絡(luò)的設(shè)計(jì)也是針對某種特定任務(wù),特別設(shè)計(jì)適用于移動設(shè)備的網(wǎng)絡(luò)模型,雖然這種網(wǎng)絡(luò)的設(shè)計(jì)使得深度學(xué)習(xí)落地,能夠廣泛應(yīng)用于智能設(shè)備,但其具有任務(wù)單一、泛化性差的缺點(diǎn),也使得深度學(xué)習(xí)這一技術(shù)有大材小用之嫌。
(5)深度網(wǎng)絡(luò)模型的訓(xùn)練十分耗時,雖然直接訓(xùn)練一個小型輕量級網(wǎng)絡(luò)模型省時省力,但是設(shè)計(jì)結(jié)構(gòu)卻是一項(xiàng)困難的任務(wù),這對于設(shè)計(jì)者來說,需要足夠豐富的經(jīng)驗(yàn)與技術(shù)。另外,輕量級網(wǎng)絡(luò)由于其參數(shù)量小,模型的性能尤其是泛化性不能與大模型相媲美。雖然目前體系結(jié)構(gòu)搜索方法取得了顯著的進(jìn)展,但其主要應(yīng)用于有關(guān)圖像分類任務(wù)的網(wǎng)絡(luò)模型壓縮,針對其他領(lǐng)域的算法研究比較少。另外,搜索空間也存在局限性,空間中的部分參數(shù)需要人工指定,搜索策略不能實(shí)現(xiàn)自動搜索。
因此,設(shè)計(jì)能夠適應(yīng)多領(lǐng)域空間搜索的搜索算法是體系結(jié)構(gòu)搜索方法未來的研究重點(diǎn)。此外,體系結(jié)構(gòu)搜索算法的計(jì)算量仍然很大,如何降低計(jì)算復(fù)雜度、提高搜索效率也是未來研究方向之一。體系結(jié)構(gòu)搜索方法都是采用代理機(jī)制,先在小的代理任務(wù)上進(jìn)行搜索性能的測量,然后移植到實(shí)際模型,這樣難以保證搜索算法的性能。能否不采用代理機(jī)制,直接對大規(guī)模的應(yīng)用設(shè)計(jì)體系結(jié)構(gòu)搜索策略也是一個亟待解決的問題。
一般地,裁剪和知識蒸餾方法用于具有卷積層和全連接層的深度神經(jīng)網(wǎng)絡(luò)中,可以獲得相似的壓縮性能。對于每種壓縮方法,沒有一個標(biāo)準(zhǔn)評價哪一種壓縮效果最好,網(wǎng)絡(luò)壓縮效用的評價標(biāo)準(zhǔn)并不統(tǒng)一。目前,幾乎所有的評價標(biāo)準(zhǔn)都是側(cè)重于壓縮后和壓縮前模型幾個性能的比較,比如TOP-1、TOP-5、加速比、存儲空間節(jié)省率、壓縮率指標(biāo)來表示模型壓縮效果。如何選擇合適的壓縮方法,取決于具體的應(yīng)用需求以及網(wǎng)絡(luò)類型。文獻(xiàn)[84]給出了一些針對某項(xiàng)任務(wù)如何選擇壓縮方法的建議。
深度神經(jīng)網(wǎng)絡(luò)模型壓縮方法未來的研究工作會專注于通用性、標(biāo)準(zhǔn)化、壓縮率高、精度損失小等模型綜合性能提升上,最大化壓縮網(wǎng)絡(luò)規(guī)模的同時還能提升網(wǎng)絡(luò)性能。探索新的模型壓縮方法,將多種壓縮技術(shù)進(jìn)行結(jié)合,通過軟硬件協(xié)同進(jìn)行壓縮,提高模型運(yùn)行速度。
本文對近年來深度神經(jīng)網(wǎng)絡(luò)模型壓縮的主流技術(shù)方法進(jìn)行了概括和總結(jié)。模型壓縮的主要目標(biāo)是要在保證準(zhǔn)確率的前提下,提高模型壓縮率和模型速度。本文總結(jié)了網(wǎng)絡(luò)裁剪、知識蒸餾、輕量級網(wǎng)絡(luò)設(shè)計(jì)、量化、體系結(jié)構(gòu)搜索這五個方面的壓縮方法。其中,裁剪方法重點(diǎn)在于對網(wǎng)絡(luò)的冗余權(quán)值進(jìn)行修剪,去掉模型中影響因子較小的結(jié)構(gòu);知識蒸餾則是通過教師網(wǎng)絡(luò)的指導(dǎo)去訓(xùn)練一個精簡的性能相似的學(xué)生網(wǎng)絡(luò);輕量級網(wǎng)絡(luò)設(shè)計(jì)側(cè)重于設(shè)計(jì)一個全新的小型網(wǎng)絡(luò),滿足移動設(shè)備對于深度學(xué)習(xí)使用的需求;量化方法是目前最直接有效的壓縮網(wǎng)絡(luò)模型的方法,通過對網(wǎng)絡(luò)中參數(shù)進(jìn)行低秩量化,減小網(wǎng)絡(luò)存儲空間,加快運(yùn)算速度;體系結(jié)構(gòu)搜索關(guān)注深度網(wǎng)絡(luò)自身的結(jié)構(gòu)性問題,致力于通過搜索算法的設(shè)計(jì)找到最優(yōu)子網(wǎng)絡(luò),極大地簡化網(wǎng)絡(luò)模型,壓縮網(wǎng)絡(luò)結(jié)構(gòu)。通過本文介紹,讀者可以對深度網(wǎng)絡(luò)模型壓縮有一個較為全面的了解,并在今后的研究工作中加以利用,找到新的研究方法。