点上方计算机视觉联盟获取更多干货

仅作学术分享,不代表本公众号立场,侵权联系删除

转载于:AI科技评论     编辑 | 陈大鑫

AI博士笔记系列推荐

周志华《机器学习》手推笔记正式开源!可打印版本附pdf下载链接

由北京大学、华为诺亚实验室联合鹏城实验室的研究人员最新提出的一种针对视觉Transformer的后训练量化方法,这种方法表现优于CNN中的量化算法。

这篇论文发现量化前后除了数据分布以外,注意力层的排序也存在明显差异,因此研究人员提出使用量化前后分布的相似度损失和注意力层的排序损失来联合优化以得到最优的量化步长。

除此之外,论文还提出了一种基于矩阵核范数的混合精度量化算法。在不进行额外训练的情况下,Deit-B的8bit模型在ImageNet图像分类任务上可以实现81.29%的精度。

论文链接:https://arxiv.org/abs/2106.14156

1

引言

近期,Transformer结构在计算机视觉任务中取得了令人瞩目的成果,比如图像分类、目标检测、图像超分等等。这些模型通常在大数据集上进行训练,并且具有相当多的权重参数。例如,ViT-L模型具有307M参数,需要64G FLOPs的计算量。这使得在一些计算资源受限的设备(比如手机和智能汽车)上使用这些模型带来了很大的挑战。因为,实际应用中十分需要对基于Transformer的这些模型进行压缩和加速。

量化是一种很有效的压缩神经网络的方法,它是通过使用低比特宽度的权重值来代替全精度值而不会改变原本的网络结构,这一点对于一些精心设计的网络(比如Transformer)十分友好。在自然语言处理任务中,已经有一些研究人员针对BERT进行训练感知的量化。然而,这些方法需要额外的训练,增加了计算资源的消耗。此外,在某些场景下,训练数据并不是都可以直接获得了,而在边缘设备上进行重训练的代价是不可忍受的。后训练量化是一种可以在不进行额外训练的情况下进行压缩的算法,然而现有的算法都是针对卷积神经网络而设计(比如忽略了注意力层的影响),因此论文提出了一种针对视觉Transformer的后训练量化算法。

研究人员首先将后训练量化建模为寻找最优的量化步长问题。为了更好地保留注意力层的功能,他们分析了注意力层量化前后特征的不同,引入了注意力层排序的损失函数。并与量化前后特征分布的相似度损失进行了联合优化。此外,论文还提出考虑到不同网络层的特征多样化不同,可以根据注意力特征和输出特征权重矩阵的核范数来决定每个网络层的量化比特。

2

方法

图1 视觉Transformer后训练量化算法框架图

视觉Transformer量化

Vision Transformer的计算量主要集中在多层自注意力(MSA)和多层感知机(MLP)模块。论文中对所有矩阵乘法的输入和权重进行了量化,与BERT量化中的算法类似,它们也没有对softmax操作和layer normalization层的参数进行量化,因为这些层的参数量很少并且量化它们对结果会产生很大的不良影响。

后训练量化优化

对于量化而言,我们需要将浮点数约束为整数,其中量化步长的选择尤为关键。均匀量化函数是一种被广泛使用的选择,这样数据范围会被均匀分割:

其中代表量化步长,代表量化比特宽度,代表被量化的数据(比如权重或者网络层的输入)。Clip操作代表超出量化范围的数据会被截断在范围之内。

对于线性操作的相似度感知量化:对于MSA模块和MLP模块当中的线性操作,原本的输出可以被表示为。那对于权重和输入进行均匀量化所对应的反量化函数可以描述为:

,

其中代表量化网络层的输出。通过上述两个公式,我们可以看出量化步长实际上也控制了量化过程中的截断阈值,从而影响了量化前后特征的相似度。相似度感知量化算法可以表示为:

其中代表原始和量化输出特征之间的相似度,输入数据是由一个远小于训练数据集

的校验数据集得到。论文当中采用了比尔森相关系数作为特征相似度的度量:

对于注意力层的排序感知量化:自注意力层是Transfomer结构中十分重要的部分,也是transformer与传统的卷积神经网络不同的地方。对于自注意力层,作者发现量化使得注意力特征的相对顺序变得不同,会带来很大的性能下降,因为,他们在量化过程中引入了一个排序损失:

其中表示成对的排序损失函数,表示权衡系数。损失函数的公式为:

为了解决上述的优化问题,作者提出了一种简单且有效的迭代搜索方法来寻找最优量化步长。首先,网络层输入的量化步长会被固定,然后搜索最优的权重量化步长。然后,权重的量化步长会被固定,搜索最优的输入量化步长。二者的量化步长交替迭代直到收敛或者达到了最大的迭代次数。为了快速收敛,量化步长根据权重和输入的最大值进行初始化,并且将量化搜索空间均匀分为了C个选择。

