![c3b2465f42565dfd15bfb1d0ba8d7d50.png](https://img-blog.csdnimg.cn/img_convert/c3b2465f42565dfd15bfb1d0ba8d7d50.png)
本文用途仅仅是在前人经验下,自我总结,以供以后学习使用,若有错误,敬请您批评指正。
应用背景:深度学习的应用加速了计算机视觉领域的发展,但是随着模型深度的加深,也带来了高额的存储空间、计算资源消耗等问题,很难落实平台。为解决此类问题,提出压缩模型这样的方法,此方法可最大限度地减少模型对计算空间与时间的消耗。可参考:深度学习之模型压缩 - jimchen1218 - 博客园
常用方法:(从数据,模型和硬件多维度的层面来分析,压缩和加速模型的方法。)
- 压缩已有网络模型:张量分解、模型剪枝、模型量化
张量分解:
- 定义:将网络权值当满秩矩阵,可以用多个低秩矩阵来逼近该矩阵。
- 目的:降低时间复杂度。
- 优点:适合模型压缩。
- 缺点:实现并不容易,涉及计算成本高昂的分解操作,且需要大量的重新训练来达到收敛
- 对二维矩阵运算,可选择SVD分解:
- 对于多维矩阵运算,涉及到Tensor,主要是CP分解,Tucker分解,Tensor Train分解,Block Term分解。
模型剪枝:
将权重矩阵中相对不重要的权值剔除,然后再重新精修(finetune)网络进行微调。
广义修剪:
- 正则化:修改目标函数,得到一个参数较少的网络,如添加L1Norm在损失函数;
- 修剪:删除冗余的特征和参数
操作步骤:
分析神经元重要程度、移除不重要的神经元、对网络进行微调、重新执行第一步,下一轮迭代。
剪枝内容:
- 细粒度剪枝:保留模型精度,但依赖硬件设备
- 粗粒度剪枝:模型速度和大小都有效提升,但精度会大幅下降。
怎样剪枝:权重衰减法-正则化方法
剪枝方式:
1)单个权重剪枝(非结构化):任意权重被看作是单个参数并进行随机非结构化剪枝。
缺点:导致网络连接不规整,需要通过稀疏表达来减少内存占用,进而导致在前向传播时,需要大量条件判断和额外空间来标明0或非0参数位置,因此不适合并行计算。非结构化的稀疏性需要使用专门的软件计算库或者硬件。
2)核内权重剪枝/核的稀疏化(结构化):对权重的更新加以正则项进行限制,使其更加稀疏,使大部分的权值都为0。
3)卷积核/特征图/通道剪枝(结构化):减去第i层的filter,进而减去第i层产生的部分特征图和第i+1层的部分kernel。kernel粒度的显著性度量可以采用kernel的权重和来判断,采用Filter的权重和来判断。
4)中间隐层剪枝:删除一些层,改变网络结构。
模型量化:
一般,神经网络模型的参数都是32bit长度的浮点数表示。很多时侯不需要这么高的精度,可以通过量化,用如用8bit来表示。通过牺牲精度来降低每个权值所需要的空间。SGD所需要的精度仅为6-8bit,合理的量化可保证精度的情况下减小模型的存储体积。根据量化方法不同,可分为2值量化,3值量化,多值量化。
量化方式:
1)二值量化:将权值矩阵中的单精度浮点数用两个值来表示。一般使用符号函数或加入线性化的符号函数来近似。
2)三值量化:改进的二值量化,在二值网络函数(-1,+1)的基础上,显式地增加0这个量化值。
3)多值量化:使用8big或16bit定点数来表示。
2. 构建新的小型网络:知识蒸馏、紧凑网络设计
迁移学习/知识蒸馏:
(采用预训练好的复杂模型的输出作为监督信号去训练另外一个简单的网络。)
- 迁移学习:将一个模型的性能迁移到另一个模型上
- 网络精馏:在同一个域上迁移学习的一种特例
紧凑网络设计:
1、MobileNet系列:采用深度可分离卷积来构建卷积。
Efficient Convolutional Neural Networks for Mobile Vision Applications:借鉴factorized convolution的思想,将普通卷积操作分成两部分
- Depthwise Convolution:每个卷积核滤波器只针对特定的输入通道进行卷积操作
- Pointwise Convolution:采用1x1大小的卷积核将depthwise convolution层的多通道输出进行结合
2、ShuffleNet:
ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices:基于MobileNet的group思想,将卷积操作限制到特定的输入通道。而与之不同的是,ShuffleNet将输入的group进行打散,从而保证每个卷积核的感受野能够分散到不同group的输入中,增加了模型的学习能力。
3、SqueezeNet:
[2016,Iandola,]SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and <0.5MB model size
- 将3x3卷积核替换为1x1卷积核(1个1x1卷积核的参数是3x3卷积核参数的1/9,这一改动理论上可以将模型尺寸压缩9倍)
- 减小输入到3x3卷积核的输入通道数
- 尽可能的将降采样放在网络后面的层中
- 借鉴ResNet思想,对原始网络结构做了修改,增加了旁路分支,将分类精度提升了约3%。
- 作者提出了一个类似inception的网络单元结构,取名为fire module。一个fire module 包含一个squeeze 卷积层(只包含1x1卷积核)和一个expand卷积层(包含1x1和3x3卷积核)。其中,squeeze层借鉴了inception的思想,利用1x1卷积核来降低输入到expand层中3x3卷积核的输入通道数。
3、计算加速(针对硬件)
Faster CNNs with direct sparse convolutions and guided pruning:提出一种基于向量形式的乘法,实现密集矩阵与稀疏矩阵之间的高效乘法运算。
[2017,ICML]MEC: Memory-efficient Convolution for Deep Neural Network:内存利用率高且速度较快的卷积计算方法
4、对数据进行变换(针对数据源)
WAE-Learning a Wavelet-like Auto-Encoder to Accelerate Deep Neural Networks:WAE借助小波分解得思想,将原图分解成两个低分辨率图像,以达到网络加速的目。
关于知识蒸馏详细介绍可看:
yuanCruise:知识蒸馏 | 模型压缩利器_良心总结zhuanlan.zhihu.com![4dcc14b5e218e8671fd3ecff688c720f.png](https://img-blog.csdnimg.cn/img_convert/4dcc14b5e218e8671fd3ecff688c720f.png)
参考文献:
深度学习之模型压缩 - jimchen1218 - 博客园www.cnblogs.com![25f7ea4b7cf9f473201c73900be00dc8.png](https://img-blog.csdnimg.cn/img_convert/25f7ea4b7cf9f473201c73900be00dc8.png)