本章内容
- 文章概况
- 问题来源
- 方法
- 实验结果
- 总结
文章概况
这是一篇2017年发表于ICCV的一篇论文。该论文指出深度卷积神经网络的应用受到了高计算成本的阻碍,并提出一种修剪模型结构的方式用于降低这种成本,使得模型大小减小、运行内存减小且不降低精度的情况减少参数量。
论文链接
代码链接
问题来源
对于卷积神经网络,在模型定义的时候我们会设计每一层的特征图数目(64、128……),然而如此大量的特征图是否每一个都对模型起到了关键的作用?如果有,应该用什么方法来分辨?
方法
在该文章中,作者利用BN(Batch Normalization)中的缩放因子γ作为每一个特征图的权重,从而代表特征图的重要性。
首先需要回顾一下BN的作用。为了防止原始数据经由权重和偏置的计算作用后,出现数据盲目扩大而导致的大量参数位于激活函数的饱和部分(下图蓝色椭圆区域)并梯度消失的情况。因此使用BN将数据保持在正态分布下,使得这些参数更多地位于激活函数的中间灵敏区域(下图红色方框区域)。
然而红色方框的区域虽然灵敏但近似线性,而非线性的网络参数计算方式才具有更好的表达能力,因此BN中对该部分做了优化,如下图所示,由网络自己学习γ和β,强制其进行非线性变化。
上式中,最能影响y的大小变化的便是γ,同时具备自训练、无额外参数引入的优点,由此,作者便想到了将γ作为通道重要性的衡量指标。
根据γ的对比,假设需要筛选掉γ较小的30%数目的通道(30%处为0.1),对小于0.1的特征图所在的γ和β赋值为0,这样就表明该处特征图置零,不参与后续计算。如下图,屏蔽橙色特征图的数据,模型精简至仅剩蓝色特征图。
随后,为了确保γ们的数值尽量不趋于一致,需要做稀疏化处理,作者在γ的计算中引入l1正则项,l1相比l2在0处的结果更干脆利落直接为0,而l2一直趋近于0不如l1的稀疏化效果好。
网络瘦身主要步骤如上图所示:初始化、用通道稀疏正则项的方式训练、用小比例因子修剪通道、修剪后的网络微调,最终形成紧凑型网络。
实验结果
上图展示了三种任务下的实验对比,作者使用多种百分比的剪枝比例,实验表明,剪枝后效果有所提升,模型参数量和模型计算量有显著减少。
上图对比了四种训练方式的结果。紫色表示常规训练结果;绿色表示添加了稀疏化的训练结果;红色表示剪枝瘦身结果;蓝色表示剪枝并微调后的结果。可以看出在剪枝比例不超过一半时,四者的效果依次提升,当剪枝过多时,红色和蓝色曲线效果显著降低。
总结
模型瘦身效果和性能都很显著,很大程度上解决了模型过大参数量过多计算复杂的痛点,因此在实际的应用部署中具有很高的价值。需要注意的是,该方法是基于BN实现的,因此需要以BN层的存在为前提。