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

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