Paper Reading||Filter Pre-pruning for Improved Fine-tuning of Quantized Deep Neural Networks

论文(ICLR 2021):https://arxiv.org/abs/2011.06751v2
暂无源码

Motivation

  1. Conv层往往和BN层同时出现,实际加速推理时还必须对BN层参数进行量化,然后利用“Fold”操作将BN层参数嵌入到Conv层中。但是这样做可能会增加新的Weight分布的动态范围,增大量化误差。作者认为应该先“Fold”,然后再对得到的新的Weight进行统一量化,这样就能降低量化误差。
  2. 一些权重对于学习都是不必要的,或者实际上干扰了学习过程,干扰了量化DNN的微调。那么可以通过某些手段(比如Pruning)来去除这些权重,以减少干扰。

  为了更详细地说明Motivation 1,作者给出了卷积和BN的有关计算公式。首先是卷积方程的描述:
在这里插入图片描述
  其中 C ( o , j , k ) C_{(o,j,k)} C(o,j,k)为第 o o o个Output channel下的Feature矩阵的第 j j j k k k列像素点, w ( o , i , u , v ) w_{(o,i,u,v)} w(o,i,u,v)为第 o o o个Output channel下的第 i i i个Input channel下的Weight矩阵的第 u u u v v v列的权值点, x ( i , j + u , k + v ) x_{(i,j+u,k+v)} x(i,j+u,k+v)为第 i i i个Input channel下的Data矩阵的第 j + u j+u j+u k + v k+v k+v列的像素点。 b ( o ) b_{(o)} b(o)为第 o o o个Output channel下的Bias。为了简便,接下来用 C ( o ) = ( c ( o , 1 ) , . . . , c ( o , N ) ) C_{(o)}=(c_{(o,1)},...,c_{(o,N)}) C(o)=(c(o,1),...,c(o,N))表示 C ( o , j , k ) C_{(o,j,k)} C(o,j,k),用 w ( o , i ) w_{(o,i)} w(o,i)表示 w ( o , i , u , v ) w_{(o,i,u,v)} w(o,i,u,v)

  进一步地,BN的计算公式为:
在这里插入图片描述在这里插入图片描述
  其中 B ( o ) B_{(o)} B(o)是第 o o o个BN输出特征。 μ ( o ) \mu_{(o)} μ(o) ( σ ( o ) ) 2 (\sigma_{(o)})^2 (σ(o))2分别为Training Mean和Training Variance,由公式 (3) (4)给出。 γ ( o ) \gamma_{(o)} γ(o) β ( o ) \beta_{(o)} β(o)分别为BN层的缩放因子和位移因子。

  在用模型进行推理时,会将公式 (1) 代入公式 (2)中,实现“Fold”操作,将BN折叠进卷积操作中,得到新的卷积权值 w ^ ( o , i , u , v ) \hat{w}_{(o,i,u,v)} w^(o,i,u,v)和偏差 b ^ ( o ) \hat{b}_{(o)} b^(o)
在这里插入图片描述
在这里插入图片描述
  其中 M ( o ) ( τ ) M_{(o)}^{(\tau)} M(o)(τ) V ( o ) ( τ ) V_{(o)}^{(\tau)} V(o)(τ)为BN在推理时的Running Mean和Running Variance。 τ \tau τ为迭代索引(有时文章会省略)。 ρ \rho ρ为BN的超参数,有 0 < ρ < 1 0 < \rho < 1 0<ρ<1

  至此,根据公式(5) (6)可知,当Conv和BN分开量化并“Fold”到一起时,新的 w ^ \hat{w} w^ b ^ \hat{b} b^的量化误差会明显变化甚至增大,远不如先“Fold”再做一次量化来得稳定。

  为了对Motivation 2 做详细阐述,作者又进一步分析原因。当第 L L L个BN层的第 c c c个通道的Running Variance在多次迭代 τ \tau τ后仍近似为0时,即:
在这里插入图片描述
  那么这就会使得公式 (8) 中的左边的项和右边的第一项都近似等于零。那么自然在公式 (8)中就有 ( σ ( o ) ) 2 ≃ 0 (\sigma_{(o)})^2\simeq0 (σ(o))20。也就是说在公式 (4) 中会得到:
在这里插入图片描述
  接着由公式 (2) (10) 可得:
在这里插入图片描述  即此时BN的输出为常量。那么在这种条件下,公式 (1) 的卷积操作可以重写为:
在这里插入图片描述
  而公式 (14) 的Bias的迭代更新公式有:
在这里插入图片描述
  其中 A c t ( ⋅ ) Act(·) Act()表示激活函数作用, τ \tau τ是迭代索引, Δ \Delta Δ为Gradient提供的更新量。在量化的步骤中,由于公式 (14) 的右边第一项、第二项都被量化了,得到的量化误差往往比只量化公式 (14)整体时更大。此外,除公式 (14) 的量化误差外,公式 (16) 中的Gradient更新量往往是近似得到的,引入了近似误差。由此可见, b ^ ( o ) ( L + 1 ) \hat{b}_{(o)}^{(L+1)} b^(o)(L+1)的量化误差在量化DNN的微调过程中往往大于其他权重的量化误差。

  由上可知,满足公式 (9) 的卷积核对微调有干扰,体现在增大量化误差,体现在公式 (5) 中分母接近 ϵ \epsilon ϵ而导致的Wight的dynamic range增大。

