【Quantized Convolutional Neural Networks for Mobile Devices】论文笔记

[CVPR ‘16]论文链接:https://arxiv.org/abs/1512.06473
代码链接:https://github.com/jiaxiang-wu/quantized-cnn
文章中使用的是PQ量化方法,同时提出了量化误差的校正方案。

效果

在ILSVRC-12上可以实现4~6倍的加速和15~20倍的压缩,分类精度损失1%。 在移动设备上该模型可以在一秒钟内准确地对图像进行分类。

量化

量化整个网络的步骤:
1.通过误差校正量化所有卷积层,而全连接层保持不变。
2.使用训练集对量化网络中的全连接层进行微调,以恢复分类精度。
3.通过误差校正量化微调网络中的全连接层。

量化全连接层

使用PQ方法量化。将权重矩阵W均匀地分成M个子空间,对每个子空间使用Kmeans算法得到一本码书。对于第m个子空间,优化为:
【Quantized Convolutional Neural Networks for Mobile Devices】论文笔记
D是码本,包含K个子码字。B中的每一列是指示矢量,指定哪个子码字用于量化相应的子矢量。
图层响应大致计算如下:
【Quantized Convolutional Neural Networks for Mobile Devices】论文笔记
全连接层的量化和测试计算过程如下:
【Quantized Convolutional Neural Networks for Mobile Devices】论文笔记
在测试阶段,输入被分成M个子矢量,表示为S。对于每个子空间,计算S和D中的每个子码字之间的内积,并将结果存储在查找表中。之后,只需要M个加法操作来计算每个响应。

量化卷积层

与全连接层中的1-D矢量不同,每个卷积核都是3维张量。 在量化之前,我们需要确定如何将其分割成子向量,即将子空间分割应用于哪个维度。 在测试阶段,每个卷积核在空间域中使用滑动窗口遍历输入特征图。 由于这些滑动窗口部分重叠,我们沿着特征映射通道的维度拆分每个卷积核,以便预先计算的内积可以在多个空间位置重复使用。 具体来说,我们通过以下方式了解每个子空间的量化:
【Quantized Convolutional Neural Networks for Mobile Devices】论文笔记
优化同样通过每个子空间中的Kmeans聚类解决。
随着卷积内核的量化,可以通过以下方式近似计算响应特征映射:
【Quantized Convolutional Neural Networks for Mobile Devices】论文笔记
与全连接层类似,使用输入特征映射预先计算内积的查找表,然后利用上式进行响应特征映射计算。

误差校正量化

上述的方法仍有两个严重的缺点。首先,最小化模型参数的量化误差不一定就能得到用于分类精度的最佳量化网络。相反,最小化每层响应的估计误差与网络的分类性能更密切相关。其次,每一层的量化独立于其他层,这可能在量化多层时导致误差的累积。网络最终响应的估计误差也可能会快速累积,因为先前量化层引入的误差也将影响后续层。
为了克服这两个限制,我们将误差校正的思想引入到网络参数的量化中。这种改进的量化方法直接最小化了每层响应的估计误差,并且可以补偿先前层引入的误差。利用这种纠错方案,可以用比原始量化方法低得多的性能降级来量化网络。

全连接层的误差校正

假设我们有N个图像来学习完全连接层的量化,并且图像In的层输入和响应表示为Sn和Tn。 为了最小化层响应的估计误差,我们优化:
【Quantized Convolutional Neural Networks for Mobile Devices】论文笔记
Frobenius范数中的第一项是期望的层响应,第二项是通过量化参数计算的近似层响应。
可以应用块坐标下降法(Block Coordinate Descent)来最小化该目标函数。 对于第m个子空间,其残差定义为:
【Quantized Convolutional Neural Networks for Mobile Devices】论文笔记
然后我们尝试最小化这个子空间的残差,即:
【Quantized Convolutional Neural Networks for Mobile Devices】论文笔记
可以通过交替地更新子码本和子码字分配来解决上述优化。
更新D(码本):根据码字分配矩阵B,定义一个集合Lk,上式可以重新表述为:
【Quantized Convolutional Neural Networks for Mobile Devices】论文笔记
这操作使得对一个子码字的优化不会影响到其他子码字。对于每个子码字,根据下式构造最小二乘问题来更新它。
更新B(码字分配矩阵):在码本D固定的情况下,B中每列的优化是相互独立的。对于第ct列,其最佳子码字分配由下式给出:
【Quantized Convolutional Neural Networks for Mobile Devices】论文笔记

卷积层的误差校正

采用类似的思想来最小化卷积层响应特征映射的估计误差,即:
【Quantized Convolutional Neural Networks for Mobile Devices】论文笔记
优化也可以通过块坐标下降法来解决。

多个层的误差校正

还有一个问题是由先前层引起的层响应的估计误差将被累积并影响后续层的量化。假设其先前的层已经被量化,我们考虑特定层的量化。参数量化的优化基于一组训练图像的层输入和响应。为了量化该层,我们将量化网络中的层输入作为{Sn},并将原始网络中的层响应(未量化)作为上面等式中的{Tn}。以这种方式,由量化网络中的实际输入和原始网络中的期望响应进行优化指导。在优化期间明确地考虑先前层引入的累积误差。结果,该训练方案可以有效地抑制多层量化的累积误差。
另一种可能的解决方案是采用反向传播来联合更新所有量化层中的子码本和子码字分配。然而,由于子码字分配是离散的,所以基于梯度的优化可能非常困难。因此,这里不采用反向传播,但可能是未来工作的有希望的扩展。

实验

