CVPR2020 | 8比特数值也能训练模型?商汤提出训练加速新算法

点击上方“AI算法修炼营”,选择加星标或“置顶”

标题以下,全是干货

本文转自:商汤科技

计算机视觉顶会CVPR 2020将于6月14日-19日在美国西雅图举行,今年的论文录取率降至22.1%(2019年录取率25.1%,2018年录取率29.6% )。虽然论文录取难度逐年增大,但是商汤科技在CVPR的成绩一直领先行业,今年的CVPR成绩依旧斐然。

 

本文提出了用于加速卷积神经网络训练过程的INT8训练技术,采用8比特数值训练模型,可以极大地提升训练速度,减少计算损耗,而且训练精度几乎无损,该论文也入选了CVPR 2020。

如何提升深度学习的训练速度,一直是人工智能领域研究的难点,如今卷积神经网络(CNN)又迎来新突破!

 

在CVPR 2020上,商汤研究院链接与编译团队、高性能计算团队和北航刘祥龙老师团队合作提出了用于加速卷积神经网络训练过程的INT8训练技术,可以极大地提升训练速度,减少计算损耗。

 

简而言之,INT8训练技术就是将原来需要计算32位或16位的浮点(小数)计算,转换成只需要计算8位的定点(整数)计算,计算位数减少了,计算能力和速度更强。

表1:相比行业常用的32位浮点计算(fp32)和16位浮点计算(fp/int6),int8的定点计算在各类芯片的计算力均有2倍以上提升

 

当然,INT8训练技术也会带来新的挑战:1、能否保证精度;2、模型不收敛,可能由于模型不收敛导致训练失败的结果。商汤研究团队很好地解决了这些问题,他们具体是如何做到的呢?

什么是INT8训练?

 

常用的浮点量化操作是线性均匀的,本文中使用的是对称量化,具体公式如下,其中x是被量化的数据,q是量化后的数据,s是量化系数,clip是截断函数,round是取整函数:

在8bit的场景里,截断函数和量化系数的计算公式如下:

为了降低量化带来的误差,一个常见做法是对取整过程进行随机化,使得取整函数从期望上更接近原始的数,具体随机取整的公式如下:

相反的,将8bit量化数变换回浮点的过程称之为反量化。反量化公式如下所示,其中q为量化计算结果,s为量化系数,为反量化后的结果。

卷积神经网络训练有两个主要部分:前向过程(Forward Pass)和反向过程(Backward Pass),如下图。

 

图1:常用卷积神经网络训练和INT 8训练对比

 

常用的前向过程是把输入的图像与卷积核进行计算(a是指输入图像,w指卷积核,Conv BP(32)是指基于32bit的一个卷积,z是指输出),即图1上半部分左侧。

 

本文INT8训练是将图中上半部分左侧橙色部分替换成右侧橙色部分,将浮点计算变换成定点计算,再通过反量化回到浮点数域的过程。

 

图1的下半部分是一个反向过程,与向前过程类似,反向过程也会把输入的浮点数转化成定点数,计算完再转化成浮点数作输出。图中g是指梯度,可理解为误差值,神经网络优化的方向。

 

梯度量化和收敛稳定性

 

实验发现,梯度的分布非常奇怪,导致我们难以量化。 

图(a)中可以看出,最右边的分布非常尖,梯度集中在0附近,导致量化过程带来比较大的误差。

图(b)表示随着训练的轮数递进,梯度分布变得越来越尖锐,这意味着梯度量化的误差会随着训练的进行变得越来越大。

梯度的分布随网络深度变化情况从图(c)中可以看出。很容易发现,卷积层的深度越浅,梯度分布越尖锐,这也会导致梯度量化的误差更大。

从图(d)中可以看出卷积的结构也会影响梯度分布,对于MobileNetV2模型来说,conv2为depthwise卷积其相比conv1和conv3具有更加尖锐的分布。

 

由于梯度具有如上四个特点,当我们直接在训练中对梯度进行量化时,训练精度非常容易出现突发的崩溃情况。

 

下图展示了在CIFAR-10数据集上进行实验的精度和损失函数变化曲线,以MobileNetv2在CIFAR-10数据集上训练为例,其训练的精度曲线和Loss曲线如下图,从图中可以发现INT8训练的Loss在训练初期正常下降,但随后迅速上升,对应的精度也不断下降。

 

 

根据以上的观察和初步启发,我们通过理论的分析和推导,对量化训练的收敛稳定性进行建模。根据Adam等相关论文的经验和优化理论中的Regret analysis,本文通过以下公式1和公式2理论推导。

(公式1)

(公式2)

本文总结出两个提升训练收敛稳定性的策略:1.通过调节量化函数中的截断减小量化误差;2.通过适当调低学习率(决定网络训练快慢的参数)来提高量化训练精度。

 

主要方法

 

依据以上分析,本文提出两个方法:基于方向自适应的梯度截断和误差敏感的学习率调节。同时,为了减少量化操作带来的额外开销,本文还提出了周期更新和量化卷积融合的方法。

图2:精度优化方法示意图

 

1、基于方向自适应的梯度截断:调整截断值,让梯度方向保持正确。

 

以图2为例,上图中的五角星是优化的最优点(即蓝色箭头指向的点),左边图做量化时的红色箭头存在量化误差,偏离了最优方向,这时候做一个截断,使得红色的箭头变到绿色的箭头,更接近五角星,收敛性更好一些。

