轻量化网络学习 7 非结构化剪枝learning both weights and connections


论文:learning both weights and connections for efficient neural networks

0、归纳

通过对现有方法的不足做描述,提出了非结构化的剪枝模型,将神经元训练时的权重作为判断该神经元是否重要的标准进行剪枝,同时使用迭代训练对剪枝带来的损失进行逐步调整,使其不会因为剪枝带来精度降低。文中还用到了正则化和dropout率的调整的tricks。这种方法实用性不是特别好,需要特别的设备进行使用

1、论文泛读

模型压缩、
模型剪枝、
正则化:L1,L2正则、
结构化剪枝
剪枝过程中的技巧:dropout技巧等

FLOPs:每秒浮点运算次数(也可以称作计算量)模型推理一张图片需要占用计算机的计算量

为何要轻量化
1、拿下图来讲,一个模型的FLOPs与计算机的FLOPs(每秒能运算的浮点数)对比一下就很明了了。要想提高效率,就要提高计算机的或者降低模型的FLOPs
2、同时耗电也是个因素
在这里插入图片描述
创新:
1、改变模型结构,减少模型参数量,降低模型计算量,加快推理速度
2、本文通过学习到的权重,可以用来推理出最后结果,可以当做判断神经元重要性的指标
3、同时训练权重和要剪的神经元,可以降低损失。
自己的理解:即剪枝会给精度带来一定的损失,但是一次剪一点点通过迭代训练让它恢复其实影响不大,或者说可以降低剪枝带来的损失
在这里插入图片描述
现有的方法:
1、SVD和量化:本来权重是浮点数,把它用整数代替
2、池化代替全连接
3、海森矩阵等

本文方法:三步剪枝法
1、在数据集上对未压缩的模型进行完整训练到收敛
2、在经过完整训练的未压缩模型基础上,剪掉一定数量权重小于阈值的神经元
3、在数据集上对剪枝过后的模型进行权重微调,使其恢复

过拟合:模型的复杂度比数据的复杂度高

研究意义:
1、剪枝引入模型训练过程,降低剪枝导致的精度损失
2、神经元的权重作为判断重要性的依据,简化神经元重要性计算的过程
3、正则化对剪枝过程的影响
L1正则过程会将某一批w降低到0

2、论文精读

1、网络参数量和计算量计算:FLOPs和MAC

对于嵌入式设备,一般用MAC,如果是高性能设备,一般看FLOPs
1、参数量算的是神经元之间连接的线数
2、FLOPs算的是乘法和加法的次数
3、AMC算的是内存消耗
在这里插入图片描述
在这里插入图片描述
与卷积核在连接,需要用卷积核的尺寸去算,KKCi
再与输出进行计算Co
再加上偏置Co
在这里插入图片描述
在这里插入图片描述
K是卷积核尺寸,Ci输入,Co输出,H,W是输出的尺寸,2是需要加和乘,但是加比乘少一次,所以需要减去1,括号里是算一个输出位置要消耗的,再乘上要输出的总数就是总共需要消耗的浮点数
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、网络剪枝

加入正则化,在训练时本来某一个权重就是0,这样对于直接去掉来说其实是没影响的,剪掉也没关系(L1正则)
或者在0附近,就可以减小剪枝带来的直接误差,恢复就比较快(L2正则)

结构化剪枝:去掉某个神经元
非结构化简直:去掉某根神经元间的连线,即权重

训练的目的:找一组w,使得模型在这一组w下的loss最小

L1和L2的区别
在这里插入图片描述
在这里插入图片描述
有重训练的情况下,L2更好,因为L2让其在0附近,稍作调整就好了
没有重训练情况下,L1更好,因为L1直接让其为0

使用自适应dropout,随着剪枝的深入,剪得神经元越来越多,因此使用dropout时也应该相应的减少,否则失去的神经元就太多了
在这里插入图片描述

结果及代码

如果一个网络过拟合,可以通过这种剪枝方式进行降低过拟合,降低错误率

关键点:
1、影响神经网络剪枝后性能的原因是什么?
剪枝的公平性,会增大剪枝损失,因此使用迭代剪枝进行弥补损失
使用正则让其减小剪枝损失
2、如何更加准确地判断神经元的重要性?(不是特别懂)
迭代式的剪枝方法
创新点:
在这里插入图片描述
存在的问题:
残差如何剪枝呢?

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值