網絡模型int8量化中使用的一些量化方法


深度學習中網絡的加速主要有如下的幾種方式:

1)設計高效且小的網絡,如MobileNet系列、shuffleNet系列、VoVNet等;
2)從大的模型開始通過量化、剪裁、蒸餾等壓縮技術實現網絡的小型化;
3)在inference階段使用特殊的計算庫實現計算的加速,比如MKL、TensorRT等;
在上面的方法中最簡單的方法就是降低模型運算過程中的bits數量,降低到16bits、8bits甚至2bits。這樣做具有如下的優點:

1)在眾多的使用場合與模型中可以廣泛使用,並不需要設計再設計特殊的網絡結構,而且量化是從訓練好的模型上進行的,並不需要重訓練,且損失精度比較少。目前現有的大部分硬件計算資源都是支持這樣的運算模式的,因而也不需要重新設計專門的硬件;
2)模型量化可以顯著減少模型的尺寸大小,理論上可以減少模型的尺寸4倍,並且模型的性能損失很小;
3)使用更低bits數的模型可以減少在運算過程中的內存與緩存消耗;
4)大多數的處理器對8bits的運算更快;
5)8bits的計算擁有更好的實現效率,因而進行對應的計算所消耗的能量更少;
2. 量化的方法
2.1 Uniform Affine Quantizer

 

 

 

2.2 Uniform symmetric quantizer

 

 

 


2.3 Stochastic quantizer

 

 

 

3. 訓練好的模型上的量化
對於已經訓練好的模型進行量化的方式有兩種:只量化權重和量化權重和激活。這兩種量化策略在下面的內容會講到。文中經過證實采用逐通道(per-channel)與非對稱范圍的量化的模型精度與浮點型是比較接近的。

3.1 只量化權值
只量化權值是只將權值數據量化到8bits上,因而不需要量化校准集。這樣量化方式只適用於對性能要求不高且要求模型大小比較高的場景下,這種方法一般不予以采納。

3.2 權重與激活量化
這里除了對權重參數進行per-channel的量化之外,還需要額外准備校准數據集,以提供對激活的量化參數的確定,這樣的方法其量化的結果也是比較好的。在TensorRT中也是采用了這樣的量化方式進行網絡的量化技術,也達到了很不錯的性能。

3.3 量化性能對比
只量化權重對性能的影響,其中包含量化粒度的對比(per-channel、per-layer):

 

 

 

權重與激活都量化對於性能的影響:

 

 

 

基於上述實驗結果,得到如下的結論:

1)Per-channel的權值量化與activation量化可以使得量化之后的模型與浮點型運算得到的結果相差盡量減小;
2)activation的量化可以有效減少精度上的損失,下面的這幾個操作會使得activation的范圍較小:(a)在batchnorm之后沒有添加scale;(b)ReLU6將激活之后的值限定在( 0 , 6 ) (0,6)(0,6)的范圍內。
3)擁有更多參數的模型,例如ResNet與Inception-V3,其量化的魯棒性是好於參數少的模型的;
4)當權重在層的粒度(非channel)上被量化時,會有很大的性能下降(這主要是由於batchnorm導致的數值波動),特別對於MobileNet網絡;
5)大多數情況下由量化引入的性能下降是由於權值的量化過程;
————————————————
版權聲明:本文為CSDN博主「m_buddy」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/m_buddy/article/details/103640139


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM