PACT: parameterized clipping activation for quantization neural networks
文章目錄
文章鏈接
Introduction
提出了PArameterized clipping activation function,能夠在模型訓練階段自動優化量化的尺度。主要貢獻在於:
1:PACT。引入了一個用於表示訓練中的clipping level並通過反向傳播學習這個參數。使得量化尺度比ReLU更小來減小量化誤差,但是比傳統的clipping activation函數尺度更大,使得梯度能夠更有效的傳播。另外,在loss function中也加入了對的正則化,使網絡能夠更快收斂
2:量化的結果說明了PACT在模型和測試數據上的有效性,1)對於low bit-precision(對於weight和activation),PACT精度最高,2)對於4-bit量化的CNN,PACT得到了和單精度浮點型(single-precision floating point)相似的結果
3:作者進行了系統性能分析,展示了the trade-offs in hardware complexity for different bit representations vs. model accuracy。說明了對計算進行大量精簡是可能的。
Related work
這塊,作者說在ImageNet上掉1個點就是significantly reduced。
Chanllenge in Activation Quantization
量化就相當於將權重和損失函數空間離散化,因此,在模型訓練中是可能彌補權重量化帶來的誤差的,傳統的激活函數的沒有任何可以訓練的參數,因此,量化激活函數帶來的誤差無法在反向傳播時被補償掉。
當使用ReLU時,量化就變得更難了,因爲ReLU的值域是無窮的,因此在量化的時候非常困難,而在反向傳播的時候,前面層的梯度是依賴後面層的梯度計算的,所以誤差就會越來越累積。
但是,使用clipping activation function的話,可以緩解上面提到的難題,因此clipping activation是有界的。然而由於模型與模型、層與層之間的區別,選擇這個最好的clipping value是很困難的。同時,使用這種方法的validation error還是很大。
最近,這個問題通過使用half-wave Gaussian quantization進行量化激活緩解了。因爲觀察到在BN層之後,激活值大致類似於一個zero mean and unit variance的高斯分佈,因此使用Lloyd‘s算法來找到對於每個層應用高斯分佈的最佳尺度,然而,它還是沒有完全解決這個問題,因爲所有的量化參數都是離線決定的,在訓練階段並不更新。
PACT: parameterized clipping activation function
根據前面提到的問題,就在截斷的時候加了一個參數,這個參數是可學習的,因此,激活函數就變爲:
式中,是用來限定激活值的範圍,對於點乘的計算,截斷的激活輸出就線性量化爲。
是loss中的一個變量,能在訓練時被優化,在反向時,能夠使用STE來計算梯度來估計。
越大,這個激活函數就越像ReLU激活函數。同時,在損失函數中對使用了L2正則化。
underdtanding how parameterized clipping works
作者通過調整的大小,觀察了每一層的cross-entropy和training loss(cross entroy + regularization)的變化。網絡中的激活函數是上述提到的激活函數,同時,在改變某一層的的值時,保持網絡中其他的值不變,如weight、bias、BatchNorm parameters、其它層的值。
cross-entropy在圖a中是全精度的形式計算的,隨着的增大,cross-entropy收斂到一個比較小的值。這說明了ReLU是一個很好的激活函數。但是,即使是使用full precision計算的cross-entropy,它也不能使每一層都收斂到一個很好的值,如act0和act6。
如果在前向的時候量化cross-entropy,隨着的增大,cross-entropy大多數情況下也會增大,這個時候ReLU就沒有多大作用了。並且,不同層中最優的一般不同,所以這個參數得學習。並且,隨着的增大,act6的cross-entropy變得很穩定,就就給梯度下降帶來困難。
最後觀察training loss,正則化使得training loss不會變得很穩定,因此可以收斂,而且,加入正則化之後,training loss的最小值點並沒有改變。(藍色線中的最小值點)
Exploration of Hyper-parameters
從作者的實驗而言,最好是讓每一層共享一個值,這麼做也降低了硬件實現的複雜性,另外,在初始化的時候,儘量將值設大一點,然後在訓練中通過正則化減小它。最後,對使用與正則化權重時相同的係數時,L2正則化效果還不錯。對於最優值會隨着bit精度的升高略微減小。最後,在量化的時候,還是白癡第一層和最後一層的量化結果不變。
Experiment
量化bit數越高,結果越接近full precision的結果。當bit-precision高於3-bits時,同全精度相比almost identically,當激活函數的精度最少爲4-bits時,validation error和全精度相差不到1%。和之前的方法比效果也很好,作者還在具體的硬件系統上進行了實驗。
Conclusion
在本文彙總,作者提出了帶參數的PACT函數代替ReLU進行激活,這個參數可以在訓練中學習,並提供了有效性分析。它可以在各個網絡上實現更大程度的量化(down to 4-bits),並且掉點不到1%,並且在硬件上的效果也很好。