LQ-Nets: Learned Quantization for Highly Accurate and Compact Deep Neural Networks 論文閱讀


  • 摘要

  雖然權重和激活量化是深度神經網絡(DNN)壓縮的有效方法,並且具有很多利用bit操作來提高推理速度的潛力,但在量化模型和完整模型之間的預測精度方面仍存在明顯差距。為了解決這個差距,我們建議聯合訓練量化的,位操作兼容的DNN及其相關的量化器,而不是使用固定的手工量化方案,例如均勻或對數量化。我們學習量化器的方法適用於任意位精度的網絡權重和激活,我們的量化器很容易訓練。對CIFAR-10和ImageNet數據集的全面實驗表明,我們的方法可以很好地適用於各種網絡結構,如AlexNet,VGG-Net,GoogLeNet,ResNet和DenseNet,在准確度方面超過以前的量化方法。代碼可從https://github.com/Microsoft/LQ-Nets獲得

  • 簡介

  我們建議聯合訓練量化的DNN及其相關的量化器。 所提出的方法不僅使量化器可學習,而且使它們與按位運算兼容,從而保持適當量化的神經網絡的快速推理優點。 我們的量化器可以通過標准網絡訓練管道中的反向傳播進行優化,並且我們進一步提出了一種基於量化誤差最小化的算法,其產生更好的性能。 所提出的量化可以應用於網絡權重和激活,並且可以實現任意比特寬度。 此外,可以應用具有非共享參數的分層量化器以獲得進一步的靈活性。 我們將通過我們的方法量化的網絡稱為“LQ-Nets”。

  我們使用CIFAR-10和ImageNet數據集上的圖像分類任務評估我們的LQ-Nets。 實驗結果表明,它們在各種網絡結構中表現非常好,如AlexNet,VGG-Net,GoogLeNet,ResNet和DenseNet ,大大超過了以前的量化方法。

  • LQ-Nets:具有學習量化的網絡
  • 網絡量化

  網絡量化的目標是用幾個bit表示浮點權重w和或激活a。 通常,量化函數是分段常數函數,可以寫成

  其中ql,l = 1,...,L是量化等級,並且(tl,tl + 1)是量化間隔。量化函數將量化間隔內的所有輸入值映射到相應的量化等級,並且量化值可以只用log2L位編碼。也許最簡單的量化器是用於二進制量化的符號函數:如果x≥0則Q(x)= +1,否則為-1。對於2位或更多位的量化, 最常用的量化器是均勻量化函數,其中所有量化步長q1 + 1-ql相等。一些方法使用對數量化,其均勻地量化對數域中的數據。

  量化網絡權重可以生成高度緊湊且存儲效率高的DNN模型:使用n位編碼,與32位或64位浮點表示相比,壓縮率為32/n或64/n。 此外,如果權重和激活都適當地量化,則W·a(w為參數,a為激活)的內積可以通過按位運算來計算,例如xnor和popcnt,其中xnor是異或非邏輯運算,popcnt計算位串中1的數量。 在大多數通用計算平台(如CPU和GPU)上,這兩個操作都可以在一個或幾個時鍾周期內處理至少64位,這可能導致64倍的加速。

  • 可學習的量化器

  最佳量化器應該為輸入數據分布產生最小的量化誤差:

  其中p(x)是x的概率密度函數。 我們永遠無法確定諸如均勻量化器之類的流行量化器是否是網絡權重和激活的最佳選擇。 在圖1中,我們在訓練的浮點網絡中呈現權重和激活(在批量歸一化(BN)和整流線性單元(ReLU)層之后)的統計分布。 可以看出,分布可以是復雜的並且跨層不同,並且均勻量化器對於它們不是最佳的。 當然,如果我們訓練量化網絡,則權重和激活分布可能會改變。 但是我們再也無法確定任何預定義的量化器是否適合我們的任務,並且不正確的量化器很容易危及最終的准確性。

 

   為了獲得更好的網絡量化器並提高量化網絡的准確性,我們建議聯合訓練網絡及其量化器。 背后的見解是,如果優化器通過網絡訓練可以學習和優化,它們不僅可以最小化量化誤差,還可以適應訓練目標,從而提高最終的准確性。 訓練量化器的簡單方法是直接優化網絡訓練中的量化等級{ql}。 然而,這種天真的策略會使量化函數與按位運算不兼容,這是不希望的,因為我們希望保持量化神經網絡的快速推理優點。

   為了解決這個問題,我們需要將量化函數限制在與按位運算兼容的子空間中。 但是如何在訓練期間將量化器限制在這樣的空間中? 我們的解決方案受到比特操作兼容的均勻量化的啟發(參見[53])。 均勻量化基本上將浮點數映射到具有歸一化因子的最接近的定點整數,並且其與位不兼容的關鍵屬性是量化值可以通過位的線性組合來分解。 具體地,由K位二進制編碼表示的整數q實際上是基矢量和二進制編碼矢量b = [b1,b2,...,bK] T之間的內積,其中bi∈{0,1}

 

   為了學習量化器,同時保持它們與按位運算兼容,我們可以簡單地學習由K標量組成的基矢量。

  具體地說,我們可學習的量化函數形式為

其中v∈RK是可學習的浮點基,el∈{-1,1} K圖2說明了具有2位和3位情況的量化器。

  • 訓練算法

  為了訓練LQ-Nets,我們使用浮點網絡權重,這些權重在卷積之前被量化並且通過誤差反向傳播(BP)和梯度下降進行優化。 訓練之后,可以丟棄它們並保留它們的二進制碼和量化基礎。 我們現在介紹如何優化量化器。

  量化器優化:優化量化器的一種簡單而直接的方法是通過類似於權重優化的BP。 在這里,我們提出了一種基於量化誤差最小化的算法,該算法在訓練期間優化了前向通道中的量化器。 這個算法可以帶來更好的性能,我們將在后面的實驗中展示。

 


免責聲明!

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



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