本文的内容包括对神经网络模型量化的基本介绍、对Tensorflow量化训练的理解与上手实操。
此外,后续系列还对量化训练中的by pass和batch norm两种情况进行补充解释,欢迎点击浏览,量化训练:Quantization Aware Training(二)。
量化(quantized),即将神经网络前向过程中浮点数运算量化为整数运算,以达到计算加速的目的。通常是指将float32转化为int8进行运算,经实践部署dsp上能提升2.5~3倍左右的推理速度。我们知道对浮点数的量化操作是将其从一个高维度映射到低维度的转换过程,如图所示:
量化的主要流程如下:
(1)统计出网络某一层的最大值与最小值:
(2)计算scale与zero_point
(3)通过以下公式计算出任意float32量化后的int8结果
由公式可以看出量化中的精度损失不可避免的,当浮点数的分布均匀时,精度损失较小。但当浮点数分布不均匀时,按照最大最小值映射,则实际有效的int8动态范围就更小了,精度损失变大。
对此,NVIDIA的PPT中提出通过寻找最优阈值进行非饱和截取的思路改善精度损失,如下图,先不做具体赘述,有时间再填坑。