ResNet压缩20倍,Facebook提出新型无监督模型压缩量化方法

怎样用量化方法解决模型压缩问题?Facebook 近日提出了一个基于向量的量化方法,无需标注数据即可对 ResNet 模型进行20倍压缩,还能够获得很高的准确率。

  • 低精度训练[2]。这类方法用低bit权重,优点是可以加速推理过程,利用位操作代替复杂的逻辑操作,但是同时也会带来一个比较大的精度下降。
  • 量化。向量量化(VQ[3])和乘积量化(PQ[4])是其中的典型。这种量化方法是将原始的高维向量分解至低维笛卡尔积,然后对分解得到的低维向量做量化,这种方法的缺点是对于深度 络会产生一个笛卡尔漂移。
  • 剪枝。根据一些特定的规则去除部分冗余的连接或者结构,剪枝方法的训练时间较长,且需要剪枝和再微调的反复迭代进行。
  • 调整结构。类似 SqueezeNet[5],NASnet,shuffleNet,MobileNet等,主要依赖的 DepthWise 和 PointWise 卷积,或者通道分类和通道打乱等等。
  • 蒸馏[6-7]。这种方法通常利用大模型或模型组的知识(概率分布)来训练小模型。
  • 背景介绍–PQ 方法介绍
  • 我们知道,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表示原始 络的输出,

    表示重建输出。

  • EM求解
  • E步:分配向量至最近的聚类中心
  • M步:根据E步组成的集合,更新码本C。
  • 复杂度分析
  • 此类方法的本质上和 k-means 一致,每一列 m 个维度为 d 的子向量选择 k 个聚类中心,其算法的时间复杂度为 mkd。因此一个全连接矩阵的 PQ 的时间复杂为C_inC_out*k 。
    对于一个常见的 络结果,卷积层是必不可少的部分,接下来,笔者将介绍如何对卷积层进行压缩处理的。
    卷积层量化

  • 4D卷积分离求解
  • 全连接的权重是个4D的矩阵,首先将这个矩阵reshape成一个二维的矩阵(C_inKK)Cout。然后将转换之后的矩阵每一维分离成C_in个大小为(kk)大小的子向量。具体如图(2)所示:

    图2:4D卷积的reshape示意图
    为了保证结果的一致性,同样的将输入 X 也 reshape 一下。然后运用目标函数中量化权重。

  • 算法复杂度分析
  • 自底向上的逐层量化
  • 微调 codebook
  • 整体微调 BN 参数
  • 跟前一个过程相比较,这个过程将BN设置为训练模式,重复上述微调码本的过程。
    实验介绍

  • ImageNet实验
  • Detection实验

    但是,作为一个算法类的研究论文,笔者认为以下的方面还值得继续研究和探讨。

    1. 在训练过程中,k-means的思想是其重点,那么对于算法的复杂度分析部分,是否需要更具体的讨论。

    声明:本站部分文章内容及图片转载于互联 、内容不代表本站观点,如有内容涉及侵权,请您立即联系本站处理,非常感谢!

    (0)
    上一篇 2019年12月1日
    下一篇 2019年12月1日

    相关推荐