当前位置: 代码迷 >> 综合 >> Self-grouping Convolutional Neural Networks
  详细解决方案

Self-grouping Convolutional Neural Networks

热度:24   发布时间:2024-02-24 04:57:16.0

Self-grouping Convolutional Neural Networks(论文博客)

Journal:Neural Networks

@article{GuoWKF20,
title={Self-grouping Convolutional Neural Networks},
author={Guo, Qingbei and Wu, Xiao-Jun and Kittlerz, Josef and Feng, Zhiquan},
journal={Neural Networks},
year={2020},
publisher={Elsevier},
Accept
}

Q. Guo, X.-J. Wu, J. Kittlerz, and Z. Feng, “Self-grouping convolutional neural networks,” Neural Networks, 2020.

论文:https://arxiv.org/abs/2009.13803
源码:Github: https://github.com/QingbeiGuo/SG-CNN.git

摘要:尽管组卷积越来越多地用于深度卷积神经网络用以提高计算效率和降低参数数量,使得压缩后的深度神经网络能够部署在资源有限的嵌入式系统或者移动设备上。然而,大部分存在的方法通过预定义地划分每个层的过滤器(Filter)到不同的组(Group),这些组具有相同大小的组空间并且是数据独立的,这将不利于挖掘深度神经网络的表达潜力。为了解决这一问题,我们提出了一种新颖的自分组卷积神经网络(Self-grouping Convolutional Neural Network),称之为SG-CNN。在这种网络结构中,每个层中的过滤器依赖于它们输入通道的重要性向量的相似性进行分组。具体地,对于每一个过滤器,我们首先评价它的每一个输入通道对它的重要性并构成这个过滤器的重要性向量,然后基于每个过滤器的重要性向量通过聚类方法对过滤器进行分组。因此,这种分组是数据依赖的。根据聚类中心的知识,我们裁剪每个层中不重要的连接,这暗含着最小化因为裁剪而引起的精度损失,这样就产生了一个多样化的组卷积。随后,我们全局微调被裁减的网络来保持它的识别能力。最终,我们获得一个有效而紧致的深度神经网络。而且,我们的自分组卷积方法可以扩展到全连接层来获得进一步的压缩与加速。广泛的实验证实了我们的自分组卷积方法适用于各种各样最先进的网络结构,比如LeNet、AlexNet、VGG、ResNet和DenseNet,并在MNIST、CIFAR-10/100和ImageNet这四个数据集上进行了实验,既压缩又加速了这些先进结构的网络,同时获得了出众的识别精度。

1.我们提出一个自分组卷积方法,它通过基于重要性向量的聚类方法和基于聚类中心的网络裁剪方法自动地将传统卷积转化为具有数据依赖和多样化结构的组卷积,实现深度神经网络的压缩与加速;
2.我们的自分组方法不仅适用于卷积层也适用于全连接层;
3.我们的自分组方法支持全局微调获得高效的压缩;
4.综合的实验证实了我们的自分组方法能够有效应用于各种先进的网络结构,包括LeNet、AlexNet、VGG、ResNet和DenseNet,具有较高的压缩率,并且产生较小的精度损失,甚至没有精度损失。

目前,尽管现在深度神经网络已经达到了最高水准的性能,但是由于嵌入式系统或者移动平台的有限的存储和计算资源的限制,以及深度神经网络的庞大的参数对存储的需求和大量卷积对运算的要求,因此这些神经网络模型无法直接部署在嵌入式系统和移动平台中。针对这一问题,我们给出一个新颖的和结构多样化的自分组卷积神经网络(self-grouping convolutional neural networks,SG-CNN),用于模型的压缩和加速,以满足在有限资源的设备上的部署条件。下面具体给出自分组卷积神经网络的压缩和加速方法。

