模型压缩和加速方法总结和文献综述

本文集中了一些针对模型压缩和技巧,用于加快计算速度的论文。 如下所示,模型压缩具有不同的技术,在这里我将主要列出深度学习网络部分。
在这里插入图片描述

1. Review papers,综述文章

以下是推荐用于模型压缩和加速的几篇论文。

2. Model compression and speedup approaches,模型压缩和加速方法

上面的综述论文有一些重叠的领域,因此在本节中,我将调查分为以下几类。 除了下面的方法,Chen等还试图通过硬件加速器来加快速度。 这些方法大多数都是独立设计的,并且相互补充。 例如,转移的层和参数修剪与量化可以一起部署。 另一个例子是,模型量化和二值化可以与低秩近似一起使用,以实现进一步的压缩/加速。
在这里插入图片描述

2.1 Parameter pruning and quantization

在这里,我罗列了一些有关不同方法的经典论文。

早期工作[1]表明,网络修剪和量化可以有效降低网络复杂性并解决过度拟合问题。 在发现修剪可以将正则化带入神经网络并因此提高泛化性之后,人们对压缩DNN进行了广泛的研究。

[1] Gong et al., 2014, Compressing deep convolutional networks using vector quantization

2.1.1 Pruning
  1. 细粒修剪枝。 Han等[2]提出了一种深度压缩框架,可通过三个步骤压缩DNN:修剪,量化和霍夫曼编码。 通过使用这种方法,AlexNet可以压缩35倍而不会降低准确性。,但是,压缩模型的准确性下降。 郭等[3]提出了一个动态网络手术框架,该框架由两个操作组成:修剪和剪接。 修剪操作旨在修剪那些不重要的参数,而拼接操作旨在恢复错误修剪的连接。 他们的方法需要更少的训练时间并获得更好的压缩率。(这是一种non-structure的压缩行为,因此压缩效率不高,且在硬件上的运行效率也不高)

[2] Han et al., 2015, Deep Compression: Compressing Deep Neural Networks with Pruning, Trained Quantization and Huffman Coding
[3] Guo et al., 2016, Dynamic network surgery for efficient dnns

  1. Filter-level pruning,过滤器级别修剪。
    拟合器连接到通道号,He等[4]为每个过滤器引入了一个选择权重 β \beta β,然后在 β \beta β上添加了稀疏约束。 (其实mobileNet-v1中也有类似的行为,将通道数目缩减一些,从而进行网络瘦身)

[4] He et al., 2017, Channel Pruning for Accelerating Very Deep Neural Networks

  1. Vector-level and kernel-level prunings,向量级和内核级修剪。
    相关的工作相对较少。 Anwar定跨度修剪子向量。 Mao等[6]研究了修剪中不同的粒度级别,发现矢量级别的修剪比细粒度的修剪占用更少的存储空间,因为矢量级别的修剪需要较少的索引来指示修剪的参数。 与细粒度的修剪相比,它更像是结构性的修剪,并且对内存访问更友好,因此在硬件实现中效率更高。 这种方法更像是组织(成批型)的剪枝方法,简单有效,在硬件上更有效。

[5] Anwar et al., 2017, Structured pruning of deep convolutional neural networks
[6] Mao et al., 2017, Exploring the regularity of sparse structure in convolutional neural networks

  1. Group-level pruning,群组级别的修改。
    Lebedev等[7]提出了按组进行脑损伤的方法,该方法以按组的方式修剪体重矩阵(如下图所示)。 Wen等[8]在每层上增加了一个结构化的稀疏正则器,以减少琐碎的过滤器,通道甚至层。
    在这里插入图片描述

[7] Lebedev et al., 2016, Fast ConvNets using groupwise brain damage
[8] Wen et al. 2016, Learning structured sparsity in deep neural networks

2.1.2 Quantization,模型量化
  1. Scalar and vector quantization,标量和矢量量化。
    通过使用标量或矢量量化,原始数据可以由一个码本和带有量化中心的一组量化代码表示。 当然,量化中心的数量总是少于原始数据以实现压缩。 龚等[9]使用k-means算法压缩参数。 Wu等[10]提出使用PQ算法来同时加速和压缩卷积神经网络。 “在推断阶段,通过预先计算特征图和代码本之间的内积来建立查找表,然后只需访问查找表就可以计算出输出特征图。" (4 to 6 times speed up,huffman编码也有类似的效果)

[9] Gong et al., 2014 Compressing deep convolutional networks using vector quantization
[10] Wu et al., 2016 Quantized convolutional neural networks for mobile devices

  1. Fixed-point quantization,定位数量化
    以下是许多研究CNN性能的研究。 从8位到16位,32位,融合似乎变得更好。 但是最近,Dettmers等人[11]发现8位定点量化可以加快收敛速度。 在极端情况下,权重为+1和-1的binaryConnect方法甚至可以胜过某些网络。 Rastegari等[12]提出了二进制加权网络(BWN),这是在大型ImageNet数据集上取得良好结果的最早工作之一。点位的减少使得模型在计算时可以占用更少的空间。值得注意的是,二值网络有时甚至能表现得比某些网络更强,这也有可能是因为其相当于加入了正则化,使得模型的泛化能力更强了。

