FPGA 部署中常常使用的是定点数量化推理,而之前研究的是关于整数量化推理的内容,定点数量化后的网络可以直接进行前向推理而不需要进行复杂的rescale
来保证网络层和层之间运算的正确性。
定点数量化
定点数地表示:
定点数有两个参数,表示一个数所占用的总比特数,表示一个数小数部分所占用的比特数。例如,, 假设有一个无符号定点数为,其表示的数可以记为:
等价于
此时一个无符号整数所能表示的范围为:,表示精度为。
无符号定点数量化
有符号整数量化
Global Scale Factor
当每个层的确定之后就可以很容易
因为采用了所有层都采用了
整数量化
常见的整数量化过程如下面的公式所示,其中代表量化后的值,代表全精度的值。
带0点的量化推理计算过程:
如果采用对称量化,即量化后的零点和量化前的值的零点是对齐的,所有的,公式就可以简化为
可以看到,公式中的都是都是可以提前计算出来的,在推理过程中需要计算的就只有这一项了。该部分的相乘累加是在整数上进行的。
定点数量化 vs 整数量化:
定点数量化可以当作整数量化的特殊情况,当确定之后,相当于整数量化中固定,同时截断范围为。如果网络所有层采用同样的量化形式(即所有层的的值均相等),在这种情况下网络间的运算就可以直接跳过 参数的计算
思路:
- 不是最优的,但是具有计算上的优势,可以完全避免
Rescale
的额外计算,其本质上就是整个网络共享一个Scale - 结合自适应的
Scale
训练方法,使整个网络共享一个Scale
,这样就可以结合定点量化以及整数量化的优点
Overflow
问题 - 饱和赋值
- 接纳溢出,并加以利用