网络剪枝
剪枝目的在于找出网络冗余连接并移除。由于全连接的连接冗余度远高于卷积层,传统的剪枝多在全连接层对冗余神经元及连接进行移除。虽然移出的神经元及连接对结果影响不大,但仍会对性能造成影响,常见方法为对剪枝后的模型进行微调,剪枝与微调交替进行,保证模型性能。
剪枝两种方法。
后剪枝:模型训练后进行剪枝。
训练时剪枝:模型边训练边剪枝。
剪枝后,权值矩阵由稠密变得稀疏。
权值量化
网络量化通过减少表示每个权重的比特数的方法来压缩神经网络。量化的思想就是对权重数值进行聚类。模型的权值参数往往以 32 位浮点数的形式保存,神经网络的参数,会占据极大的存储空间,因此,如果在存储模型参数时将 32 位浮点数量化为 8 位的定点数,可以把参数大小缩小为原来的 1/4,整个模型的大小也可以缩小为原来的 1/4,不仅如此,随着参数量化后模型的减小,网络前向运算阶段所需要的计算资源也会大大减少。
量化有效原因:
- 1.量化相当于引入噪声,但CNN对噪声不敏感。
- 位数减少后降低乘法操作,运算变快
- 3 .减少了访存开销(节能),同时所需的乘法器数目也减少(减少芯片面积)。
低秩近似
低秩分解的方法从分解矩阵运算的角度对模型计算过程进行了优化。
通过使用线性代数的方法将参数矩阵分解为一系列小矩阵的组合,使得小矩阵的组合在表达能力上与原始卷积层基本一致,这就是基于低秩分解方法的本质。
缺点:
- 低秩分解实现并不容易,且计算成本高昂;
- 目前没有特别好的卷积层实现方式,而目前研究已知,卷积神经网络计算复杂度集中在卷积层;
- 低秩近似只能逐层进行,无法执行全局参数压缩。
知识蒸馏
使用一个大型预先训练的网络(即教师网络)来训练一个更小的网络(又名学生网络)。一旦对一个繁琐笨重的网络模型进行了训练,就可以使用另外一种训练(一种蒸馏的方式),将知识从繁琐的模型转移到更适合部署的小模型。
高效网络结构
GoogleNet 使用了Inception 模块而不再是简单的堆叠网络层从而减小了计算量。ResNet 通过引入瓶颈结构取得了极好的图像识别效果。ShuffleNet 结合了群组概念和深度可分离卷积,在 ResNet 上取得了很好的加速效果。MobileNet 采用了深度可分离卷积实现了目前的最好网络压缩效果。
- 减小卷积核大小
- 减少通道数
- 减少filter数目
- 池化操作