论文笔记 Channel Pruning for Accelerating Very Deep Neural Networks

Channel Pruning for Accelerating Very Deep Neural Networks


Introduction

  • 本文的方法针对一个已训练好的CNN,交替地运行两步完成对每个卷积层进行剪枝,具体为L1正则化+最小平方重构(本质为线性回归)

  • 对网络结构精简主要有三种方法,如图1所示:

    1. 张量因式分解(如SVD)。将一个卷积层分解成多个。缺点:无法减少特征图宽度(通道数)。并且无法对卷积核尺寸为1X1的卷积层分解。
    2. 稀疏连接(非结构化剪枝),具体为筛去绝对值较小的权重。缺点:代码难实现。
    3. channel pruning:把网络结构变瘦,即宽度变窄。可能存在的问题:移除某些通道可能会对更深层的卷积层的输入产生较大影响。这也是本文提到要计算accumulated error的原因。
      在这里插入图片描述
  • 本文方法:不去分析卷积核权重的重要性,而是利用特征图之间的冗余性进行通道剪枝。

3. Approach

  • 假设对宽度为c的特征图进行通道剪枝,设batch_size为N,kh×kwk_h \times k_wkh×kw为卷积核尺寸,c为输入通道数,n为输出通道数。从输入特征图采样(如图2所示,截取蓝色的一小块正方形),得到X,其尺寸为N×c×kh×kwN \times c\times k_h\times k_wN×c×kh×kw, 卷积层对应的权重矩阵为WWW,尺寸为n×c×kh×kwn \times c\times k_h\times k_wn×c×kh×kw,因此X经过卷积层卷积后,得到输出Y,尺寸为N×n×1N \times n \times 1N×n×1(1可以省略)。
    现在网络经过了修剪,我们需要将该层的输出和修剪之前的输出保持一致,通过优化以下重建损失函数,假设我们现在需要将通道数减少至c′c'c
    argminβ,w12N∣∣Y−∑i=1cβiXiWiT∣∣F2 \begin{equation} \mathop{argmin} \limits_{\beta, w} \frac{1}{2N} \Bigg|\Bigg| Y- \sum\limits_{i=1}^c{\beta_i X_i W_i^T} \Bigg|\Bigg|_F^2 \end{equation} β,wargmin2N1Yi=1cβiXiWiTF2
    此时限制条件为∣∣β∣∣0≤c′||\beta||_0 \le c'∣∣β0c。其中∣∣⋅∣∣F||·||_F∣∣F为F范数,表示矩阵所有元素的平方和的平方根。∣∣⋅∣∣0||·||_0∣∣0表示第0范数。XiX_iXi为输入XXX在第i个通道的分量,shape为N×kh×kwN \times k_h \times k_wN×kh×kwβ\betaβ为系数向量,βi\beta_iβi为对应通道的系数。βi=0\beta_i = 0βi=0 表示改通道被修剪。WiW_iWi尺寸为n×kh×kwn \times k_h \times k_wn×kh×kwc′c'c由人为设定,可以根据需要的加速比计算。
    在这里插入图片描述

3.1 Formulation

