1、CNN模型压缩方法
VGG将卷积核尺寸从7*7缩小为3*3,减少参数
GoogleNet的一个inception每条路径经过1*1,降维
Resnet也用了1*1卷积进行降维
MobileNet使用了可分离卷积
2、模型压缩方法
在追求模型高准确率的同时,尽可能的降低其复杂度,以达到性能与开销(时间计算量)上的平衡。给定一小部分参数子集便能够完整的重构出剩余的参数。这种冗余在训练阶段很必要,因为DL问题是一个极其复杂的非凸优化问题,对于现有的基于梯度下降的优化算法而言,这种参数冗余能保证网络能够收敛到一个比较好的最优值。因而一定程度上,网络越深,参数越多,模型越复杂,最终效果往往也越好。
模型压缩技术主要分为两个部分:前端压缩,后端压缩
前端压缩:是指不改变网络结构的压缩技术,主要包括知识蒸馏,紧凑模型设计,滤波器层面的剪枝等。可很好匹配深度学习库
后端压缩:其目标在于尽可能的减少模型大小,因而会对原始的网络结构造成极大程度上的改造。这种改造往往不可逆。包括低秩近似,未加限制的剪枝,参数量化以及二值网络等。
当然也可以将前端压缩的输出作为后端压缩的输入,能够在最大程度上减少模型的复杂度。
(1)低秩近似
CNN的实现通过矩阵相乘完成,通常权重矩阵往往稠密且巨大,从而带来巨大计算和存储开销。为解决这个问题直观想法是,若能将稠密矩阵由若干个小规模矩阵近似重构出来,那么便能够有效降低存储于计算开销。
这类算法大多采用低秩近似来重构权重矩阵。在小数据集上能够达到2-3倍的压缩效果,最终结果甚至可能超过压缩之前的网络。
还可以直接使用矩阵分解来降低矩阵权重参数。如用SVD分解。利用矩阵分解能够将卷积层压缩2-3倍,全连接压缩5-13倍,速度提升2倍,精度损失控制在1%之内。
低秩近似在 小网络模型上取得了不错的效果,但其参数量与网络层数呈线性变化趋势,随着层数增加与模型复杂度提高,其搜索空间急剧增大。
(2)剪枝与稀疏约束
通过剪枝处理,在减小模型复杂度的同时,还能有效防止过拟合,提升模型泛化性。在训练中,需要一定冗余的参数数量来保证模型的可塑性与容量,在完成训练之后,则可以通过剪枝操作来移除这些冗余参数,使得模型更加成熟。给定一个预训练好的网络模型,常用剪枝算法的流程:
(a)衡量神经元重要程度(剪枝算法最重要的核心步骤)。根据剪枝粒度不同,神经元定义可以是一个权重连接,也可以是整个滤波器。
(b)移除掉一部分不重要的神经元。可以根据阈值来判断神经元是否可以被剪除,也可以按照重要程度排序,剪除一定比例的神经元。后者简单
(c)对网络进行微调。剪枝操作不可避免影响网络精度,为防止对分类性能造成过大破坏,需要对剪枝后的模型进行微调。
(d)返回第1步,进行下一轮剪枝。
(3)参数量化
量化是指从权重中归纳出若干“代表”,由这些代表来表示某一类权重的具体数值。代表被存储在码本中,而原权重矩阵只需记录各自代表的索引即可,从而极大降低存储开销。即使采用最简单的标量量化算法,也能在保持网络性能不受显著影响的情况下,将模型大小减少8-16倍。不足在于,当压缩率比较大时容易造成分类精度大幅度下降。
(4)二值网络
所有参数取值只能是+1或-1。在普通NN中,一个参数由单精度浮点型表示,参数二值化能将存储开销降低为原来的1/32。二值化需要解决两个基本问题:
如何对权重进行二值化?
直接根据权重正负二值化,x=sign(x)
随机二值化,对每个权重以一定概率去+1,这个更耗时
如何计算二值权重梯度?二值权重梯度为0,无法进行参数更新。用符号函数进行放松。Htanh(x)=max(-1,min(1,x))代替sign(x)。当x在[-1,1],存在梯度值1,否则梯度值0
(5)知识蒸馏
在不改变模型复杂度情况下,增加监督信息的丰富程度肯定会带来性能上的提升。知识蒸馏是迁移学习的一种,目的是将庞大复杂模型学到的知识通过一定 的手段迁移到精简的小模型上,使得小模型能够获得与大模型相近的性能。这两个模型分别扮演老师(大模型)和学生(小模型)角色:让学生自己学的话,收效甚微;若能经过一个老师的指导,便能够事半功倍,学生甚至有可能超越老师。
(6)紧凑的网络结构
设计出很多更加紧凑的网络结构,将这些新结构运用到神经网络设计中来,能够使模型在规模与精度之间达到一个较好的平衡。比如:
fire module用在SqueezeNet中
MobileNet:Depth-wise conv,深度分离卷积等
3、模型裁剪
训练一个大的多参数网络,得到最佳性能,基于一定准则来裁剪大网络模型,在数据集上微调裁剪后的网络模型。
4、降低网络复杂度但不影响精度的方法
单通道内卷积,拓扑细分
5、降维方法
常用有主成分分析(PCA)、线性判别分析(LDA)、局部线性嵌入(LLE)、LE、SVD
(1)PCA
让数据投影到哪些数据分布比较分散的平面上,从而忽视某一维度,起到降维作用。
(2)LDA
有监督的线性降维方法,核心思想是往线性判别超平面的法向量上投影,使得区分度最大(高内聚,低耦合)。LDA是为了使得降维后的数据点尽可能容易被区分
(3)SVD,奇异值分解
原理:
矩阵
,W是标准化矩阵,
此时n个特征向量为标准正交基,满足
,即
推出
因为
是一个方阵,可以进行特征分解,所以
因此可以得到
的所有特征向量组成的矩阵
因为
也是一个方阵,可以进行特征值分解,所以
同理可以得到
又因为
所以可以求得
或者可求
的特征值取平方根来求 因为
,k<<n
大矩阵可以用三个小矩阵来表示
左奇异矩阵U可以用来做行压缩
右奇异矩阵V可以用来来列压缩,即特征维度压缩
注:Sklearn 的 PCA 就是用 SVD 进行求解的
当样本维度很高时,协方差矩阵计算太慢
方阵特征值分解计算效率不高
SVD 除了特征值分解这种求解方式外,还有更高效更准球的迭代求解方式,避免了
的计算
其实 PCA 与 SVD 的右奇异向量的压缩效果相同。
以上内容均来源于各个版主、牛客网总结