原文链接:https://www.yuque.com/yahei/hey-yahei/quantization-data_free
欢迎转载&引用,但烦请注明出处~
Data-free指的是不需要数据,它可以是完全不依赖数据也不利用生成数据,也可以是利用某些手段来生成数据。在量化上,Data-free既可以用于后训练量化,也可以用于重训练量化。Data-free量化的研究主要是希望在真实数据未知的情况下,对输入进行离线量化操作,通常都是借助BN层的统计信息(均值、方差)来直接确定输入的量化参数,或者生成校准数据来校准得到量化参数。
动机
一般论文会解释说,在某些高隐私的应用场景下,比如医疗数据、医药数据、个人隐私数据等等,这些数据是难以获取甚至无法获取的——但对于模型训练者而言,我既然能用这些数据来训练网络了,为什么不能进一步用这些数据来做量化校准或者做重训练量化?我觉得可能更合理(但也不会很普适)的应用场景是某一方要提供专门的模型压缩服务,模型训练者又不想提供数据给第三方模型压缩服务商,不过如果模型压缩的服务方是以出售或提供工具的形式给模型训练者,那么这样的需求也是不存在的。
总的来说,Data-free的应用场景是很局限的,看似有需求但其实需求应该是比较弱的。不过这两年关于Data-free量化出了几篇论文,我们不妨也拿出来讨论一下。
DFQ
论文:《Data-Free Quantization Through Weight Equalization and Bias Correction (ICCV2019)》逐层量化权重、吸收输入量化的偏移项
参考:《ICCV2019高通Data-Free Quantization论文解读 | 知乎, IronBoy》
为了得到输入的量化参数,我们通常需要得到输入的一个截断范围,DFQ主要考虑“Conv+BN+ReLU”的结构,用BN层训练得到的和参数(注意不是指数平滑平均得到的均值和标准差),来估计输入的范围。
回顾一下BN的过程
BN层的输入首先被规范化到均值为0,方差为1的分布下,然后通过一个仿射变换,此时输出的均值为,标准差为。DFQ提出,既然知道BN层输出后的均值和标准差,那么不妨用他们来确定截断范围,当然还需要考虑激活函数带来的影响,比如ReLU,那么截断范围就变为
其中,是人为设置的超参数,论文给了一个典型值。
(~D: Data free、~BP: BackPropagation free、~AC: Architecture Change free)
ZeroQ
论文:《ZeroQ: A Novel Zero Shot Quantization Framework (CVPR2020)》混合精度配置搜索
ZeroQ也利用了BN层的数据,不过他是利用了BN层统计量(均值和方差)信息来蒸馏数据。BN层统计的均值和方差代表了训练阶段统计得到的输入的均值和方差,那么不妨以最小化各BN层输入数据的均值、方差与统计得到的均值、方差为目标蒸馏得到校准数据,然后用校准数据进行常规的校准操作。
具体来说,记
第个BN层在训练时记录的均值和标准差分别为和,
蒸馏数据过程中实际观察到的均值和标准差分别为和,
设计损失函数为
但我们训练的不是网络权重,而是输入数据本身。初始状态下先生成一系列高斯分布的随机图像,然后分别将随机图像喂入网络,计算上述损失并反向传播得到输入数据上的梯度,进而用梯度下降法进行更新,得到一系列可用于校准的有一定语义的图像。
(左:初始化的随机图像; 右:数据蒸馏后的图像)
用KL散度定义一个量化误差函数
其中,
是原始模型输入后输出的特征向量;
是比特量化模型输入后输出的特征向量;
该误差函数的含义即为,输入一个小批次测试数据,度量量化前后模型输出向量的KL散度的平均值
(不同方法下,每次量化ResNet50的一个层为4bit,观察量化误差)
从上图可以看到,用蒸馏得到的数据进行校准,量化后产生的误差与用真实数据校准比较接近,而用高斯分布的随机图像校准则有比较大的偏差。
(MobileNet v2,No D: No Data,No FT: No FineTune,MP: Mixed Precision)
这里只简单贴一下MobileNet v2的实验结果,论文中还有更多丰富的实验数据,感兴趣可以去看原文,这里就不再赘述。从MobileNet v2的实验结果来看,ZeroQ的效果明显是优于同时Data-free的DFQ算法的。
GDFQ
论文:《Generative Low-bitwidth Data Free Quantization (ECCV2020)》
参考:《ECCV 2020 | 基于生成器的低比特无数据量化(GDFQ)方法, 简单有效消除数据依赖 | 知乎, 将门创投》
GDFQ训练一个GAN网络来生成数据,损失函数同时包含BN层的统计量和数据标签;并利用生成的数据和知识蒸馏技术进行量化恢复训练。GDFQ采用联合训练的方式,生成器的训练与量化的恢复训练同步进行,使得Data-free量化在低比特下也能较好的工作。
(整体设计)
(算法流程)
损失函数改造为
第一部分即是常规的交叉熵,第二部分的设计与ZeroQ蒸馏数据所用的损失函数相同。
(绑定标签使得生成的图像语义信息更加丰富)
(权重和输入均量化为4bits)
(CIFAR100,权重和输入均量化为4bits)
(CIFAR100,权重和输入均量化为4bits)