网络量化——为什么需要“zero_point”?为什么对称量化不需要“零点”?

青葱年少 pytorch 688

原文标题network quantization——Why do we need “zero_point”? Why symmetric quantization doesn’t need “zero point”?

我整天都在谷歌上搜索,但仍然找不到我需要的答案。我的脑子里一定有什么误会。你能帮帮我吗?

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

量化:q=round(r/scale)+zero_point

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

我是对的吗?

如果我错了,请帮助纠正我;

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

enter image description here


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

在Goolge白皮书和一些博客中,它说对称量化不需要零点(因为zero_point=0):enter image description here

我可以在有符号量化中理解它,因为浮点范围和量化范围都是对称的,因此 zero_point=0。

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

enter image description here

原文链接:https://stackoverflow.com//questions/71891888/network-quantization-why-do-we-need-zero-point-why-symmetric-quantization-do

回复

我来回复
  • WBR的头像
    WBR 评论

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

    但我说服自己如下:

    1.Why do we need “zero_point”?

    zero_point 绝对是一个偏移量或偏差,将缩放的数据移动到适当的位置。对此不应有任何怀疑。

    但是,Jocab 提出的“动机”是“Z 与量化的 q 具有相同的关系”,而不是“具有零点”。前者确保真正的“0”被量化无误,因此在以量化方式推断时,在 zero_padding 中填充(而不是值“0”)的零点(与q相同)错误)。

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

    我认为白皮书公式(7)-(9)中的“if signed”和“if unsigned”是在谈论x的符号,即真实的、未量化的浮点值,而不是量化一。这意味着,有符号浮点值被量化为有符号定点整数,零点=0;和无符号浮点到无符号定点整数,零点= 0。

    2年前 0条评论