在本节中,我们在MNIST和ILSVRC-12两个图像分类基准上评估我们的量化CNN框架。为了加速卷积层,我们比较:
•CPD:CP-Decomposition;
•GBD:分组脑损伤;
•LANR:非线性响应的低秩近似。
为了压缩完全连接的层,我们采用以下方法:
•RER:随机边缘去除;
•LRD:低秩分解;
•DK:黑暗知识;
•HashNet:散列神经网络;
•DPP:无数据参数修剪;
•SVD:奇异值分解;
•DFC:Deep Fried Convnets。
对于所有上述基线,我们在相同设置下使用其报告的结果进行公平比较。我们报告理论加速以获得更一致的结果,因为实际的加速可能会受到各种因素的影响,例如:CPU,缓存和RAM。我们比较了理论和实际加速,并讨论了采用BLAS库加速的效果。
我们的方法表示为Q-CNN和Q-CNN(EC),其中后者采用纠错,而前者不采用纠错。我们在MATLAB中实现参数量化的优化过程,并用Caffe对生成的网络进行微调。

MNIST结果

MNIST数据集包含70k手写数字图像,60k用于训练,10k用于测试。为了评估压缩性能,文章预先训练两个神经网络,一个是3层,另一个是5层,其中每个隐藏层包含1000个单元。然后采用不同的压缩技术来压缩这两个网络,结果如下。
【Quantized Convolutional Neural Networks for Mobile Devices】论文笔记
在Q-CNN框架中,精度和效率之间的权衡由M(子空间数)和K(每个子空间中的子码字数)控制。M由Cs’确定,M=Cs/Cs’。在上图比较中,将超参数设置为Cs’=4,K=32。
从图中可知Q-CNN(EC)方法提供了更高的压缩率,并且精确度降低程度相比其他的方法更低,特别是对于更深层次的网络(5层)。Q-CNN和Q-CNN(EC)的性能相当稳定,因为五次随机运行的标准偏差仅为0.05%。

ILSVRC-12结果

ILSVRC-12基准测试包括从1000个类别中抽取的超过一百万个训练图像,以及一个50k图像的不相交验证集。 我们使用单视图进行测试报告验证集上的top-1和top-5分类错误率。
文章在四个卷积网络上进行了测试:AlexNet,CaffeNet,CNN-S和VGG-16。
【Quantized Convolutional Neural Networks for Mobile Devices】论文笔记

量化卷积层

首先,我们量化AlexNet的第二个卷积层,这是测试阶段最耗时的层。与CPD和GBD相比较:
【Quantized Convolutional Neural Networks for Mobile Devices】论文笔记
我们发现,当加速率变大时(超过4倍),CPD和GBD的性能损失变得严重,特别是在微调之前。朴素参数量化方法也存在类似的问题。通过结合纠错的理念,即使没有微调,Q-CNN模型也可以实现高达6倍的加速,精度下降仅0.6%。在微调后续层之后,可以进一步降低精度损失。因此,最小化每层响应的估计误差比最小化网络参数的量化误差更有效。
下图展示了使用Q-CNN(EC)加速AlexNet和VGG-16中的所有卷积层。
【Quantized Convolutional Neural Networks for Mobile Devices】论文笔记

量化全连接层

首先在单个完全连接层中压缩参数。在CaffeNet中,第一个完全连接的层拥有超过3700万个参数(9216×4096),超过整个网络参数的60%。采用Q-CNN方法对该层进行量化,结果如下。
【Quantized Convolutional Neural Networks for Mobile Devices】论文笔记
量化CaffeNet中所有全连接层结果:
【Quantized Convolutional Neural Networks for Mobile Devices】论文笔记

量化整个网络

量化步骤:首先,通过误差校正量化所有卷积层,而全连接层保持不变。 其次,使用ILSVRC-12训练集对量化网络中的全连接层进行微调,以恢复分类精度。 最后,通过误差校正量化微调网络中的全连接层。 Q-CNN模型的性能:
【Quantized Convolutional Neural Networks for Mobile Devices】论文笔记
对于卷积层,让AlexNet,CaffeNet和CNN-S的Cs’=8和K=128,让VGG-16的Cs’=6和K=128,以确保对于每个网络都有大约4~6倍的加速。然后,针对不同的压缩级别改变全连接层中的超参数设置。对于前两个网络,实现了18倍压缩,前5个分类精度损失约1%。对于CNN-S,实现了5.78倍的加速和20.16倍的压缩,而Top-5分类精度下降仅为0.85%。VGG-16的结果更好:加速4.06倍和20.34倍,Top-5差错率仅增加0.58%。

移动设备上的结果

文章基于Q-CNN框架开发了一个Android应用程序,在移动设备上实现基于CNN的图像分类。 实验在配备1.8GHz Kirin 925 CPU的华为 Mate 7智能手机上进行。 测试阶段计算在单个CPU内核上执行,无需GPU加速。
【Quantized Convolutional Neural Networks for Mobile Devices】论文笔记
在上图中比较了原始和量化CNN模型的计算效率和分类准确度。 Q-CNN框架为AlexNet实现了3倍的加速,为CNN-S实现了4倍的加速。 更重要的是,存储消耗压缩了20倍,所需的运行时内存仅为原始模型的四分之一。 同时,Top-5分类准确度的损失不超过1%。

理论VS现实加速

BLAS库用于Caffe,以加速卷积和全连接层中的矩阵乘法。文章在启用或禁用BLAS两个设置下测量运行时速度,进行比较AlexNet的理论和实际加速。
【Quantized Convolutional Neural Networks for Mobile Devices】论文笔记
结果表明:BLAS开启时实际加速略低,表明Q-CNN不像CNN那样从BLAS中获益。