【量化】PTQ4ViT: Post-Training Quantization Framework for Vision Transformers

20 篇文章 3 订阅
12 篇文章 0 订阅

这是北京大学和后摩智能联合发表的一篇论文,已经被2022年的cvpr收录。

github地址:https://github.com/hahnyuan/PTQ4ViT

文章创新点:

作者的idea来源于对ViT中激活值的分布的观察,以及对不同评估量化误差的指标对比的观察。

  1. softmax的激活值具有很不均匀的分布,大部分的值都接近于0 。其它大的值虽然数量很小,但是它们意味着两个patch之间具有很高的attention,在ViT中这些值是不能被忽略。而为了保留这些值,如果取大的scaling factor,其它大多数的小值会被压缩到0,会产生很大的量化误差。也就是说,小scaling factor和大的scaling factor都不能解决这个问题。
  2. GELU的激活值是具有很不对称的分布,正值的range很大,负值的range很小,所以很难被均匀地量化。但是,如果采用非均匀量化,大部分的硬件设备都无法有效支持。

所以,作者提出了一种同时采用两个scaling factor的方法:

  

但是如何来决定scaling factor的大小呢?

 

根据观察可知MSE、余弦距离与Pearson correlation来描述ViT的任务损失(cross-entropy)都是不准确的。更精确一点的是最后一层的output在量化前后的差值。但是,用这个差值去决定中间层的scaling factor大小是不实际的,因为如果这样做,需要不停地执行模型去计算output,这样太耗时了。

所以,作者提出了海森矩阵来衡量的方法,这里作者用的不是严格的海森矩阵,所以他们给这个指标起的名字叫Hessian guided metric。如上图所示,这个指标的distance与task loss是最接近的。因为它(H)就是从task loss来的:

 

最小化量化前后的task loss的差值也就是:

 

 

综合以上的两个创新点,作者提出了PTQ4ViT的框架:

 

 

共有两个阶段:

阶段一用calibration的数据集来收集每一层的output与梯度;阶段二为每一层搜索可以使式6最小的scaling factor。

实验结果:

 

消融实验:

 

值得注意的是,由于twin量化多了一个scaling factor,量化后的data format有所改变,如果需要硬件支持,只需要对其算子的硬件代码作一定的修改,但这比让其支持非均匀量化会简单很多。以矩阵乘为例:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值