基於權值熵的深度神經網路量化

2021-08-14 09:20:58 字數 1743 閱讀 7854

**: weighted-entropy-based quantization for deep neural networks  (cvpr2017)

1.緒論部分:

量化是優化神經網路模型前向計算耗時的最有效的方法之一,以便它們部署到資源受限的移動或嵌入式系統中。在這類方法中,最重要是提供低精度損失量化。在這篇**中,作者提出了一種基於加權熵概念的量化權值和啟用值的方法。它不像最近的二值化神經網路,作者提出的方法是根據目標精度來選擇量化的位元位數。這種方法更加方便的去權衡精度與效能,以便更合理的選擇量化級別。雖然,作者提供了這種自動量化策略,但是對於傳統訓練演算法來說也是很輕易使用的。作者進行大量實驗,如分類(alexnet,googlenet,resnet-50/101),檢測(r-fcn with resnet-50)和語言模型(lstm網路),不用多說,肯定是有效果的。

1.無法權衡精度和效能

2.即使有,也是部分有效,需要大量修改網路,而且不量化第一層和最後一層

提到了一些方法:logquan、xnor-net、dorefa-net,有興趣可以找出來看看。

3.動機和靈感:

首先對權值和啟用值的概率分布進行了分析,呈現鐘型分布(bell-shaped distribution),由三部分組成:1.接近0的值佔主要部分,但對結果影響不大,分配相對較少的量化級;2.兩端大的值相對較少,對結果影響大,但是為了充分利用量化級只分配少量的量化級給這部分;3.既不大又不小的值相對較多,對結果影響相對較大,所以分配更多的量化級。如圖右下角就是wq量化分布圖。

4.量化與權值熵:

4.1權值量化

權值量化的高層次思想是將權值分成n個聚類,從而有更多聚類代表重要權值,為每個聚類分配具有代表性的值,然後量化所有權值到某個對應聚類的值。這裡最主要的是weight entropy,下面公式中的s,這裡分成n個聚類c0,...,cn-1。pn(概率)表示有多少比例的權值在cn這個聚類範圍內;in(重要性)表示cn這個聚類裡面所有權值的平均重要性。i(n,m)表示第n個聚類中的第m個權值的重要性,其與那個權值的二次方成比例。因為值大的權重分布比較稀疏,值小的權重的分布比較密集,所以值較大的cn會有較大的in和較小的pn。簡單說就是高重要性低概率;高頻率低重要性。

(權值量化)提供訓練資料(mini-batch input)和期望的logn-bit精度(聚類個數),找聚類n中的最大權值熵。聚類代表的值對應權值量化的level。

權值熵理論限制,不能同時處理正負值,因此分成兩個組負值和非負值,分別應應用演算法到每組(n/2 levels)。

重要演算法1

1.輸入(聚類數量n,權值w)

2-3.計算每個權值的重要性

4.重要性排序s=

5.初始化聚類邊界c0,...cn(假如s=[1,2,3,4],n=2,那麼就可以得到初始化的分割邊界:c0=0,c1=2,c2=4,也就是將s分成了c0=和c1=兩份)

6-11.找最大權值熵s的過程中更新聚類邊界。第7行遍歷所有聚類1~n-1,第8行ck在ck-1和ck+1這個範圍遍歷的時候,找到最大s,並更新邊界對應的聚類ck,即新邊界聚類

12-15.遍歷每個聚類,第13行計算每個聚類的重要性ik,第14行根據ik計算出這個聚類代表的值rk(figure1的縱軸),第15行根據邊界重要性s[ck]計算出權值的邊界(figure1的橫軸)

16-17.返回r0-rn-1和b0-bn,分別表示每個聚類的值和邊界

4.2啟用值量化

logquan量化可自行了解

深度神經網路權值初始化的詭異問題

最近自己些 cnn網路,遇到麻煩事了。直接使用c 從頭寫,按照層次化 模組化編寫。為的是做之後的海量動態增量學習的 cnn。寫完 除錯,結果基本和預期一樣的差,畢竟要注意的引數很多。各個任何地方遺漏乙個引數符號都會導致網路失敗。於是從頭開始bp網路檢查錯誤。1 使用1維個輸入值,做3層bp網路測試。...

神經網路的交叉熵損失函式

常見的損失函式包含以上幾個。在神經網路中樣本的平方損失函式一般會定義為 ed 12 i zi yi 2,方便求導後約掉係數。使用誤差逆傳播訓練神經網路時會使用梯度下降法來更新每個神經網路中的權重,根據鏈式求導法可以得到權重更新公式,ed wji ed nod ej n odej wji ed nod...

基於FPGA的卷積神經網路實現(六)資料量化(2)

目錄 簡介框架 資源分配 1 資源分配 2 資料量化 1 資料量化 2 資料讀寫 卷積模組 池化 全連線與輸出 上一節我們介紹了如何對乙個離線模型進行簡單的線性量化,這一節我們來說一下如何在pytorch上面訓練乙個量化模型。這一節可能是徹底脫離了fpga實現,想要安心做fpga實現的可以跳過這一節...