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

深度神經(jīng)網(wǎng)絡(luò)的壓縮和正則化剖析

深度神經(jīng)網(wǎng)絡(luò)在識別物體上的能力怎樣
基于深度神經(jīng)網(wǎng)絡(luò)的端到端圖像壓縮方法

深度神經(jīng)網(wǎng)絡(luò)模型的壓縮和優(yōu)化綜述

基于FPGA的神經(jīng)網(wǎng)絡(luò)硬件實現(xiàn)方法

評論