本文提出使用能够体现梯度方向的余弦距离来衡量梯度的量化误差,并以余弦距离为目标函数来优化求解最优截断值。余弦距离定义如下:

 

2、误差敏感的学习率调节:在错误的方向上尽量少更新。

 

如图2右侧,如果发现红色箭头在收敛边界外侧,这个方向是错误的,那么可在错误的方向尽量少更新一些。

 

针对学习率的调整,本文提出误差敏感的学习率调节方法,使用学习率系数对原学习率进行调整,学习率系数与余弦距离负相关,学习率系数定义如下:

3、周期更新:降低由于统计而带来的额外计算耗时。

 

由于量化操作需要的统计数据范围和计算截断值等操作十分耗时,为了减少这些操作的时间开销,本文采用周期更新的方式(不是每一次训练都计算),周期性地统计数据范围和计算截断值。

 

通过周期更新的方法能够有效地提高减少因量化引入的额外时间开销。下表为ResNet50在ImageNet数据集上不同周期的单次训练时间统计表。

 

 

4、量化卷积融合:减少访存次数、节省cuda kernel launch次数。

通过将量化和反量化操作融合入卷积计算的CUDA核函数里,可以减少一次数据的访存,有效地减少量化和反量化操作的时间开销。

实验结果

 

图像分类任务:本文在CIFAR10和ImageNet等图像分类数据集进行INT8训练实验。从下表结果中可以看出,在大多数网络结构中均取得了比现有最好方法更优的精度,并且首次在MobileNet、Inception等网络上进行量化训练实验,精度损失也在1.5%以内。

目标检测任务:同时,本文也首次尝试在PASCAL和COCO等目标检测数据集上进行INT8训练实验,精度损失也在2%以内。

 

已有的少量探究梯度量化的论文[4]均未报告算法在实际训练任务中的真实加速性能,为了最大限度将方法实用化,本文在 GeForce GTX1080TI显卡上编写并优化了用于支持INT8训练的卷积前向和后向计算核心。

 

实测结果表明,使用INT8卷积计算的前向和后向过程相比于浮点计算有明显的加速,其中前向过程平均加速1.63倍,后向过程平均加速1.94倍。如下图所示:

同时,本文在实际训练过程中进行了完整的端到端测试,可以看到,INT8训练可以将ResNet50的一轮训练过程从0.360秒降低到0.293秒,整体训练过程提速了22%。

References

[1].Ruihao Gong,Xianglong Liu,Shenghu Jiang,Tianxiang Li,Peng Hu,Jiazhen Lin,Fengwei Yu,and Junjie Yan.Differen-tiable soft quantization: Bridging full-precision and low-bitneural networks. In ICCV, October 2019.

[2].Rundong Li,Yan Wang,Feng Liang,Hongwei Qin,Junjie Yan,and Rui Fan.Fully quantized network for object detection.In The IEEE Conference on Computer Vision and Pattern Recognition (CVPR), June 2019.

[3].Benoit Jacob,Skirmantas Kligys,Bo Chen,Menglong Zhu,Matthew Tang,Andrew Howard,Hartwig Adam,and Dmitry Kalenichenko. Quantization and training of neural networks for efficient integer-arithmetic-only inference. 2018 IEEE Conference on Computer Vision and Pattern Recognition(CVPR), June 2018.

[4].Yukuan Yang,Shuang Wu,Lei Deng,Tianyi Yan,Yuan Xie,and Guoqi Li.Training high-performance and large-scale deep neural networks with full 8-bit integers, 2019.



目标检测系列秘籍一:模型加速之轻量化网络秘籍二:非极大值抑制及回归损失优化秘籍三:多尺度检测秘籍四:数据增强秘籍五:解决样本不均衡问题秘籍六:Anchor-Free视觉注意力机制系列Non-local模块与Self-attention之间的关系与区别?视觉注意力机制用于分类网络:SENet、CBAM、SKNetNon-local模块与SENet、CBAM的融合:GCNet、DANetNon-local模块如何改进?来看CCNet、ANN
语义分割系列一篇看完就懂的语义分割综述最新实例分割综述:从Mask RCNN 到 BlendMask超强视频语义分割算法!基于语义流快速而准确的场景解析CVPR2020 | HANet:通过高度驱动的注意力网络改善城市场景语义分割

基础积累系列卷积神经网络中的感受野怎么算?
图片中的绝对位置信息,CNN能搞定吗?理解计算机视觉中的损失函数深度学习相关的面试考点总结


自动驾驶学习笔记系列 Apollo Udacity自动驾驶课程笔记——高精度地图、厘米级定位 Apollo Udacity自动驾驶课程笔记——感知、预测 Apollo Udacity自动驾驶课程笔记——规划、控制自动驾驶系统中Lidar和Camera怎么融合?

竞赛与工程项目分享系列如何让笨重的深度学习模型在移动设备上跑起来基于Pytorch的YOLO目标检测项目工程大合集目标检测应用竞赛:铝型材表面瑕疵检测基于Mask R-CNN的道路物体检测与分割
SLAM系列视觉SLAM前端:视觉里程计和回环检测视觉SLAM后端:后端优化和建图模块视觉SLAM中特征点法开源算法:PTAM、ORB-SLAM视觉SLAM中直接法开源算法:LSD-SLAM、DSO视觉SLAM中特征点法和直接法的结合:SVO
2020年最新的iPad Pro上的激光雷达是什么?来聊聊激光SLAM



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值