神经网络模型量化

量化模型(Quantized Model)是一种模型加速(Model Acceleration)方法的总称,包括二值化网络(Binary Network)、三值化网络(Ternary Network),深度压缩(Deep Compression)等, 又可以细分为对称量化、非对称量化。

1、量化的原因

模型量化是由模型、量化两个词组成。我们要准确理解模型量化,要看这两个词分别是什么意思。

在计算机视觉、深度学习的语境下,模型特指卷积神经网络,用于提取图像/视频视觉特征。

量化是指将信号的连续取值近似为有限多个离散值的过程。可理解成一种信息压缩的方法。在计算机系统上考虑这个概念,一般用“低比特”来表示。也有人称量化为“定点化”,但是严格来讲所表示的范围是缩小的。定点化特指scale为2的幂次的线性量化,是一种更加实用的量化方法。
神经网络模型量化_第1张图片
卷积神经网络具有很好的精度,甚至在一些任务上比如人脸识别、图像分类,已经超越了人类精度。但其缺点也比较明显,具有较大的参数量,计算量,以及内存占用。而模型量化可以缓解现有卷积神经网络参数量大、计算量大、内存占用多等问题,具有为神经网络压缩参数、提升速度、降低内存占用等“潜在”优势。为什么“潜在”是加引号的呢?因为想同时达到这三个特性并不容易,在实际应用过程中存在诸多限制和前提条件。
模型在每次预测时都会使用模型的权重(weights),图像相关的应用程序通常需要实时处理数据,这意味着至少 30 FPS(Frame per Second,每秒帧数)。因此,如果部署相对较小的 ResNet-50 网络来分类,运行网络模型就需要 3GB/s 的内存带宽。网络运行时,内存,CPU 和电池会都在飞速消耗,我们无法为了让设备变得智能一点点就负担如此昂贵的代价。
因此,深度学习领域对这些问题投入了大量的研究资源,主要有两个方面:

设计更有效的网络架构,用相对较小的模型尺寸达到可接受准确度,例如 MobileNet 和 SequeezeNet。
通过压缩、编码等方式减小网络规模。量化是最广泛采用的压缩方法之一。
这两个方面有时可以共同使用并取得令人瞩目的成果。例如,TensorFlow 量化的MobileNetV1 仅为 4.8MB,这甚至比大多数 GIF 动图还要小,从而可以轻松地部署在任何移动平台上。

量化就是将神经网络的浮点算法转换为定点。这可以在移动手机上实现网络的实时运行,对云计算的部署也有帮助。

2、 量化的相关工作

量化有若干相似的术语。低精度(Low precision)可能是最通用的概念。常规精度一般使用 FP32(32位浮点,单精度)存储模型权重;低精度则表示 FP16(半精度浮点),INT8(8位的定点整数)等等数值格式。不过目前低精度往往指代 INT8。

混合精度(Mixed precision)在模型中使用 FP32 和 FP16 。 FP16 减少了一半的内存大小,但有些参数或操作符必须采用 FP32 格式才能保持准确度。
量化一般指 INT8 。不过,根据存储一个权重元素所需的位数,还可以包括:

二值神经网络:在运行时权重和激活只取两种值(例如 +1,-1)的神经网络,以及在训练时计算参数的梯度。
三元权重网络:权重约束为+1,0和-1的神经网络。
XNOR网络:过滤器和卷积层的输入是二进制的。 XNOR 网络主要使用二进制运算来近似卷积。
其他一些研究更关注如何压缩整个模型而非存储一个元素的位数。 Deep Compression 是该方向最重要的工作之一,作者将剪枝、量化和编码等技术结合起来,在不显著影响准确性的前提下,将存储需求减少 35x(AlexNet)至 49x(VGG-19)。

3、量化工作的具体原理

https://zhuanlan.zhihu.com/p/64744154

你可能感兴趣的:(Tensorflow,Python3,NLP,神经网络,深度学习,计算机视觉)