误差纠正:为了进一步减少量化带来的误差,在搜索之后作者采用了偏差纠正的方法。因为如果输出的期望值不为0,那么输出的均值就会改变。这种偏差可能会对之后的网络层带来影响。因此作者对每个网络层的输出进行了偏差纠正。

在实现过程中,误差的期望值可以通过校验数据集来计算,然后在网络层的bias参数中减去它。

混合比特量化:不同的transformer网络层拥有不同的数据分布,因为有不同的量化“敏感度”。本文作者提出了混合精度量化,对于更加“敏感”的网络层分配更多的比特宽度。考虑到transformer中特殊的结构,作者对MSA和MLP模块内的所有操作使用了相同的比特宽度,这样对硬件的实现也会比较友好。

在论文中,作者提出使用MSA模块中注意力层特征和MLP中输出特征矩阵的核范数来作为度量网络层“敏感度”的方法。与HAWQ-V2中的方法类似,作者使用了一种帕累托最优的方式来决定网络层的量化比特。该方法的主要思想是对每个候选比特组合进行排序,具体的计算方式如下所示:

给定一个目标模型大小,会对所有的候选比特组合进行排序并寻找值最小的候选比特组合作为最终的混合比特量化方案。

3

实验

图像分类任务实验

作者首先在图像分类任务上对后训练量化算法进行了验证。从表1可以看出,在VIT和DeiT两种经典的transformer模型上,论文的量化算法均优于之前的卷积神经网络量化算法。在较小的数据集CIFAR-10上,论文的算法都接近或超过了全精度的transformer模型的性能,在ImageNet数据集上,Deit-B模型也取得了 81.29% 的Top-1准确率。

表1图像分类任务上的后训练量化结果

表2 目标检测任务上的后训练量化结果

目标检测任务实验

作者还将后训练量化算法应用于目标检测任务中,在COCO2017数据集上,对DETR进行量化,8bit模型的性能可以达到41.7 mAP,接近全精度模型的性能。

表3 消融实验

消融实验

作者进一步对所提出的模块进行了消融实验,可以发现所提出的相似度感知量化、注意力层排序感知量化、误差纠正以及混合比特都对量化的性能有较好的增益效果。

4

总结

该研究提出了一种针对视觉Transformer的后训练量化方案,该方案根据注意力层以及多层感知机层的特征图的核范数来决定各个网络层的比特宽度。

为了解决量化的优化问题,作者提出通过寻找最佳量化步长以保持量化后的特征图与原始特征图之间的相似性。此外,作者深入分析了注意力层与传统卷积层的区别,并引入了注意力层排序损失来保持注意力层的相对顺序。

最后,使用迭代搜索策略优化每个transformer层的量化步长。实验结果表明,与传统的后训练量化方法相比,该方法在网络精度和存储开销方面都有较大的提高。

-------------------

END

--------------------

我是王博Kings,985AI博士,华为云专家、CSDN博客专家(人工智能领域优质作者)。单个AI开源项目现在已经获得了2100+标星。现在在做AI相关内容,欢迎一起交流学习、生活各方面的问题,一起加油进步!

我们微信交流群涵盖以下方向(但并不局限于以下内容):人工智能,计算机视觉,自然语言处理,目标检测,语义分割,自动驾驶,GAN,强化学习,SLAM,人脸检测,最新算法,最新论文,OpenCV,TensorFlow,PyTorch,开源框架,学习方法...

这是我的私人微信,位置有限,一起进步!

王博的公众号,欢迎关注,干货多多

王博Kings的系列手推笔记(附高清PDF下载):

博士笔记 | 周志华《机器学习》手推笔记第一章思维导图

博士笔记 | 周志华《机器学习》手推笔记第二章“模型评估与选择”

博士笔记 | 周志华《机器学习》手推笔记第三章“线性模型”

博士笔记 | 周志华《机器学习》手推笔记第四章“决策树”

博士笔记 | 周志华《机器学习》手推笔记第五章“神经网络”

博士笔记 | 周志华《机器学习》手推笔记第六章支持向量机(上)

博士笔记 | 周志华《机器学习》手推笔记第六章支持向量机(下)

博士笔记 | 周志华《机器学习》手推笔记第七章贝叶斯分类(上)

博士笔记 | 周志华《机器学习》手推笔记第七章贝叶斯分类(下)

博士笔记 | 周志华《机器学习》手推笔记第八章集成学习(上)

博士笔记 | 周志华《机器学习》手推笔记第八章集成学习(下)

博士笔记 | 周志华《机器学习》手推笔记第九章聚类

博士笔记 | 周志华《机器学习》手推笔记第十章降维与度量学习

博士笔记 | 周志华《机器学习》手推笔记第十一章稀疏学习

博士笔记 | 周志华《机器学习》手推笔记第十二章计算学习理论

