当前深度神经网络模型压缩和加速方法速览

原标题:综述论文:当前深度神经网络模型压缩和加速方法速览

选自arXiv

大型神经网络具有大量的层级与结点,因此考虑如何减少它们所需要的内存与计算量就显得极为重要,特别是对于在线学习和增量学习等实时应用。此外,近来智能可穿戴设备的流行也为研究员提供了在资源(内存、CPU、能耗和带宽等)有限的便携式设备上部署深度学习应用提供了机会。
高效的深度学习方法可以显著地影响分布式系统、嵌入式设备和用于人工智能的 FPGA 等。

典型的例子是 ResNet-50[5],它有 50 层卷积网络、超过 95MB 的储存需求和计算每一张图片所需要的浮点数乘法时间。如果剪枝一些冗余的权重后,其大概能节约 75% 的参数和 50% 的计算时间。对于只有兆字节资源的手机和 FPGA 等设备,如何使用这些方法压缩模型就很重要了。

实现这个目标需要联合多个学科以寻找解决方案,包括但不限于机器学习、最优化、计算机架构、数据压缩、索引和硬件设计等。在本论文中,我们回顾了在压缩和加速深度神经网络方面的工作,它们广泛受到了深度学习社区的关注,并且近年来已经实现了很大的进展。

我们将这些方法分为四个类别:参数修剪和共享(权值)、低秩分解、迁移/压缩卷积滤波器和知识精炼等。
基于参数修剪(parameter pruning)和共享的方法关注于探索模型参数中冗余的部分,并尝试去除冗余和不重要的参数。
基于低秩分解(Low-rank factorization)技术的方法使用矩阵/张量分解以估计深层 CNN 中最具信息量的参数。
基于迁移/压缩卷积滤波器(transferred/compact convolutional filters)的方法设计了特殊结构的卷积滤波器以减少存储和计算的复杂度。
而知识精炼(knowledge distillation)则学习了一个精炼模型,即训练一个更加紧凑的神经网络以再现大型网络的输出结果。

在表 1 中,我们简单地总结了这四种方法。

通常参数修剪和分享、低秩分解和知识精炼方法可以通过全连接层和卷积层用于 DNN,它们能实现有竞争力的性能。
另外,使用迁移/压缩滤波器的方法只适用于全卷积神经网络。
低秩分解和迁移/压缩滤波器的方法提供了一种端到端的流程,并且它们很容易直接在 CPU/GPU 环境中实现。
而参数修剪和共享使用了不同的方法,如向量量化、二进制编码和系数约束以执行这些任务,通常他们需要花一些处理步骤才能达到最终的目标。


至于训练协议,基于参数修剪/共享、低秩分解的模型可以从预训练的模型中抽取或者从头开始训练,这些训练比较灵活高效。而迁移/压缩滤波器和知识精炼模型只支持从头开始训练。这些方法独立设计,互为补充。例如,迁移层和参数修剪/共享可以一起使用,模型量化/二进制化(binarization)可以和低秩分解一起使用,以实现进一步提速。论文作者详细介绍了每一类方法,包括特性、优势和缺陷等。

参数修剪和共享
根据减少冗余(信息冗余或参数空间冗余)的方式,这些技术可以进一步分为三类:模型量化和二进制化、参数共享和结构化矩阵(structural matrix)。
A. 量化和二进制化
网络量化通过减少表示每个权重所需的比特数来压缩原始网络。
Gong et al. [6] 和 Wu et al. [7] 对参数值使用 K 均值标量量化。
Vanhoucke et al. [8] 展示了 8 比特参数量化可以在准确率损失极小的同时实现大幅加速。
[9] 中的研究在基于随机修约(stochastic rounding)的 CNN 训练中使用 16 比特定点表示法(fixed-point representation),显著降低内存和浮点运算,同时分类准确率几乎没有受到损失。
[10] 提出的方法是首先修剪不重要的连接,重新训练稀疏连接的网络。
然后使用权重共享量化连接的权重,再对量化后的权重和码本(codebook)使用霍夫曼编码,以进一步降低压缩率。如图 1 所示,该方法首先通过正常的网络训练来学习连接,然后再修剪权重较小的连接,最后重新训练网络来学习剩余稀疏连接的最终权重。

