Paper地址:https://arxiv.org/abs/1902.08153
GitHub地址 (PyTorch):https://github.com/zhutmost/lsq-net
基本量化設置
- 計算結點僞量化:
- Weight跟Activation都採用Per-tensor量化;
- Scaling factor (Paper標記爲Step size)是可學習參數;
- 量化計算公式:
Step-size梯度求解
- Loss關於step-size的梯度推導:
- 基於STE (Straight Through Estimate),直接pass round結點的梯度反傳:
- 與其他方法梯度函數的對比:
- QIL:https://arxiv.org/abs/1808.05779
- PACT:https://arxiv.org/abs/1805.06085
- 相比較而言,LSQ無論在不同Bin之間的Transition位置、還是量化範圍的Clip位置,都有較明顯的梯度數值,因而更有利Step-size的參數更新:
- 梯度的scale:
- 當量化比特數增加時,step-size會變小,以確保更爲精細的量化;而當量化比特數減少時,step-size會變大。爲了讓step-size的參數更新,能夠適應量化比特數的調整,需要將step-size的梯度乘以一個scale係數,例如針對weight:
量化訓練
- 僞量化訓練時,從預訓練模型加載FP32參數,學習率按餘弦曲線衰減。
實驗結果