算法面经总结(14)模型优化及降维

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,奇异值分解

  原理:

        矩阵         A=W\sum W^{-1}   ,W是标准化矩阵,w_{i}^{T}w_{i}=1

        此时n个特征向量为标准正交基,满足W^{T}W=1,即W^{T}=W^{-1}

        推出    A=W\sum W^{T}

        因为A^{T}A是一个方阵,可以进行特征分解,所以\left (A^{T}A \right )v_{i}=\lambda _{i}v_{i}

        因此可以得到A^{T}A的所有特征向量组成的矩阵V_{n*n}

        因为A^{T}A_{m*m}也是一个方阵,可以进行特征值分解,所以\left (A^{T}A \right )u_{i}=\lambda _{i}u_{i}

        同理可以得到U_{m*m}

        又因为A=U\sum V\rightarrow AV=U\sum V^{T}V\rightarrow AV=U\sum\rightarrow Av_{i}=\sigma _{i}u_{i}\rightarrow \sigma _{i}=\frac{Av_{i}}{u_{i}}

        所以可以求得\sum

        或者可求A^{T}A的特征值取平方根来求

        因为A_{m*n}=U_{m*m}\sum _{m*n}V_{n*n}^{T}\doteq U_{m*k}\sum _{k*k}V_{k*n}^{T}   ,k<<n

        大矩阵可以用三个小矩阵来表示

        左奇异矩阵U可以用来做行压缩

        右奇异矩阵V可以用来来列压缩,即特征维度压缩

注:Sklearn 的 PCA 就是用 SVD 进行求解的

        当样本维度很高时,协方差矩阵计算太慢

        方阵特征值分解计算效率不高

         SVD 除了特征值分解这种求解方式外,还有更高效更准球的迭代求解方式,避免了A^{T}A

的计算

        其实 PCA 与 SVD 的右奇异向量的压缩效果相同。

 以上内容均来源于各个版主、牛客网总结

      

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值