陈禹作者

模型压缩:识别感知的深度神经网络信道裁剪 | 论文分享

信道裁剪是深度模型压缩的主要领域之一。现存的裁剪方法有的用信道的稀疏约束来训练模型,有的用最小化预训练模型和压缩模型间的特征图重建误差。两种策略都有一些限制:前者计算代价高而且难以收敛,后者优化重建误差但忽视了信道的识别能力。本文提出了一个简单而有效的方法,称作识别感知信道裁剪,用于选择真正对识别能力有贡献的信道。

本文介绍的方法是开源模型压缩框架PocketFlow的裁剪方法之一。

相关研究


网络量化

Rastegari等人提出将网络中的参数量化为+1/-1。所提出的BWN和XNOR-Net可以在大规模数据集上达到能和对应全精度相媲美的准确度。在Dorefa-net中,CNN的高精度权重,激活和梯度被量化为低比特位版本,带来了资源和硬件能力需求的大量减少。通过引入0作为第三个量化值,三元权重网络TWNs能达到比二元神经网络更高的精度。

稀疏或低等级连接 

为了减少神经网络存储需求。Han等人提出零输入或输出连接的神经元能从神经网络中安全的移除。通过L1/L2正则化的帮助,权重在训练中被推向0。随后AlexNet的压缩率通过剪枝、量化、哈夫曼编码能达到1/35。考虑到参数重要性在剪枝过程中被改变,Guo等人提出动态网络手术。通过之后提出的使用稀疏约束训练能达到更高的压缩率。 

信道裁剪 

对比网络量化和稀疏连接,信道裁剪同时从网络中移除信道和相关过滤器。因此只需要一点工作就能很好地被现存深度学习库支持。信道裁剪的关键问题是评估信道重要性。Li等人提出通过计算权重绝对值之和来测量信道重要性。Hu等人定义APoZ测量神经元的激活。通过目标函数的稀疏正则化,基于训练的方法能在训练阶段学习到压缩模型。考虑到效率,重建方法将信道选择问题转换为重建损失的优化问题,并通过贪婪策略或LASSO回归来解决。

方法


使为训练样本,N代表样本数量。给定一个L层CNN模型M,使为模型第l卷积层的参数为过滤器的高和宽;c和n代表输入和输出的信道数。代表输入的特征图和相应输出特征图。为第i个样本第k个信道的特征图。记为第k个输入信道和第j个输出信道对应的参数。第i个样本第j个信道对应的特征图为: 给定预训练模型M,信道裁剪的任务是裁剪W的冗余信道,从而减少模型大小,加速运算。

为了选择信道,本文介绍的变体:

 如果。||·||F代表Frobenius正则化

动机

给定一个预训练模型M,现存方法最小化M和裁剪模型的重建误差:

为了增加中间层的识别能力,介绍对于深度网络中间层的额外损失。在本文中,我们均匀地插入P个识别感知损失。使为插入损失的层。

LP+1为最后一层L。对于第p个损失,我们在层中做信道裁剪,当p=1时

构建识别感知损失

如图1所示,每一个损失使用的输出作为输入特征。为了使损失的计算更容易,本文在特征图上使用平均池化,为了加速收敛,在平均池化前使用batchnorm和ReLU,最终计算对于在层输入特征图的损失。 

代表层的输出特征图,为第i个样本的特征图。关于第p个loss的识别感知损失为:

I{·}是指示器函数。通过同时考虑交叉熵损失和重建损失,我们得到联合损失函数:

最后对于识别感知的信道裁剪优化问题描述为:

识别感知的信道裁剪

通过在中间层加入P个损失,被提出的识别感知信道裁剪算法如算法1所示。从预训练模型M开始,执行P+1个阶段的信道裁剪。

用于信道选择的贪婪算法:

直接优化问题(7)是非常困难的,本文提出贪婪算法解决。具体而言,首先移除所有信道,然后选择真正对深度网络识别能力有贡献的信道。使为被选择信道的索引,期初未空集。如算法2所示,一旦A被决定,根据被选择的信道优化W,通过最小化如下问题:

通过优化

停止条件

由于L是凸函数,L(Wt)将随着算法2中的迭代索引t单调下降。因此可以采取如下停止条件:

实验

