【深度学习技巧】模型压缩(参数修剪、神经元修剪、知识蒸馏、参数量化、结构设计、动态计算)

1. 模型压缩的意义

复杂网络更加简化,仍保持较好的性能,实现部署

2. 模型压缩的几种方法

2.1 参数修剪(剪掉无用的参数)

参数修剪的方法:

  1. 训练一个大的模型
  2. 评估参数是否重要?
    1) 权重的绝对值(绝对值大的有用,绝对值接近0的无用)
    2) 参数的bi值
    3) 评估神经元(计算神经元不为0的个数)
  3. 修剪(精度会下降)
  4. 重新微调
  5. 前面三步重复进行(一次修剪大量参数,会导致微调失败)

权重参数的修剪存在的问题:
修剪之后,可能会存在不规则的形状,pytorch搭建就会很困难,往往对权重参数的修剪不能起到加速的作用。
以下这种不规则的结构,通常很难进行构建,而且加速效果不明显。
在这里插入图片描述
通常可以采取将权重参数置为0
在这里插入图片描述

2.2 神经元修剪

修剪之后仍然是规则的
在这里插入图片描述
利用大的网络的初始化参数,用于小网络会有好的结果,直接复制裁剪后的网络,重新训练,效果不会很好。
在这里插入图片描述

2.3 知识蒸馏

优点:将网络从大网络转化成一个小网络,并保留接近于大网络的性能;也可以将多个网络学到的知识转移到一个网络中,使得单个网络的性能接近整体的效果。

学生网络学习教师网络的结果,不管结果对错。
先训练大的网络,是因为训练一个大的网络产生的结果要比小型网络好。
在这里插入图片描述
将多个模型的评均效果作为教师网络的输出
在这里插入图片描述
在这里插入图片描述
知识蒸馏示例:
在这里插入图片描述T的取法一般可以有2,10,20几种,alpha一般取0.5,0.9,0.95几种。

代码:
https://zhuanlan.zhihu.com/p/478334890
https://blog.csdn.net/zhenyu_an/article/details/103225509

2.4 参数量化

使用某一类别的平均参数来表示
在这里插入图片描述

2.5 结构设计

常规CNN
在这里插入图片描述
深度可分离卷积
在这里插入图片描述

2.6 动态计算

将每个额外层输出来的结果与标签计算误差,然后将所有误差求平均,然后最小化这个平均误差。使得每个额外层的输出都尽可能的接近标签。

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

3. 参考

https://www.bilibili.com/video/BV1Wv411h7kN?p=122
https://www.bilibili.com/video/BV1Wv411h7kN?p=123

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

只搬烫手的砖

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

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

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

打赏作者

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

抵扣说明:

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

余额充值