[11] Dattmers et al., 2015, 8-bit approximations for parallelism in deep learning
[12] Rastegari et al., 2016, XNORNet: ImageNet classification using binary convolutional neural networks

2.2 Low-rank approximation,低秩近似

卷积运算在深度DNN中贡献了大多数计算的大部分,因此减少卷积层将提高压缩率以及整体运算速度。例如,我们有w * h * c * n个conv内核,参数对应于内核宽度,内核高度以及输入和输出通道数。由于conv层可能具有大量的信息,因此我们不需要直接使用conv,因此可以使用SVD原理将其分解为低级矩阵。当然,有多种方法可以从不同的参数进行分解。例如,Zhang等[13]用两个滤波器组替换该滤波器:一个由d个形状为w·h·c的滤波器组成,另一个由n个形状为1×1·d的滤波器组成,其中d表示分解的等级;即,n个滤波器是前d个滤波器的线性组合。 (速度提高了3倍,但前5位错误率提高了1.66%)。但是由于分解操作,计算是昂贵的。并且我们必须逐层执行低级别,因为不同的层具有不同的信息;与之相比,还需要大量的模型重新训练才能实现收敛原始模型。
简化来说,就是如果一个网络中所含有价值的信息量并没有那么多,那么相当于参数矩阵的秩r比较小,所以原矩阵m * n可以分解成m * r和r * n矩阵(类似于SVD分解),因为r<<m or n,所以其参数量大大缩小,这也是下图所示的原理。但此法因为要每层进行分解,计算量大,而且还需要retraining以达到收敛,这些都限制了此法的广泛应用。

[13] Zhang et al., 2015 Accelerating very deep convolutional networks for classification and detection
在这里插入图片描述

2.3 Compact network design,紧凑的网络设计

直接设计轻量级网络是近年来的并行方法。 已在前文的轻量网络中介绍了轻量级网络的详细信息,例如mobileNet v1,v2,v3,shuffleNet v1,v2等。 轻量级网络的设计有以下几点趋势: 分解卷积:用更多较小的内核替换大内核; 群卷积 深度可分离卷积 瓶颈设计; 神经体系结构搜索(针对mobileNet-v3)。

2.4 Knowledge distillation (Teacher-student network),知识蒸馏

在大型数据集上训练的较大的繁琐网络(教师模型)所学的知识可以很好地概括未见数据,这些知识被转移到较小的学生模型,一个较轻的网络中[14]。 学生损失函数,L = CE(y,s)+ \ alpha CE(t,s),这里y是样本的硬标签,s是学生预测,t是教师模型预测,其使用softmax-T 作为软目标。 Remoro等。 [15]提出了FitNets,其灵感来自Hinton等人。 他们进一步扩展了构想,使学生模型更薄,更深入。 除了输出之外,还提供了由教师模型学习的中间表示,作为提高学生模型表现的提示。注意,此时学习的不仅仅是参数,更重要的是泛化能力。随后再Remoro的FitNets中更是将中间信息也作为hints提供给student model。

[14] Hinton et al., 2015, Distilling the Knowledge in a Neural Network
[15] Remoro et al., 2014, Fitnets: Hints for thin deep nets
在这里插入图片描述

2.5 Hardware accelerator,硬件加速

在这里插入图片描述

2.5.1 CPU and GPU

当训练数据非常大时,CPU可能难以构建最新的深度学习模型,它们是训练或使模型适应少量数据并部署预先构建的深度学习模型的有效选择。 在CPU上部署移动深度学习的明显优势是CPU可用于大多数平板电脑和手机。

GPU包含数千个重复的小核,因此与通用CPU相比,在矩阵上进行某些类型的重复计算效率更高。 NVIDIA GPU对机器学习工程师非常有用,因为它们提供了强大的编程平台和称为Compute Unified Device rchitecture(CUDA)的应用程序编程接口(API)。

2.5.2 FPGA

CPU是为极其通用的计算而制造的,而ASIC几乎是为特定应用而专门制造的,FPGA则位于两者之间。 基础上来讲,FPGA使用触发器电路来实现顺序逻辑功能和表查找,即使用存储电路来实现组合逻辑功能。 逻辑功能由编程存储器实现,该存储器还控制开关电路的连接,因此,一旦编程,FPGA无需显式执行逻辑操作。

2.5.3 ASIC

与FPGA相比,ASIC为设计和制造用于应用的特定芯片迈出了一步。 它有可能实现更好的SWAP,但要花很长的开发时间。 构建用于移动机器学习和人工智能的ASIC已有很长的历史。 TPU是Google Inc.开发的一种ASIC。

更多文献综述请关注知乎专栏https://zhuanlan.zhihu.com/c_1277463184048439296
或者
https://github.com/senbinyu/Computer_Vision_Literatures

  • 7
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值