1、符号表示与预备知识
给定一个L层深度卷积神经网络,我们用W∈R^(C_out×k×k×C_in )表示第l个卷积层的权重,其中C_out和C_in分别为输入通道和输出通道的数目,k是卷积核的大小。X∈R^(k×k×C_in )是一个输入张量,它是通过k×k的滑动窗口从层输入中获得的。这里,W和X可以分别被视为形如C_out×k·k·C_in的矩阵和k·k·C_in的向量,于是我们可以得到卷积的如下表示:
在这里插入图片描述
其中,Y∈R^(C_out )是相应的输出向量。W_ij对应第j个输入通道和第i个输出通道之间的卷积核向量。为了简化,公式中省略了偏置项。在本文中,如没有特殊说明,所有符号均是指第l层相关参数符号。
为了减少存储和计算代价,组卷积在空间或者通道维度上限制卷积操作。假设我们把C_out个过滤器和C_in个输入通道划分至g个组,使得每个组包含C_out/g个过滤器和C_in/g个输入通道。因此,组卷积可以公式化为如下:
在这里插入图片描述
其中,x_i∈R^(k·k·C_in/g)是第i个组的输入向量,(y_i ) ?∈R^(C_out/g)是相应的输出向量,(W_i ) ?∈R^(C_out/g×k·k·C_in/g)表示第i个组的卷积核矩阵。我们设W ?=diag((W_i ) ?,(W_i ) ?,…,(W_i ) ?),由于相同的组大小,所以它是一个 准对角线矩阵。因此,Y ?=W ?X ?。
对于全连接层,我们把它的每一个神经元看待为1×1空间大小的卷积通道,也就是k=1,于是我们能够获得全连接的如下表示,
在这里插入图片描述
其中,Xf∈R(C_in )是一个输入向量,Wf∈R(C_out×C_in)是全连接层的权重矩阵,Yf∈R(C_out )是相应的输出向量。W_ij^f对应第j个输入神经元和第i个输出神经元之间的权重。为了简化,公式中也省略了偏置项。
同样,对于全连接层,公式(3)可重新描述为
在这里插入图片描述
然而,受限的空间操作制约了组卷积的表达能力,因此我们设法构建一个多样化的组卷积来放宽它的空间约束。下面我们详细介绍自分组卷积方法。

2、评估重要性向量
对于一个训练好的深度神经网络,如图1(a)所示,它的参数已被训练使得它达到局部或者全局最优。而且,由于训练神经网络有效激活重要的参数,同时抑制不重要的参数,因此这些参数的分布表示了它们的重要性知识。通常,低值参数趋向于产生弱的特征图,表示对神经网络贡献较小。然而,相反,高值参数倾向于更有意义的贡献。除此之外,考虑到组卷积与多个过滤器和输入通道紧密相关,我们引入一个新颖的概念,称为重要性向量,来评估一个过滤器的每个输入通道的重要性。
我们定义第i个过滤器的重要性向量为V_i = [V_i1,V_i2,…,V_iC_in],其中V_ij表示第j个输入通道对第i个过滤器的重要性值。V_i的维度等于它相应输入通道的数目。我们用W_ij的l1范数来评估第j个输入通道对第i个过滤器的重要性,如下所示:
在这里插入图片描述
同样,对于全连接层,V_i^f表示第i个输出神经元的重要性向量,那么第j个输入神经元对第i个输出神经元的重要性被评估如下:
在这里插入图片描述
作为一个向量,这个概念激发我们探索输入通道之间的关系和过滤器之间的关系。不同于之前的方法,它们把这些参数的重要性作为标量,而我们的方法视它们为向量,强调一个过滤器的输入通道的重要性分布。

3、基于聚类的过滤器分组
在这部分,我们给出如何通过基于相似的重要性向量的聚类方法对过滤器进行自动分组。对于一个卷积层,我们使用欧氏距离量化重要性向量之间的相似性。并且欧式距离越近,过滤器的行为越相似。另外,聚类是一个有效的方式生成多个过滤器组,在每个组内行为是相似的,而组间是不同的。因此,我们通过k均值聚类方法划分同一个层中的过滤器到g个组G = [G_1,G_2,…,G_g],以至于组内欧式距离的和最小,如下:
在这里插入图片描述
其中,C_i = {C_i1,C_i2,…,C_iC_in}是??的中心向量,???对应??中的第j个输入通道。如图1(b)所示,过滤器被聚类到3个组,每个组有不同的组空间大小。
同样地,我们应用k均值聚类方法到全连接层,因此获得输出神经元的聚类结果G^f = [G_1f,G_2f,…,G_gf],并且满足如下条件:
在这里插入图片描述
其中,C_if表示组G_if的中心向量,因此C_if = [C_i1f,C_i2f,…,C_iC_inf],并且????对应组???中的第j个输入神经元。
之前的方法已经探索了设计不同的组卷积,它们的过滤器被预定义地分配到不同的组,并且每个组中过滤器数目相同,因此这些设计都是数据独立的。相反,我们通过聚类方法自动地为每个组选定过滤器,每个组中过滤器的数目可能不同,这个设计是数据依赖的。因此,通过自分组方法有助于探索组卷积的表达潜力。

