参考文献: PRUNING FILTERS FOR EFFICIENT CONVNETS
剪枝的目的:
不降低正确率的基础上进行参数量的削减、正确率、高计算效率、小的网络大小(参数)、降低网络的推测时间。
量化:量化是对数据存储中的数据类型进行变化
蒸馏:蒸馏是迁移学习中的一种
减少参数的方法:
有从网络本身进行参数削减的如利用平均池化层、采用下采样缩小特征图的大小、或者采用一些相同感受野的缩小参数的结构如 1 3 1 结构
剪枝本生的工作方法:
1、通过某些度量值判读权重的重要性
2、或者通过判断某些神经元不需要在训练该方法只针对全连接层.
通过削减卷积层的计算量
1、近似计算、低秩乘积
2、基于FFT的卷积
3、winograd conv
4、二值化、标准化等
通过从训练完的网络移除冗余的特征图
1、利用掩布进行剪枝
2、根据较小激活的特征图
3、基于幅度对核窗进行剪枝
或者通过正则化的方法添加稀疏性、例如引入L1正则
修剪核窗和特征图:
原始情况
input: ni * hi * wi
output: (ni+1)*(hi+1)*(wi+1)
kernel: (ni+1)*k*k 一个kernel在一个通道使用
剪枝某层的核窗
计算量减少:
nik^2(hi+1)(wi+1)+(ni+2)*k^2(ni+2)*(wi+2)
剪枝流程:
关于敏感度的分析:
敏感度是指整个层的斜率、而不是对应某个通道的核参的1范数
斜率大的层剪枝容易保持ACC、小的层比较敏感、剪枝之后不容易恢复ACC
对于敏感的层采取的方法是剪枝部分或者完全跳过
实际上就是越后面的层越敏感、因为关键特征已经筛选出来 所以进行裁剪会对正确率的影响巨大.
多层剪枝的方法