怎样用量化方法解决模型压缩问题?Facebook 近日提出了一个基于向量的量化方法,无需标注数据即可对 ResNet 模型进行20倍压缩,还能够获得很高的准确率。
我们知道,PQ 算法(Product Quantization)一开始是由法国 INRIA 实验室团队提出的用于图像压缩的一种算法,通常被用于信息压缩和检索方向。PQ 算法中,以全连接层量化为例。处理全连接层时,我们关注全连接权重,忽略偏差。首先将 W 的每一列分割成 m 个连续的子向量,然后对m*的子向量学习一个码本。
对于包含 k 个聚类中心的模板 C={c1,c2,,,ck},任意 W 的列向量 Wj 可以映射为量化的版本 q(wj)= (ci1,,,cim),其中下标 i1 表示的是 wj 的第一个子向量归属的码本的索引,以此类推其余的下标。通过量化如下的目标函数(1)来学习码本。
其中,w^ 表示量化的权重。这个目标函数可以通过 k-means 来最小化。当 m=1 时,PQ等价于 VQ(Vector Quantization),当 m=Cin 时,PQ 等价于标量 k-means。最后,PQ 生成了一个 k^m 大小的隐式码本。
通过对该算法的一个简要的回顾,我们不难看出,PQ 算法的重点点在于对权重的恢复,旨在减小压缩前后的权重信息损失。那么,这个方法在使用时有何缺点呢?我们可以看看如下的图(1)。
其中,y=xW表示原始 络的输出,
表示重建输出。
此类方法的本质上和 k-means 一致,每一列 m 个维度为 d 的子向量选择 k 个聚类中心,其算法的时间复杂度为 mkd。因此一个全连接矩阵的 PQ 的时间复杂为C_inC_out*k 。
对于一个常见的 络结果,卷积层是必不可少的部分,接下来,笔者将介绍如何对卷积层进行压缩处理的。
卷积层量化
全连接的权重是个4D的矩阵,首先将这个矩阵reshape成一个二维的矩阵(C_inKK)Cout。然后将转换之后的矩阵每一维分离成C_in个大小为(kk)大小的子向量。具体如图(2)所示:
图2:4D卷积的reshape示意图
为了保证结果的一致性,同样的将输入 X 也 reshape 一下。然后运用目标函数中量化权重。
跟前一个过程相比较,这个过程将BN设置为训练模式,重复上述微调码本的过程。
实验介绍
但是,作为一个算法类的研究论文,笔者认为以下的方面还值得继续研究和探讨。
- 在训练过程中,k-means的思想是其重点,那么对于算法的复杂度分析部分,是否需要更具体的讨论。
声明:本站部分文章内容及图片转载于互联 、内容不代表本站观点,如有内容涉及侵权,请您立即联系本站处理,非常感谢!