Method

Proposal:Pruning for Quantization

  鉴于Motivation,作者提出了剪枝辅助量化(PFQ)方法,描述如Fig 1 所示。
在这里插入图片描述
  图中左图当BN输出的Feature Map的对应的Running Variance为 V ≃ 0 V\simeq0 V0时,可以认为该Feature Map为常量矩阵(在Motivation的阐述中已解释过原因),即矩阵内元素均为 β i \beta_{i} βi。那么在右图中常量矩阵经激活函数输出后得到的仍是常量矩阵,写作 A c t ( β ) Act(\beta) Act(β),再进一步量化后得到 Q ( A c t ( β ) ) Q(Act(\beta)) Q(Act(β))。而PFQ会将 Q ( A c t ( β ) ) Q(Act(\beta)) Q(Act(β))对应的输入通道给裁掉,同时也会将对应的Weight矩阵给裁掉,将二者的卷积计算得到的结果(只要计算一次)融于 b ^ \hat{b} b^中,即可达到降低参数量、加速、减小量化误差(公式 (16) 中右边的第四项因剪枝而消除,也即是梯度估计误差被消除)和避免Wide dynamic range的效果。

  实际中,PFQ删除满足下面条件的Weight:
在这里插入图片描述
  那么BN层的 β \beta β变成:
在这里插入图片描述
  当然在对Activation进行量化操作后,公式 (15) (18) 中的 A c t ( β ( c ) ( L ) ) Act(\beta_{(c)}^{(L)}) Act(β(c)(L))会被 Q ( A c t ( β ( c ) ( L ) ) ) Q(Act(\beta_{(c)}^{(L)})) Q(Act(β(c)(L)))取代。

Proposal:Quantization Workflow

  进一步地,为了在实际Fine-tune中使用PFQ,作者提出了自己的量化流程,分为主要的两个stage,均进行PFQ。

  • Stage 1:实行PFQ操作(剪枝、替换),然后只对Activation进行量化,最后进行微调。
  • Stage 2:再次实行PFQ操作(剪枝、替换),然后Fold BN,最后同时将BN对Activation和Weight均进行量化,最后进行微调。
    在这里插入图片描述

  进行两次PFQ是因为,第一次PFQ针对的是正常的QAT过程,并初步剔除正常情况下满足公式 (17) 的Weight。而第二次PFQ是为了考虑实际部署时的情况,同时删除因为仅Activation量化导致新出现满足公式 (17)的Weight,完成Activation和Weight量化。

Ablation Study

PFQ Works for Accuracy

  为了验证PFQ是否真实有效,作者在Cifar-100下对MobileNet-v1、MobileNet-v2进行了有关实验,如Table 1 所示,其中w/o表示“Without”。

在这里插入图片描述
  可见仅进行PFQ的剪枝而不校正Bias的时候,准确度就已经有更好的趋势。完全使用PFQ时准确度更进一步提升。这说明PFQ确实起到作用了。

PFQ Solve Dynamic Range Problem

  接着作者继续做实验,如Fig 2 所示,红条为使用PFQ,蓝条为没有使用PFQ。验证了PFQ确实改善了Fold后新的Weight的动态范围。
在这里插入图片描述

Effect of Proposed Quantization Workflow

  作者最后对所提出的量化流程做了有关实验,如Table 2 所示。可见确实进行两个stage的PFQ是比只进行一个stage要好的且更合理的。“w/ PfQ”指的是“With OFQ”
在这里插入图片描述

Experiment

  作者在Cifar-100上对MobileNet-v1、MobileNet-v2进行了有关实验,并与DFQ做了比较,如Table 3 所示。可见作者的方法比DFQ好。“w/fine-tune”指的是“with fine-tune”。

在这里插入图片描述
  作者在Imagenet上对MobileNet-v2进行了有关实验,并与DFQ、PACT、DSQ做了比较,如Table 4 所示。可见作者的方法比其他方法要好得多。“w/fine-tune”指的是“with fine-tune”。
在这里插入图片描述

个人思考

  • 这篇文章的论证逻辑还是很完整的,充分说明了方法的可行性和意义。
  • 但是有个问题,一般带有BN层的Conv层是没有Bias的(具体可看博客),也就是说一般不会考虑对bias的量化。但因为PFQ有 b ^ \hat{b} b^的存在,则一定会引入bias,那么bias的量化就成了问题(该论文作者似乎没有提到对 b ^ \hat{b} b^进行量化,应该是默认 b ^ \hat{b} b^是全精度fp32)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值