深度神经网络的压缩与加速综述

引用本文:

[如本文对读者朋友们的研究有所帮助,请添加如下参考文献]

纪荣嵘,林绍辉,晁飞,吴永坚,黄飞跃. 深度神经网络压缩与加速综述[J]. 计算机研究与发展, 2018, 55(9): 1871-1888.
Ji Rongrong,Lin Shaohui,Chao Fei,Wu Yongjian,Huang Feiyue. Deep Neural Network Compression and Acceleration: A Review. Journal of Computer Research and Development, 2018, 55(9): 1871-1888.

1.原因

对于深度神经网络而言,其无论参数、计算量、数据存储或者说是网络深度与宽度等等都会限制深度神经网络在嵌入式、便携式工具上的拓展应用

2.加速、压缩任务

2.1 卷积层:计算耗时长,可以通过权值共享策略进行网络存储压缩,涉及到的是网络的计算加速

2.2 全连接层:因为是神经元之间的全连接,所以其网络参数尤其的多,因此涉及到的是网络模型的内存压缩

而这两项任务设计到很多学类门课:机器学习、参数优化、计算架构、数据压缩、索引、硬件加速

3.主流方法

深度神经网络的压缩与加速的主要方法有:参数剪枝、参数共享、低秩分解、紧性卷积核设计、知识蒸馏

参数剪枝:主要通过设计判断参数重要与否的准则,移除冗余的参数.可用于卷积层和全连接层,需要逐层逐步进行网络压缩。

参数共享:主要探索模型参数的冗余性,利用Hash或量化等技术对权值进行压缩.可用于卷积层和全连接层,需要逐层逐步进行网络压缩。既能适应模型重训练,也能够通过预训练网路产生作用。

低秩分解:利用矩阵或张量分解技术估计并分解深度模型中的原始卷积核.可用于卷积层和全连接层,能够在CPU/GPU的条件下,实现端对端的训练。既能适应模型重训练,也能够通过预训练网路产生作用。

紧性卷积核:紧性卷积核的设计主要通过设计特殊的结构化卷积核或紧性卷积计算单元,减少模型的存储与计算复杂度.并且该种方法只能够用于卷积核之外。能够在CPU/GPU的条件下,实现端对端的训练。只支持重训练。

知识蒸馏:主要利用大型网络的知识,并将其知识迁移到紧性蒸馏的模型中.可用于卷积层和全连接层,只支持重训练。

4.深度神经网络的压缩与加速算法

4.1 参数剪枝

4.1.1 结构化方法

网络/参数剪枝是通过对已有的训练好的深度网络模型移除冗余的、信息量少的权值,从而减少网络模型的参数,进而加速模型的计算和压缩模型的存储空间.不仅如此,通过剪枝网络,能防止模型过拟合.以是否一次性删除整个节点或滤波为依据,参数剪枝工作可细分成非结构化剪枝和结构化剪枝.非结构化剪枝考虑每个滤波的每个元素,删除滤波中元素为0的参数,而结构化剪枝直接考虑删除整个滤波结构化信息.

LeCun:最优化脑损失(optimal brain damage):这种学习方式模仿了哺乳动物的生物学习过程,通过寻找最小激活的突触链接,然后在突触删减(synaptic pruning)过程中大大减少连接个数.

Hassibi和Stork提出了最优化脑手术(optimal brain surgeon)剪枝策略,利用反向传播计算权值的二阶偏导信息(hessian矩阵),同时利用此矩阵构建每个权值的显著性得分,从而删除低显著性的权值.

Srinivas等人提出了不依赖于训练数据(data-free pruning)和反向传播,直接构建并排序权重的显著性矩阵,删除不显著冗余的节点.由于不依赖于训练数据及后向传播计算梯度信息,因此该网络剪枝过程较为快速.

韩松等人提出了一种基于低值连接的删除策略(low-weight con-nection pruning),该剪枝方法包括3个阶段,即训练连接、删除连接、重训练权值.第1阶段通过正常训练,学习重要的连接;第2阶段通过计算权值矩阵的范数,删除节点权重的范数值小于指定的阑值的连接,将原始的密集网络(dense network)变成稀疏网络;第3阶段通过重新训练稀疏网络,恢复网络的识别精度.

以上剪枝方法通常引入非结构化的稀疏连接,在计算过程中会引起不规则的内存获取,相反会影响网络的计算效率.

4.1.2 非结构化方法

近几年,基于结构化剪枝的深度网络的压缩方法陆续被提出,克服了非结构化稀疏连接导致的无法加速问题,其核心思想依靠滤波显著性准则(即鉴定最不重要的滤波的准则),从而直接删除显著性滤波,加速网络的计算.

