非均匀量化

一、为什么需要非均匀量化?

tensorflow,pytorch 等框架下也有量化操作,通常是为了减少权重存储空间,有利于部署移动端。但是基于数字电路的量化只能是均匀的,那么为什么还要研究非均匀量化呢?

  • 忆阻器的电导权重是模拟量,本身具备非均匀量化的可能性,而且忆阻器电导的中间值比较不稳定,均匀量化的时候很难精确。

  • 神经网络的权重本身是非均匀分布的,在密集的地方多取点,稀疏的地方少取点,量化后的误差会更小。

MNIST集CNN两层卷积和一层全连接的权重分布图

二、如何确定非均匀量化点?

选取的量化点有一个中心思想:它们最接近原始的分布。正好,数学上有个“反变换采样定理”:

假设 U   ( 0 , 1 ) U~(0,1) U (0,1)均匀分布,Y为任意随机变量, F Y ( y ) F_Y(y) FY(y)为Y的分布, F Y − 1 ( y ) F^{-1}_Y(y) FY1(y)为其反函数,则 Z = F Y − 1 ( U ) Z=F_Y^{-1}(U) Z=FY1(U)与Y同分布。

Inverse transform sampling - Wikipedia

Inverse_Transform_Sampling_Example.gif

上面的公式很抽象,直接看左图吧。首先想个问题:如果只有一个(0,1)区间均匀随机数发生器,该如何通过变换,生成高斯分布?

我们可以求出高斯分布的分布函数,如中间的曲线,然后每产生(0,1)的随机数,作为纵坐标,确定对应的横坐标,即为高斯随机数。采样5万次之后,会有左图下边的分布。这样就通过分布函数,建立了均匀分布和任意分布的一一映射关系。

接下来的问题是,对任意分布做量化,使其最接近原始分布。我们可以求出统计出分布函数,再映射到均匀分布,之后对均匀分布做量化,最后将量化的结果反映射到原分布,即可确定非均匀量化点。

三、MNIST集量化结果

网络为两层卷积,分别8、12个通道,无bias;一层全连接,无bias。

Untitled 1.png

非均匀量化

Untitled 2.png

均匀量化

Untitled 3.png

简单量化

Untitled 4.png

四、Cifar10 量化结果

网络为两卷积,分别32、64个通道,无bias;一层全连接,无bias。

Untitled 5.png

非均匀量化

Untitled 6.png

均匀量化

Untitled 7.png

简单量化

Untitled 8.png

五、结论及后续

上述结果容易看出,非均匀量化在level数更低的时候有更强的鲁棒性,确实效果会好一些。

但老师说4level量化之后精度还是掉很多,二值网络都可以到95%的精度。我确实惊呆了,怎么做到的!

接下来的任务是复现BNN网络,看看二值网络到底如何训练和推理;然后学习LLoyd在脉冲调制中最小二乘法量化方案。

原文链接

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值