Rethinking the Smaller-Norm-Less-Informative Assumption in Channel Pruning of Convolution Layers简记
文章目录
参考
- 论文分享|从零入门剪枝(五)
- Rethinking the Smaller-Norm-Less-Informative Assumption in Channel Pruning of Convolution Layers论文翻译
- 代码🔗
- 原文
简记
-
摘自参考1:
- 作者主要的思想是:把 CNN 视为一个网络流,通过不同层的不同通道将信息从输入传递到输出,而非把 CNN 的计算当作不同层的单独计算的集合。作者认为CNN 的算力减少不仅要减少在单个层中计算的内容,更重要的是探索计算图中的每个通道如何对信息流做出的贡献,同时删除那些贡献较少的通道。
-
上面的这段话来自章节4.1介绍ISTA之前的比喻,我觉得还是比较形象的。
基本流程
Importance Score的选择 γ \gamma γ
-
本文采用对BN做评价,一个CBR(conv bn relu)组合的表示为:
-
分为以下两种情况:
- 当Conv后没有BN,表示为
- 那他的偏差b应当被重写为(当 γ = 0 \gamma=0 γ=0,的时候将 β \beta β和权重和吸收到偏置中):
- 这里的sum_reduced表示:
- 原有卷积可以近似成:
- 其中 ∗ γ *\gamma ∗γ也表示卷积,只不过 γ \gamma γ非0,这么做我想是为了和有BN的情况对应
- 当Conv后面有BN,表示为
- 此时我们需要更新BN里面的均值(当 γ = 0 \gamma=0 γ=0,的时候将 β \beta β和权重和吸收到均值中)
- 于是原有的卷积可以近似成
- 当Conv后没有BN,表示为
-
理解:个人感觉其实是利用了BN中的 γ \gamma γ参数(我的意思是这个 γ \gamma γ本身就是存在于BN中的可学习参数),然后利用某些方法去正则化 γ \gamma γ,而上面的没有BN的卷积只是为了统一情况。
-
而在第三方的Torch实现中,是类似learning Efficient Convolutional Networks through Network Slimming那样先正常反向传播,然后再更新BN层的参数,只不过更新参数的方式有所区别,所以感觉这两篇论文在思想上有些相似~
更新方式——ISTA
-
更新公式为:
-
-
其中 ∇ γ l t ∇γl_t ∇γlt是导数,从一个mini-batch中估计出来的, μ t \mu_t μt是学习率, λ \lambda λ是惩罚力度
-
然后它可以近似为:
-
-
-
Scaling effect
- 假设 γ 和 W \gamma 和 W γ和W以特定的倍数放缩,可以保证输出不变,但是这种放缩可以控制参数反向传播的速度(整体值越大反向传播的速度越快,反之越慢)
算法流程
-
算法按照以下流程执行:
1、计算惩罚力度 λ \lambda λ,这个在代码中是每个epoch都会更新一次
2、 γ − W \gamma-W γ−W放缩,用以控制参数更新速度
3、train,并在正常反向传播之后再对BN进行一次ISTA参数更新
4、Prune
5、后处理,移除const channel
6、 γ − W \gamma-W γ−W放缩回来,恢复原状
7、fine-tune
-
超参数设置:
1、 μ \mu μ,学习率
2、 ρ , 即 λ ρ,即\lambda ρ,即λ,惩罚力度
3、 α \alpha α,参数放缩倍数