1 参考文献:
[1]韦越,陈世超,朱凤华,熊刚.基于稀疏卷积神经网络的模型剪枝方法[J/OL].计算机工程:1-8[2021-01-10].https://doi.org/10.19678/j.issn.1000-3428.0059375.
2 主要思想:
通过对模型进行稀疏正则化训练,得到参数较为稀疏的深度神经网络模型,并结合卷积层和 BN层的稀疏性进行结构化剪枝,去除冗余的滤波器。
3 背景:
神经网络的过度参数化(一文献表明模型中仅5%的网络参数可预测剩余参数)
模型剪枝:剪除不重要参数,压缩模型体积。核心问题:评价模型参数的重要性。
模型稀疏化:训练过程中,对参数的优化增加限制腰间使其稀疏化。
问题引出:能否将模型剪枝与模型稀疏化结合,一方面提升模型剪枝精度,一方面提升模型运算效率。
4 相关工作:
(1)结构化剪枝相比非结构化剪枝,不需要特殊的硬件设备和辅助工具,可直接部署到现有硬件设备和深度学习框架中。
(2)(1)中两者均需评价参数重要性。但仅依据参数自身进行重要性评价存在偏差。
(3)如何稀疏神经网络?0权重重要性低于非0权重,稀疏网络含大量0权重。采用稀疏正则化方法。
5 实现方法:
实现步骤:(1)对模型的卷积层和BN层进行L1正则化训练获得权值稀疏的神经网络。(2)依据滤波器稀疏性和BN层特征缩放系数,判断重要性。(3)结构化剪枝稀疏滤波器及对应连接,最后微调模型恢复精度。
步骤1:稀疏正则化训练
在损失函数中添加惩罚因子,对卷积层的权重和BN层的缩放系数进行约束, λ \lambda λ越大,约束越大,约束项 λ R ( w ) \lambda R(w) λR(w).采用L1范数。对于卷积核, R ( w ) = ∑ i = 1 m ∣ w i ∣ R(w)=\sum_{i=1}^m |w_i| R(w)=∑i=1m∣wi∣,对于缩放系数 α \alpha α, R ( λ ) = ∣ α ∣ R(\lambda)=|\alpha| R(λ)=∣α∣
目的在于减少卷积层滤波器数量,减小BN层特征缩放系数。 α \alpha α代表其对应通道的激活程度。BN层运算表示为 Z o u t = α Z i n − μ c σ c + ϵ + β Z_{out}=\alpha\frac{Z_{in}-\mu_c} {\sqrt{\sigma_c+\epsilon}}+\beta Zout=ασc+ϵZin−μc+β
步骤2:结构化剪枝
首先对滤波器绝对值求和
E x = ∑ j k ∣ W j ∣ E_x=\sum_{j}^k |W_j| Ex=∑jk∣Wj∣
Ex表示滤波器 x 的权重绝对值和, k 表示滤波器 x 中的卷积核的数目, 表示滤波器 x 中的第 j个卷积核, ()表示求卷积核的 L1 范数
然后结合缩放系数和Ex做重要性判断
m i = α i ∗ E i m_i=\alpha_i*E_i mi=αi∗Ei
再根据预设剪枝率P对m按升序排序,取P位置的数输出,P为百分率。
θ = s o r t p ( M ) \theta=sort_p(M) θ=sortp(M)
θ \theta θ为剪枝阈值。
最后微调模型。
6 实验结果:
在 VGGNet、 ResNet 和 DenseNet 模型中采用该算法,并在 CIFAR-10、 CIFAR-100 和SVHN 数据集上进行实验。
在精度损失 1%以内的前提下,将模型的参数量和 FLOPs 减少 40%~80%。 在 SVHN 数据集上, VGG-16 和 DenseNet-40 的分别压缩了 9 倍和 5 倍, 并且不影响模型的性能。
同时仿真了正则化系数 λ \lambda λ的影响,不同卷积层的剪枝效果。
7 几点想法:
1.如何实现模型剪枝减少滤波器数量?
2.最后的微调是怎么微调?
3.稀疏网络的前后对比?
4.为什么选取L1范数做稀疏正则化?可不可以尝试其他方法?
5.能否应用到调制信号识别?(have a try)