前言:
这是关于模型剪枝(Network Pruning)的一篇论文,论文题目是:Learning both weights and connections for efficient neural networks,作者在论文中提出了一种通过网络剪枝对模型进行压缩的思路,详细地描述了模型剪枝的思路,流程和方法。
论文地址:Learning both weights and connections for efficient neural networks
论文题目:学习权重和连接以提高神经网络的效率
摘要
神经网络需要大量计算, 又占用大量内存, 因此难以在嵌入式系统上部署。另外, 传统网络在训练开始前就确定了体系结构;因此, 训练无法改善体系结构。为了解决这些限制, 我们描述了一种减少神经网络所需的存储和计算的方法, 而不影响它们的准确性, 只学习重要的连接。我们的方法使用三个步骤来修剪冗余连接。首先, 我们训练网络来了解哪些连接是重要的。接下来, 我们修剪不重要的连接。最后, 我们重新训练网络, 以微调其余连接的权重。在 ImageNet 数据集上, 相比于AlexNet 我们的方法减少了 9x的参数(从6100万到 670万),而不会导致精度损失。在 VGG16网络基础上做 类似的实验发现, 整个网络可以在没有丢失准确性的情况下减少 13x的参数。
1 简介
神经网络已无处不在,其应用范围从计算机视觉 [1] 到语音识别 [2] 和自然语言处理 [3]。通过卷积神经网络用于计算机视觉的方法已经发展了很长时间了。在 1998年 Lecun 分类手写数字以少于1M 参数 [4], 而在 2012年, Krizhevsky 等 [1] 赢取了 ImageNet 竞争以60M 参量。Deepface 分类人的面孔与120M 参量 [5], 并且蔻茨等。 [6] 放大网络到10B 参量。
虽然这些大的神经网络非常有用, 但它们消耗大量的存储、内存带宽和计算资源。对于嵌入式移动应用程序来说, 这些资源非常宝贵。我们修剪网络的目标是减少运行这样大型网络所需的资源, 以便它们能够在移动设备上实时运行.
为了实现这一目标, 我们提出了一种方法, 以保留原始精度的方式修剪网络连接。在初始训练阶段后, 我们删除所有的权重低于阈值的连接。此修剪将稠密的完全连接层转换为稀疏图层。这一阶段学习网络的拓扑, 即了解哪些连接是重要的, 并删除不重要的连接。然后, 我们重新训练稀疏网络, 以便其余的连接可以补偿已删除的连接。修剪和再训练的阶段可以反复重复, 以进一步减少网络复杂性。实际上, 这个训练过程和人类大脑的发展也非常类似, 神经元突触在孩子的发育的前几个月大量产生, 并在接下来的时间里逐渐修剪不常使用的连接, 逐渐发育成适合所生存世界的成年人。
2 相关工作
深度神经网络明显有非常大的冗余。这就导致了计算和内存使用的浪费。有各种各样的方法来消除冗余: Vanhoucke 等. [11] 探索了一个带有8位整数 (vs 32 位浮点) 激活的定点实现。丹顿等人 [12] 利用神经网络的线性结构, 通过寻找参数的适当的低秩逼近, 并保持在原始模型的1% 内的准确性。与类似的精度损失, 锣等人 [13] 使用矢量量化压缩深度模型, 减少存储, 但由于访问codebook而增加了一级间接的内存索引。这些逼近和量化技术与网络修剪是正交的, 它们可以一起使用来获得更好的压缩效果。
还有其他试图通过将完全连通的层替换为全局平均池来减少神经网络参数的数量。网络体系结构 [14] 和 GoogLenet [15] 通过采纳这个想法在几个指标上达到最先进的结果。但是, 这种方法使得迁移学习, 即复用从ImageNet 数据集上所学到的特征, 并仅通过微调全连接层将它们应用到新任务中变得更加困难。这个问题是由 Szegedy 和 al [15] 指出的, 并使他们产生了在网络顶部增加一个线性层, 以实现迁移学习的灵感。
网络修剪已被用于减少网络复杂性和减少过度拟合。修剪的早期的方法是有偏权重衰减 [16](翻译可能不准确)。Optimal Brain Damage [17] 和Optimal Brain Surgeon [18] 基于损失函数的海森矩阵来修剪网络结构,减少连接的数量, 并且建议这样修剪比基于等级的修剪是更加准确。然而, 计算二重导数对于今天的大规模神经网络来说是困难的。
Dropout [19] 和 DropConnect [20] 零激活和连接在网络减少过度拟合而不是提高效率。在 [21] 中的开头部分描述了类似的方法。Dropout不论是在最初的目的还是在它的训练过程中通过断开连接或激活层(稠密层仍然是稠密层, 在部署时没有参数保存)而不是修剪他们这两方面来说,都:不同于我们的方法。
HashedNets [22] 是最近的一种方法, 通过使用哈希函数将连接权重随机分组到哈希桶中来减少模型大小, 以便同一哈希桶内的所有连接共享单个参数值。这种技术可以从修剪中受益。正如在石等人 [23] 和温伯格等 [24] 中指出的, 稀疏性将最小化哈希碰撞使特征哈希更有效。HashedNets 可以与修剪一起使用, 以提供更好的参数节约。
3 除学习权重之外还学习怎样连接【本论文最重要的部分,剪枝的方法和步骤】
我们的修剪方法采用了三个步骤, 如图2所示, 它开始时通过常规的训练学习连接。然而, 与常规训练不同的是, 我们没有学习权重的最终值, 而是学习哪些连接是重要的。
图 2: 三步训练流程图 3: 修剪前后的突触和神经元
第二步是修剪低权重的连接。所有权重低于阈值的连接都将从网络中删除,将稠密网络转换为稀疏网络, 如图3所示。
最后一步重新训练网络剩余稀疏连接的最终权重。这一步很关键,因为如果修剪后的网络没有再训练, 准确性会受到显著影响。
3.1 正则化
所选择的正则化形式会影响修剪和再训练的效果。L1 正则化惩罚非零参数导致更多参数接近零。这样可以在修剪后得到更好的精确度, 但在再训练之前。然而, 其余的连接并不像 L2 正则化那样好, 从而在再训练后的准确度降低。
3.2 Dropout和Capacity Control
Dropout被广泛用于防止过拟合, 这也适用于再训练。然而, 在再训练期间, 必须调整Dropout率, 以匹配模型的变化。韩丁的Dropout [19] 可以被视为一个 “软Dropout”, 因为对于每次训练,每个参数概率都有概率被取消连接,而不是训练之前就指定了一些Dropout的参数。修剪可以被视为一个 “硬Dropout”, 其中的参数是永远被修剪,而且没有机会在重新参与训练。当参数变得稀疏时, 分类器将选择最具信息量的预测因子, 因而具有更少的预测方差, 从而减少了过度拟合。由于修剪已经降低了模型容量, 再训练的时候Dropout率应该更小。
量化, 令 Ci 为第i层的参数个数 , Cio 是原始网络的参数个数, Cir 再训练后的网络的参数个数, Ni 是第i层中的神经元个数。由于Dropout对神经元起作用, 并且 Ci 与 i有一个正交关系?, 因此根据等式 1, 修剪后的Dropout率参数应遵循等式 2, 其中 Do 表示原始的Dropout率, Dr 表示在再训练后的Dropout率。
3.3 本地修剪和参数互相适应?(以下这两段翻译可能不是很准)
在再训练过程中, 最好是保留从初始训练阶段的权重, 而不是重新初始化修剪层的连接。[25] 显示 CNNs 包含脆弱的共同适应的特征: 梯度下降在网络最初被训练时能找到一个好的权值, 但在重新初始化一些层和再训练他们以后就不行了。因此, 如果我们重新初始化修剪层, 我们就必须重新训练整个网络;如果我们只对修剪过的层进行再训练, 我们需要重新训练, 同时重新训练保留下来的参数。
从保留权重的修剪层开始再训练需要较少的计算量, 因为我们不必在整个网络中进行反向传播。而且, 随着网络深度的加深, 神经网络容易遇到梯度消失问题 [26], 这使得修剪错误难以恢复为深层网络。为了防止这种情况的发生, 我们固定了部分网络的参数, 并仅通过重用已在初始训练过程中与未修剪的层相适应的参数来重新训练浅层网络。
3.4 迭代修剪
学习正确的连接是一个迭代过程。修剪紧接着再训练是一轮迭代, 在许多轮这样的迭代之后, 可以找到最小数目的连接。如果没有精度损失, 则此方法可以把AlexNet模型从一次修剪的压缩5×提升到压缩9×。每次迭代都是贪婪的搜索, 因为我们找到了最好的连接。我们还试验了基于概率修剪参数的绝对值, 但这给出了更糟糕的结果.
3.5 修剪神经元
修剪连接后, 可以放心地修剪零输入连接或零输出连接的神经元。通过去除与修剪过的神经元的所有连接来进一步修剪。再训练阶段将自动使没用的神经元同时具有零输入连接和零输出连接。这是由梯度下降和正则化造成的。具有零输入连接 (或零输出连接) 的神经元将不会对最终损失作出贡献, 从而使渐变的输出连接 (或输入连接) 分别为零。只有正则化才会将权重置零。因此, 在再训练过程中,没用的神经元将被自动删除。
4 实验
(略:以后有时间有必要可能会补充)
5 结束语
本文提出了一种通过找到正确的连接来提高神经网络的效率而不影响准确性的方法。我们的方法,一 部分灵感来源于哺乳动物大脑的工作方式, 通过学习哪些连接是重要的, 修剪不重要的连接, 然后再训练剩余的稀疏网络来操作。我们在 ImageNet 上突出显示了 AlexNet 上的实验, 表明可以修剪全连接层和卷积层, 从而减少9×的参数,而不损失准确度。我们在VGG16 和 LeNet 网络展示了类似的结果,他们被压缩了 13× ,而没有精确度损失。这将会使对实时图像处理的内存容量和带宽要求更小。
最后总结几句:
1、这篇论文提出了一个比较新奇的修剪参数的办法。
2、即使不搞深度学习相关的工作,这篇论文也具有一定的启发性,比如说作者的了灵感正是来自于人类大脑的发展原理,又一次证明了在研究过程中,培养跨学科思维的重要性。
6 参考资料:
[1] Alex Krizhevsky, Ilya Sutskever, and Geoffrey E Hinton. Imagenet classification with deep convolutional
neural networks. In Advances in neural information processing systems, pages 1097–1105, 2012.
[2] Alex Graves and Jurgen Schmidhuber. Framewise phoneme classification with bidirectional lstm and other ¨
neural network architectures. Neural Networks, 18(5):602–610, 2005.
[3] Ronan Collobert, Jason Weston, Leon Bottou, Michael Karlen, Koray Kavukcuoglu, and Pavel Kuksa. ´
Natural language processing (almost) from scratch. The Journal of Machine Learning Research, 12:2493–
2537, 2011.
[4] Yann LeCun, Leon Bottou, Yoshua Bengio, and Patrick Haffner. Gradient-based learning applied to
document recognition. Proceedings of the IEEE, 86(11):2278–2324, 1998.
[5] Yaniv Taigman, Ming Yang, Marc’Aurelio Ranzato, and Lior Wolf. Deepface: Closing the gap to
human-level performance in face verification. In CVPR, pages 1701–1708. IEEE, 2014.
[6] Adam Coates, Brody Huval, Tao Wang, David Wu, Bryan Catanzaro, and Ng Andrew. Deep learning with
cots hpc systems. In 30th ICML, pages 1337–1345, 2013.
[7] Mark Horowitz. Energy table for 45nm process.
[8] JP Rauschecker. Neuronal mechanisms of developmental plasticity in the cat’s visual system. Human
neurobiology, 3(2):109–114, 1983.
[9] Christopher A Walsh. Peter huttenlocher (1931-2013). Nature, 502(7470):172–172, 2013.
[10] Misha Denil, Babak Shakibi, Laurent Dinh, Nando de Freitas, et al. Predicting parameters in deep learning.
In Advances in Neural Information Processing Systems, pages 2148–2156, 2013.
[11] Vincent Vanhoucke, Andrew Senior, and Mark Z Mao. Improving the speed of neural networks on cpus.
In Proc. Deep Learning and Unsupervised Feature Learning NIPS Workshop, 2011.
[12] Emily L Denton, Wojciech Zaremba, Joan Bruna, Yann LeCun, and Rob Fergus. Exploiting linear structure
within convolutional networks for efficient evaluation. In Advances in Neural Information Processing
Systems, pages 1269–1277, 2014.
[13] Yunchao Gong, Liu Liu, Ming Yang, and Lubomir Bourdev. Compressing deep convolutional networks
using vector quantization. arXiv preprint arXiv:1412.6115, 2014.
[14] Min Lin, Qiang Chen, and Shuicheng Yan. Network in network. arXiv preprint arXiv:1312.4400, 2013.
[15] Christian Szegedy, Wei Liu, Yangqing Jia, Pierre Sermanet, Scott Reed, Dragomir Anguelov, Dumitru
Erhan, Vincent Vanhoucke, and Andrew Rabinovich. Going deeper with convolutions. arXiv preprint
arXiv:1409.4842, 2014.
[16] Stephen Jose Hanson and Lorien Y Pratt. Comparing biases for minimal network construction with ´
back-propagation. In Advances in neural information processing systems, pages 177–185, 1989.
[17] Yann Le Cun, John S. Denker, and Sara A. Solla. Optimal brain damage. In Advances in Neural Information
Processing Systems, pages 598–605. Morgan Kaufmann, 1990.
[18] Babak Hassibi, David G Stork, et al. Second order derivatives for network pruning: Optimal brain surgeon.
Advances in neural information processing systems, pages 164–164, 1993.
[19] Nitish Srivastava, Geoffrey Hinton, Alex Krizhevsky, Ilya Sutskever, and Ruslan Salakhutdinov. Dropout:
A simple way to prevent neural networks from overfitting. Journal of Machine Learning Research,
15:1929–1958, 2014.
[20] Li Wan, Matthew Zeiler, Sixin Zhang, Yann L Cun, and Rob Fergus. Regularization of neural networks
using dropconnect. In ICML, pages 1058–1066, 2013.
[21] Hans Henrik Thodberg. Improving generalization of neural networks through pruning. International
Journal of Neural Systems, 1(04):317–326, 1991.
[22] Wenlin Chen, James T. Wilson, Stephen Tyree, Kilian Q. Weinberger, and Yixin Chen. Compressing neural
networks with the hashing trick. arXiv preprint arXiv:1504.04788, 2015.
[23] Qinfeng Shi, James Petterson, Gideon Dror, John Langford, Alex Smola, and SVN Vishwanathan. Hash
kernels for structured data. The Journal of Machine Learning Research, 10:2615–2637, 2009.
[24] Kilian Weinberger, Anirban Dasgupta, John Langford, Alex Smola, and Josh Attenberg. Feature hashing
for large scale multitask learning. In ICML, pages 1113–1120. ACM, 2009.
[25] Jason Yosinski, Jeff Clune, Yoshua Bengio, and Hod Lipson. How transferable are features in deep
neural networks? In Z. Ghahramani, M. Welling, C. Cortes, N.d. Lawrence, and K.q. Weinberger, editors,
Advances in Neural Information Processing Systems 27, pages 3320–3328. Curran Associates, Inc., 2014.
[26] Yoshua Bengio, Patrice Simard, and Paolo Frasconi. Learning long-term dependencies with gradient
descent is difficult. Neural Networks, IEEE Transactions on, 5(2):157–166, 1994.
9[27] Yangqing Jia, Evan Shelhamer, Jeff Donahue, Sergey Karayev, Jonathan Long, Ross Girshick, Sergio
Guadarrama, and Trevor Darrell. Caffe: Convolutional architecture for fast feature embedding. arXiv
preprint arXiv:1408.5093, 2014.
[28] Zichao Yang, Marcin Moczulski, Misha Denil, Nando de Freitas, Alex Smola, Le Song, and Ziyu Wang.
Deep fried convnets. arXiv preprint arXiv:1412.7149, 2014.
[29] Maxwell D Collins and Pushmeet Kohli. Memory bounded deep convolutional networks. arXiv preprint
arXiv:1412.1442, 2014.
[30] Karen Simonyan and Andrew Zisserman. Very deep convolutional networks for large-scale image recognition. CoRR, abs/1409.1556, 2014