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