基于可训练Step-size的低比特量化——LSQ: Learned Step-size Quantization

Paper地址:https://arxiv.org/abs/1902.08153

GitHub地址 (PyTorch):https://github.com/zhutmost/lsq-net

基本量化设置

  • 计算结点伪量化:
  1. Weight跟Activation都采用Per-tensor量化;
  2. Scaling factor (Paper标记为Step size)是可学习参数;

基于可训练Step-size的低比特量化——LSQ: Learned Step-size Quantization_第1张图片

  • 量化计算公式:

基于可训练Step-size的低比特量化——LSQ: Learned Step-size Quantization_第2张图片

Step-size梯度求解

  • Loss关于step-size的梯度推导:

  1. 基于STE (Straight Through Estimate),直接pass round结点的梯度反传:

基于可训练Step-size的低比特量化——LSQ: Learned Step-size Quantization_第3张图片

  • 与其他方法梯度函数的对比:
  1. QIL:https://arxiv.org/abs/1808.05779
  2. PACT:https://arxiv.org/abs/1805.06085
  3. 相比较而言,LSQ无论在不同Bin之间的Transition位置、还是量化范围的Clip位置,都有较明显的梯度数值,因而更有利Step-size的参数更新:

基于可训练Step-size的低比特量化——LSQ: Learned Step-size Quantization_第4张图片

  • 梯度的scale:
  1. 当量化比特数增加时,step-size会变小,以确保更为精细的量化;而当量化比特数减少时,step-size会变大。为了让step-size的参数更新,能够适应量化比特数的调整,需要将step-size的梯度乘以一个scale系数,例如针对weight:

基于可训练Step-size的低比特量化——LSQ: Learned Step-size Quantization_第5张图片

基于可训练Step-size的低比特量化——LSQ: Learned Step-size Quantization_第6张图片

量化训练

  • 伪量化训练时,从预训练模型加载FP32参数,学习率按余弦曲线衰减;第一层与最后一层固定为INT8量化。

实验结果

基于可训练Step-size的低比特量化——LSQ: Learned Step-size Quantization_第7张图片

 

你可能感兴趣的:(深度学习,模型压缩,优化加速)