本文涉及了DNN中采用的均匀权重量化方案,研究了下图中权重量化与编码的过程。
背景:Tensor-RT解决方案(FP32完全可以降低为INT8推理,量化目的为在精度几乎持平的情况下,很大程度上提升推理速度)
Tensor-RT有关内容见:https://arleyzhang.github.io/articles/923e2c40/
本文将对上述图片内容作解释:
1、Weight Quantization
训练中引入量化:将训练后的模型中的权重由float32量化到int8(−128 +127),并以int8的形式保存,但是在实际推断时,还需要反量化为float类型进行计算,这种量化的方法在大模型上表现比较好。
映射方式就是线性映射:
接下来我们看式子:
Δw可以形象为缩放比例,如果max(W)的数值为254,那么Δw即为2,w/∆w即为映射后的值,比如254会被映射成127.
但个人认为文章中的图片还是有问题的,没有clip排除偏离值
2、Weight Encoding
接下来,我们用得到的8位整型值(w/∆w)求对应的二进制类型,g(b)代表了以补码形式存储的数,两者有对应关系如下:
这样我们就可以求得权重的二进制补码表示了
综上述两个过程,是将存储的权重系数从float32量化到int8,进行权重量化操作(现在很多边缘端的设备由于收到算力限制,大都采用量化权重来进行推理),接着再是求将量化权重的二进制补码表示。