之后的两篇文章是对前段时间工作的一个总结。
采用DepGrap进行结构化剪枝,剪枝方法是利用BN进行通道剪枝。
一、原理
网络结构通常会在卷积层之后插入一个 BN 层,并带有通道级缩放/移位参数。因此,我们可以直接利用 BN 层中的 γ 参数作为网络瘦身所需的缩放因子。它的巨大优势在于不会给网络增加开销。
1)如果我们在没有 BN 层的 CNN 中添加缩放层,缩放因子的值对于评估通道的重要性没有意义,因为卷积层和缩放层都是线性变换。可以通过减小缩放因子值同时放大卷积层中的权重来获得相同的结果。
2)如果我们在 BN 层之前插入一个缩放层,缩放层的缩放效果将被 BN 中的归一化过程完全抵消。
3)如果我们在 BN 层之后插入缩放层,则每个通道有两个连续的缩放因子。
BN会按通道对输入特征进行归一化,使得不同的特征处于比较接近的范围内。我们将缩放因子(从批量归一化层重用)与卷积层中的每个通道相关联,为每个通道引入一个缩放因子 γ,它与该通道的输出相乘。稀疏正则化则被施加在这些缩放因子上,以自动识别不重要的通道。缩放因子值较小(橙色)的通道将被修剪(左侧)。修剪后,我们获得紧凑模型(右侧),然后对其进行微调,以实现与正常训练的全网络相当(甚至更高)的精度。
在任何一个网络中,BN的scale参数都具备一定的绝对值大小(也就是不会过小),这意味着各个通道都具有不可忽略的重要性。解决这类问题的一种有效方法是使用稀疏训练,通过对scale参数施加正则化项来稀疏化一部分通道。