系列文章目录
文章目录
前言
这一节我们介绍模型压缩
一、模型压缩的意义
当我们将深度学习模型真正应用于实际生活中的时候需要考虑的一个重要的问题就是模型的计算量和模型大小,当我们将模型放入手机、智能手表之类的设备上时,我们所使用的模型所需的存储空间不能太大,计算量也不能太大,所以我们要进行模型压缩
二、模型压缩的方法
1、网络剪枝(Network Pruning)
实际上我们所训练的模型存在着很多冗余,有很多神经元根本就没有起到作用,所以我们要将这一部分的神经元“剪枝”
- 首先训练一个模型
- 评估神经元或者权重参数的重要性(可以直接比较权重的数值,越接近于零的越不重要)
- 移除不重要的参数
- 用剪枝后的模型继续训练微调,观察剪枝后模型效果,如果模型效果不好或者模型参数仍旧过大,则返回第二步
那么我们为什么不直接训练小模型,因为一般来说小模型比较难以训练,而较大的模型比较好训练。
而对于去掉神经元和去掉权重参数这两种方式,一般来说我呢不会选择去掉权重参数,因为去掉权重参数会导致计算不平衡,也就是权重参数不能构成一个矩阵,这样的情况下实际上并不能提高计算速度也不能减小参数存储空间(存储参数的时候实际上大多是补零存储,所谓的剪枝根本没有起到作用)
2、知识蒸馏(Knowledge Distillation)
![](https://img-blog.csdnimg.cn/cf8e4296c2504ef69b8b6de955d0cea0.png?#pic_center)
3、参数量化(Parameter Quantization)
我们将参数分组,然后同一组的参数用一个参数表示
![](https://img-blog.csdnimg.cn/184f5ff4baf945ebb93f62c69ff55c2e.png?#pic_center)
4、架构设计(Architecture Design)
![](https://img-blog.csdnimg.cn/5a4f840f69b4499298066260f85e6429.png?#pic_center)
例如:深度可分卷积(Depthwise Separable Convolution)
![](https://img-blog.csdnimg.cn/e0512b6de17c4e8e9ca61b50b8297dd8.png?#pic_center)
5、动态计算(Dynamic Computation)
根据目前的状态(算力是否充足,存储空间是否充足)选择适合的模型或者计算方法
动态计算的方法:
![](https://img-blog.csdnimg.cn/584e118795914a07a2d0782d87aa79fa.png?#pic_center)
-
训练多个不同计算量的模型,根据需要选择模型(但是会导致所需的存储空间暴增)
-
将不同的中间层接到输出层,根据需要选择计算几个中间层(导致模型效果不好)
总结
简要的介绍了一下模型压缩的相关知识,介绍了集中模型压缩的方法,但是实际上模型压缩的方法还有很多这里就不一一详细的介绍了,有兴趣的同学可以去自己找找资料或者直接看李宏毅老师的课程,李老师和助教对这一部分讲解的很细致。