神经网络是资源密集型算法,其不仅需要大量的计算成本,而且还要消耗大量的内存。尽管计算资源在日益增多,但优化深层神经网络的训练和推理对于模型的落地仍然是非常重要的。特别是,越来越多的模型将从服务器端移到边缘侧等资源有限的设备上,如智能手机和嵌入式设备上,如何将复杂的模型部署在资源有限的设备上是当前深度学习技术必须要解决的问题。作为通用神经网络模型优化方法之一,模型量化可以减小深度神经网络模型的尺寸大小和模型推理时间,其适用于绝大多数模型和不同的硬件设备。
1. 模型量化基础
1.1 什么是量化?
量化是指将信号的连续取值近似为有限多个离散值的过程。可理解成一种信息压缩的方法。在计算机系统上考虑这个概念,一般用“低比特”来表示。也有人称量化为“定点化”,但是严格来讲所表示的范围是缩小的。定点化特指 scale 为 2 的幂次的线性量化,是一种更加实用的量化方法。为了保证较高的精度,计算机中大部分的科学运算都是采用浮点型进行计算,常见的是 float32 和 float64。神经网络的模型量化即将网络模型的权值,激活值等从高精度转化成低精度的操作过程,例如将 float32 转化成 int8,同时我们期望转换后的模型准确率与转化前相近。由于模型量化是一种近似算法方法,精度损失是一个严峻的问题,大部分的研究都在关注这一问题。
1.2 模型量化的优势
模型量化可以带来如下几个方面的优势:
-
更少的存储开销和带宽需求。即使用更少的比特数存储数据,有效减少应用对存储资源的依赖。
-
更低的功耗。移动 8bit 数据与移动 32bit 浮点型数据相比,前者比后者高 4 倍的效率,而在一定程度上内存的使用量与功耗是成正比的。
-
更快的计算速度。相对于浮点数,大多数处理器都支持 8bit 数据的更快处理,如果是二值量化,则更有优势。
1.3 模型量化原理
模型量化为定点与浮点等数据之间建立一种数据映射关系,使得以较小的精度损失代价获得了较好的收益。详细如下:
R 表示真实的浮点值,Q 表示量化后的定点值,Z 表示 0 浮点值对应的量化定点值,S 则为定点量化后可表示的最小刻度。由浮点到定点的量化公式如下:
由定点到浮点反量化公式如下:
其中,S 和 Z 的求值公式如下:
Rmax,R