百面深度学习 | 第十六期:深度网络压缩
“百面深度学习”系列连载 第十六期
深度网络压缩
引言
近几年,深度网络在各个研究领域中发挥了重要的作用,如视觉领域中的图像分类、视频分析;文字领域中的文本翻译、语音识别等。然而,大部分的深度网络结构都有着大量参数,例如,经典的 VGG16 网络结构,它有着 60M 个参数,使用较为广泛的 Resnet50 网络,也有着 25M 的参数。这使得深度网络面临着存储和计算消耗的瓶颈,使其无法在移动及嵌入式设备(如手机、芯片等) 中使用。
深度网络中有着大量的参数冗余,这种现象被称之为深度网络的过参数化。过参数化是深度网络公认的特性 [1]。因此,这使得网络压缩,让网络更为紧凑变得十分重要。如何压缩网络才能够在减少模型存储空间、降低运算时间和内存消耗的同时,尽可能保持网络在各个任务中的性能呢?使用不同的方法、从不同角度进行网络压缩成为了研究领域近几年来的热点话题。
问题
针对神经网络,
可以从哪些方面进行加速及压缩?
分析与解答
深度神经网络的复杂性及可移植性直接影响了人工智能算法在硬件设备上的应用。因此,网络压缩技术越来越受重视。对深度网络进行加速及压缩可以从以下几个方面入手:1)网络参数剪枝 2)矩阵的低秩近似 3)卷积核/滤波器选择 4)量化及编码 5)知识蒸馏 6)设计新的网络结构等。
1)网络参数剪枝
网络裁剪的核心思想是去掉响应或区分能力较低的不重要的神经元,以降低网络的权重参数。该方法不需要改变原始的网络结构,可以直接用于压缩现有的模型。典型的参数裁剪包含三个步骤:训练一个大型深度网络、设计裁剪策略修剪模型、再训练裁剪后的网络结构。Han 等人 [2] 设置了裁剪阈值,根据连接权重的大小进行裁剪。当权重小于阈值时,直接将参数置 0,并不进行更新及反向传播。然而,参数的重要性是随着剪枝后的网络结构的变化而变化的,一旦重要的分支被裁剪就难以恢复。因此,Yiwen Guo 等人设计了动态的网络裁剪方法 [3],该方法不仅能裁剪掉不重要的网络参数,还能恢复出已经被裁剪的但是在当前网络结构下重要的分支。
2)矩阵的低秩近似
3)卷积核/滤波器选择
在剪枝时,我们将一个连接权重作为一个单元进行裁剪,那么如果我们将整个卷积核/滤波器作为一个单元,是否可以通过减少卷积核的个数进行网络裁剪呢?同裁剪单个神经元不同,在卷积核的数量减少的同时,计算出的特征图的大小也会相应减小。而特征图尺寸的减小会进一步地加快网络的计算速度。针对卷积核的裁剪,最直观的做法是利用卷积核权重信息 [11] 或特征图信息 [12]进行卷积核筛选。可惜的是这两种方法都没有考虑到卷积核的裁剪会给下一层的运算带来什么样的影响。基于这种考虑,ThiNet[13] 提出如果利用输入数据的一个子集,就能获得和原始输出近似的结果,那么其它的输入数据可以被剔除。相应地,被剔除的输入数据对应的输出特征和卷积核也可以被裁剪掉。利用这种裁剪策略既可以降低由于裁剪所带来的影响,也可以达到模型压缩的效果。
4)量化及编码
同我们在前面讨论的那样,很多的深度网络压缩工作都会使用量化的方法。剪枝操作与量化编码操作是相互独立的,同时使用会获得更为紧凑的网络结构。除了标量量化、矢量量化及乘积量化等通用的量化方法,还有一些工作设计了专门针对深度网络的量化方法,其中较为经典的一个量化方法是 INQ(Incremental Network Quantization) [14]。 INQ 提出了渐进的神经网络量化方法,步骤包括参数分组、量化及再训练。该方法对于每一层的权重分成了两部分,其中一部分被直接量化,另一部分通过再训练来弥补量化带来的精度损失。通过不断的迭代上述量化过程,直到整个网络被压缩。该方法能够实现对任意结构的全浮点数神经网络模型进行性能无损的低比特量化。经过量化的网络可以使用二进制表示,使得神经网络在硬件设备上的部署和加速更加便利。此外,二值网络技术也越来越成熟,BinaryNet [15] 及 XNORNet [16] 方法相应被提出。
5)知识蒸馏
针对网络压缩,除了剪枝及量化编码方法,较为直观的方法还包括知识蒸馏 [17]。知识蒸馏通常是希望使用大的、复杂的“老师”网络迁移学习到一个小的、简单的“学生”网络结构。大部分使用知识蒸馏进行网络压缩的方法,通常是数据驱动的,并需要设计一个特定的损失函数在相应的数据集上进行再训练。通常,我们使用交叉熵作为网络压缩的目标函数。该目标函数包含两部分,不仅需要利用训练样本的标签进行交叉熵计算,还要同“老师”网络的输出进行交叉熵计算。
6)设计新的网络结构
目前,很多新型网络结构的设计,都包含了网络压缩的思想。例如,SqueezeNet 和 MobileNet 设计了 1∗1 卷积核来降低卷积核参数的冗余。Xception [18] 设计了深度可分离卷积(Depthwise Separable Convolution),将卷积操作拆分为深度卷积 (depthwise convolution) 及点乘卷积 (pointwise convolution),以降低参数量及计算成本。
现在很多方法的设计都与硬件紧密相关。人们不再盲目的追求强大的性能,而是希望能够设计尽可能小的、快速的网络结构来替代大型网络。正如前面提到的,从不同的角度入手,可以创造出大量的深度网络压缩方法。在这些修剪方法中,也有着一些有意思的问题。例如,在分支修剪的方法中,研究人员设计了不同的剪枝策略。然而,Zhuang Liu 等人表示,使用继承权重并对修剪后的模型再训练并不会比从头开始训练网络获得更好的性能 [19]。并且,当再训练数据集及压缩率固定后,不同的方法往往获得相似的性能。目前,为了保持网络性能,大部分的网络压缩加速方法,都需要使用额外的数据进行网络的再训练。如何设计出不需要再训练的有效的网络压缩方法,仍然有待探索。
[1] DENIL M, SHAKIBI B, DINH L, 等. Predicting parameters in deep learning[C]//Advances in neural information processing systems. 2013: 2148–2156.
[2] HAN S, MAO H, DALLY W J. Deep compression: Compressing deep neural networks with pruning, trained quantization and huffman coding[J]. arXiv preprint arXiv:1510.00149, 2015.
[3] GUO Y, YAO A, CHEN Y. Dynamic network surgery for efficient dnns[C]//Advances In Neural Information Processing Systems. 2016: 1379–1387.
[4] WEN W, XU C, WU C, 等. Coordinating filters for faster deep neural networks[C]//Proceedings of the IEEE International Conference on Computer Vision. 2017: 658–666.
[5] DENTON E L, ZAREMBA W, BRUNA J, 等. Exploiting linear structure within convolutional networks for efficient evaluation[C]//Advances in neural information processing systems. 2014: 1269–1277.
[6] KIM Y-D, PARK E, YOO S, 等. Compression of deep convolutional neural networks for fast and low power mobile applications[J]. arXiv preprint arXiv:1511.06530, 2015.
[7] JADERBERG M, VEDALDI A, ZISSERMAN A. Speeding up convolutional neural networks with low rank expansions[J]. arXiv preprint arXiv:1405.3866, 2014.
[8] SZEGEDY C, VANHOUCKE V, IOFFE S, 等. Rethinking the inception architecture for computer vision[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2016: 2818–2826.
[9] ZHANG X, ZOU J, HE K, 等. Accelerating very deep convolutional networks for classification and detection[J]. IEEE transactions on pattern analysis and machine intelligence, IEEE, 2016, 38(10): 1943–1955.
[10] SZEGEDY C, LIU W, JIA Y, 等. Going deeper with convolutions[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2015: 1–9.
[11] LI H, KADAV A, DURDANOVIC I, 等. Pruning filters for efficient convnets[J]. arXiv preprint arXiv:1608.08710, 2016.
[12] HU H, PENG R, TAI Y-W, 等. Network trimming: A data-driven neuron pruning approach towards efficient deep architectures[J]. arXiv preprint arXiv:1607.03250, 2016.
[13] LUO J-H, WU J, LIN W. Thinet: A filter level pruning method for deep neural network compression[C]//Proceedings of the IEEE international conference on computer vision. 2017: 5058–5066.
[14] ZHOU A, YAO A, GUO Y, 等. Incremental network quantization: Towards lossless cnns with low-precision weights[J]. arXiv preprint arXiv:1702.03044, 2017.
[15] COURBARIAUX M, HUBARA I, SOUDRY D, 等. Binarized neural networks: Training deep neural networks with weights and activations constrained to+ 1 or-1[J]. arXiv preprint arXiv:1602.02830, 2016.
[16] RASTEGARI M, ORDONEZ V, REDMON J, 等. Xnor-net: Imagenet classification using binary convolutional neural networks[C]//European Conference on Computer Vision. Springer, 2016: 525–542.
[17] BA J, CARUANA R. Do deep nets really need to be deep?[C]//Advances in neural information processing systems. 2014: 2654–2662.
[18] CHOLLET F. Xception: Deep learning with depthwise separable convolutions[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2017: 1251–1258.
[19] LIU Z, SUN M, ZHOU T, 等. Rethinking the value of network pruning[J]. arXiv preprint arXiv:1810.05270, 2018.
今天没有下期预告
因为这是“百面深度学习”连载的最后一期
感谢你一路追更
与我们共同学习
《百面深度学习》一书
预计将在2019年7月下旬上市
敬请期待
关注Hulu公众号
你就是最爱学习的仔~