在推理时以低精度操作运行的深度网络比高精度具有功耗和存储优势,但需要克服随着精度降低而保持高精度的挑战。在这里,本文提出了一种训练此类网络的方法,即 Learned Step Size Quantization,当使用来自各种架构的模型时,该方法在 ImageNet 数据集上实现了 SOTA 的精度,其权重和**量化为2、3或4 bit 精度,并且可以训练达到全精度基线精度的3 bit 模型。本文的方法建立在现有的量化网络中学习权重的方法基础上,通过改进量化器本身的配置方式。具体来说,本文引入了一种新的手段来估计和扩展每个权重和**层的量化器步长大小的任务损失梯度,这样它就可以与其他网络参数一起学习。这种方法可以根据给定系统的需要使用不同的精度水平工作,并且只需要对现有的训练代码进行简单的修改。
方法
量化计算公式
vˉ=⌊cip(v/s,−QN,QP)⌉
v^=vˉ×s
s为量化的 STEP SIZE 可学习参数。s即是数据的缩放因子,又能控制数据截断的边界。
针对weights:QN=2b−1 and QP=2b−1−1
针对data:QN=0 and QP=2b−1
STEP SIZE GRADIENT
∂s∂v^=⎩⎨⎧−v/s+⌊v/s⌉−QNQP if −QN<v/s<QP if v/s≤−QN if v/s≥QP