深度学习模型压缩与加速,有哪些策略?
摘要:深度神经网络在人工智能的应用中,包括语音识别、计算机视觉、自然语言处理等各方面,在取得巨大成功的同时,这些深度神经网络需要巨大的计算开销和内存开销,严重阻碍了资源受限下的使用。模型压缩是对已经训练好的深度模型进行精简,进而得到一个轻量且准确
深度神经网络在人工智能的应用中,包括语音识别、计算机视觉、自然语言处理等各方面,在取得巨大成功的同时,这些深度神经网络需要巨大的计算开销和内存开销,严重阻碍了资源受限下的使用。模型压缩是对已经训练好的深度模型进行精简,进而得到一个轻量且准确率相当的网络,压缩后的网络具有更小的结构和更少的参数,可以有效降低计算和存储开销,便于部署在受限的硬件环境中。
许多网络结构中,如VGG-16网络,参数数量1亿3千多万,占用500MB空间,需要进行309亿次浮点运算才能完成一次图像识别任务。相关研究表明,并不是所有的参数都在模型中发挥作用,存在着大量冗余地节点,仅仅只有少部分(5-10%)权值参与着主要的计算,也就是说,仅仅训练小部分的权值参数就可以达到和原来网络相近的性能。
模型压缩方法主要有:
紧凑的模型设计、剪枝(Pruning)、量化(Quantization)、低秩近似/分解(low-rank Approximation/factorization)、知识蒸馏(Knowledge distillation)
模型压缩方法
描述
应用场景
方法细节
紧凑的模型设计
设计特别的卷积和来保存参数
只有卷积层
设计了特殊的结构卷积滤波器来降低存储和计算复杂度,只能从零开始训练
剪枝(Pruning)
删除对准确率影响不大的参数
卷积和全连接层
针对模型参数的冗余性,试图去除冗余和不重要的项,支持从零训练和预训练
量化(Quantization)
低秩近似/分解
(low-rank Approximation/factorization)
使用矩阵对参数进行分解估计
卷积和全连接层
使用矩阵/张量分解来估计深度学习模型的信息参数,支持从零训练和预训练
知识蒸馏(Knowledge distillation)
训练一个更紧凑的神经网络来从大的模型蒸馏知识
卷积和全连接层
通过学习一个蒸馏模型,训练一个更紧凑的神经网络来重现一个更大的网络的输出,只能从零开始训练
也能把模型压缩分为前端压缩和后端压缩:
紧凑的模型结构设计
轻量网络设计方向的主要代表论文是 MobileNet v1 / v2,ShuffleNet v1 / v2 等,其主要思想是利用 Depthwise Convolution、Pointwise Convolution、Group Convolution 等计算量更小、更分散的卷积操作代替标准卷积。也有将5x5卷积替换为两个3x3卷积、深度可分离卷积(3x3卷积替换为1*1卷积(降维作用)+3*3卷积)等轻量化设计。
分组卷积
分组卷积即将输入的feature maps分成不同的组(沿channel维度进行分组),然后对不同的组分别进行卷积操作,即每一个卷积核至于输入的feature maps的其中一组进行连接,而普通的卷积操作是与所有的feature maps进行连接计算。分组数k越多,卷积操作的总参数量和总计算量就越少(减少k倍)。然而分组卷积有一个致命的缺点就是不同分组的通道间减少了信息流通,即输出的feature maps只考虑了输入特征的部分信息,因此在实际应用的时候会在分组卷积之后进行信息融合操作,接下来主要讲两个比较经典的结构,ShuffleNet[1]和MobileNet[2]结构。
1) ShuffleNet结构:
如上图所示,图a是一般的group convolution的实现效果,其造成的问题是,输出通道只和输入的某些通道有关,导致全局信息 流通不畅,网络表达能力不足。图b就是shufflenet结构,即通过均匀排列,把group convolution后的feature map按通道进行均匀混合,这样就可以更好的获取全局信息了。 图c是操作后的等价效果图。在分组卷积的时候,每一个卷积核操作的通道数减少,所以可以大量减少计算量。
2) MobileNet结构:
如上图所示,mobilenet采用了depthwise separable convolutions的思想,采用depthwise (或叫channelwise)和1x1 pointwise的方法进行分解卷积。其中depthwise separable convolutions即对每一个通道进行卷积操作,可以看成是每组只有一个通道的分组卷积,最后使用开销较小的1x1卷积进行通道融合,可以大大减少计算量。
3、MobileNetV2:
随后谷歌提出了一种改进模型称为MobileNet V2,其提高了它在多个任务和基准、不同模型尺寸范围内的性能,并定义了一种称为SSDLite的新框架。
