深度学习笔记(九):神经网络剪枝(Neural Network Pruning)详细介绍

1:What is pruning

剪枝是一种模型压缩的方法,这种方法可以有效的裁剪模型参数且最小化精度的损失。由于深度学习模型可以看作是一个复杂树状结构,如果能减去一些对结果没什么影响的旁枝,也就是修剪神经网络中不重要的权重,就可以实现模型的减小。比如说看下图


在这里插入图片描述 在这里插入图片描述

我们通过观察这个函数发现有些项对应的系数是很小的,也就是说对于拟合的贡献不是很大,如果我们把系数小的去掉得到-1.2x^2-2x-8的式子,得到下图


在这里插入图片描述

这时候我们可以观察到这时候拟合出来的效果它的泛化能力更好,更加不会过拟合。这也是剪枝的最基本的原理,总而言之就是把不重要的参数去掉。

2:Pruning in MLP(多层感知机)

在多层感知机中,剪枝也就是减去不重要的权重,也就是近似为0的权重。


在这里插入图片描述

拿到最初的权重矩阵之后,在生成一个叫掩码的矩阵,也就是说如果原来的权重比较接近于0,我们就把它的掩码置为0,最后在通过原来的权重矩阵乘以掩码矩阵就可以得到新的矩阵。新的参数矩阵对应的就是上面这个连接图,没有连的就相当于被置0了。

2.2 How to make mask

在这里插入图片描述
numpy里面的这个函数相当方便,percentile:一组n个观测值从小到大排序,处于p%位置的值称第p百分位数。

也就是说通过np.abs()求完绝对值后,在通过np.percentile(,50)减去50%没必要的权重,后面得到的0.6意思是小于0.6的权重将被剪掉,被置为0.

3.Pruning in CNN(卷积神经网络)

在这里插入图片描述
中间是4个卷积核,左边是输入的特征图,右边是输出的特征图,输入的特征图对每个卷积核都进行一个卷积,中间黑色的部分是我们观察到这个卷积核的参数特别的小,置为0之后将会对output产生影响,也就是有1/4的部分都为0.和上面一样也需要设置一个mask,然后去计算每个卷积核的L2范数,如果小的话直接去掉,去掉的话就是直接乘以mask

  • 7
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZZY_dl

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值