c 数据压缩算法_基于改进压缩算法的复数卷积神经网络压缩方法

eb76bc5f809832d71fa79d2359636465.png

文章链接:https://arxiv.org/abs/1903.02358

摘要

尽管卷积神经网络(CNN)取得了长足的进步,但是大量的冗余参数限制了它在嵌入式设备(尤其是移动设备)上的部署。 最近的压缩工作集中在实值卷积神经上网络(Real CNN),但是据我们所知,目前没有工作聚焦于复数网络的压缩。 与实值网络相比,复数神经网络更易于优化,泛化,并具有更好的学习潜力。 本文扩展了通用使用了从实数域到复数域的深度压缩算法领域,并提出了一种改进的深度压缩算法,用于复数CNN的压缩。 提出的算法使用以下命令在CIFAR-10数据集上将网络压缩约8倍精度损失低于3%。 在ImageNet数据集上,在未经过微调的阶段,我们的方法将模型压缩约16倍,精度损失为约2%

关键词-深度学习,复值卷积神经网络,压缩,深度压缩

1. 引言

卷积神经网络(CNN)大大提高了图像处理,语音处理,自然语言处理等的性能和准确性。 CNN在行业中具有广泛的应用,例如在语音识别中使用百度的语音识别和Microsoft Cortana虚拟助手。由于CNN的大量参数和计算负担,智能服务通常在大型专业设备中运行。卷积神经网络中的冗余参数使其成为高度密集的计算和内存密集型消耗模型。因此,将CNN应用于嵌入式或移动设备遇到三个主要困难:

a)在内存方面的巨大模型。例如,AlexNet [1]模型大于200MB,VGG-16 [2]模型大于500MB;

b)大量计算。表现良好的卷积神经网络CNN)模型具有数千个参数,并且消耗大量运行智能服务获得结果的时间;

c)巨大的功耗。大量访问内存和使用CPU资源将导致巨大的功耗。

随着移动设备的普及,CNN在嵌入式系统中的应用需求越来越大。 但是,对于硬件资源有限的设备,很难将完整的CNN模型直接移植到嵌入式设备中。 与实值卷积神经网络(Real CNN)相比,复数卷积神经网络(Complex CNN)[3]具有明显的参数约简。 此外,Complex CNN及其变体[3-10]在图像分类和音乐转录任务等方面都具有竞争优势。但是Complex CNN中的参数数量仍然不足以嵌入设备。

另一方面,最近的模型压缩工作集中在Real CNN上,据我们所知,目前没有工作尝试压缩Complex CNN的工作。 在Real CNN的压缩中,许多研究者做出了有效的贡献,其中“Deep Compression” [11]取得了显着的压缩效果。 而对于Complex CNN,到目前为止还没有研究成果。

在本文中,我们提出了一种改进的复杂CNN深度压缩算法。与Real CNN不同,我们需要在Complex CNN中保持复数权重的实部和虚部之间的相关性。我们的主要贡献如下:

a)剪枝:实数可以通过模值直接比较。为了保持实部和虚部的相关性,需要通过其模块比较复数。

b)量化:实数网络中的权重是一维的,因此可以简单地使用一维K-means聚类方法。但是,复杂CNN中的权重是二维的,因此有必要应用二维K均值聚类来实现量化。Complex CNN的质心初始化也不同于Real CNN。尽管两者都使用线性初始化来获得更好的结果,但Real CNN仅将质心平均分配在权重的最大值和最小值之间。对于复杂CNN,质心线性初始化更为复杂。

c)霍夫曼编码:实际CNN只是直接对权重进行编码,而复杂CNN需要分别对权重的实部和复杂部分进行编码和存储。

提出的深度压缩算法已在CIFAR-10和ImageNet数据集上进行了测试。实验结果表明,该算法在CIFAR-10上压缩了复杂CNN约8次,在ImageNet上压缩了16倍,精度分别下降了3%和2%。

