网络量化——为什么需要"zero_point"?为什么对称量化不需要"zero point"?

network quantization——Why do we need "zero_point"? Why symmetric quantization doesn't need "zero point"?

我已经用 Google 搜索了很多天,但仍然找不到我需要的答案。脑子里肯定有什么误会。你能帮帮我吗?

1.为什么我们需要“zero_point”?

quantization:q=round(r/scale)+zero_point

我认为zero_point(作为偏移量)将缩放数据移动到适当的位置,例如,在下图中对于无符号2位量化,零点移动[-1,2 ] 到 {0,1,2,3}

我说得对吗?

如有错误,请大家指正;

如果我是对的,那么这里需要零点(对称量化),为什么Jacob在IAO,第2.1节说零点是为了补零?在我看来,这只是一个结果,而不是根本原因?


2。为什么对称量化不需要“零点”?

Goolge White paper和一些博客中,它说对称量化不需要零点(因为zero_point=0):

我可以理解为有符号量化,因为浮动范围和量化范围都是对称的,所以zero_point=0。

但是,我们如何在量化范围[0,2^b-1]不对称的无符号量化中忽略zero_point?在这种情况下,在我看来,我们必须有一个正零点才能将缩放后的数据移动到 [0, 2^b-1] 范围内,如下图:

我还没有找到或得到明确的答案。

但我说服自己如下:

1.Why 我们需要“zero_point”吗?

zero_point 绝对是一个偏移量或偏差,将缩放后的数据移动到适当的位置。应该是没有疑问的。

但 Jocab 提到的“动机”是“Z 与量化 q 属于同一类型”,而不是“具有零点”。前者确保真正的“0”被无误地量化,因此在以量化方式推断时,在[=37中填充(而不是值“0”)的是零点(与q相同类型) =](没有错误)。

  1. 为什么对称量化不需要“零点”?

我认为白皮书公式(7)-(9)中的“if signed”和“if un-signed”说的是x的符号,即真实的,未量化的,floating-point 值,而不是量化值。这意味着,带符号的 floating-point 值被量化为带符号的 fixed-point 整数,其中 zero-point=0;和无符号 floating-point 到无符号 fixed-point 整数,以及 zero-point=0。