【知識星球】模型量化從1bit到8bit,二值到三值

  • 2019 年 10 月 5 日
  • 筆記

歡迎大家來到《知識星球》專欄,這裡是網路結構1000變小專題,模型量化是當前工業界的核心技術,我們最近在知識星球更新相關的內容。

作者&編輯 | 言有三

1 1bit量化-二值網路

所以1bit量化就是二值量化,取值為0/1或者1/-1,下面是一個案例。

有三AI知識星球-網路結構1000變

Binarized Neural Networks

Binarized Neural Networks是一個二值量化模型,權重和激活值取值只有1和-1。

作者/編輯 言有三

Binarized Neural Networks是一個典型的二值量化模型,權重和激活值取值只有+1或者-1。

將權重和每層的激活值全部二值化的方法有兩種方法。第一種就是符號函數,即x>0,則f(x)=1,x<0,則f(x)=-1。另一種是以一定的概率賦值,類似於Dropout。Binarized Neural Networks就是在激活函數時採用第二種二值化方法,其餘都採用符號函數賦值。

針對符號函數的導數並不連續,無法進行梯度傳播的問題,該網路方法將sign(x)進行鬆弛,在-1到1之間採用了線性函數f(x) = max(-1,min(1,x))。

二值網路在訓練過程中還是需要保存實數的參數的。在進行權重參數更新時,裁剪超出[-1,1]的部分,保證權重參數始終是[-1,1]之間的實數。在使用參數時,將參數進行二值化。

在MNIST,CIFAR-10等數據集上實驗精度稍微有所下降但不明顯,模型大學降低為原來的1/32,32bit的float變成1 bit。對於時間代價,作者的優化將速度相對於cublas提升了約3.4倍,而精度不變。類似其他研究不做過多介紹了。

[1] Courbariaux M, Hubara I, Soudry D, et al. Binarized neural networks: Training deep neural networks with weights and activations constrained to+ 1 or-1[J]. arXiv preprint arXiv:1602.02830, 2016.

其他的二值網路還有BinaryConnect,XNOR Net等,會在知識星球中更新。

2 2bit-三值網路

只有1和-1兩種值或許不夠,如果再加上0就可以構成三值網路,還不增加計算量。

有三AI知識星球-網路結構1000變

Ternary weight networks

Ternary weight networks是一種量化網路,它將權值量化為3階,即包括1,-1,0三種數值,能取得高達32倍的壓縮率,性能接近全精度的網路。

作者/編輯 言有三

Ternary weight networks的原理非常簡單,它比二值化網路多了一階權重,而且這多出來的一階權重還不增加計算量。

具體的實現是通過最小化全精度權值W和三元權值W_t之間的歐氏距離,如上圖,n是卷積核的數量。

實際上我們不直接求解上面的問題獲得W_t,而是採用下面的方法進行映射。

即求得一個閾值∆進行分段映射,∆的求取式子如下,具體推導可以見文章:

當然訓練的時候只在前向和後向過程中使用量化,但是參數的更新仍然是使用連續的權值,這也是量化網路常用的技巧。

在各大數據集上使用ResNet18網路的性能如上,精度優於二值網路BinaryConnect,XNOR-Net等,略低於全精度網路。

[1] Li F, Zhang B, Liu B. Ternary weight networks[J]. arXiv preprint arXiv:1605.04711, 2016.

3 8bit網路

8bit網路是最常見的量化方法了,有一些成熟的工具可以在訓練完成之後做量化,不過我們這裡還是關注在訓練的時候直接完成這個過程。

有三AI知識星球-網路結構1000變

Integer-Arithmetic Network

本文是一個8 bits量化網路框架,可以在訓練的時候直接訓練量化模型而無需在訓練後進行量化,它在MobileNets等緊湊模型上都取得了很好的效果。

作者/編輯 言有三

整數和浮點數的具體變換公式如下:

其中S,Z都是量化參數,Z就是對應實數0的量化值,S是一個浮點數因子。q就是量化的整數,r是浮點數,對於不同的矩陣,可以使用不同的量化參數,比如權重使用8bit量化,偏置使用32bit量化。

常見的量化網路的方式是,先使用浮點數進行訓練,訓練完之後再把權重等進行量化,有的再加上微調。作者們認為這種方式在大模型上效果是很好的,但是對於小模型有較大的精度損失。

因為它們採用的方案是在訓練中完成量化,前向傳播中使用量化,反向時仍然按照全精度的浮點進行計算,具體來說:

(1) 權重在卷積前量化,如果使用了batch normalization則將其與權重合併。

(2) 激活值在即將被後面的神經元使用時再量化,即在激活函數之後。

每一層的具體量化公式如下:

n是量化階數,對於8bit就是256,a,b就是最大最小值,權重和激活的取值方法略有不同,可以查看原文細節。

結果如下:

與全精度模型以及二值,三值模型比較,精度介於全精度和二值,三值模型之間。

上圖展示了在同樣的計算時間下,MobileNets量化模型能夠取得比浮點型模型更好的結果。

[1] Jacob B, Kligys S, Chen B, et al. Quantization and training of neural networks for efficient integer-arithmetic-only inference[C]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2018: 2704-2713.