这一部分,本文经验性的评价识别感知的信道裁剪。使用几个state-of-the-art方法来作为基准,包括ThiNet、Channel pruning和Slimming。此外,对于提出的方法其他几个变体也做了比较,包括DCP(使用裁剪率n的识别感知信道裁减),DCP-Adapt(使用停止条件的DCP),Random DCP(随机选择信道代替基于梯度测策略)。

本文在Pytorch上实现提出的方法。基于预训练模型,应用本文方法选择信道。在实践中,通过网络深度选择额外损失的数量P。具体的,在ResNet-50中插入3个损失,在VGG和ResNet-18中插入2个损失。

使用添加nesterov的SGD作为优化器,momentum和权重衰减设置为0.9和0.0001。设置为1.0。在CIFAR-10,使用大小为128的mini-batch微调400个epochs。学习率初始化为0.1,在epoch160和240处除以10。在ILSVRC-12我们微调60个epochs,mini-batch为256,学习率从0.01开始,在epoch36,48,54处除以10。

在CIFAR-10上的比较:

本文提出的方法在相同加速率上有最好的表现,DCP-Adapt裁剪的VGG网络比原与训练模型降低了0.58%的测试误差,并获得了15.58倍的尺寸减少。

在ILSVRC-12上的比较:

为了验证再大型数据集的有效性,本文使用该方法在ILSVRC-12数据集ResNet-50网络中实现2倍加速。本文方法比ThiNet在top-1中低0.81%误差,在top-5中低0.51%误差。对比channel pruning,降低了0.79%的top-5误差。

本文地址:https://arxiv.org/pdf/1810.11809.pdf

极验
极验

极验是全球顶尖的交互安全技术服务商,于2012年在武汉成立。全球首创 “行为式验证技术” ,利用生物特征与人工智能技术解决交互安全问题,为企业抵御恶意攻击防止资产损失提供一站式解决方案。

理论深度神经网络模型压缩
2
相关数据
深度学习技术

深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法,至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

池化技术

池化(Pooling)是卷积神经网络中的一个重要的概念,它实际上是一种形式的降采样。有多种不同形式的非线性池化函数,而其中“最大池化(Max pooling)”是最为常见的。它是将输入的图像划分为若干个矩形区域,对每个子区域输出最大值。直觉上,这种机制能够有效的原因在于,在发现一个特征之后,它的精确位置远不及它和其他特征的相对位置的关系重要。池化层会不断地减小数据的空间大小,因此参数的数量和计算量也会下降,这在一定程度上也控制了过拟合。通常来说,CNN的卷积层之间都会周期性地插入池化层。

权重技术

线性模型中特征的系数,或深度网络中的边。训练线性模型的目标是确定每个特征的理想权重。如果权重为 0,则相应的特征对模型来说没有任何贡献。

交叉熵技术

交叉熵(Cross Entropy)是Loss函数的一种(也称为损失函数或代价函数),用于描述模型预测值与真实值的差距大小

感知技术

知觉或感知是外界刺激作用于感官时,脑对外界的整体的看法和理解,为我们对外界的感官信息进行组织和解释。在认知科学中,也可看作一组程序,包括获取信息、理解信息、筛选信息、组织信息。与感觉不同,知觉反映的是由对象的各样属性及关系构成的整体。

VGG技术

2014年,牛津大学提出了另一种深度卷积网络VGG-Net,它相比于AlexNet有更小的卷积核和更深的层级。AlexNet前面几层用了11×11和5×5的卷积核以在图像上获取更大的感受野,而VGG采用更小的卷积核与更深的网络提升参数效率。VGG-Net 的泛化性能较好,常用于图像特征的抽取目标检测候选框生成等。VGG最大的问题就在于参数数量,VGG-19基本上是参数量最多的卷积网络架构。VGG-Net的参数主要出现在后面两个全连接层,每一层都有4096个神经元,可想而至这之间的参数会有多么庞大。

基准技术

一种简单的模型或启发法,用作比较模型效果时的参考点。基准有助于模型开发者针对特定问题量化最低预期效果。

参数技术

在数学和统计学裡,参数(英语:parameter)是使用通用变量来建立函数和变量之间关系(当这种关系很难用方程来阐述时)的一个数量。

剪枝技术

剪枝顾名思义,就是删去一些不重要的节点,来减小计算或搜索的复杂度。剪枝在很多算法中都有很好的应用,如:决策树,神经网络,搜索算法,数据库的设计等。在决策树和神经网络中,剪枝可以有效缓解过拟合问题并减小计算复杂度;在搜索算法中,可以减小搜索范围,提高搜索效率。

