【算法】8比特数值也能训练模型?商汤提训练加速新算法丨CVPR 2020

【算法】8比特数值也能训练模型?商汤提训练加速新算法丨CVPR 2020
本文插图
【算法】8比特数值也能训练模型?商汤提训练加速新算法丨CVPR 2020
本文插图

出品 | AI科技大本营(ID:rgznai100)
在CVPR 2020上 , 商汤研究院链接与编译团队、高性能计算团队和北航刘祥龙老师团队合作提出了用于加速卷积神经网络训练过程的INT8训练技术 。 该工作通过将网络的输入、权重和梯度量化到8比特来加速网络的前向传播和反向传播过程 , 缩短卷积神经网络训练时间 。
论文观察到梯度的独特分布给量化训练带来了极大挑战 , 为了解决梯度量化带来的精度损失和不稳定问题 , 该论文进行了量化训练收敛稳定性的理论分析并基于此提出了误差敏感的学习率调节和基于方向自适应的梯度截断方法 。 同时为了保证更高的加速比 , 该论文还提出使用周期更新、量化卷积融合等技术来减少量化操作带来的时间开销 。 应用了上述方法之后 , INT8训练在图像分类任务和检测任务上都仅仅损失微小的精度 , 且训练过程相比浮点训练加速了22% 。
【算法】8比特数值也能训练模型?商汤提训练加速新算法丨CVPR 2020
本文插图

动机与背景
卷积神经网络被广泛应用在多种计算机视觉任务中并且取得了优异的精度 。 由于拥有庞大的参数量 , 训练和部署卷积神经网络需要耗费大量计算资源和漫长的训练时间 , 如何用更少资源训练卷积神经网络一直是一个学术研究热点 , 也是工业界关心的话题 。
神经网络量化技术是一种使用定点计算代替浮点的加速技术 , 目前被广泛地应用在神经网络部署中 , 可以极大地提升部署速度 , 并降低内存资源占用 。 现有很多工作均表明将网络前向过程的浮点计算替换成INT8计算 , 不会带来明显的精度下降[1][2] 。
下图展示了现代神经网络加速芯片对于不同精度计算的理论计算峰值对比 , 可以看到 , INT8算力相比于FP32和FP/INT16均能有超过2倍峰值性能提升 。
【算法】8比特数值也能训练模型?商汤提训练加速新算法丨CVPR 2020
本文插图

当考虑将神经网络量化技术应用在卷积神经网络训练中时 , 为了加速卷积的反向梯度传播过程 , 不得不对梯度进行量化操作 。 在将浮点的梯度量化到INT8数值范围内之后 , 训练过程变得极其不稳定 , 并且收敛到非常差的精度 。 如何解决量化梯度给训练带来的收敛稳定性问题 , 是十分重要的问题 。 与此同时 , 在提升训练精度的同时 , 也不应当进入过多额外的计算 , 否则加速效果将会大打折扣 。
一方面是高效的计算峰值保障 , 一方面是困难重重的算法设计 , 这是INT8训练技术的机遇与挑战 。
【算法】8比特数值也能训练模型?商汤提训练加速新算法丨CVPR 2020
本文插图

何为INT8训练
标准的线性量化操作指的是 , 将一个浮点张量(tensor)进行线性映射 , 变换到整数空间中[3] 。 这个整数空间的大小由于量化比特数来决定 , 比如常见的8bit量化数 , 就有256个取值 , 本文中使用的是对称量化 , 因此量化数的取值是从-128到127 。 具体公式如下 , 其中x是被量化的数据 , q是量化后的数据 , s是量化系数 , clip是截断函数:
【算法】8比特数值也能训练模型?商汤提训练加速新算法丨CVPR 2020
本文插图

在8bit的场景里 , 截断函数和量化系数的计算公式如下:
【算法】8比特数值也能训练模型?商汤提训练加速新算法丨CVPR 2020
本文插图

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


推荐阅读