2. 相关工作

对于Real CNN的压缩,研究人员提出了许多方法,可以将其大致分为四类:参数共享[12-16],网络修剪[11、17、18],知识蒸馏[19]和矩阵分解理论[20] -24]。

参数共享的主要思想是将相同的值与多个参数共享,实际的实现方法也有所不同。 Vanhoucke和Mao [12]通过定点方法降低了参数的精度,因此具有相似值的参数应具有相同的权重。 Chen et.al [13]提出了一种基于哈希算法的方法,将参数映射到相应的哈希桶,并在同一哈希桶中共享相同的值。Gong et.al [14]使用K-means聚类算法对参数进行量化,每个聚类的参数共享其中心值。

网络修剪可用于降低网络复杂性并有效防止过度拟合。 Han et.al [11]通过在特定阈值下删除网络连接以压缩训练网络,从而压缩网络,然后基于参数共享和霍夫曼进一步压缩网络编码。

知识蒸馏通过转移来压缩网络大型笨重模型的知识到小型简单模型的知识。Sau和Balasubramanian [19]使用知识蒸馏方法基于师生网络模型压缩网络并在MNIST数据集上进行测试。结果表明该方法同时降低模型的存储空间和计算复杂度

在基于矩阵分解理论的压缩方法中,Denil et.al[20]和Nakkiran et.al[21]都使用低秩分解来压缩神经网络不同层中的参数。登顿et.al [22]在CNN中使用矩阵分解方法来加速卷积层的计算,并有效地减少了全连接层的参数。

这些方法对网络进行了不同程度的压缩,虽然都取得了不错的效果,但是它们都集中在Real CNN上,并且据我们所知,还没有针对Complex CNN的有效压缩算法。

3. 面向复数网络的深度压缩方法

Han等人提出的Real CNN深度压缩算法。 文献[11]包含三个阶段,如图1(顶部)所示:权重修剪,权重量化和霍夫曼编码。 该算法可以将AlexNet [1]的参数从240MB减少到6.9MB(压缩率约为35),而VGG-16 [2]的参数从552MB减少到11.3MB(压缩率约为49)。 而不会损失准确性。

b017894da88030b4783fe984221d8580.png
图1.压缩的三个阶段:修剪,量化和 霍夫曼编码

如图1所示,我们提出了一种改进的复杂CNN深度压缩方法,该方法还包括三个阶段,下面将对此进行详细描述。

3.1. 权重剪枝

权重修剪被证明是减少网络权重冗余的有效方法。首先,我们训练基线复杂CNN [3],以学习网络的连通性。然后,删除网络中的“小”权重连接。在Real CNN中,我们通常设置一个实数阈值,并将权重的绝对值与阈值进行比较,以确定哪些是需要修剪的“小”权重。但是,复数CNN [3]中的权重是复数,并且两个复数之间没有直接比较。在这里,可以选择三种方案来解决该问题:将复数权重的实部与给定的实数阈值进行比较;将复数权重的虚部与给定阈值进行比较;比较复数权重的模量和给定的阈值。从实验结果中,最好的结果是从复数模值方案中获得的,原因可能是复数模值同时包含了权重的实部和虚部信息。请注意,权重修剪允许获得稀疏网络,我们可以使用压缩稀疏行(CSR)或压缩稀疏行的方法来保存稀疏矩阵稀疏列(CSC)。

3.2. 网络量化与权值共享

权重量化通过减少表示每个权重所需的位数进一步压缩了修剪的网络。 首先,通过共享相同的权重来表示需要存储在每一层的权重。 然后,对这些权重进行微调。 对于每个连接层,仅需要存储共享的权重和较小的共享权重索引表。

3.2.1. 权重分享

权重共享可以通过K-means算法解决:使用K-mean聚类来识别训练网络每一层的共享权重,以便可以共享落入同一集群的权重。 因此,通过仅存储共享的权重来减少参数的数量。

