降低神经网络模型复杂度的方法总结

一、CNN模型压缩方法

1.将大的卷积核换成小的3*3卷积核

2.像GoogleNet的inception模块和Resnet模块,使用1*1卷积进行降维操作

3.像MobileNet一样使用深度可分离卷积。

二、网络模型压缩方法

主要分为两种:前端压缩和后端压缩

前端压缩:是指不改变网络结构的压缩技术,如知识蒸馏,紧凑模型设计,滤波器层面的剪枝

后端压缩:尽可能的减少模型的大小。未加限制的剪枝,参数量化以及二值网络

1.剪枝与稀疏约束

通过剪枝操作,在减少模型复杂度的同时,还能有效防止过拟合,提高模型的泛化性能。在训练中,网络需要一定冗余的参数数量来保证模型的可塑性和容量,在完成训练之后,可以通过剪枝操作来删除这些荣誉参数,来使模型更加成熟,给定一个预训练好的网络,剪枝的步骤如下:

(a)衡量神经元的重要程度(剪枝的核心步骤)。根据剪枝力度不同,神经元定义可以是一个权重连接,也可以是整个滤波器。

(b)移除掉一部分不重要的神经元,可以根据阈值来判断是否剪除,也可以根据重要程度排序,剪除一定比例的神经元,后者简单

(c)对网络进行微调。剪枝不可避免的会影响网络精度,为了防止对性能造成过大破坏,需要进行微调

(d)返回第一步进行下一次剪枝

2.参数量化

量化是指从权重中归纳出若干代表,由这些代表来表示某一类权重的具体数值,代表被存储在码本中,而原权重矩阵只需记录各自代表的索引即可,从而极大的降低了存储开销。即使采用最简单的标量量化算法,也能在保持网络性能不受显著影响的情况下,将模型大小减少8-16倍。不足在于,当压缩率比较大时容易造成分类精度大幅度下降。

3.二值网络

权重只能是-1或1

4.知识蒸馏

在不改变模型复杂度的情况下,增加监督信息的丰富程度肯定会带来性能上的提升,知识蒸馏是迁移学习的一种,目的是将庞大复杂模型学习到的知识通过一定手段迁移到精简的模型上,使得小模型获得和大模型相近的性能,分别是学生模型和老师模型,老师指导着它学,比自己学性能更好。

你可能感兴趣的:(深度学习各项知识整理,神经网络,深度学习,机器学习)