机器学习笔记六——模型压缩
系列文章目录机器学习笔记一—机器学习基本知识机器学习笔记二—梯度下降和反向传播机器学习笔记三—卷积神经网络与循环神经网络机器学习笔记四—机器学习可解释性机器学习笔记五—机器学习攻击与防御机器学习笔记六—模型压缩文章目录系列文章目录前言一、模型压缩的意义二、模型压缩的方法1、网络剪枝(Network Pruning)2、知识蒸馏(Knowledge Distillation)3、参数量化(Param
·
系列文章目录
- 机器学习笔记一—机器学习基本知识
- 机器学习笔记二—梯度下降和反向传播
- 机器学习笔记三—卷积神经网络与循环神经网络
- 机器学习笔记四—机器学习可解释性
- 机器学习笔记五—机器学习攻击与防御
- 机器学习笔记六—模型压缩
文章目录
前言
这一节我们介绍模型压缩
一、模型压缩的意义
当我们将深度学习模型真正应用于实际生活中的时候需要考虑的一个重要的问题就是模型的计算量和模型大小,当我们将模型放入手机、智能手表之类的设备上时,我们所使用的模型所需的存储空间不能太大,计算量也不能太大,所以我们要进行模型压缩
二、模型压缩的方法
1、网络剪枝(Network Pruning)
实际上我们所训练的模型存在着很多冗余,有很多神经元根本就没有起到作用,所以我们要将这一部分的神经元“剪枝”
- 首先训练一个模型
- 评估神经元或者权重参数的重要性(可以直接比较权重的数值,越接近于零的越不重要)
- 移除不重要的参数
- 用剪枝后的模型继续训练微调,观察剪枝后模型效果,如果模型效果不好或者模型参数仍旧过大,则返回第二步
那么我们为什么不直接训练小模型,因为一般来说小模型比较难以训练,而较大的模型比较好训练。
而对于去掉神经元和去掉权重参数这两种方式,一般来说我呢不会选择去掉权重参数,因为去掉权重参数会导致计算不平衡,也就是权重参数不能构成一个矩阵,这样的情况下实际上并不能提高计算速度也不能减小参数存储空间(存储参数的时候实际上大多是补零存储,所谓的剪枝根本没有起到作用)
2、知识蒸馏(Knowledge Distillation)
我们首先训练一个大的Teacher网络,然后输入数据A,大的网络得出结果(1:0.7 7:0.2 9:0.1),在较小的Student网络中同样输入训练数据A,让Student模仿Teacher的输出结果(1:0.7 7:0.2 9:0.1)
3、参数量化(Parameter Quantization)
我们将参数分组,然后同一组的参数用一个参数表示
这样我们在表示员矩阵的时候实际上每一个值所需要的存储空间变小了,原来要32bit、16bit,现在只要8bit,而换算表所占的存储空间也并不大,所以总体上减少了模型存储空间
4、架构设计(Architecture Design)
在两层中间再加入一层,通过控制新加一层神经元的数量控制计算量
例如:深度可分卷积(Depthwise Separable Convolution)
通过将卷积拆成两步,将72(3*3*2*4)个参数减少为26(3*3*2+2*4)参数
5、动态计算(Dynamic Computation)
根据目前的状态(算力是否充足,存储空间是否充足)选择适合的模型或者计算方法
动态计算的方法:
-
训练多个不同计算量的模型,根据需要选择模型(但是会导致所需的存储空间暴增)
-
将不同的中间层接到输出层,根据需要选择计算几个中间层(导致模型效果不好)
总结
简要的介绍了一下模型压缩的相关知识,介绍了集中模型压缩的方法,但是实际上模型压缩的方法还有很多这里就不一一详细的介绍了,有兴趣的同学可以去自己找找资料或者直接看李宏毅老师的课程,李老师和助教对这一部分讲解的很细致。
更多推荐




所有评论(0)