我们期望在处理复杂CNN时保持复杂权重的实部和虚部之间的相关性。 因此,我们使用二维K均值聚类算法而不是一维K均值聚类算法来进行复杂权重的聚类,如下所示:

其中

表示复数权重,每个权重的形式为
表示每个群集的质心,形式为
分为m个簇
以最小化集群内的平方和。

3.2.2. 质心初始化

通过聚类获得的质心是共享的权重。 质心初始化会影响群集的质量,从而影响网络的预测准确性。通常有三种初始化质心的方法:Forgy(随机)初始化,基于密度的初始化和线性初始化。

由于complex network的权重是二维的,因此complex network的质心线性初始化可以分为以下四种类型:

a) 水平方向的线性初始化方法:质心均匀分布在直线

上 ,其中
是常数。

b)垂直方向上的线性初始化方法:质心均匀分布在直线

上,其中
是常数。

c)正向倾斜方向的线性初始化方法:质心均匀分布在直线

上,其中
是一个正数,而
是一个常数

d)负倾斜方向的线性初始化方法:重心均匀分布在直线

,其中
是一个正数,而
是一个常数。

基于强度和密度的初始化根据权重的分布选择质心。 这将导致极少的质心具有很大的绝对值,并导致这些极少的权重的表示不佳。 但是,线性初始化将质心均匀分布在权重的最大和最小间隔中,因此与前两种方法相比,此方法可以获得更大的权重。 Real CNN的质心线性初始化仅在一维最大和最小权重之间分配质心。 相反,复杂CNN的线性初始化需要以上述四种方式之一计算的直线,然后将作为复数形式的二进制元组的质心均匀地取到该直线上。结果,我们在第4节中选择线性初始化进行聚类实验,结果表明第四种线性初始化方法效果最好。

3.2.3. 霍夫曼编码

霍夫曼方法通过使用可变长度编码表对源符号进行编码,该可变长度编码表是通过评估源符号出现的概率而获得的,频率较高的字符使用较短的编码,反之亦然。 之后,减小编码字符串的平均长度和期望值,以达到无损压缩数据的目的。

Complex CNN的复数权重的存储形式为一对实数。 哈夫曼编码基于字符出现的频率。 编码结果与权重的实部和虚部之间的相关性无关。 因此,实部和虚部可以分别编码以获得最终的压缩网络。

4. 实验结果

我们首先训练图2所示的基准复杂CNN [3],然后执行压缩。 通过将低于阈值的权重强制为零来实施网络修剪。 在量化阶段,我们在不同的网络阶段使用了不同数量的聚类。 最后,我们分别对复数权重的实部和虚部应用霍夫曼编码。

我们在两个数据集(CIFAR-10和IMAGENET)上进行了复杂CNN压缩的实验。 以下所有实验均在系统Ubuntu 16.04上的Keras框架的Tensorflow后端上执行。

ad47fde3e4d9657c2d311e3dcb540cce.png
图2.在CIFAR-10和ImageNet上训练的两种不同规模的网络体系结构。

左边是整个模型的层组成,包括卷积层,BN层,残差块等。CIFAR-10和ImageNet数据集之间的模型差异在于,前者仅包含1-3阶段,而后者包含阶段 1-5。 右边是投影块和常规块的组成。 与每个分支中的常规块相比,投影块在复杂卷积层之前的频谱池层要多一层。

4.1 CIFAR 10

我们在基准complex CNN [3]上训练了CIFAR-10数据集,如图2所示。当在修剪和量化阶段未执行任何重新训练且相关参数未优化时,在CIFAR上压缩的复杂CNN的初始结果 表1和表2所示为-10。如表1所示,随着阈值的增加,修剪率增加,准确率降低。 在0.03的阈值处,这两个指标达到了折衷。 如表2所示,总体上,簇数和精度显示出正态分布。 CIFAR-10上的结果表明,压缩的复合CNN的压缩率可以达到8,而准确度损失不到3%。 其中,大部分节省来自量化。 由于原始网络模型比其他大型Real CNN [1,2]小,因此修剪和霍夫曼编码贡献很小。

