1. 程式人生 > 實用技巧 >深度學習論文: EasyQuant: Post-training Quantization via Scale Optimization及其PyTorch實現

深度學習論文: EasyQuant: Post-training Quantization via Scale Optimization及其PyTorch實現

深度學習論文: EasyQuant: Post-training Quantization via Scale Optimization及其PyTorch實現
EasyQuant: Post-training Quantization via Scale Optimization
PDF:https://arxiv.org/abs/2006.16669v1.pdf
PyTorch: https://github.com/shanglianlm0525/PyTorch-Networks

1 概述

EasyQuant通過引入cos 相似性作為目標函式,通過交替搜尋權值(weights)和啟用(activations)的量化因子(scale)來最大化量化前後啟用值的 cos相似性,來找到權值和啟用值的最優量化因子。

在這裡插入圖片描述
權值量化因子
TRT: w e i g h t s c a l e = 128 / m a x ( a b s ( w e i g h t ) ) weight_scale = 128/max(abs(weight)) weightscale=128/max(abs(weight))
Tensorflow: w e i g h t s c a l e = 128 / m a x ( a b s ( w e i g h t ) ) weight_scale = 128/max(abs(weight)) weightscale=128/max(abs(weight))
啟用量化因子
TRT: 通過計算KL散度的方式來確定最佳閾值從而得到量化因子
*Tensorflow:*訓練中,使用EMA(exponential moving average)公式 m o v e m a x = m o v e m a x ∗ m o n m e n t + m a x ( a b s ( c u r r a c t i v a t i o n ) ) ( 1 − m o n m e n t ) move_max =move_max * monment + max(abs(curr_activation))(1-monment) movemax=movemaxmonment+max(abs(curractivation))(1monm
ent)

,訓練後通過計算 a c t i v a t i o n s c a l e = 128 / m o v e m a x activation_scale = 128/move_max activationscale=128/movemax

2 Scale Optimization

假設 X 為輸入張量, S為量化尺度因子,則量化公式表示為
在這裡插入圖片描述
其中 表示elementwise點乘操作, Round表示取整操作, Clip表示截斷操作.則對於卷積操作
在這裡插入圖片描述
權值(int8)量化和輸入啟用(int8)量化得到的第l層量化輸出啟用(int32)再反量化的結果(float32) 為
在這裡插入圖片描述
EasyQuant通過引入cos 相似性作為目標函式,優化 原始浮點啟用輸出與量化實現得到反量化輸出的 cos 相似性(cos越大越相似)
在這裡插入圖片描述
來搜尋權值和啟用值的量化因子,實際求解通過交替優化兩個的量化因子來求解
在這裡插入圖片描述

3 INT7 Post-training Inference

相對於int8,int7可以有更好的加速效果。所以EasyQuant在實際端上推理階段則採用權值和啟用 int7 量化,中間 int16 累加器累加最多八次的方式,使得推理速度優於權值和啟用 int8 量化,中間 int16 累加器只能累加兩次(溢位)的方式,同時還可以比較好的保持量化後演算法的精度。
在這裡插入圖片描述

4 Experiments

4-1 與PTQ比較

在這裡插入圖片描述

4-2 與QAT比較

在這裡插入圖片描述

4-3 與TRT低於8位元時比較

在這裡插入圖片描述