引言
這篇論文來(lái)自文章也幫助深鑒科技在國(guó)內(nèi)外獲得了一定知名度。深度壓縮首先通過(guò)剪枝減少了網(wǎng)絡(luò)的連接,然后通過(guò)比特量化來(lái)降低權(quán)重量,最后通過(guò)無(wú)損壓縮方式霍夫曼編碼來(lái)縮小存儲(chǔ)空間。作者分別對(duì)AlexNet和VGG-16進(jìn)行了實(shí)驗(yàn),獲得了35倍和49倍的壓縮量,而且精度幾乎沒(méi)有損失。
1. 原理
深度壓縮之所以獲得成功主要是結(jié)合了三種壓縮方法:剪枝,量化和無(wú)損壓縮霍夫曼編碼,而且在大的數(shù)據(jù)集和深度神經(jīng)網(wǎng)絡(luò)中獲得了較高壓縮比以及精度未降。前兩種方法不僅僅降低了權(quán)重?cái)?shù)量,也提高了計(jì)算速率。而霍夫曼編碼只是能夠降低存儲(chǔ)空間,在實(shí)際計(jì)算的時(shí)候還需要進(jìn)行解碼操作,實(shí)際上不會(huì)提高計(jì)算率。
以上三種方法用圖來(lái)表示為三個(gè)過(guò)程:
這三個(gè)方法一次順序進(jìn)行,每個(gè)過(guò)程都單獨(dú)進(jìn)行。
2. 剪枝
首先進(jìn)行剪枝操作,也是很傳統(tǒng)的方法,就是通過(guò)一定策略來(lái)過(guò)濾掉一些不重要的神經(jīng)網(wǎng)絡(luò)連接。然后再重新訓(xùn)練進(jìn)行參數(shù)微調(diào),不斷重復(fù)這個(gè)過(guò)程直到不能夠再進(jìn)行剪枝為止。剪枝后的神經(jīng)網(wǎng)絡(luò)連接大大減少,剩下的都是對(duì)網(wǎng)絡(luò)分類(lèi)有最重要貢獻(xiàn)的連接。其他被剪掉的連接的參數(shù)很小,產(chǎn)生的數(shù)值對(duì)結(jié)果影響可以通過(guò)重新訓(xùn)練來(lái)微調(diào)其他參數(shù)而彌補(bǔ)。在imageNet數(shù)據(jù)集上,剪枝方法可以將AlexNet的參數(shù)數(shù)量減少9倍而沒(méi)有精度上的損失。VGG-16同樣有類(lèi)似的現(xiàn)象,參數(shù)總量可以減少13倍左右而沒(méi)有精度損失。
3. 量化
接下來(lái)在剪枝網(wǎng)絡(luò)上做進(jìn)一步量化操作。基本思路是權(quán)重共享和聚類(lèi)。假設(shè)給定了k個(gè)類(lèi),這是權(quán)重參數(shù)量化后可能產(chǎn)生的k個(gè)值,然后對(duì)權(quán)重執(zhí)行聚類(lèi)操作,聚類(lèi)方法選擇了k-means方式。然后會(huì)得到k個(gè)區(qū)間,這些權(quán)重參數(shù)都分布在這k個(gè)區(qū)間中。然后用對(duì)應(yīng)k個(gè)區(qū)間的數(shù)值來(lái)替代原來(lái)的權(quán)重?cái)?shù)據(jù)。K個(gè)數(shù)值通常需要log2(k)比特來(lái)表示。這樣就從原來(lái)的32bit降低到了log2(k)。
以下為k-means方法的目標(biāo)函數(shù):
作者在同一層網(wǎng)絡(luò)上進(jìn)行權(quán)重共享,不同層之間的權(quán)重分別進(jìn)行聚類(lèi)。為什么不同層之間的權(quán)重不能夠進(jìn)行共享?可以這樣想,權(quán)重之所以可以共享和量化,是因?yàn)槠浔磉_(dá)的信息有一些共性,從數(shù)學(xué)上看同一層權(quán)重之間是以“求和”方式連接的,而不同層時(shí)間是“相乘”關(guān)系,后者有一定順序性,無(wú)法做到共享。否則會(huì)導(dǎo)致較高錯(cuò)誤率,而且層與層之間還有激活函數(shù),歸一化函數(shù),不能簡(jiǎn)單的進(jìn)行共享。
訓(xùn)練也進(jìn)行了量化,在原來(lái)權(quán)重求得梯度值基礎(chǔ)上進(jìn)行同樣的聚類(lèi)和量化操作,然后對(duì)量化的權(quán)重進(jìn)行微調(diào)得到新的值。過(guò)程如下圖所示。這里作者并不是用未量化的梯度來(lái)更新權(quán)重,用量化的梯度來(lái)更新可以減少訓(xùn)練迭代,在這里只進(jìn)行了兩次訓(xùn)練,第一次先訓(xùn)練出初始權(quán)重?cái)?shù)據(jù),第二次是用量化的梯度更新權(quán)重。
4. 霍夫曼編碼
神經(jīng)網(wǎng)絡(luò)在FPGA上部署通常需要大量的緩存,為了降低緩存空間,霍夫曼編碼進(jìn)一步來(lái)壓縮權(quán)重?;舴蚵幋a是一種無(wú)損編碼,其通過(guò)數(shù)據(jù)的重復(fù)率來(lái)進(jìn)行數(shù)據(jù)重新編碼,重復(fù)率高的用少的比特,重復(fù)率少的用多的比特,這樣就降低了數(shù)據(jù)存儲(chǔ)空間。雖然霍夫曼編碼能壓縮2到3倍權(quán)重,但是并不適合在FPGA上實(shí)現(xiàn)。因?yàn)榛舴蚵獯a要消耗大量資源,同時(shí)霍夫曼解碼是單bit進(jìn)行解析,速度較慢。這些都不利于FPGA上加速深度神經(jīng)網(wǎng)絡(luò)。
5. 實(shí)驗(yàn)結(jié)果
作者主要在AlexNet和VGG-16上進(jìn)行了嘗試,結(jié)果如圖:
從結(jié)果中可以獲得以下結(jié)論:
1) 全連接層的剪枝和量化都很大,說(shuō)明全連接層信息有很大冗余;
2) 越深的網(wǎng)絡(luò)壓縮比例越大;
結(jié)論
本文介紹了深度壓縮方法,其結(jié)合了剪枝,量化和霍夫曼編碼的方式來(lái)最大限度降低權(quán)重?cái)?shù)據(jù)量,這種方法促進(jìn)了深度神經(jīng)網(wǎng)絡(luò)在FPGA器件上的應(yīng)用能力。
編輯:hfy
-
FPGA
+關(guān)注
關(guān)注
1625文章
21620瀏覽量
601234 -
神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
42文章
4733瀏覽量
100415
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論