cc10ea1dcebe8bb68193d8603bd1f79f.png
表1.在CIFAR-10上修剪的复杂CNN的准确性和修剪率。

4b171e8b2fb977b3a3178156c811ee53.png
表2. CIFAR-10上的修剪,量化和霍夫曼编码中的精度和压缩率。

4.2 ImageNet

为了在ImageNet数据集上获得更好的结果,我们在基线Complex CNN [3]中添加了两个阶段,如图2所示,并在不同时期调整了模型的学习率。我们为模型的学习速率从前10个时期开始以0.1开始,以加快学习功能,然后从10-170时期将其设置为0.01,最后在其余时期将其设置为0.001。我们将第一卷积层的内核从3×3设置为7×7,以了解更多功能。

当在修剪和量化阶段未执行任何再训练且相关参数未优化时,ImageNet数据集上压缩的Complex CNN的初始结果如表3和表4所示。如表3所示,修剪率随阈值的增加以及Top-1和Top-5的准确性都表明了情况的波动。在0.009的阈值时,指标达到折中。在量化阶段,必须将3-5阶段的聚类数设置为256,如果更改为其他值,则聚类结果将不能令人满意。可以将阶段1-2的群集数设置为接近127或256,并且将阶段1-2的群集数设置为127,将阶段3-5的群集数设置为256时,将显示最佳结果。如表4所示,网络修剪贡献了一半的压缩率。量化对压缩率的贡献是前者的7倍,而Huffman编码的效果不佳。结果,压缩后的复杂CNN的压缩率可以达到16,而top-1精度和top-5精度损失均不到2%。

a2c13f11107db602737fb48e26b58717.png
表3. 在ImageNet上修剪的复杂CNN的准确性和修剪率。

39eac2438dc373284519a5622d5261e0.png
表4. ImageNet上的修剪,量化和霍夫曼编码中的精度和压缩率。

5.结论

在本文中,我们首先提出了一种改进的复杂CNN深度压缩算法。在修剪阶段,我们使用模数而不是复数的绝对值进行阈值化。在量化阶段,我们使用二维K均值聚类而不是一维聚类复杂的权重。最后,霍夫曼码用于进一步压缩参数,并对复数权重的实部和虚部进行编码。我们已经在CIFAR-10和ImageNet上进行了实验,并调整了复杂CNN的结构以适应较大规模的数据集。结果表明,CIFAR-10的压缩率约为8,ImageNet的压缩率约为16,精度损失分别在3%和2%之内。请注意,如果我们重新训练压缩模型,则精度会有所提高。

将来,关注高效的操作以加快压缩模型的速度将很有趣。我们希望将模型与其他网络加速算法(例如低秩算法[24]和Winograd卷积算法[25、26])结合起来,以进一步降低计算成本。

本文参考文献

19069c00698b15dc797790e8938f4c00.png

本文感想

这篇文章首次介绍了复数网络的压缩方法,所使用的技术方法均来源于实数网络,创新点稍弱,不过作为第一篇介绍复数网络压缩方法的文章,并且文章将三种压缩方式进行了堆叠,该文仍有借鉴意义。

复数网络压缩的难点在于,复数网络的权重为实数和虚数两个维度,而现有的实数网络压缩方法均基于实数这一个维度进行,本文提到基于神经网络剪枝的方法会通过复数权重的模值进行修剪,权重量化的方法通过权重质心来选择,霍夫曼压缩方法同样要对实数与虚数两个维度进行。实际上,复数网络比起实数网络最大优势在于它会提取输入实部与虚部之间的关联信息,这篇文章压缩后精度损失略高,未来工作可以通过这个方面减少压缩过程带来的精度损失。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值