卷积神经网络的压缩

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

附下载文档地址: 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

小结

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

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

原文发布于微信公众号 - PaddlePaddle(PaddleOpenSource)

原文发表时间:2018-05-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏机器学习算法工程师

如何训练深度神经网络?

译文:《How to train your Deep Neural Network》

1132
来自专栏机器之心

就喜欢看综述论文:情感分析中的深度学习

6349
来自专栏目标检测和深度学习

94页论文综述卷积神经网络:从基础技术到研究前景

机器之心编译 参与:Panda 卷积神经网络(CNN)在计算机视觉领域已经取得了前所未有的巨大成功,但我们目前对其效果显著的原因还没有全面的理解。近日,约克大...

3837
来自专栏机器之心

入门 | 10个例子带你了解机器学习中的线性代数

1476
来自专栏AI科技大本营的专栏

AI 技术讲座精选:菜鸟学深度学习(一)

【AI100 导读】在本系列中,你将会学习如何利用深度学习解决那些比较简单的问题。在解决问题的过程中,你不仅会学到深度学习中的某一种类型,也可以在 Keras ...

3628
来自专栏SIGAI学习与实践平台

视觉多目标跟踪算法综述(上)-附开源代码下载链接整理

目标跟踪是机器视觉中一类被广为研究的重要问题,分为单目标跟踪与多目标跟踪。前者跟踪视频画面中的单个目标,后者则同时跟踪视频画面中的多个目标,得到这些目标的运动轨...

9883
来自专栏机器之心

学界 | 优于MobileNet、YOLOv2:移动设备上的实时目标检测系统Pelee

2028
来自专栏大数据文摘

目标检测101:一文带你读懂深度学习框架下的目标检测

1714
来自专栏人工智能头条

用AI给裸女自动“穿”上比基尼,妈妈再也不担心我“辣眼睛”了

互联网的内容繁杂,一不小心就会看到一些“辣眼睛”的内容,比如裸女,这也是为什么我们需要审核人员的存在。当然,受益于 AI 技术的发展,现在很多审核工作已经自动化...

861
来自专栏华章科技

给初学者的深度学习简介

深度学习是计算机领域中目前非常火的话题,不仅在学术界有很多论文,在业界也有很多实际运用。本篇博客主要介绍了三种基本的深度学习的架构,并对深度学习的原理作了简单的...

1514

扫码关注云+社区

领取腾讯云代金券