缺陷:此类二元网络的准确率在处理大型 CNN 网络如 GoogleNet 时会大大降低。另一个缺陷是现有的二进制化方法都基于简单的矩阵近似,忽视了二进制化对准确率损失的影响。

图 1. [10] 中提到的三阶段压缩方法:修剪、量化(quantization)和霍夫曼编码。
修剪减少了需要编码的权重数量,量化和霍夫曼编码减少了用于对每个权重编码的比特数。
稀疏表示的元数据包含压缩率。压缩机制不会带来任何准确率损失。


B. 剪枝和共享
网络剪枝和共享已经被用于降低网络复杂度和解决过拟合问题。
有一种早期应用的剪枝方法称为偏差权重衰减(Biased Weight Decay),其中最优脑损伤(Optimal Brain Damage)和最优脑手术(Optimal Brain Surgeon)方法基于损失函数的 Hessian 矩阵减少连接的数量,他们的研究表明这种剪枝方法的精确度比基于重要性的剪枝方法(比如 weight dDecay 方法)更高。
缺陷:剪枝和共享方法存在一些潜在的问题。首先,若使用了 L1 或 L2 正则化,则剪枝方法需要更多的迭代次数才能收敛,此外,所有的剪枝方法都需要手动设置层的敏感度,即需要精调超参数,在某些应用中会显得很冗长繁重。

C. 设计结构化矩阵
如果一个 m x n 阶矩阵只需要少于 m×n 个参数来描述,就是一个结构化矩阵(structured matrix)。通常这样的结构不仅能减少内存消耗,还能通过快速的矩阵-向量乘法和梯度计算显著加快推理和训练的速度。


------低秩分解和稀疏性------

-----此处不写,请看链接----------

-----此处省略了字节-----

论文链接:https://arxiv.org/abs/1710.09282
深度模型的压缩和加速技术还处在早期阶段,目前还存在以下挑战:

大多数目前的顶尖方法都建立在设计完善的 CNN 模型的基础上,这限制了改变配置的自由度(例如,网络结构和超参数)。为了处理更加复杂的任务,还需要更加可靠的模型压缩方法。剪枝是一种压缩和加速 CNN 的有效方式。目前大多数的剪枝技术都是以减少神经元之间的连接设计的。另一方面,对通道进行剪枝可以直接减小特征映射的宽度并压缩模型。这很有效,但也存在挑战,因为减少通道会显著地改变下一层的输入。确定这类问题的解决方式同样很重要。正如之前所提到的,结构化矩阵和迁移卷积滤波器方法必须使模型具有人类先验知识,这对模型的性能和稳定性有显著的影响。研究如何控制强加先验知识的影响是很重要的。知识精炼(knowledge distillation/KD)方法有很多益处比如不需要特定的硬件或实现就能直接加速模型。开发基于 KD 的方法并探索如何提升性能仍然值得一试。

此文详细地址..此文来自互联网,若有侵权,请联系我删除!!!


---------------------------------------------------------------------------------------------

附属部分:

1.神经网络压缩:Deep Compression
点击打开链接Deep Compression
这博文,跟之前提出的,符合 参数修剪,以及共享的方式来达到 压缩模型的 目的。


################
还有一博文:说是改caffe源码,可以来压缩模型。
正确与否,自己验证。也附上链接:(github上有源码)
点击打开链接 改caffe源码
#################

2.常用网络模型结构LeNet,AlexNET,VGG,BN-inception,ResNet网络模型简介和资料整理

点击打开链接 模型资料整理


3.
a.网络结构的权重共享量化
http://blog.csdn.net/tostq/article/details/73611746

b.网络结构的修剪
http://blog.csdn.net/tostq/article/details/73611719


4.ResNet论文笔记

点击打开链接 关于ResNet


5.  SqueezeNet 模型详解
SqueezeNet主要是为了降低CNN模型参数数量而设计
设计原则(1)替换3x3的卷积kernel为1x1的卷积kernel
具体信息:
点击打开链接 SqueezeNet


-----------------------------------------------------------

以上信息,均为转载,若有侵权,请联系我,删除,谢谢!!!!!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值