4、基于聚类中心的裁剪方案
由于组卷积极好的压缩和加速性能,吸引了越来越多的关注。裁剪连接能够通过删除不重要的连接生成那样稀疏的结构,这非常有利于减少参数和加速运算。而且,考虑到聚类中心代表了每个组的重要性,所以我们使用相应的聚类中心来为每个组确定它的输入通道。因此,我们提出了一个基于聚类中心的裁剪方案来构造自分组卷积。
具体地,我们用聚类中心替换掉组中每个过滤器的重要性向量,然后把它们合并成一个新的向量C,按照升序排列C中的元素,得到如下表示:
在这里插入图片描述
其中,每个元素对应一个输入通道,并且,i ?表示在C中第i ?个输入通道的顺序是i。
相应地,对于全连接层,这个新的向量定义如下:
在这里插入图片描述
我们为每个层设置压缩率集合S = [s_1,s_2,…,s_L],它意味着百分之??的连接将从第i层移除。为了简化,我们把第l层的压缩率??简写为s。我们选择最弱的连接从C中删除,换句话说,我们删除C中最小的(也是最前面的)??????????个连接。因此,不同的组有不同数目的输入通道,而且,输入通道可能被多个组共享,也可能被所有的组忽略。到目前为止,一个带有多样化结构的自分组卷积形成了,它由剩余的稀疏连接构成。那样的多样化结构在每个被裁剪的层中保留了大部分的数据流,这非常有利于开发组卷积的表达潜力。我们在图1(c)展现了自分组卷积。
明显地,自分组卷积的连接模式被s、g、聚类算法和训练数据等控制。其中,g控制组数目,每个组中的过滤器依赖于聚类算法和训练数据,s则决定每个组中输入通道的数目。
尽管我们的自分组卷积依赖于连接的裁剪,但是与之前的裁剪方法存在很大的不同。第一,我们设计了一个基于聚类中心的裁剪方案。这个方案主要强调向量而不是标量,这有助于充分利用参数重要性的分布知识;第二,我们提出的方法尽力最小化因为裁剪对组的影响,同时保留大部分信息流,这非常有助于获得更好的识别性能;(3)我们提出的方法不仅适用于卷积层,也同样适用于全连接层,并且它们能够同时被裁减,提高网络压缩的效率。

5、微调
尽管我们提出的方法通过基于聚类中心的裁剪方案对精度的衰减做了慎重地处理,但是累计的误差仍将破坏网络的整体性能。因此,微调可以用来弥补因为裁剪而带来的精度损失。
有两种常用的微调形式:局部微调和全局微调。局部微调是指在每次裁剪之后都进行微调来恢复网络性能。这种形式是非常耗时的,严重影响了压缩效率。相反,全局微调表示在所有的裁剪完成之后进行微调,因此避免了重复的微调。为了提高压缩效率,我们全局微调裁剪过的网络,用非常少的训练来加强网络剩余部分的表达能力。之所以能这么做,主要是因为我们的方法保留了大部分信息流,这非常有利于性能的恢复。

6、部署
当我们部署压缩后的模型到移动设备或者嵌入式平台时,我们转化它为正常的组卷积模式。具体地,对每个过滤器组,我们复制重复被共享的特征图,删除被忽略的特征图。之后,我们重新排列这些特征图。因此,我们获得了一个带有多样化结构的正常组卷积。这不需要特殊的库或者硬件来完成加速,如图1(d)所示。这个转换过程通过置换矩阵来实现。
在这里插入图片描述
(a)预训练的模型
在这里插入图片描述
(b)基于重要性向量聚类过滤器组
在这里插入图片描述
(c)通过基于中心的裁剪方案获得稀疏结构
在这里插入图片描述
(d)转换稀疏的卷积为多样化结构的组卷积
图1 自分组卷积各阶段示意图
在这里插入图片描述

实验结果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  相关解决方案