[PfQ阅读笔记]FILTER PRE-PRUNING FOR IMPROVED FINE-TUNING OF QUANTIZED DEEP NEURAL NETWORKS

PfQ阅读笔记

此篇文章最大的亮点是发现了在量化过程中,权重的动态范围会因为某些输入变大,这对量化来说是不太友好的,因此提出了PfQ对相应的输入进行pruning,然后为了保证输出不变,将对应的效果叠加到了b中,现在开始介绍这篇paper


此篇paper链接:https://arxiv.org/abs/2011.06751

摘要

直接在这里插入图片描述
摘要的思路:提出问题-如何解决【这个地方我会根据自己的理解解释为什么会有这个问题】
1. Q:针对低bit的网络,在量化&fine-tuning时,精度往往掉的更多,所以比较难训练。而这个原因之一是原数据权重动态分布范围比较大,所以量化之后精度会丢失的比较多。
2. WHY:为什么权重的动态分布范围较大会影响精度呢?举个例子:
在这里插入图片描述
如这两张图代表的分别是两种数据分布,在量化之后,很明显左边数据丢失的要比右边数据丢失的更少,这是因为低bit量化之后,能够表示的数据是有限的,所以原数据分布越集中,对于量化来说就更为友好。
3.HOW:本文针对这一现象,在DNN中找到了那些会影响W动态范围的layer,并通过本文提出的手段缩小了DNN的动态范围分布。从而提高了量化的精度。这个道理告诉我们剪枝和量化或者其他的压缩方法,结合起来可能会有奇效!

一、INTRODUCTION

在这里插入图片描述
本文根据介绍前人的研究,阐述了DNN直接落地较难的一个问题,从而引出了量化的重要性。
接着介绍量化在大model效果还行,小model效果就不太好了,所以对于有些model需要进行特殊的处理。
所以在对DNN的研究的时候,本文提出的方法就是对DNN的一种特殊处理,并从理论的角度上分析了有些输入对应的W是对量化网络产生不利影响的,并最后通过对比确认了本片paper能够取得一个更好的效果,也就是说本文最后提出的方法的确是有效的。
那么本文是如何对DNN操作的呢?
如下图所示:本文先找到running variance 近似为0的这些输入,因为running variance 近似为0,所以此时下图中的输入就可以近似为一个β,然后把这些running variance近似为0的输入裁剪掉,但是直接咔擦一刀下去肯定会对输出产生影响,所以为了保证后续的输出不变,本文使用近似值β参与后续的运算并把这一项融合到b中。至此,整个PfQ操作就已经完成了。下图是原文给的一个操作流程图。

在这里插入图片描述

二、RELATED WORK AND PROBLEM

在这个地方,我会根据自己的理解阐述为什么PfQ有效的原因

1.首先本文介绍了传统量化工作,这个地方我就不一句话一句话去敲了,有空的话大家可以自己去看看,可以对量化的工作有一个梳理效果。
在这里插入图片描述
2.接着我们直奔主题,为啥PfQ有用,running variance 是如何影响权重的动态范围的。

1)首先我们看一下卷积最基本的公式以及BN的操作:
在这里插入图片描述
在这里插入图片描述
2)然后我们把(1)式代入到(2)式,然后我们就可以把BN融合到W/b中。
在这里插入图片描述
这里的V指的仍然是running variance,M指的是running mean,但是表达形式不一样,他是分别根据上一次的V、M与这一次的V、M赋予了权重进行更新而已。
具体更新如下:
在这里插入图片描述
然后让我们回到正题,V近似为0,如何会影响权重W的分布范围呢?
从上图中的(5)式我们可以得知,当V趋于0时,w’的整体大小会被放大,这就直接使w’的动态范围扩大了,但是这一层layer的w大家是共享量化范围的,这个地方w动态范围扩大了不仅影响了自己,还影响了其他w的动态范围,所以我们必须对这些running variance近似为0的地方进行特殊操作。那最简单粗暴的方式就当然是直接砍掉,但是我为了不影响输出,就把他原本的效果融合到b中去,然后我这个地方虽然被砍掉了,但是反向更新参数的时候,由于这一层的前一层与后一层都不影响,对loss影响的是量化产生的效果,所以反向更新的时候我仍然可以更新我前一层与后一层的参数,然后本层的输入可以由前一层算完之后得到,如果更新之后的本层输入running variance不近似为0了,那我也可以根据前后的值去更新我当前层的权重。所以不用担心我砍掉这一层直接近似为β会使得参数不更新的问题。
那么到这个地方,我们就已经了解了本文的一个核心思想,找到了W权重范围增大的一个原因!
接下来介绍具体如何操作。

三.PROPOSAL

		既然我们已经知道哪部分可能会影响量化,那么本文提出的PfQ方法,就是为了裁剪掉我们不想要的那一层输入。
		但是不可能直接抛弃,得想办法在不影响输出的条件下进行更替。
		首先根据running 方差近似为0,我们可以推出2式,再根据2式以及右下角这个公式,因为 ξ大于0,所以最后可以得到三式。
		到目前为止,我们计算的都是V接近0的输入,把其他的不近似为0的联合起来放在一块,得到以下结果。
		由于β是一个常数,所以我们把w*act(β)放进b中,最后如红框所示。
		因此裁剪w之后可以把相应的信息融入到b中就能保证我的输出大致不变。

在这里插入图片描述
最后将右下式子代入到BN-fold中得到式18,需要注意的是我们能这里的V是第L+1,而不是L,所以此时不会出现较大值的情况。
至此,在这个时候就得到了裁剪之后的式子。此时我们就已经了解本文的PfQ是怎么操作的了以及为什么这么操作的。
接下来看看实验部分。
在这里插入图片描述

EXPERIMENTS

可以看到在精度几乎不损失的情况下,MAC的大小有所下降,并且由下面这张图可以看出使用PfQ后w的动态范围有所下降。
在这里插入图片描述
然后与其他量化方法相比精度有所提升,网络的大小而且更小。在这里插入图片描述
然后本文针对一步量化的方法,提出了自己的一个算法。但是根据实验结果本人感觉效果没有太大效果,这个地方为了不影响大家的判断就不做评价了。贴出本文的算法流程图以及实验对比
在这里插入图片描述

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值