量化精度与数据分布关系大吗?

量化精度损失影响因素

我们都知道,量化实际上就是一个从浮点分布到定点分布的过程,大致过程如下:
在这里插入图片描述
如果有对这个过程不是很了解的,可以去参考我之前写的另外一篇文章,

tvm量化介绍

那么这样一个过程我们就可以看出来,我们肯定是尽可能希望所有浮点数都相对集中在一起,这样可以尽可能保证大部分点的精度,比如自然界最常见的高斯分布(当然相信之前看过一些文章同学都知道,一个训练均衡的网络的权重分布也是比较接近高斯分布的)。
在这里插入图片描述
但是这个定理一定是绝对的吗?让我们以一个比较典型的网络来做实验

实验初始条件

我们在实际量化过程中发现densenet121量化成8bit会精度掉点严重,通过排查发现是一个conv的影响很大.
conv的weights如下:
在这里插入图片描述
bias如下:
在这里插入图片描述
我们可以看到这里面的数据分布差异是很大的,所以初步猜测是由于在不考虑ft输出情况下weights和bias数据分布差异过大导致的。
那么这时候熟悉量化的同学肯定知道一个解决方法,就是weights的per channel打开,通道之间互相不影响,后续我们同样会做对比实验。

实验开始

由于weights 和bias都存在分布不均,且值比较小的通道并不相同,因此无法做到将两个一起都balance到一个比较好的分布,因此我们采用三种方案 1. 以weights 为准, 2. 以bias为准,3. weights 与 bias 均衡 scale

如果实现数据的均衡,本实验采用的方法是,首先给每一个weights乘一个系数,然后conv后面跟一个scale算子,把这个系数除回来,这样前后是不影响的,后续我们量化时不量化后面scale算子,只量化均衡后的conv算子,
示意图如下
在这里插入图片描述
可以明显看到,weights都已经到了同一个数量级,后面跟了一个scale保证前后的值相同
但与此同时,由于bias分布不均的通道和4.7这个通道并不一致,导致还是有些不均,
在这里插入图片描述
但是精度表现呢

在这里插入图片描述

我们发现当bias均衡后精度会有所提高,而weights并不会,这说明在量化过程中,bias的精度对于整体的量化精度提高有着至关重要的作用,当然如果没有bias,那就是weights了记住这里我们只量化conv算子,对于其他算子均是浮点

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值