可点此跳转看全篇
目录
- 神经网络量化
- 量化的必要性
- 量化方法简介
- 线性对称量化
- 线性非对称量化方法
神经网络量化
量化的必要性
Network | Model size (MB) | GFLOPS |
---|---|---|
AlexNet | 233 | 0.7 |
VGG-16 | 528 | 15.5 |
VGG-19 | 548 | 19.6 |
ResNet-50 | 98 | 3.9 |
ResNet-101 | 170 | 7.6 |
ResNet-152 | 230 | 11.3 |
GoogleNet | 27 | 1.6 |
InceptionV3 | 89 | 6 |
MobileNet | 38 | 0.58 |
SequeezeNet | 30 | 0.84 |
随着网络的深度变大,参数变多,神经网络消耗越来越多的算力,占用原来越大的存储资源。
若想在移动设备和嵌入式设备上运行深度学习神经网络,如此庞大的网络参数将对移动设备的运行内存和总线带宽资源造成巨大消耗。目前三个方向:
1)研究新型的轻量网络或者微型网络:设计更高效的新型网络架构,用相对较小的网络模型达到可接受的预测准确度(如MobileNet和SequeezeNet等)。
2)研究现有网络的参数缩减:如网络剪枝,参数量化等;
3)研究新型计算模型、体系结构和计算部件:如内存中计算、忆阻器等
量化方法简介
大多数网络模型都采用32位浮点数(FP32)来存储网络参数。如果改用较低精度的16位浮点数(FP16)来存储网络参数,那么网络模型就可以减小一半。
常用的低精度表示方法有16位定点数(INT16)、8位定点数(INT8)、4位定点数(INT4)、二进制(INT1)等。其中,使用INT1量化的网络称为二元神经网络(Binary Neural Network, BNN)。
根据网络参数到特定位宽定点数的映射类型,可将量化策略可分为线性量化和非线性量化两种。线性量化策略将所有的网络参数线性映射到特定量化精度的数据范围中。例如,如果某神经网络的参数值在[0.05, 12]范围内,假设采用INT8的线性量化策略,那么区间[0.05, 12]将被线性映射到[0, 255]。非线性策略则根据神经网络的参数密度,在线性量化策略的基础上进行调整。与线性量化策略相比,非线性量化策略能够将网络参数更均匀地映射到定点数区间,因此其量化效果较好,对预测精度的影响较小。
此外,根据量化后的网络参数是否关于坐标轴原点对称,可将量化策略分为对称量化和非对称量化两种。对称量化策略将网络参数映射到关于坐标原点对称的区间。例如,假设网络参数的取值范围是[-3, 6],若采用INT8的对称量化策略,则[-3, 6]将被映射到[-127, 127]。非对称量化允许将网络参数映射到不对称的区间。与对称量化策略相比,非对称量化策略能够将网络参数更均匀地映射到定点数区间,因此其量化效果较好,对预测精度的影响较小。
从经验上讲,当量化精度低于INT8时,量化后网络的精度急速下降。因此工业界目前普遍采用INT8的量化精度。
线性对称量化
首先找出每个网络层中参数取值区间端点绝对值的最大值MAX,然后将网络参数所在的[-MAX, MAX]的区间线性映射到[-127, 127]。
[!Note] 举例
假设某个网络层的参数在[-3,6]之间,最大值MAX为6。需要将[-6,6]线性映射到[-127,127],那么6可以用127表示,-3用-63表示。因为原本参数为FP32,而现在是INT8,所以能够将网络参数的大小缩小75%。
INT8线性对称量化步骤如下:
- 计算参数所在区间的端点 [ a , b ] [a,b] [a,b]绝对值的最大值 M A X = m a x { ∣ a ∣ , ∣ b ∣ } MAX=max\{|a|,|b|\} MAX=max{∣