首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >卷积神经网络的压缩

卷积神经网络的压缩

作者头像
用户1386409
发布2018-07-26 10:04:39
9180
发布2018-07-26 10:04:39
举报
文章被收录于专栏:PaddlePaddlePaddlePaddle

正文部分系《解析卷积神经网络——深度学习实践手册》基础理论篇部分,本次将介绍卷积神经网络压缩的具体途径

附下载文档地址: http://lamda.nju.edu.cn/weixs/book/CNN_book.pdf

学习卷积神经网络压缩的必要性

1虽然云计算可以将一部分计算需求转移到云端,但对于一些高实时性计算场景而言,云计算的带宽、延迟和全时可用性均面临着严峻的挑战,从而无法替代本地计算。

2另一方面,许多研究表明,深度神经网络面临着严峻的过参数化, 模型内部参数存在着巨大的冗余。

1

低秩近似(p66-67页)

若能将该稠密矩阵由若干个小规模矩阵近似重构出来,那么便能有效降低存储和计算开销。由于这类算法大多采用低秩近似的技术来重构权重矩阵,我们将其归类为低秩近似算法

Sindhwani等人提出使用结构化矩阵来进行低秩分解的算法。结构化矩阵是一系列拥有特殊结构的矩阵,如Toeplitz矩阵,该矩阵的特点是任意一条平行于主对角线的直线上的元素都相同。他们使用Toeplitz矩阵来近似重构原权重矩阵,而每一个Toeplitz矩阵T都可以通过置换操作如使用Sylveste:替换算子)转化为一个非常低秩(例如秩小于等于2)的矩阵。

另外一种比较简便的做法是直接使用矩阵分解来降低权重矩阵的参数。如Demon等人提出使用奇异值分解来重构全连接层的权重。其基本思路是先对权重矩阵进行SVD分解。

思考:低秩近似算法在中小型网络模型上取得了很不错的效果,但其超参数量与网络层数呈线性变化趋势,随着网络层数的增加与模型复杂度的提升,其搜索空间会急剧增大。当面对大型神经网络模型时,是否仍能通过近似算法来重构参数矩阵,并使得性能下降保持在一个可接受范围内?最终的答案还是有待商榷的。

2

剪枝与稀疏约束(p67-71)

给定一个预训练好的网络模型,常用的剪枝算法一般遵从如下的操作流程:

1.衡量神经元的重要程度—这也是剪枝算法中最重要的核心步骤。根据剪枝粒度(granularity)的不同,神经元的定义可以是一个权重连接,也可以是整个滤波器。衡量其重要程度的方法也是多种多样,从一此基本的启发式算法,到基于梯度的方案,其计算复杂度与最终的效果也是各有千秋

2.移除掉一部分不重要的神经元。根据上一步的衡量结果,剪除掉部分神经元。这里可以根据某个1}7值来判断神经元是否可以被剪除,也可以按重要程度排序,剪除掉一定比例的神经元。一般而言,后者比前者更加简便,灵活性也更高。

3.对网络进行微调。由于剪枝操作会不可避免地影响网络的精度,为防止对分类性能造成过大的破坏,需要对剪枝后的模型进行微调。对于大规模图像数据集而言,微调会占用大量的计算资源。对网络微调到什么程度,也是一件需要斟酌的事情。

基于如上循环剪枝框架,Han等人提出了一个简单而有效的策略。他们首先将低于某个阈值的权重连接全部剪除。他们认为如果某个连接的权重值过低,则意味着该连接并不十分重要,因而可以被移除。之后对剪枝后的网络进行微调以完成参数更新。如此反复迭代,直到在性能和规模上达到较好的平衡。最终,在保持网络分类精度不下降的情况下,可以将参数数量减少9~11倍。

与此同时,利用稀疏约束来对网络进行剪枝也成为了一个重要的研究方向。稀疏约束与直接剪枝在效果上有着异曲同工之妙,其思路是在网络的优化目标中加人权重的稀疏正则项,使得训练时网络的部分权重趋向于0,而这些0值元素正是剪枝的对象。因此,稀疏约束可以被视作为动态的剪枝。相对于剪枝的循环反复操作,稀疏约束的优点显而易见:只需进行一遍训练,便能达到网络剪枝的目的。

思考:总体而言,剪枝是一项有效减小模型复杂度的通用压缩技术,其关键之处在于如何衡量个别权重对于整体模型的重要程度。另一方面,由于剪枝操作对网络结构的破坏程度极小,这种良好的特性往往被当做网络压缩过程的前端处理。将剪枝与其他后端压缩技术相结合,能够达到网络模型的最大程度压缩。

3

参数量化(p71-74)

标量量化:最简单也是最基本的一种量化算法。该算法的基本思路是,对于每一个权重矩阵W∈Rm×n ,首先将其转化为向量形式:W∈R1×mn。之后对该权重向量的元素进行k个簇的聚类,这可借助于经典的k-均值聚类算法快速完成。

