初入神经网络剪枝量化1(大白话)

一、 概述

        现在我们也知道,随着神经网络的高速发展,网络的规模和参数量也成为阻碍神经网络应用的阻碍,因此神经网络应运而生。

二、剪枝

        剪枝在我的理解就是,神经网络其实存在着很大的冗余,有很多层,通道以及参数都是对网络正确推理结果没有影响或者说影响可以忽略不记的。那这样的层,通道和参数就是没用意义的,只是浪费我们的存储空间以及推理速度。这里我就简单介绍几种我这段时间学习的几种不同的剪枝方法。

        剪枝按颗粒度划分可以分为,层剪枝,通道剪枝,向量级剪枝以及稀疏矩阵。向量级和稀疏矩阵也叫做非结构化剪枝,这个需要专用库和硬件设备才能支持,所以并不常用。

        剪枝的一般流程就是,训练——剪枝——微调

        2.1 Network Slimming

        论文链接: [1708.06519] Learning Efficient Convolutional Networks through Network Slimming (arxiv.org)

        这篇论文其实就是通道剪枝,利用的是BN层中的缩放因子γ,BN层的计算公式如下:

        先简单介绍一下BN层的原理,Zin就是我们BN层上一层卷积层的输出特征图,对输入进行归一化操作后,再进行γ和β参数的仿射变换,这里的γ和β都是可以训练的参数。

        我们这里可以看出每一个BN层的输出都与γ参数有很大的关系,如果γ趋近于0,那我们就可以说明这一层的输入还是输出都是对网络没有意义的,我们裁剪掉这一层对我们网络的性能是不会产生很大影响的。那么正常训练的网络中γ趋于0的肯定少数,为了剪枝网络,我们肯定是希望,有一部分的γ可以趋近于0。论文中提出我们可以在损失函数中添加针对于γ的L1正则化,我们去训练它,使得一部分的γ趋于0。

        如图,g(γ)=|γ|。 

        以此损失函数训练网络,就可以使得一部分的γ趋于0,这一步也就是稀疏训练。

        接下来,我们就可以得到每一层每一个通道的γ系数的值,通过选取合适的阈值大小,将γ小于该阈值的层全部删除,就完成剪枝,因为剪枝多多少少还是会使得网络精度下降,所以为了防止网络掉点,所以一般都会在对网络进行微调。

        三 量化

        量化其实很好理解,我们一般训练网络都是用的32位浮点数计算的,为了减少权重的存储空间以及网络训练和推理速度,我们可以把权重,激活甚至是梯度,都量化至16位,8位,4位甚至是2位。

        量化可以分为对称量化以及非对称量化两种,以8bit量化为例子,比如我们是要非对称量话,那就是把我们原来的值映射到0-255区间,最小的对应0,最大的对应255. 如果需要对称量化,那么就是首先,找到数据中绝对值最大的数,将数据区间扩充为-max-max之间,对应的是-128-127如图:

        

非对称量化

 

对称量化

        3.1 2bit量化(BNN)

        这个的话,其实很简单,就是网络参数与激活值大于等于0,就是1,小于0就是-1

        3.2 三值化网络

        这个原理与BNN较为相似,就是将参数量化到[-1,0,1]中,取一个阈值a,小于-a置为-1,大于-a小于a置为0,大于a置为1

        3.3 dorefa-net

        dorefa量化的核心就是公式:

 

权重量化公式为:

        

 

激活量化公式 :

梯度量化公式:

         可以看到其实也很简单,就是把参数量化到我们想要量化的区间内,这里需要解释几个问题:

        首先,为什么量化后又紧跟着反量化,我的理解是,这叫做伪量化,这样训练网络叫做量化感知训练,就是因为我们量化过去由于有一个取整操作,这个操作肯定会导致有一定的精度损失,但是当我们加一个反量化后,拿这个反量化后的去前向推理,再去训练我们的网络,那不是可以弥补到量化带来的损失了么?

        然后,网络拿着我们量化加反量化的参数去前向推理网络,反向传播计算梯度时,由于有取整操作,所以需要在取整操作的梯度回传这里设置输入梯度等于输出梯度,来更新我们的参数,注意,这里更新的参数是我们原始的参数,并不是量化加反量化后的参数。

        最后,当我们训练好网络以后,我们再去量化,这样效果会好很多。

持续更新

如有错误,欢迎大家及时评论区及时提出!

 

 

 

        

 

       

 

 

  • 2
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值