量化在模型压缩和部署中是一个常见的问题,特别是当我们需要将浮点数表示为整数时,常常会遇到截断问题.
量化过程
定义量化范围
假设我们需要将浮点数数组[-0.75, -0.45, 1.75]量化为int8格式。
浮点数范围: [−0.75,1.75]
目标整数范围(int8): [−128,127]
计算量化因子(scale)
量化因子是将浮点数映射到整数范围的比例因子:
计算偏移量(zero point)
为了确保量化后整数的范围能够涵盖原始数据的负值和正值,通常需要引入偏移量:
量化浮点数到整数
对于每个浮点数 x,量化公式为:
所以量化后的整数数组为[−127,−97,127]。
偏移量的影响
通过引入偏移量 Z,我们能够使量化后的整数更好地表达原始浮点数的分布,特别是在处理负值时。尽管量化和反量化过程中会有一些精度损失,但偏移量的引入可以最大限度地减少这种误差。