向量量化:向量量化:为了避免标量量化能力有限的弊端,也有很多算法考虑结构化的向量量化方法。其中最常用的一种算法是乘积量化。该算法的基本思路是先将向量空间划分为若干个不相交的子空间,之后依次对每个子空间执行量化操作。即先按照列方向(行方向亦可)将权重矩阵W划分为s个子矩阵:Wi∈Rm×(n/s)之后对Wi的每一行进行聚类。Wu等人以此为基础,设计了一种通用的网络量化算法:Q CNN。由于乘积量化只考虑了网络权重本身的信息,与输人输出无直接关联。这很容易造成量化误差很低,但网络的分类性能却很差的情况。为此,Wu等人认为,最小化每一层网络输出的重构误差,比最小化该层参数的量化误差更加有效。

以上所介绍的基于聚类的参数量化算法,其本质思想是将多个权重映射到同一个数值,从而实现权重共享,降低存储开销的目的。权重共享是一项十分经典的研究课题,除了用聚类中心来代替该聚类簇的策略外,也有研究人员考虑使用哈希技术来达到这一目的。

思考:综合来看,参数量化作为一种常用的后端压缩技术,能够以很小的性能损失实现模型体积的大幅下降。其不足之处在于,量化后的网络是“固定”的,很难再对其做任何改变。另一方面,这一类方法的通用性较差,往往是一种量化方法对应于一套专门的运行库,造成了较大的维护成本。

4

二值网络(p75-77)

二值网络可以被视为量化方法的一种极端情况:所有参数的取值只能是去±1。正是这种极端的设定,使得二值网络能够获得极大的压缩效益。

首先,在普通的神经网络中,一个参数是由单精度浮点数来表示的,参数的二值化能将存储开销降低为原来的1/32。其次,如果中间结果也能二值化的话,那么所有的运算仅靠位操作便可完成。借助于同或门(XNOR gate)等逻辑门元件便能快速完成所有的计算。而这一优点是其余压缩方法所不能比拟的。深度神经网络的一大垢病就在于其巨大的计算代价,如果能够获得高准确度的二值网络,那么便可摆脱对GPU等高性能计算设备的依赖。

在模型的训练过程中,存在着两种类型的权重,一是原始的单精度权重,二是由该单精度权重得到的二值权重。在前向过程中,首先对单精度权重进行二值化,由二值权重与输入进行卷积运算(实际上只涉及加法),获得该层的输出。在反向更新时,则根据放松后的符号函数,计算相应的梯度值,并根据该梯度值对单精度的权重进行参数更新。由于单精度权重发生了变化,所对应的二值权重也会有所改变,从而有效解决了二值网络训练困难的问题。

5

知识蒸馏(p77-79)

“知识蒸馏”其实是迁移学习的一种,其最终目的是将一个庞大而复杂的模型所学到的知识,通过一定的技术手段迁移到精简的小模型上,使得小模型能够获得与大模型相近的性能。这两种不同规模的网络,分别扮演着“学生”和“老师”的角色:如果完全让“学生”(小模型)自学的话,往往收效甚微;但若能经过一个“老师”(大模型)的指导,学习的过程便能事半功倍,“学生”甚至有可能超越“老师”。

在知识蒸馏的框架中,有两个基本要素起着决定性的作用:一是何谓“知识”,即如何提取模型中的知识;一是如何“蒸馏”,即如何完成知识转移的任务。

6

紧凑的网络结构(p79-81)

更加紧凑的网络结构,运用到神经网络的设计中来,能够使得模型在规模与精度之间达到一个较好的平衡。为了追求更少的模型参数,Iandola等人设计了一种名为“Fire Module”的基本单元,并基于这种结构单元提出了SqueezeNet 。

“Fire Module"”的基本结构如图所示,该结构主要分为两部分

1.“挤压”:特征维度的大小对于模型容量有着较大的影响,维度不够高时,

模型的表示能力便会受到限制。但高维的特征会直接导致卷积层参数的急剧增加。为追求模型容量与参数的平衡,可使用1x1的卷积来对输人特

征进行降维。同时,1x1的卷积可综合多个通道的信息,得到更加紧凑的输人特征,从而保证了模型的泛化性;

2.“扩张”:常见网络模型的卷积层通常由若干个了大量的计算资源。这里为了减少网络参数,3x3的卷积核构成,占用同时也为了综合多种空间结构信息,使用了部分1x1的卷积来代替3x3的卷积。为了使得不同卷积核的输出能够拼接成一个完整的输出,需要对3x3的卷积输人配置合适的填充像素;

7

小结

本章从“前端压缩”与“后端压缩”两个角度分别介绍了网络模型压缩技术中的若干算法,这此算法有着各自不同的应用领域与压缩效果;

低秩近似、剪枝与参数量化作为常用的三种压缩技术,已经具备了较为明朗的应用前景;其他压缩技术,如二值网络、知识蒸馏等尚处于发展阶段。不过随着深度学习相关技术的迅猛发展,我们有理由相信,将深度学习技术应用到更便捷的嵌人式设备中将变得不再遥远。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-05-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 PaddlePaddle 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档