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结点的梯度反传:
- 与其他方法梯度函数的对比:
- 梯度的scale:
- 当量化比特数增加时,step-size会变小,以确保更为精细的量化;而当量化比特数减少时,step-size会变大。为了让step-size的参数更新,能够适应量化比特数的调整,需要将step-size的梯度乘以一个scale系数,例如针对weight:
量化训练
- 伪量化训练时,从预训练模型加载FP32参数,学习率按余弦曲线衰减。
实验结果