ZeroQ 是北京大学与 Berkeley 联合发表在 CVPR 2020 的 Data-Free 量化工作。本文是一种无需数据集,通过优化随机数据产生“蒸馏数据”,进而实现均匀量化和混合比特量化的方法。与最近提出的 DFQ 方法相比,ZeroQ 在 MobileNetV2上可以实现1.71%的量化精度提高,另外 ZeroQ 的计算开销非常低,并且可以在不到30秒的时间内完成整个量化过程。
量化是减少神经网络推理时间和减少内存占用的一种有前途的方法。但是,大多数现有的量化方法都需要访问原始训练数据集以在量化期间进行再训练。例如,由于隐私和安全性考虑,对于具有敏感或专有数据的应用程序通常是不可能的。现有的zero-shot量化方法使用不同的启发式方法来解决此问题,但是它们导致性能不佳,尤其是在量化到超低精度时。在这里,我们提出ZeroQ,这是一种新颖的zero-shot量化框架,可以解决这一问题。ZeroQ允许混合精度量化,而无需访问训练或验证数据。这是通过优化“蒸馏数据集”来实现的,该数据集经设计可匹配网络不同层上的批标准化的统计数据。ZeroQ支持统一和混合精度量化。对于后者,我们引入了一种新颖的基于Pareto边界的方法,可以自动确定所有图层的混合精度位设置,而无需进行手动搜索。我们在各种模型上广泛测试了我们提出的方法,包括ImageNet上的ResNet18/50/152,MobileNetV2,ShuffleNet,SqueezeNext和InceptionV3,以及Microsoft COCO数据集上的RetinaNet-ResNet50。特别是,我们证明,与最近提出的DFQ方法相比,ZeroQ在MobileNetV2上可以实现1.71%的量化精度提高。重要的是,ZeroQ的计算开销非常低,它可以在不到30秒的时间内完成整个量化过程(ImageNet上ResNet50的一个epoch训练时间的0.5%)。
ZeroQ方法示意图
通过(3)式优化得到“蒸馏数据”
,其中
和
是模型输入伪数据后BN层的统计特征均值和标准差,
和
是卷积层输出值的统计特征均值和标准差。
蒸馏数据可视化
为验证蒸馏数据的有效性,通过(2)式测量了模型对每一层量化的敏感性,灵敏度度量在原始模型和量化模型之间使用KL散度。
其中
衡量第 i 层量化为 k 位时的敏感程度,而
指第 i 层中具有 k 位精度的量化模型参数。如果
小,表示模型对 k-bit 量化不敏感。当量化为 4bit 权重时,ResNet50 中每一层的灵敏度如下图左所示;下图右为量化为 2/4/8 位权重精度时的 ResNet50 灵敏度(使用蒸馏数据测得)。可以看出量化位宽越少,敏感度越高。
量化敏感性可视化分析
混合精度量化的主要挑战是确定整个模型的确切位精度配置,为减少搜索空间。本文采用的方法主要思想是对敏感度更高的层使用较高的位精度,对敏感度较低的层使用较低的位精度。为了计算精确的位精度设置,本文提出了一种类似于Pareto 边界方法。对于 Starget 的目标量化模型大小,本文针对导致 Starget 模型大小的每个位精度配置测量模型的整体敏感性,选择与最小整体灵敏度相对应的位精度设置,即解决优化问题(4)。
帕累托边界结果可视化
ResNet18量化结果
ResNet50量化结果
MobileNetV2量化结果
ShuffleNet量化结果
Microsoft COCO RetinaNet量化结果
蒸馏数据的有效性
敏感度分析