饒川 陳靚影 徐如意 劉樂元
近年來(lái),深度神經(jīng)網(wǎng)絡(luò)在解決機(jī)器學(xué)習(xí)任務(wù)時(shí)取得了巨大的成功.2012 年,Krizhevsky等[1]首次使用深度神經(jīng)網(wǎng)絡(luò),AlexNet 在ILSVRC(ImageNet large scale visual recognition competition)[2]分類任務(wù)上獲得了冠軍,他們的結(jié)果相比傳統(tǒng)的機(jī)器學(xué)習(xí)算法在識(shí)別精度上提升了近10 個(gè)百分點(diǎn),引起學(xué)術(shù)界和工業(yè)界巨大轟動(dòng).從那時(shí)起,各種不同結(jié)構(gòu)的深度神經(jīng)網(wǎng)絡(luò)模型如雨后春筍般不斷涌現(xiàn).2014 年英國(guó)牛津大學(xué)的Visual Geometry Group 提出了VGG[3]模型,同時(shí)谷歌的研究人員提出了GoolgLeNet[4],2015 年He 等提出了ResNet[5?6].這些模型的網(wǎng)絡(luò)結(jié)構(gòu)越來(lái)越深,從而能學(xué)習(xí)到更好的特征以提升模型的性能.然而,由于內(nèi)存和計(jì)算能力有限,隨著網(wǎng)絡(luò)變得越來(lái)越深,對(duì)包括移動(dòng)設(shè)備在內(nèi)的有嚴(yán)格時(shí)延要求的有限資源平臺(tái)而言,隨之增加的模型參數(shù)需要消耗更多的計(jì)算和存儲(chǔ)資源,難以直接應(yīng)用于手機(jī)等移動(dòng)嵌入式設(shè)備.
雖然將深度神經(jīng)網(wǎng)絡(luò)部署到云服務(wù)器端,移動(dòng)端將數(shù)據(jù)上傳服務(wù)端處理,能很好解決上述問(wèn)題,但服務(wù)器需要耗費(fèi)昂貴的硬件成本,導(dǎo)致計(jì)算成本過(guò)高,其次移動(dòng)端在使用的過(guò)程對(duì)網(wǎng)絡(luò)要求高,需要將移動(dòng)端本地的數(shù)據(jù)上傳到云端服務(wù)器進(jìn)行保存,在處理一些隱私數(shù)據(jù)時(shí),還會(huì)存在信息的泄露.所以將深度學(xué)習(xí)算法部署到移動(dòng)端本地非常有意義,但常用的深度模型具有大量的儲(chǔ)存量,比如AlexNet 的模型大小量超過(guò)200 MB,VGG 的模型大小量超過(guò)500 MB,如果將這些網(wǎng)絡(luò)結(jié)構(gòu)直接運(yùn)用到手機(jī)APP中,用戶需要大量的流量下載APP 文件,還會(huì)占用用戶手機(jī)的大量?jī)?nèi)存.同時(shí),巨大的模型文件會(huì)帶來(lái)另外一個(gè)問(wèn)題,手機(jī)設(shè)備的能源消耗問(wèn)題,手機(jī)在調(diào)用這些文件時(shí)會(huì)存在大量的能源消耗,會(huì)讓手機(jī)設(shè)備產(chǎn)生大量的熱量,因此深度模型壓縮是非常有必要的.
為了解決這一問(wèn)題,各種深度模型壓縮方法被提出,這些方法主要有:模型剪枝、知識(shí)精煉(Knowledge distillation)、低秩分解、精細(xì)化的模型結(jié)構(gòu)以及權(quán)重共享.本文主要關(guān)注基于權(quán)重共享的方法來(lái)壓縮模型,權(quán)重共享是通過(guò)卷積濾波器中相近的權(quán)重共享同一量化值從而達(dá)到對(duì)深度神經(jīng)網(wǎng)絡(luò)壓縮的目的.權(quán)重共享的方法大致可以分為三類:聚類編碼法、二值/三值量化編碼和指數(shù)量化編碼.
聚類編碼法,指使用聚類的方法,將權(quán)重聚類為若干類,取每類的聚類中心作為共享的權(quán)重.例如,Gong 等[7]通過(guò)對(duì)全連接層參數(shù)進(jìn)行聚類,取聚類中心作為量化編碼,可以將深度模型AlexNet 壓縮20倍,而Top-5 準(zhǔn)確率僅僅下降1%.類似的,Chen等[8]提出了HashedNets 對(duì)全連接層進(jìn)行量化,利用哈希函數(shù)隨機(jī)的將權(quán)重分到不同的哈希桶(Hash bucket),同一哈希桶的權(quán)重具有相同的量化值.Han等[9]提出了一種深度壓縮(Deep compression)方法,通過(guò)對(duì)卷積層和全連接層的權(quán)重進(jìn)行剪枝,然后通過(guò)K-Means 聚類進(jìn)行量化,最后使用霍夫曼編碼(Huffman coding)對(duì)模型進(jìn)行保存,極大的壓縮了模型的規(guī)模.但是,聚類編碼法需要大量額外的計(jì)算開銷用于聚類分析,算法的訓(xùn)練效率低.
二值/三值量化編碼,將網(wǎng)絡(luò)的權(quán)重、激活值量化為二值或者三值.例如,Courbariaux 等[10]提出了一種二值連接(Binary connect)方法,將權(quán)重進(jìn)行二值量化(量化為?1,1),可以將一個(gè)深度模型直接壓縮32 倍;他們隨后提出了Binarized neural networks[11],將權(quán)重和激活值同時(shí)進(jìn)行二值量化,在壓縮網(wǎng)絡(luò)的同時(shí)還可以提高運(yùn)算效率.Rastegari 等[12]提出的二值權(quán)重網(wǎng)絡(luò)(Binary weight networks)和XNOR-Net,在把權(quán)重量化為+1 和?1的基礎(chǔ)上乘以一個(gè)尺度因子,在大數(shù)據(jù)集ImageNet上取得了不錯(cuò)的壓縮效果.Li 等[13]提出的HORQ,相對(duì)于XNOR 只使用到一階閾值,HORQ 還用到二階閾值,讓二階閾值逼近一階閾值的殘差,HORQ在對(duì)準(zhǔn)確率影響很小的情況下能將模型縮小32倍,同時(shí)加速30 倍左右.Li 等[14]提出的TWN(Ternary weight networks),在二值網(wǎng)絡(luò)的基礎(chǔ)中引入0 作為量化權(quán)重值.Zhu 等[15]提出的TTQ(Trained ternary quantization),將網(wǎng)絡(luò)的權(quán)重量化為+1 和?1 的基礎(chǔ)上,分別乘上兩個(gè)不同的尺度因子.Cai 等[16]提出HWGQ-Net 通過(guò)改變網(wǎng)絡(luò)的激活函數(shù),將權(quán)重量化1 個(gè)比特網(wǎng)絡(luò)的激活值量化為2 個(gè)比特,網(wǎng)絡(luò)只有微小的性能損失.盡管這類方法將模型中的每一個(gè)權(quán)重、激活值壓縮為一到兩位來(lái)表示,但是模型的識(shí)別精度也有一定幅度的下降.
指數(shù)量化編碼,將權(quán)重量化為2 的(為整數(shù))次冪,以便于嵌入式系統(tǒng)進(jìn)行二進(jìn)制移位操作.該方法由Zhou 等[17]首次提出,利用預(yù)訓(xùn)練模型獲取固定的指數(shù)量化的碼本,然后通過(guò)增量量化過(guò)程來(lái)逐漸量化整個(gè)網(wǎng)絡(luò).在使用5-bit 量化時(shí),壓縮模型的識(shí)別率能夠保持與原模型一致.這種方法在量化時(shí),可以高效率對(duì)深度神經(jīng)網(wǎng)絡(luò)量化,但在網(wǎng)絡(luò)重訓(xùn)練時(shí),他們提出的增量網(wǎng)絡(luò)量化方法需要分多個(gè)階段訓(xùn)練,訓(xùn)練效率較低.
鑒于以上幾點(diǎn),本文提出一種基于動(dòng)態(tài)量化的深度模型壓縮方法,不同與從預(yù)訓(xùn)練模型獲取固定碼本,動(dòng)態(tài)量化在訓(xùn)練的過(guò)程中也更新碼本.這種量化方式在保證模型性能的同時(shí),還加快了效率.同時(shí)為了方便嵌入式系統(tǒng)進(jìn)行移位操作,本文對(duì)所有網(wǎng)絡(luò)的權(quán)值采用指數(shù)量化編碼,并通過(guò)理論證明得出,絕對(duì)值較大權(quán)值參數(shù)的量化對(duì)模型的精度影響越大.因此,本研究通過(guò)動(dòng)態(tài)編碼使得碼本能自適應(yīng)網(wǎng)絡(luò)中絕對(duì)值較大的權(quán)值參數(shù).本文的主要貢獻(xiàn)有以下三點(diǎn):
1)提出動(dòng)態(tài)更新碼本自適應(yīng)網(wǎng)絡(luò)中絕對(duì)值較大的權(quán)值參數(shù),盡可能減小這些參數(shù)的量化對(duì)模型精度的影響;
2)提出交替迭代算法用于模型訓(xùn)練,使得權(quán)值參數(shù)和碼本交替更新,加快訓(xùn)練過(guò)程的收斂速度;
3)大量的對(duì)比實(shí)驗(yàn)表明,本文所提的基于動(dòng)態(tài)編碼的模型壓縮方法總體上優(yōu)于靜態(tài)編碼的方法.
本文剩余部分的組織結(jié)構(gòu)如下:第1 節(jié)介紹現(xiàn)有的深度神經(jīng)網(wǎng)絡(luò)壓縮方法;第2 節(jié)介紹本文提出的方法,包括基于權(quán)重的動(dòng)態(tài)編碼過(guò)程以及壓縮模型的訓(xùn)練過(guò)程;第3 節(jié)通過(guò)大量的對(duì)比實(shí)驗(yàn)驗(yàn)證本文方法的有效性;第4 節(jié)總結(jié)與展望.
本節(jié)主要介紹不同的深度神經(jīng)網(wǎng)絡(luò)壓縮方法.除了上一節(jié)重點(diǎn)介紹的權(quán)重共享的方法,深度神經(jīng)網(wǎng)絡(luò)壓縮的方法還包括:模型的剪枝、知識(shí)精煉(Knowledge distillation)、低秩分解以及精細(xì)化的模型結(jié)構(gòu).
模型的剪枝,通過(guò)評(píng)定預(yù)訓(xùn)練模型中參數(shù)的重要性,剔除網(wǎng)絡(luò)中不重要的網(wǎng)絡(luò)連接,主要有權(quán)重剪枝和濾波器剪枝兩種方法.權(quán)重剪枝主要通過(guò)判斷權(quán)重的大小來(lái)決定重要性,一般設(shè)定一個(gè)閾值進(jìn)行剔除,或者根據(jù)設(shè)定剪切比例進(jìn)行剔除,優(yōu)先將那些權(quán)重較小的值剔除例如Song 等[18]采用此方法將AlexNet 模型的參數(shù)量減少了9 倍,VGG 模型的參數(shù)量減少13 倍,而并沒有造成模型精度的下降;Anwar 等[19]按照一定的比例對(duì)每層中的權(quán)重隨機(jī)裁剪,統(tǒng)計(jì)多種隨機(jī)剪裁下局部最優(yōu)的作為最終剪裁.濾波器剪枝則是剔除網(wǎng)絡(luò)中那些對(duì)網(wǎng)絡(luò)影響較小的卷積濾波器,Li 等[20]通過(guò)對(duì)卷積濾波器所有元素絕對(duì)值求和,剔除那些求和較小的濾波器,從而實(shí)現(xiàn)對(duì)模型的剪枝;Luo 等[21]對(duì)卷積濾波器剪切前和剪切后激活值的損失進(jìn)行評(píng)定,剪切那些對(duì)損失影響不大的濾波器;Hu 等[22]通過(guò)判定卷積錄波器中權(quán)重為0 的參數(shù)量來(lái)評(píng)定剪切標(biāo)準(zhǔn);Luo 等[23]提出了一種基于熵值的裁剪方式,通過(guò)特征層的概率分布來(lái)評(píng)價(jià)卷積濾波器的重要性;Yang 等[24]通過(guò)每層需要消耗的能量來(lái)進(jìn)行裁剪,優(yōu)先修剪那些消耗大的層.相對(duì)而言,濾波器剪枝會(huì)產(chǎn)生規(guī)則的稀疏矩陣,而權(quán)重剪枝則會(huì)產(chǎn)生大量不規(guī)則的稀疏矩陣,因此,在加速方面濾波器剪枝更加有效.
知識(shí)精煉,利用大模型指導(dǎo)小模型,從而讓小模型學(xué)到大模型相似的函數(shù)映射.Hinton 等[25]利用訓(xùn)練好的復(fù)雜模型指導(dǎo)小模型的訓(xùn)練,小模型通過(guò)優(yōu)化復(fù)雜模型的輸出交叉熵和自身的交叉熵,在模型性能和訓(xùn)練速度上均有所提高.Romero 等[26]提出的FitNets 通過(guò)添加網(wǎng)絡(luò)模型中間層的特征作為監(jiān)督信號(hào),有效解決由于網(wǎng)絡(luò)層數(shù)過(guò)深造成的學(xué)習(xí)困難.Zagoruyko 等[27]同樣采用大模型的中間特征作對(duì)小模型進(jìn)行監(jiān)督學(xué)習(xí),讓小模型同時(shí)學(xué)到低、中、高層三個(gè)層次的特征輸出.
低秩分解,將原來(lái)的矩陣分解成若干個(gè)小矩陣,對(duì)分解的小矩陣進(jìn)行優(yōu)化調(diào)整.Zhang 等[28]將卷積矩陣變換為二維的矩陣,結(jié)合SVD 分解,將VGG-16 模型加速4 倍而精度只有微小的下降.Lebedev等[29]使用CP 分解的方法,將每層網(wǎng)絡(luò)分解成若干個(gè)低復(fù)雜度的網(wǎng)絡(luò)層,將AlexNet 的第二個(gè)卷積層的速度提升了4 倍卻只增加1% 的分類誤差.
精細(xì)化的模型結(jié)構(gòu),通過(guò)使用小的卷積單元或者改變卷積方式對(duì)模型進(jìn)行壓縮和加速.Iandola等[30]提出的SqueezeNet 使用1×1 卷積核對(duì)上層特征進(jìn)行卷積降維,然后使用1×1 和3×3 卷積進(jìn)行特征堆疊,大大減小了卷積的參數(shù)數(shù)量.Howard等[31]提出的MobileNets 對(duì)每個(gè)通道的特征單獨(dú)卷積,之后再使用1×1 卷積對(duì)不同通道特征進(jìn)行拼接.Zhang 等[32]提出的ShuffleNet 則是對(duì)多通道特征先進(jìn)行分組后再執(zhí)行卷積,避免信息流不通暢的問(wèn)題.這些輕量化的模型設(shè)計(jì),極大了減小了模型的參數(shù)量和計(jì)算量.
這些方法在對(duì)深度神經(jīng)網(wǎng)絡(luò)的壓縮,使得網(wǎng)絡(luò)的性能在一定程度上有所下降,有些壓縮算法實(shí)現(xiàn)步驟繁瑣,甚至有些方法還對(duì)原始的網(wǎng)絡(luò)結(jié)構(gòu)進(jìn)行了改變.而與這些方法相比,權(quán)重共享的方法只對(duì)深度神經(jīng)網(wǎng)絡(luò)中的權(quán)重進(jìn)行量化,實(shí)現(xiàn)簡(jiǎn)單,不會(huì)改變模型的網(wǎng)絡(luò)結(jié)構(gòu),本文對(duì)深度神經(jīng)網(wǎng)絡(luò)的壓縮采用了權(quán)重共享的方式.
本文提出的方法由兩部分組成:權(quán)重量化與動(dòng)態(tài)編碼,以及基于動(dòng)態(tài)編碼的量化模型訓(xùn)練,本節(jié)將詳述這兩部分內(nèi)容.
為了方便嵌入式系統(tǒng)進(jìn)行移位運(yùn)算,本文采用類似文獻(xiàn)[15]中的方法,采用2 的n次冪的形式對(duì)神經(jīng)網(wǎng)絡(luò)中的權(quán)值進(jìn)行量化,即當(dāng)權(quán)重量化為b比特時(shí),碼本最多有2b個(gè)取值.碼本可以表示為:
式中,l代表深度神經(jīng)網(wǎng)絡(luò)的第l層,n1和n2是兩個(gè)整數(shù),滿足n1 亦可引入0 作為量化值對(duì)權(quán)重進(jìn)行編碼,具體形式為: 由于0 無(wú)法表示成2 的n(n為整數(shù))次冪,需要額外的一個(gè)比特來(lái)表示0 這個(gè)量化值.當(dāng)n1和n2保持不變時(shí),式(3)需要b+1 比特來(lái)量化權(quán)重.即: 雖然將0 作為量化值引入碼本需要增加一個(gè)比特,但是會(huì)讓網(wǎng)絡(luò)中產(chǎn)生大量的稀疏矩陣,有利于網(wǎng)絡(luò)的正則化,能在一定程度上抑制過(guò)擬合. 無(wú)論是否引入0 進(jìn)行編碼,當(dāng)量化的位數(shù)確定時(shí),只要確定n1或n2中任意一個(gè)的值,根據(jù)式(2)或式(4)求得另外一個(gè)參數(shù),從而根據(jù)式(1)或式(3)得到碼本.假設(shè)給定預(yù)訓(xùn)練的模型,并將此模型中的網(wǎng)絡(luò)權(quán)值量化為2 的n次冪.可采用以下式(5)使量化誤差最小化: 由于量化模型的權(quán)值調(diào)整大小是由反向傳播的梯度和學(xué)習(xí)率的乘積來(lái)決定,而這兩個(gè)量都非常的小,因此這一假設(shè)是容易滿足的,從而可以根據(jù)式(6)得出當(dāng)模型進(jìn)行指數(shù)量化時(shí),量化權(quán)值的絕對(duì)值越大,量化誤差也越大. 基于這一結(jié)論,我們?cè)诹炕倪^(guò)程中優(yōu)先量化那些權(quán)重絕對(duì)值較大的值,即根據(jù)|Wl|中的最大值確定上限n2的取值.具體的計(jì)算過(guò)程如下: 其中,floor(·)表示的是向下取整操作,max(·)表示的取最大值操作.確定了n2,就可以通過(guò)式(2)或式(4)得到下限n1的取值,從而確定碼本Pl. 對(duì)于式(1)定義的碼本,每個(gè)網(wǎng)絡(luò)權(quán)值用碼本中最近的量化值進(jìn)行編碼,具體量化規(guī)則如圖1 所示. 圖1 網(wǎng)絡(luò)權(quán)值的量化規(guī)則Fig.1 Quantization rules for network weight s 可用如下的公式來(lái)計(jì)算: 對(duì)于式(3)定義的碼本,只需要根據(jù)碼本下限進(jìn)行截?cái)嗳? 值即可,對(duì)應(yīng)的量化公式如下: 本節(jié)主要介紹量化模型的訓(xùn)練過(guò)程.對(duì)于初始的深度神經(jīng)網(wǎng)絡(luò)模型,首先基于式(7)根據(jù)網(wǎng)絡(luò)中的最大權(quán)值確定碼本,然后根據(jù)碼本對(duì)網(wǎng)絡(luò)權(quán)值采用式(8)或式(9)進(jìn)行量化,量化的深度神經(jīng)網(wǎng)絡(luò)通過(guò)前向傳播過(guò)程計(jì)算網(wǎng)絡(luò)的損失.再根據(jù)網(wǎng)絡(luò)損失通過(guò)反向傳播過(guò)程,對(duì)網(wǎng)絡(luò)權(quán)值進(jìn)行更新.網(wǎng)絡(luò)權(quán)值的更新會(huì)破壞原有的量化,因此有必要對(duì)碼本進(jìn)行更新,然后使用新的碼本對(duì)網(wǎng)絡(luò)權(quán)值進(jìn)行再一次的量化.整個(gè)訓(xùn)練過(guò)程碼本和權(quán)重交替迭代更新,直到網(wǎng)絡(luò)損失收斂為止.在整個(gè)迭代過(guò)程中,碼本根據(jù)網(wǎng)絡(luò)權(quán)值的變化進(jìn)行動(dòng)態(tài)的更新,碼本的更新和深度神經(jīng)網(wǎng)絡(luò)的訓(xùn)練交替進(jìn)行,訓(xùn)練流程如圖2 所示.以下介紹量化模型訓(xùn)練的具體實(shí)現(xiàn)細(xì)節(jié). 圖2 動(dòng)態(tài)量化編碼壓縮方法的訓(xùn)練流程Fig.2 The process of dynamic quantization coding 對(duì)于普通的深度神經(jīng)網(wǎng)絡(luò),其訓(xùn)練由兩個(gè)基本過(guò)程構(gòu)成,即前向傳播過(guò)程和反向傳播過(guò)程.在前向傳播過(guò)程中,分層網(wǎng)絡(luò)的前一層的輸出作為后一層的輸入,直到傳入網(wǎng)絡(luò)的最后一層得到整個(gè)深度神經(jīng)網(wǎng)絡(luò)的輸出.根據(jù)輸出和標(biāo)簽之間的差異計(jì)算損失函數(shù),其中損失函數(shù)的定義如下: 其中,q是二項(xiàng)分布函數(shù),p ∈[0,1]的概率.根據(jù)STE的處理方法,在反向求導(dǎo)的過(guò)程中,我們可以這樣處理模型中的權(quán)重 因此在進(jìn)行反向傳播過(guò)程時(shí),式(11)可以寫成: 采用動(dòng)態(tài)量化編碼的方式對(duì)深度神經(jīng)網(wǎng)絡(luò)壓縮,使得網(wǎng)絡(luò)的權(quán)重在一個(gè)動(dòng)態(tài)更新的范圍量化.與靜態(tài)量化的碼表相比,動(dòng)態(tài)量化后的權(quán)重與模型最新更新的權(quán)重之間誤差更小.另外,由于動(dòng)態(tài)更新的碼本在訓(xùn)練過(guò)程會(huì)隨著網(wǎng)絡(luò)的訓(xùn)練誤差而間接更新,所以動(dòng)態(tài)更新碼本的方法無(wú)需一個(gè)預(yù)訓(xùn)練的模型作為初始化也能最終使模型收斂. 為了驗(yàn)證本文方法的有效性,我們?cè)跇?biāo)準(zhǔn)數(shù)據(jù)集MNIST[34]、CIFAR-10[35]上進(jìn)行了實(shí)驗(yàn).其中,MNIST 數(shù)據(jù)集是一個(gè)手寫字符數(shù)據(jù)集,大小為28×28 的單通道圖像,包含訓(xùn)練集60 000 張,測(cè)試集為10 000 張;CIFAR-10 是一個(gè)圖像分類數(shù)據(jù)集,所有的圖像都是大小為32×32 的三通道彩色圖像,包含60 000 張圖片,其中訓(xùn)練集為50 000,驗(yàn)證集為10 000. 在MNIST 數(shù)據(jù)集上,先使用LeNet[35]在不同的損失函數(shù)下訓(xùn)練全精度32 位的模型.在壓縮過(guò)程中,使用預(yù)訓(xùn)練的全精度模型作為壓縮模型的初始化.使用的三種損失函數(shù)為Softmax-loss、Softmaxloss 加上L1 正則項(xiàng)、Softmax-loss 加上L2 正則項(xiàng),分別對(duì)應(yīng)碼本中有無(wú)0 兩種情況,實(shí)驗(yàn)過(guò)程中正則項(xiàng)系數(shù)為0.001,具體實(shí)驗(yàn)結(jié)果如下: 通過(guò)表1~表3 可以看到,無(wú)論在碼本中是否引入0,本文的方法均能有效地對(duì)網(wǎng)絡(luò)進(jìn)行壓縮.同時(shí)還可以看到,在損失函數(shù)中引入L2 正則項(xiàng)有比較好的結(jié)果,因此在后續(xù)的實(shí)驗(yàn)中只使用Softmax-loss加上L2 正則項(xiàng)作為損失函數(shù). 表1 LeNet 在Softmax-loss 下量化效果Table 1 Quantization performance of LeNet under Softmax-loss 表2 LeNet 在Softmax-loss+L1 下量化效果Table 2 Quantization performance of LeNet under Softmax-loss and L1 表3 LeNet 在Softmax-loss+L2 下量化效果Table 3 Quantization performance of LeNet under Softmax-loss and L2 為了清晰地看到壓縮前和壓縮后的變化,我們先使用不同深度的ResNet 訓(xùn)練了全精度32 位的模型.在壓縮過(guò)程中,為了盡量避免初始化不同對(duì)最終實(shí)驗(yàn)結(jié)果的影響,以及加快量化模型的訓(xùn)練收斂速度,均使用預(yù)訓(xùn)練好的32 位模型作為量化模型的初始化.在預(yù)訓(xùn)練和量化壓縮過(guò)程中,數(shù)據(jù)預(yù)處理都使用了數(shù)據(jù)增強(qiáng)的方法,在原32×32 的圖像邊界上填補(bǔ)0 擴(kuò)充為36×36 的圖像,再隨機(jī)的裁剪為32×32 的圖像,然后隨機(jī)左右翻轉(zhuǎn).在訓(xùn)練過(guò)程中,都迭代了80 000 輪,每輪送進(jìn)網(wǎng)絡(luò)一個(gè)批次的數(shù)據(jù)是128,初始的學(xué)習(xí)率為0.1,當(dāng)訓(xùn)練達(dá)到40 000 次學(xué)習(xí)率為0.01,達(dá)到60 000 次之后學(xué)習(xí)率為0.001,訓(xùn)練中使用正則項(xiàng),其權(quán)值系數(shù)設(shè)置為0.001. 3.2.1 對(duì)比不同碼本的性能 本文在第3.1 節(jié)引入了兩種碼本,在量化同樣的位數(shù)下,一種在碼本中引入了0 另外一種沒有.將0 作為量化值引入碼表,會(huì)使濾波器產(chǎn)生大量的稀疏矩陣,這會(huì)在一定程度抑制過(guò)擬合.但由于0 不能表示為2 的n(為整數(shù))次冪這種形式,需要額外的一個(gè)比特來(lái)表示,會(huì)影響碼表的豐富性.為了說(shuō)明這兩種量化的差別,我們做了如下實(shí)驗(yàn): 表4 ResNet-20 在不同碼本下量化效果Table 4 Quantization performance of ResNet-20 under different codebook 表5 ResNet-32 在不同碼本下量化效果Table 5 Quantization performance of ResNet-32 under different codebook 表6 ResNet-44 在不同碼本下量化效果Table 6 Quantization performance of ResNet-44 under different codebook 表7 ResNet-56 在不同碼本下量化效果Table 7 Quantization performance of ResNet-56 under different codebook 從表4~7 中可以看到,兩種量化方式均能有效壓縮深度神經(jīng)網(wǎng)絡(luò).當(dāng)量化位數(shù)一定時(shí),網(wǎng)絡(luò)越深量化效果越好:當(dāng)網(wǎng)絡(luò)深度一定時(shí),量化位數(shù)越大量化效果越好.特別在量化位數(shù)較大且網(wǎng)絡(luò)較深時(shí),采用這種動(dòng)態(tài)量化編碼的方法,甚至可以提升網(wǎng)絡(luò)的性能. 3.2.2 對(duì)比靜態(tài)量化編碼(SQC)方法 本文使用的是動(dòng)態(tài)的碼本(Static quantitative coding,DQC),每次迭代都會(huì)對(duì)碼本進(jìn)行更新.為了說(shuō)明DQC 的有效性,我們比較了基于SQC 和DQC 的模型性能.其中,SQC 方法與DQC 方法不同的地方在于量化模型的訓(xùn)練過(guò)程中不對(duì)碼本進(jìn)行更新.基于SQC 方法的實(shí)驗(yàn)結(jié)果如表8,通過(guò)表8可以看到深度模型的網(wǎng)絡(luò)結(jié)構(gòu)越深,量化的位數(shù)越大,量化效果越好. 為了更加清楚地顯示SQC 和DQC 兩種方法訓(xùn)練得到模型性能的差異,我們將靜態(tài)碼表的結(jié)果減去動(dòng)態(tài)碼表的結(jié)果,具體結(jié)果如圖3 和圖4 所示. 圖3 碼本中無(wú)0,SQC 和DQC 的量化比較Fig.3 Quantization performance of SQC and DQC with 0 in codebook 圖4 碼本中有0,SQC 和DQC 的量化效果比較Fig.4 Quantization performance of SQC and DQC without 0 in codebook 從圖3 和圖4 中可以看到,除了個(gè)別情況,絕大數(shù)情況動(dòng)態(tài)變化的碼本比固定碼本對(duì)深度神經(jīng)網(wǎng)絡(luò)的壓縮效果更好,特別是在網(wǎng)絡(luò)較淺時(shí),動(dòng)態(tài)量化編碼的效果比靜態(tài)量化的效果更加明顯.在使用動(dòng)態(tài)更新的碼本方法時(shí),碼本隨著權(quán)重的更新而更新,深度神經(jīng)網(wǎng)絡(luò)的權(quán)重在新的碼本內(nèi)量化,這會(huì)在一定程度上減小由于量化造成的誤差;而固定的碼本只與預(yù)訓(xùn)練的權(quán)重有關(guān)系,量化得到的模型權(quán)重與預(yù)訓(xùn)練模型中權(quán)重誤差較小.顯然,采用動(dòng)態(tài)量化編碼的方式,能更好的減小由于量化造成的影響. 本文與Deep compression[9]做了對(duì)比,由于文獻(xiàn)[9]是對(duì)網(wǎng)絡(luò)進(jìn)行了剪枝之后再進(jìn)行量化.為了對(duì)比的公平性,我們?cè)诖颂幾隽撕臀墨I(xiàn)[9]同樣的處理,使用的數(shù)據(jù)集是MNIST,將LeNet 第一個(gè)卷積層66% 的小權(quán)重置為0,第二個(gè)卷積層12% 較小權(quán)重置為0,第一個(gè)全連接層8% 的小權(quán)重置為0,第二個(gè)全連接層19% 的小權(quán)重置為0.對(duì)于這些置為0 的權(quán)重,在更新過(guò)程中不進(jìn)行求導(dǎo)運(yùn)算.此處本文的方法碼本中沒有引入0,具體實(shí)驗(yàn)結(jié)果如下: 表8 固定碼本下量化效果Table 8 Quantization performance of SQC 從表9 可以看到,在相同條件下,我們的方法有一定的優(yōu)勢(shì). 為了進(jìn)一步說(shuō)明我們的方法,本文與INQ[15]的結(jié)果做了比較.這里主為了實(shí)驗(yàn)的客觀性,只與INQ 做了對(duì)比實(shí)驗(yàn),由于本文的量化方法與INQ 相近,都是將權(quán)重量化為2 的n(n為整數(shù))次冪這種形式,從而在對(duì)比實(shí)驗(yàn)時(shí)避免編碼形式的影響.我們使用相同的數(shù)據(jù)、初始網(wǎng)絡(luò)結(jié)構(gòu),壓縮到同樣的位數(shù),INQ 使用4 個(gè)步驟進(jìn)行量化,每次量化比例:0.50,0.75,0.85,1.00,兩種方法均量化5 bits,結(jié)果如下: 表9 Deep compression 與DQC 的實(shí)驗(yàn)比較Table 9 Comparison of deep compression and DQC 表10 量化為5 bits 時(shí)INQ 和DQC 在CIFAR-10 上的準(zhǔn)確率比較Table 10 Compare the accuracy of INQ and DQC on CIFAR-10 with 5 bits 從表10 可知,無(wú)論網(wǎng)絡(luò)的層數(shù)多深,碼本中是否引入0,使用動(dòng)態(tài)量化編碼的結(jié)果均優(yōu)于INQ 的方法,進(jìn)一步說(shuō)明了我們方法的有效性. 本文提出了一種基于動(dòng)態(tài)量化編碼的深度神經(jīng)網(wǎng)絡(luò)壓縮方法.為了方便在嵌入式系統(tǒng)采用移位操作,本文對(duì)網(wǎng)絡(luò)中的權(quán)值采用指數(shù)量化編碼,通過(guò)理論推導(dǎo)得出,將模型量化為指數(shù)形式時(shí),絕對(duì)值較大權(quán)值參數(shù)的量化對(duì)模型引起的誤差也越大.為此,本文采用動(dòng)態(tài)量化編碼,在反向傳播更新網(wǎng)絡(luò)權(quán)值后,對(duì)碼本進(jìn)行更新以自適應(yīng)模型中的絕對(duì)值較大的權(quán)值參數(shù),減小這些參數(shù)的量化對(duì)模型精度的影響.本文還討論了靜態(tài)和動(dòng)態(tài)兩種不同碼本進(jìn)行編碼時(shí)壓縮模型的性能.通過(guò)實(shí)驗(yàn)表明,深度神經(jīng)網(wǎng)絡(luò)越深,壓縮位數(shù)越大,壓縮效果越好;動(dòng)態(tài)量化編碼的方法優(yōu)于靜態(tài)量化的方法;本文方法在網(wǎng)絡(luò)壓縮10.67倍時(shí)準(zhǔn)確率還有提升.雖然本文為了說(shuō)明動(dòng)態(tài)量化的優(yōu)越性能,使用不同深度和量化位寬對(duì)深度神經(jīng)網(wǎng)絡(luò)壓縮進(jìn)行了大量實(shí)驗(yàn),但目前只對(duì)小數(shù)據(jù)集進(jìn)行實(shí)驗(yàn),后續(xù)將在更大的數(shù)據(jù)集上進(jìn)行實(shí)驗(yàn).2.2 基于動(dòng)態(tài)編碼的量化模型訓(xùn)練
3 實(shí)驗(yàn)與分析
3.1 MNIST 實(shí)驗(yàn)設(shè)置
3.2 CIFAR-10 實(shí)驗(yàn)設(shè)置
3.3 對(duì)比現(xiàn)有方法
4 總結(jié)與展望