博士笔记 | 周志华《机器学习》手推笔记第十三章半监督学习

博士笔记 | 周志华《机器学习》手推笔记第十四章概率图模型

点分享

点收藏

点点赞

点在看

收藏 | 北大华为鹏城联合首次提出视觉 Transformer 后量化算法!相关推荐

  1. 北大华为鹏城联合首次提出视觉 Transformer 后量化算法!

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 AI 科技评论报道 编辑 | 陈大鑫 AI 科技评论今天为大家介绍一 ...

  2. Transformer再下一城!low-level多个任务榜首被占领,北大华为等联合提出预训练模型IPT

    来自Transformer的降维打击!北京大学等最新发布论文,联合提出图像处理Transformer.通过对low-level计算机视觉任务,如降噪.超分.去雨等进行研究,提出了一种新的预训练模型IP ...

  3. 华为、北大、悉尼大学:最新视觉Transformer综述(2017-2020年)

    点击上方,选择星标或置顶,不定期资源大放送! 阅读大概需要25分钟 Follow小博主,每天更新前沿干货 来源丨https://zhuanlan.zhihu.com/p/342114940 转自丨极市 ...

  4. 全文翻译 | 华为、北大、悉尼大学:最新视觉Transformer综述(2017-2020年)

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨坐化@知乎(已授权) 来源丨https://zhuanlan.zhihu.com/p/34211 ...

  5. NeurIPS 2021 Transformer部署难?北大华为诺亚提出Vision Transformer的后训练量化方法...

    关注公众号,发现CV技术之美 本文分享 NeurIPS 2021 论文『Post-Training Quantization for Vision Transformer』,由北大&华为诺亚联 ...

  6. 视觉Transformer快速入门指南!

    [栏目:前沿进展]Transformer 网络推动了诸多自然语言处理任务的进步,而近期 Transformer 开始在计算机视觉领域崭露头角,比如ViT和DETR等. 近日,华为诺亚方舟实验室高级研究 ...

  7. CVPR 2021 | Transformer进军low-level视觉!北大华为等提出预训练模型IPT

    点击下方卡片,关注"CVer"公众号 AI/CV重磅干货,第一时间送达 作者丨Happy   来源丨极市平台 导读 来自Transformer的降维打击!北京大学.华为诺亚等最新发 ...

  8. 没有残差连接的ViT准确率只有0.15%!北大华为提出用于ViT的增强 Shortcuts,涨点显著!...

    关注公众号,发现CV技术之美 本文分享 NeurIPS 2021 论文『Augmented Shortcuts for Vision Transformers』,由北大&华为联合提出用于 Vi ...

  9. 华为诺亚最新视觉Transformer综述

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 来源丨机器之心 编辑丨极市平台 导读 华为诺亚方舟实验室联合北大和悉 ...

最新文章

  1. 从电视到网络,vivo营销之变
  2. MySQL查看、创建和删除索引的方法
  3. SpringBoot中使用@Mapper注解需要哪个包
  4. 使用宝塔面板进行wordpress建站
  5. mysql函数(二.数字函数)
  6. 利用python模拟菜刀反弹shell绕过限制
  7. 【ES10(2019)】Object.fromEntries()
  8. Linux shell 的字符串截取
  9. 8g内存一般占用多少_手机的运行内存6g和8g有什么区别?内行人一语道破,别被骗了...
  10. File API文件操作之FileReader二
  11. java vcf_Java VCF 格式解析
  12. 图像识别最好的算法,图片相似度识别算法
  13. 【Android】app应用内版本更新升级(DownloadManager下载,适配Android6.0以上所有版本)
  14. android 循环弹幕,Android自定义View实现弹幕效果
  15. Python实现SVM的实例(包括网格调参和测试)总结综述
  16. GPS标准历书Yuma,Rinex,TLE,SEM是什么意思?
  17. 达梦数据库企业管理器(DEM)搭建
  18. android:completionthreshold=1,android:completionThreshold=1是哪个组件的属性( )
  19. 最早成立的计算机学校,中国最早的四大工学院
  20. Module use of python36.dll conflicts with this version of Python

热门文章

  1. 风控策略和模型的区别_风控策略概述
  2. java classifier_Java 朴素贝叶斯分类器、SVM(5行代码)实现乳腺癌分类
  3. linux命令txt,Linux常用命令(非常详细!)
  4. java compareto方法怎么排序的_很简单却能让你面试头疼得Java容器,这里从源码给你解释清楚
  5. php基础自测卷2,php基础2
  6. CentOS7 ISCSI服务器搭建
  7. linux安装php支持redis拓展
  8. mysql重复make_Mysql5.6 make 错误以及解决办法
  9. 反转二叉树 java_leetcode刷题笔记-226. 翻转二叉树(java实现)
  10. python 测试用例管理 生成_python自动生成接口测试用例