2016年,Lebedev等人提出在传统的深度模型的损失函数中加入结构化的稀疏项,利用随机梯度下降法学习结构化稀疏的损失函数,并将小于给定阈值的滤波赋值为0,从而测试阶段直接删除值为0的整个卷积滤波.

温伟等人通过对深度神经网络的滤波、通道、滤波形状、网络层数(filters,  channels,  filter shapes,layer depth)的正则化限制加入到损失函数中,利用结构化稀疏学习的方式,学习结构化的卷积滤波.

Zhou等人将结构化稀疏的限制加入目标函数中,并利用前向后项分裂(forward-backward splitting)方法解决结构稀疏化限制的优化问题,并在训练过程中直接决定网络节点的个数与冗余的节点.

另外,近年来,直接测量滤波的范数值直接判断滤波的显著性也相继被提出,例如:直接删除给定当前层最小L1范数的滤波,即移除相应的特征图(feature map),然后下一层的卷积滤波的通道数也相应地减少,最后通过重训练的方式提高删减后模型的识别精度.由于大量的ReLU非线性激活函数存在于主流的深度网络中,使得输出特征图高度稀疏化。

Hu等人利用此特点,计算每个滤波所对应输出特征图的非零比例,作为判断滤波重要与否的标准.NVDIA公司Molchanov等人提出一种基于全局搜索显著性滤波的策略,对需要删除的滤波用0值代替,并对目标函数进行泰勒公式展开(taylor expansion),判断使目标函数变换最小的滤波为显著滤波.通过卷积计算方式,可以建立当前层的滤波与下一层的卷积滤波的输入通道存在一一对应关系,利用此特点

Luo等人探索下一层卷积核的输入通道重要性,代替直接考虑当前层滤波,并建立一个有效的通道选择优化函数,从而删除冗余的通道以及相应的当前层的滤波.以上基于结构化剪枝的深度网络的压缩方法,通过删除卷积层的整个滤波,没有引入其他额外的数据类型存储,从而直接压缩网络的同时加速整个网络的计算.

参数剪枝的缺点在于,简单利用非结构化剪枝,无法加速稀疏化矩阵计算.虽然近年来,相关软件与硬件口已被利用进行加速计算,但依靠软硬件的非结构化剪枝方案还无法在所有深度学习框架下使用,另外硬件的依赖性会使得模型的使用成本提高.结构化剪枝不依赖软硬件的支持,且能很好地嵌入目前主流的深度学习框架,但逐层固定的剪枝方式(layer一by一layer fixed manner)导致了网络压缩的低自适应能力、效率和效果.此外,上述的剪枝策略需要手动判断每层的敏感性,因此需要大量的精力分析及逐层微调(fine-tuning).

4.2 参数共享

参数共享是通过设计一种映射将多个参数共享同一个数据,近年来,量化作为参数共享的最直接表现形式,得到广泛的应用.此外,Hash函数和结构化线性映射也可作为参数共享的表现形式.下面这个表格将会不定时更新。

参数共享算法
提出者 算法 算法思想
     
     

本文作者从大量的文献中总结了参数共享理念的发展历程和存在的不足,文中皆有所体现,详看原文,此处省略。

4.3 低秩分解

其核心是利用矩阵或者向量分解技术估计并分解深度模型中的原始卷积核,本文作者从大量的文献中总结了参数共享理念的发展历程和存在的不足,文中皆有所体现,详看原文,此处省略。

4.4 紧性卷积核

将深度神经网络的卷积核使用紧性的滤波器代替,有效压缩深度网络。

4.5 知识蒸馏

通过软Softmax变换学习教师输出的类别分布,并将大型教师模型的知识精炼成较小的模型。

4.6 其他方法

  1. 全局均匀池化代替传统的3层全连接层
  2. 基于卷积的快速傅里叶变换
  3. 使用Winograd算法
  4. 随机空间采样池化

5.数据集

5.1 评测标准

主要的测评标准是失真率和加速比,假设r为压缩和加速前的内存消耗或时间消耗,r*为压缩和加速前的内存消耗或时间消耗,则此时的失真率C和加速比分别为:

C=\frac{r}{r*} 和S=\frac{r}{r*}

5.2 结果比较

6.压缩和加速算法和模型选择

在该模块,本文详尽阐述了各种压缩和加速的算法和模型的选择,本文在此省略。

猜你喜欢

转载自blog.csdn.net/AliceLeeHX/article/details/82800359