对称量化VS非对称量化

1.为什么要量化

量化是一种对神经网络模型进行压缩和推理加速的方法,这种方法将深度学习模型的权重或激活函数从32位浮点数映射为低比特深度的数据表示

神经网络模型的大部分参数都是float32,将其映射为int8乃至更少的bit,其一可以有效减少模型的大小,其二更小的bit(如int8)进行运算时指令吞吐量远高于float32,从而大大提高运算效率,加快模型的推理速度。

编辑

添加图片注释,不超过 140 字(可选)

2.非对称量化与对称量化

编辑

添加图片注释,不超过 140 字(可选)

量化映射的通用公式为

r = S(q-Z)

其中r为量化前数值,S为缩放因子,q为量化后数值,Z表示零点

映射的常用形式可分为非对称量化和对称量化两种,两者的区别在于量化值区间是否限制了量化前后零点对应

非对称量化公式为:

\begin{array}{l} x_{i n t}=\operatorname{round}\left(\frac{x}{s}\right)+z \\ x_{Q}=\operatorname{clamp}\left(0, N_{\text {levels }}-1, x_{i n t}\right) \end{array}

对称量化则是非对称量化的一种特殊形式,其限制了将零点映射为0,公式为:

\begin{array}{l} x_{i n t}=\operatorname{round}\left(\frac{x}{s}\right) \\ x_{Q}=\operatorname{clamp}\left(-N_{\text {level }} / 2, N_{\text {level }} / 2-1, x_{i n t}\right) \text { (if signed) } \\ x_{Q}=\operatorname{clamp}\left(0, N_{\text {level }}-1, x_{i n t}\right) \text { (if unsigned) } \end{array}

3.非对称量化VS对称量化

非对称量化相比于对称量化而言,无需遵循0不变的映射规则,显然具有更好的动态映射范围,并且当面临一些特殊情况,如对于经过relu的激活值(全为非负值),使用对称量化时,需要仔细考虑使用符号量化,还是无符号量化。

但另一方面非对称量化相对于对称量化需要付出更大的计算代价

以Y= WX为例

对于对称量化而言, \mathbf{W}=s_{\mathbf{w}}\left(\mathbf{W}_{\text {int }}\right)\\ \mathbf{x}=s_{\mathbf{x}}\left(\mathbf{x}_{\mathrm{int}}\right)

此时

\begin{aligned} \mathbf{W} \mathbf{x} &=s_{\mathbf{w}}\left(\mathbf{W}_{\text {int }}\right) s_{\mathbf{x}}\left(\mathbf{x}_{\text {int }}\right) \\ &=s_{\mathbf{w}} s_{\mathbf{x}} \mathbf{W}_{\text {int }} \mathbf{x}_{\text {int }}\end{aligned}

而对于非对称量化, \mathbf{W}=s_{\mathbf{w}}\left(\mathbf{W}_{\text {int }}-z_{\mathbf{w}}\right) \\ \mathbf{x}=s_{\mathbf{x}}\left(\mathbf{x}_{\mathrm{int}}-z_{\mathbf{x}}\right)

此时

\begin{aligned} \mathbf{W} \mathbf{x} &=s_{\mathbf{w}}\left(\mathbf{W}_{\mathrm{int}}-z_{\mathbf{w}}\right) s_{\mathbf{x}}\left(\mathbf{x}_{\mathrm{int}}-z_{\mathbf{x}}\right) \\ &={s_{\mathbf{w}} s_{\mathbf{X}} \mathbf{W}_{\mathrm{int}} \mathbf{x}_{\mathrm{int}}} -{\color{Red} s_{\mathbf{w}} z_{\mathbf{w}} s_{\mathbf{x}} \mathbf{x}_{\mathrm{int}}} -{\color{Blue} s_{\mathbf{w}} s_{\mathbf{x}} z_{\mathbf{x}} \mathbf{W}_{\mathrm{int}}} +{\color{Blue} s_{\mathbf{W}} z_{\mathbf{w}} s_{\mathbf{x}} z_{\mathbf{X}} } \end{aligned}

可以看到,后两项都是常量,可以提前离线计算好,但额外多出的第二项相比于对称量化而言,非对称量化有着较大的额外计算开销。

综合以上分析,硬件支持的前提下,量化时对激活值X使用非对称量化,对权重值W使用对称量化,或许是一种更适宜的量化方案

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值