3.1.1 Optimization
  • 解决eq.1中的L0范数约束是一个NP-hard问题,可以将其放宽至L1约束,可以分为两步,通道选择和特征图重建:
  1. 基于L1正则化,选出重要的channel,去除冗余的通道。
  2. 使用剩下的channels,根据线性最小平方误差重建输出。
    argminβ,w12N∣∣Y−∑i=1cβiXiWiT∣∣F2+λ∣∣β∣∣1 \begin{equation} \mathop{argmin} \limits_{\beta, w} \frac{1}{2N} \Bigg|\Bigg| Y- \sum\limits_{i=1}^c{\beta_i X_i W_i^T} \Bigg|\Bigg|_F^2 + \lambda||\beta||_1 \end{equation} β,wargmin2N1Yi=1cβiXiWiTF2+λ∣∣β1
    其中∣∣β∣∣0≤c′,∀i∣∣Wi∣∣F=1||\beta||_0 \le c', \forall_i\big|\big|W_i\big|\big|_F = 1∣∣β0c,iWiF=1λ\lambdaλ为惩罚系数,引入L1正则化会导致更多的βi\beta_iβi为0,同时限制∣∣Wi∣∣F=1\big|\big|W_i\big|\big|_F = 1WiF=1防止出现trivial solution。
  • 实际操作过程:交替地执行如下两步。
  1. 第一步。固定WWW,求β\betaβ,选择重要的channel。WiW_iWi相当于卷积核的权重, 此时基于L1正则化,求出β\betaβ
    β^LASSO(λ)=argminβ12N∣∣Y−∑i=1cβiZi∣∣F2+λ∣∣β∣∣1 \hat{\beta}^{LASSO}(\lambda) = \mathop{argmin} \limits_{\beta} \frac{1}{2N} \Bigg|\Bigg| Y- \sum\limits_{i=1}^c{\beta_i Z_i} \Bigg|\Bigg|_F^2 + \lambda||\beta||_1 β^LASSO(λ)=βargmin2N1Yi=1cβiZiF2+λ∣∣β1
    此处的Zi=XiWiTZ_i=X_iW_i^TZi=XiWiT,尺寸为N×nN \times nN×n,当βi=0\beta_i=0βi=0时,第i个通道被忽略。
  2. 第二步,固定β\betaβ,求WWW。相当于对模型修建后的微调过程:
    argminW′∣∣Y−X′(W′)T∣∣F2 \mathop{argmin} \limits_{W'} \Big|\Big| Y- {X'(W')^T} \Big|\Big|_F^2 WargminYX(W)TF2
    其中X′=[β1X1,β2X2,...,βcXc],W′=[β1W1,β2W2,...,βcWc]。X'=[\beta_1X_1, \beta_2X_2, ...,\beta_cX_c],W'=[\beta_1W_1, \beta_2W_2, ...,\beta_cW_c]。X=[β1X1,β2X2,...,βcXc]W=[β1W1,β2W2,...,βcWc]获得W′W'W后,令βi=βi∣∣Wi∣∣F,Wi=Wi÷∣∣Wi∣∣F\beta_i=\beta_i||W_i||_F,W_i = W_i \div ||W_i||_Fβi=βi∣∣WiFWi=Wi÷∣∣WiF,以满足约束条件∀i∣∣Wi∣∣F=1\forall_i\big|\big|W_i\big|\big|_F = 1iWiF=1
  • 初始输入为λ=0\lambda = 0λ=0,随后逐渐增加λ\lambdaλ值,直至∣∣β∣∣0||\beta||_0∣∣β0趋于稳定,得到最终的W=[β1W1,β2W2,...,βcWc]W = [\beta_1W_1,\beta_2W_2,...,\beta_cW_c]W=[β1W1,β2W2,...,βcWc]
  • 实际过程中发现,交替地执行算法非常耗时,可以将第一步执行多次,当∣∣β0≤c′∣∣||\beta_0 \le c'||∣∣β0c∣∣,然后仅执行第二步一次,结果显示该方式与2-step iteration方法的结果近似。

3.2 Whole Model Pruning

  • 从浅到深,依次对每一层裁剪通道数,在顺序剪枝地过程当中可以计算累计error。具体后文会介绍。

3.3 修剪多分支的网络。以resnet为例。

  • 以上方法无法对多分支网络使用,因为对一个分支的输入feature map修剪之后,会影响另一个分支(因为共用同一个输入,修剪了一个会影响另一个)。
  • 我们以resnet网络为例。一个resnet block当中的第一层和输出层(最后一层)无法通过以上方法修剪,如下图所示。第一层是因为residual branch和shortcut branch共用了一个输入c0c_0c0;而最后一层是因为shortcut branch是没有参数的,无法通过eq1给出的方式来做剪枝,并且有shortcut的存在,经过residual block内部每一层的剪枝会产生累计error,很难恢复。因此作者针对两种情况做了相应调整。
    在这里插入图片描述
3.3.1 针对residual block的最后一层
  • 如图三右侧所示,Y2,Y1Y_2, Y_1Y2,Y1分别为剪枝前residual branch,shortcut branch输出的特征图,Y′Y'Y表示为剪枝后的特征图,因为shortcut没有参数,不能根据eq1重建输出特征图,因此将优化目标从Y2Y_2Y2改为Y2+Y1−Y1′Y_2 + Y_1 - Y'_1Y2+Y1Y1,相当于额外弥补了剪枝后shortcut branch损失的通道信息。
3.3.2 针对residual block的第一层
  • 不能直接对输入的特征图剪枝,因为被shortcut branch共享。
  • 可以在经过第一个卷积层之前,加一个sampling层,相当于筛选重要的channels。然后再根据eq1做剪枝。
  • 作者提出,也可以采用卷积核相关的剪枝方式解决该问题。直接对每个卷积核应用Eq1, 每个卷积层会选择更具有代表意义的通道。经过fine tuning后,结果与原始的channel pruning类似,但是得到的卷积层"irregular"(正常情况下每个卷积核是对输入的每个通道都做卷积操作),需要特殊的函数库支持。

问题:

  1. 什么是Inference-time approach for channel pruning?
  2. “Because of these differences, our approach could be applied at inference time.” 这句话什么意思?
  3. 为什么该方法能统计accumulated error?因为剪枝是从浅到深进行,修剪深层的feature map时,浅层的已经修建完毕,因此浅层剪枝产生的error会传递到深层当中去。

词语释义

bifurcate 分支,形成两条分支
formulation 规划,制定
trivial solution:指解为0或者空集
L0范数:非零元素的个数
L1范数:元素绝对值之和
L2范数:元素平方和的平方根


符号释义

参考连接

https://owen-liuyuxuan.github.io/papers_reading_sharing.github.io/The_theory/Channel_Pruning_for_Accelerating_Very_Deep_Neural_Networks/
https://blog.csdn.net/qq_30615903/article/details/102924356

文献标注

ry_Deep_Neural_Networks/
https://blog.csdn.net/qq_30615903/article/details/102924356

文献标注

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值