深度压缩网络 | 较大程度减少了网络参数存储问题

神经网络是计算密集型和内存密集型,很难使它们用有限的硬件资源去部署在嵌入式系统中。为了解决这种限制,本文引入“深度压缩”,一共有三个阶段的流水线:剪枝量化霍夫编码,它们一起工作去减少神经网络的存储问题,并在没有影响精确度的情况下压缩了35倍到49倍。最后在ImageNet数据集上的实验结果,将AlexNet压缩了35倍(从240MB压缩到6.9MB)并没有精确度损失;将VGG-16压缩了49倍(从552MB压缩到11.3MB),也没有精确度损失。

训练主要步骤:

  • 剪枝神经网络,只学习重要的连接;
  • 量化权值去使权值共享;
  • 应用霍夫编码继续压缩。

主要框架

一、网络剪枝

网络剪枝已经被广泛研究于压缩CNN模型。在早期工作中,网络剪枝已经被证明可以有效地降低网络的复杂度和过拟合。如图1所示,一开始通过正常的网络训练学习连接;然后剪枝小权重的连接(即所有权值连接低于一个阈值就从网络里移除);最后再训练最后剩下权值的网络为了保持稀疏连接。剪枝减少了AlexNet和VGG-16模型的参数分别为9倍和13倍。

为了进一步压缩,本文存储不同索引而不是绝对的位置,然后进行编码,8 bits用于卷基层,5 bits用于全连接层。当需要的不同索引超过所需的范围,就用补零的方案解决,如图2中,索引出现8,用一个零填补。

二、Trained quantization and weight sharing

网络量化权值共享会进一步压缩剪枝的网络,通过减少所需的bits数量去表示每一个权值。本文限制有效权值的数量,其中多个连接共享一个相同权值,并去存储,然后微调这些共享的权值。

假设有4个输入神经元和4个输出神经元,权值就是一个矩阵。在图3的左上角是一个权值矩阵,在左下角是一个梯度矩阵。权值被量化到4 bits(用4种颜色表示),所有的权值在相同的通道共享着相同的值,因此对于每一个权值,只需要保存一个小的索引到一个共享权值表中。在更新过程中,所有的梯度被分组,相同的颜色求和,再与学习率相乘,最后迭代的时候用共享的质心减去该值。

为了计算压缩率,给出个簇,本文只需要 bits去编码索引,通常对于一个神经网络有个连接且每个连接用 bits表达,限制连接只是用个连接共享权值将会导致一个压缩率:

例如在图3中,有一个的初始权值,但只有4个共享权值。原始的需要存储16个权值,每个需要32bits,现在只需要存储4个有效权值(蓝色,绿色,红色和橙色),每个有32bits,一共有16个2-bits索引,得到的压缩率为16*32/(4*32+2*16)=3.2。

权值共享

一个神经网络的每一层,本文使用K-Means聚类去确定共享权值,权值不跨层共享。分配个原始权值到个簇,,所以去最小化簇类离差平方和(WCSS):

共享的权值初始化

质心初始化影响聚类的质量,因而会影响网络的预测精确度。本文实验了三种初始化方法:Forgy(random),density-based和linear初始化。

较大的权值比较小的权值有着更重要的角色,但是较大的权值很少。因此,Forgy和density-based初始化很少有大的绝对值,这就导致较少的权值被微弱表达。但是Linear初始化没有遇到这个问题,实验部分比较了准确性,发现Linear初始化效果最好。

三、霍夫曼编码

霍夫曼编码是一个最优的前缀码,通常被用于无损失数据压缩。它用可变长码字去编码源符号。通过每个符号的发生概率驱动,更常见的符号用较少的bits表达。

四、实验

实验一共用了四个网络:2个在MNIST数据集,另2个在ImageNet数据集。该训练用Caffe框架运行,训练时,霍夫曼编码不需要训练,在所有微调结束后实现线下操作。

五、总结

本文提出了“深度压缩”,在没有影响精确度的情况下进行神经网络的压缩。本文的方法使用了剪枝、量化网络权值共享和应用霍夫曼编码操作。本文强调了实验在AlexNet上,没有精确度损失的情况下减少了参数存储,压缩了35倍。相同的结果在VGG-16LeNET网络中,分别压缩了49倍和39倍。这种结果就会导致更小的存储要求并应用到手机APP中。本文的压缩方法有助于复杂的神经网络应用在移动程序中,解决了应用程序的大小和下载带宽限制。


原文发布于微信公众号 - 计算机视觉战队(ComputerVisionGzq)

原文发表时间:2017-07-09

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数值分析与有限元编程

有限元|含铰接点的刚架怎么处理?

如图1所示,平面刚架有一个铰接点。建立有限元分析模型如图2,此时含铰接点的单元该怎么处理? ? ? 我们知道,两端刚结平面梁单元的单元刚度矩阵是 ? 由结构力...

3435
来自专栏小鹏的专栏

人脸检测——fcn

在上一篇的基础上修改即可:人脸检测——滑动窗口篇(训练和实现) !!!注意:这些是我的调试版本,最优版本不方便公开,但是自己可以查看论文,自行在此基础上修改,...

2128
来自专栏Coding迪斯尼

用Python从零开始设计数字图片识别神经网络--搭建基本架构

1664
来自专栏宏伦工作室

动手实现notMNIST数据集图片分类

2003
来自专栏应兆康的专栏

“西瓜书”——第三章_线性模型(笔记)

线性模型形式简单、易于建模,许多功能更为强大的非线性模型可在线性模型的基础上通过引入层级结构或高维映射而得。 ? ? ? ? ?

42515
来自专栏xingoo, 一个梦想做发明家的程序员

Spark机器学习——模型选择与参数调优之交叉验证

spark 模型选择与超参调优 机器学习可以简单的归纳为 通过数据训练y = f(x) 的过程,因此定义完训练模型之后,就需要考虑如何选择最终我们认为最优的模...

5016
来自专栏数值分析与有限元编程

坐标映射

建立等参单元,需要另外一个自然坐标系下的参考单元。对于物理坐标系下的任意一点,在自然坐标系下的参考单元中,有唯一的一个点与之对应;反过来对于自然坐标系下参考单元...

3054
来自专栏Python小屋

Python扩展库scipy.misc中图像转换成pillow图像

众所周知,在数字图像处理领域中有很多基准测试图像,这些图像用来作为科研人员PK自己的算法时的参考,给大家提供一个公平的样本,针对同一个问题进行处理时,可以用这些...

3175
来自专栏邹成卓的专栏

三维变换矩阵的理解

3D空间中的一个点的坐标,可以用(x,y,z)来表示。对这个点的坐标变换有三种操作:缩放、平移、旋转。

1.7K2
来自专栏Petrichor的专栏

tensorflow: 激活函数(Activation_Functions) 探究

2662

扫码关注云+社区

领取腾讯云代金券