收敛技术

在数学,计算机科学和逻辑学中,收敛指的是不同的变换序列在有限的时间内达到一个结论(变换终止),并且得出的结论是独立于达到它的路径(他们是融合的)。 通俗来说,收敛通常是指在训练期间达到的一种状态,即经过一定次数的迭代之后,训练损失和验证损失在每次迭代中的变化都非常小或根本没有变化。也就是说,如果采用当前数据进行额外的训练将无法改进模型,模型即达到收敛状态。在深度学习中,损失值有时会在最终下降之前的多次迭代中保持不变或几乎保持不变,暂时形成收敛的假象。

学习率技术

在使用不同优化器(例如随机梯度下降,Adam)神经网络相关训练中,学习速率作为一个超参数控制了权重更新的幅度,以及训练的速度和精度。学习速率太大容易导致目标(代价)函数波动较大从而难以找到最优,而弱学习速率设置太小,则会导致收敛过慢耗时太长

损失函数技术

在数学优化,统计学,计量经济学,决策理论,机器学习和计算神经科学等领域,损失函数或成本函数是将一或多个变量的一个事件或值映射为可以直观地表示某种与之相关“成本”的实数的函数。

神经网络技术

(人工)神经网络是一种起源于 20 世纪 50 年代的监督式机器学习模型,那时候研究者构想了「感知器(perceptron)」的想法。这一领域的研究者通常被称为「联结主义者(Connectionist)」,因为这种模型模拟了人脑的功能。神经网络模型通常是通过反向传播算法应用梯度下降训练的。目前神经网络有两大主要类型,它们都是前馈神经网络:卷积神经网络(CNN)和循环神经网络(RNN),其中 RNN 又包含长短期记忆(LSTM)、门控循环单元(GRU)等等。深度学习是一种主要应用于神经网络帮助其取得更好结果的技术。尽管神经网络主要用于监督学习,但也有一些为无监督学习设计的变体,比如自动编码器和生成对抗网络(GAN)。

目标函数技术

目标函数f(x)就是用设计变量来表示的所追求的目标形式,所以目标函数就是设计变量的函数,是一个标量。从工程意义讲,目标函数是系统的性能标准,比如,一个结构的最轻重量、最低造价、最合理形式;一件产品的最短生产时间、最小能量消耗;一个实验的最佳配方等等,建立目标函数的过程就是寻找设计变量与目标的关系的过程,目标函数和设计变量的关系可用曲线、曲面或超曲面表示。

神经元技术

(人工)神经元是一个类比于生物神经元的数学计算模型,是神经网络的基本组成单元。 对于生物神经网络,每个神经元与其他神经元相连,当它“兴奋”时会向相连的神经元发送化学物质,从而改变这些神经元的电位;神经元的“兴奋”由其电位决定,当它的电位超过一个“阈值”(threshold)便会被激活,亦即“兴奋”。 目前最常见的神经元模型是基于1943年 Warren McCulloch 和 Walter Pitts提出的“M-P 神经元模型”。 在这个模型中,神经元通过带权重的连接接处理来自n个其他神经元的输入信号,其总输入值将与神经元的阈值进行比较,最后通过“激活函数”(activation function)产生神经元的输出。

正则化技术

当模型的复杂度增大时,训练误差会逐渐减小并趋向于0;而测试误差会先减小,达到最小值后又增大。当选择的模型复杂度过大时,过拟合现象就会发生。这样,在学习时就要防止过拟合。进行最优模型的选择,即选择复杂度适当的模型,以达到使测试误差最小的学习目的。

优化器技术

优化器基类提供了计算梯度loss的方法,并可以将梯度应用于变量。优化器里包含了实现了经典的优化算法,如梯度下降和Adagrad。 优化器是提供了一个可以使用各种优化算法的接口,可以让用户直接调用一些经典的优化算法,如梯度下降法等等。优化器(optimizers)类的基类。这个类定义了在训练模型的时候添加一个操作的API。用户基本上不会直接使用这个类,但是你会用到他的子类比如GradientDescentOptimizer, AdagradOptimizer, MomentumOptimizer(tensorflow下的优化器包)等等这些算法。

推荐文章
暂无评论
暂无评论~