1.为什么要量化
量化是一种对神经网络模型进行压缩和推理加速的方法,这种方法将深度学习模型的权重或激活函数从32位浮点数映射为低比特深度的数据表示
神经网络模型的大部分参数都是float32,将其映射为int8乃至更少的bit,其一可以有效减少模型的大小,其二更小的bit(如int8)进行运算时指令吞吐量远高于float32,从而大大提高运算效率,加快模型的推理速度。
编辑
添加图片注释,不超过 140 字(可选)
2.非对称量化与对称量化
编辑
添加图片注释,不超过 140 字(可选)
量化映射的通用公式为
其中r为量化前数值,S为缩放因子,q为量化后数值,Z表示零点
映射的常用形式可分为非对称量化和对称量化两种,两者的区别在于量化值区间是否限制了量化前后零点对应
非对称量化公式为:
对称量化则是非对称量化的一种特殊形式,其限制了将零点映射为0,公式为:
3.非对称量化VS对称量化
非对称量化相比于对称量化而言,无需遵循0不变的映射规则,显然具有更好的动态映射范围,并且当面临一些特殊情况,如对于经过relu的激活值(全为非负值),使用对称量化时,需要仔细考虑使用符号量化,还是无符号量化。
但另一方面非对称量化相对于对称量化需要付出更大的计算代价
以Y= WX为例
对于对称量化而言,
此时
而对于非对称量化,
此时
可以看到,后两项都是常量,可以提前离线计算好,但额外多出的第二项相比于对称量化而言,非对称量化有着较大的额外计算开销。
综合以上分析,硬件支持的前提下,量化时对激活值X使用非对称量化,对权重值W使用对称量化,或许是一种更适宜的量化方案