剪枝综述论文阅读:Methods for Pruning Deep Neural Networks

论文链接:Methods for Pruning Deep Neural Networks

一、概述

近年来,随着嵌入式设备的广泛使用,在嵌入式设备上运行神经网络模型有了很大的需求,然而当前的网络结构越来越复杂,因此对网络进行修剪成为了比较热门的问题。

1.分类

本文将一系列减小网络结构的方法分为了以下八部分,分别是:

  1. Magnitude based pruning methods:权重和神经元的显著性可以通过其数量级等本地度量来确定,或者通过它们对下一层的影响来近似确定。具有最小的显著性的权重和神经元被删除后对准确性的影响最小。
  2. 相似度和聚类方法:重复或者相似的权重是多余的,可以被剪枝
  3. 敏感度分析方法:评估移除或干扰权重对损耗的影响,然后移除对精度影响最小的权重的部分。
  4. 知识蒸馏方法:利用Teacher网络来学习Student网络。
  5. 低轶方法:将一个矩阵分解成两个较小的矩阵的乘积。
  6. 量化方法:使用量化,哈希,低精度和二进制表示的权值来减少计算。
  7. 结构设计方法(NAS):利用智能搜索和强化学习方法生成神经网络架构。
  8. 混合方法:将以上方法混合使用

本文主要介绍前三种方法,更细节的分类如下图所示:
在这里插入图片描述
基于数量级的方法可以细分为:

  • 依赖数据的方法:利用一些样本来评估去除权重对下一层直接产出的影响程度;
  • 不依赖数据的方法:利用诸如权重大小等措施的独立数据方法;
  • 使用优化方法减少一层中的权重数,同时近似层的功能。

基于相似度和聚类方法比较少,因此不进行细分。

利用灵敏度分析的方法可以细分为:

  • 利用泰勒级数近似的损失和
  • 使用采样等方法估计权重被删除时损失的变化。

2.评估

当评估剪枝方法,以下措施用来比较他们的性能:

  • 模型的准确性取决于正确分类最先出现的列表中排名结果(Top-1)或排名列表的前五名(Top-5)。在下面的章节中,除非我们明确地限定了一个度量,否则应该假定精度为Top-1。
  • 剪枝方法的有效性通常体现在压缩率;即对模型进行剪枝前后的参数比。
  • 结果模型的计算效率通常以执行分类所需的浮点运算(FLOPs)来表示。

二、Magnitude based pruning

1.权重剪枝

论文Learning both Weights and Connections for Efficient Neural Networks首先介绍了权重剪枝的方法:将权重低于某个阈值的全部被剪枝,之后进行fine-tuned直到准确率达到预期。

该论文的作者在LeNet、AlexNet、VGGNet上分别进行了实验验证了剪枝的作用。另一个针对L1和L2正则化的结论表明,不进行fine-tuned的情况下L1正则化更好,进行fine-tuned则L2正则化更好。另外,前面的网络层对剪枝更加敏感,因此迭代式剪枝方式更好。

2.彩票定理

彩票理论:对于一个已经训练好的网络,一定存在它的一个子网络可以在不超过原网络训练轮数的情况下达到和原网络相当的准确率。这个子网络就类似于买彩票。

在LeNet和MNIST数据的实验中,研究者尝试了两种方法,第一种是完成训练后剪枝p%的参数,将剩余的参数重新初始化并重新训练,第二种方法是进行n轮迭代式剪枝。研究者们得到了如下结论:

  • 仅仅有原网络3.6%大小的子网络效果依然很好
  • 剪枝后网络再进行重新初始化训练会很慢
  • 迭代式剪枝会得到更准确的小型网络

在比较大的网络如AlexNet和VGGNet的结论表明,彩票理论依赖于学习率,较小的学习率更容易找到“彩票”。

在之后的论文Rethinking the Value of Network Pruning中,研究者对彩票理论提出了质疑。该作者使用了三种剪枝方法,分别是结构化剪枝(每层剪枝的通道比例是预定义的),自动化剪枝(全局剪枝比例确定,每层剪枝比例由算法决定),非结构化权重剪枝(只有权重的剪枝比例是预定义的)。

根据以上三种方法进行的实验,作者得出的结论是对于结构化和自动剪枝,随机初始化依旧有效,对于非结构化剪枝,在小型数据集可以去得不错的结果,大型数据集需要进行fine-tuning。

在后续的研究中,针对以下几个问题进行了更多的实验:

  • “彩票”能不能从一个图像分类任务迁移到另一个任务?
  • “彩票”能不能适用于其他任务,例如NLP?
  • 在不同的优化器之间是否可以进行迁移?

经过大量实验得到的结论是:

  • 在更大规模的任务上(例如ImageNet)会取得更好的结果
  • 在NLP领域和RL领域的实验表明迭代式剪枝比重新初始化效果好
  • 优化器独立的

3.特征图和过滤器剪枝

一些作者指出,尽管修剪权值的方法会导致更少的参数,但它们需要专门的库或硬件来处理产生的稀疏权值矩阵。相反,更高粒度级别的修剪(例如修剪过滤器和通道)可以从许多当前工具包中已有的优化中获益。这导致了许多旨在剪枝特征映射和过滤器的方法,这些方法将在本节中总结。

本部分主要从三个方向来阐述:

  • 依赖数据的通道剪枝方法:当用不同的输入时,输出通道(即特征图)应该有所不同,因为它们是为了检测有区别的特征。(1、2小节)
  • 直接通道剪枝方法:目的是识别滤波器和输出通道中的属性,如零的比例存在和低幅度的权值(3、4、5小节)
  • 基于优化器的通道估计剪枝方法:目的是利用优化方法对输出特征图进行近似,重建过滤器(6、7小节)

(1)基于通道方差的剪枝

论文 Channel-level Acceleration of Deep Face Representations提出了两种通道剪枝的方法,Inbound pruning和Reduce and Reuse pruning

Inbound pruning

Inbound pruning目的是为了减少输入到过滤器的通道数,其核心思想是使用不同的样本作为输入时,评估输入通道对输出特性映射的贡献变化的程度。这种方法的实现方式是用一些图片样本输入网络,使用特征图中由于通道而产生的差异作为其贡献的度量。

给定Wji为第j个过滤器对应第i个输入通道,和Xip为第i个通道第p个样本的输入,则第j个输出特征图的贡献Y可以被定义为:
在这里插入图片描述
根据上述定义,评估该贡献的方差的方法如下:
在这里插入图片描述
经过评估后将低于阈值的通道全部剪枝掉

Reduce and Reuse pruning

Reduce and Reuse pruning目的是减少输出通道数,其思想是当输入不同的样本时,评估输出特征图的变化。

该方法首先计算输出特征图的方差,m为输入通道数,N为样本数:
在这里插入图片描述
然后,Reduce和Reuse使用这个度量来保留一定比例的输出特征图以及导致最大方差的相应过滤器。

去掉输出特征图存在一定问题,因为它被期望作为下一层的输入通道。为了克服这个问题,他们使用其他通道来近似一个被移除的通道。也就是说,如果𝑌𝑖、𝑌𝑖’分别是修剪一层之前和之后的一层输出,目标是找到一个矩阵A,满足:
在这里插入图片描述
然后将矩阵A作为1x1滤波器的附加卷积层包含进来。

结论

作者使用人脸数据集,利用了一层一层剪枝的方法,即每剪枝一层就进行一次fine-tuning。他们对以上两种方法独立和合在一起进行了实验并和使用随机剪枝(一种低等级估计方法)、Fitnets(一种蒸馏方法)进行比较。

在使用Inbound修剪方法的实验中总体准确率保持在84%以上。在Reduce和Reuse方法的实验中,他们尝试了不同级别的修剪:对早期层分别进行50%、75%和90%,然后对后期层进行50%修剪。对后面的层采用较低的修剪率遵循一个观察结果,即对后面的层进行大量修剪会导致精度的显著降低。

他们的实验结果表明:

  • 基于方差的方法比使用随机修剪更有效
  • 使用微调并帮助恢复精度,尤其是在后来的层,
  • 他们的方法达到更高的压缩相比于使用低等级的方法和使用Fitnets。

(2)基于熵的通道剪枝

论文 An Entropy-based Pruning Method for CNN Compression介绍了一种基于熵的评估方法来评估不同过滤器的重要程度。在他们的方法中,如果一个特征图包含较少的信息。其对应的过滤器就不是很重要,可以被剪枝。

为了计算特定特征图的熵值,作者首先采样数据并获得了每个过滤器特征图的集合。使用全局平均池化方法将每个特征映射简化为一个点度量,并将与每个过滤器相关的度量集离散为q个组。然后使用滤波器的熵(𝐻𝑗)来评估滤波器的鉴别能力
在这里插入图片描述
Pi 是样本属于组i的概率。

结论

作者采用了后剪枝+fine-tuning方法和layer wise剪枝(在剪枝一层之后,他们只需要一到两个epoch的学习就可以进行微调),后者的方法在整体训练完后剪枝和每剪枝一层进行fine-tuning之间取得了平衡。

作者在VGG16和Resnet上进行了实验,并与基于权重的剪枝和APoz进行了比较,得出的结论如下:

  • 基于熵的方法实现了超过16倍的压缩,而基于权重的方法实现13倍的压缩
  • APoZ实现了2.7倍的压缩。但是需要注意的是,利用熵获得的较高的压缩率包括平均池化替换全连接层导致的压缩率降低,没有这一点,使用基于熵的方法导致比APoZ压缩率更低

(3)APoZ: 基于通道中0的数量进行通道微调

论文 Network Trimming: A Data-Driven Neuron Pruning Approach towards Efficient Deep Architectures提出了一种直接的方法,其思想是基于输出特征映射中的零的数量是其冗余的表现。根据这种思想,他们提出了一种 average number of zero activations(APoZ)方法,该方法统计在Relu激活函数之后0的平均数来作为弱过滤器的证明。

该方法在LeNet和VGGNet进行实验,首先找到最适合剪枝的层,然后迭代的进行剪枝来保证准确率,最后他们进行了重新训练和微调权重的实验,并倾向于后者得到更好的结果。

对于LeNet,作者发现主要的参数集中在第二层卷积和第一个全连接层,所以他们将注意力主要集中在对这两层进行剪枝,最终的结果是过滤器数量由50减小到24,全连接层从500减小到252。

对于VGGNet,作者也是把注意力集中在512个过滤器的卷积层和4096个节点的全连接层,最终压缩率达到2.59.

(4)剪枝小的过滤器

论文 Pruning Filters for Efficient ConvNets剪枝的方法是剪枝掉一层中绝对值和最小的过滤器。过滤器的大小定义如下:m为输入特征图的数量,Wji为产生第j个特征图的过滤器
在这里插入图片描述
在计算完所有的sj后,去除掉一定比例最小的过滤器以及相关的特征图,每剪枝完一层就进行一次fine-tuning,之后再剪枝下一层。

作者在VGGNet和ResNet上进行了实验,在VGGNet8-13层中的比较小的过滤器,50%的剪枝不会影响准确率。在ResNet-56和ResNet-110中,最合适的剪枝率分别是3.7%和32.4%。

作者将该方法和基于方差的方法(见第一小节)进行了对比,发现能够在不使用额外数据的情况下取得相当的效果。

(5)基于几何中位数的过滤器剪枝

论文 Filter Pruning via Geometric Median for Deep Convolutional Neural Networks Acceleration认为如果大多数的权重都很小,那么最终可能会删除大量的过滤器,如果大多数过滤器的值都很大,那么就不会删除任何过滤器,即使可能存在相对较小的过滤器。

因此,他们提出了一种观点,即过滤器的几何中值共享其他过滤器的大部分共同信息。因此,如果一个接近它的过滤器被删除,那么其他过滤器可以覆盖它。计算几何中值可能很耗时,所以他们通过假设其中一个过滤器将是几何平均值来近似计算。他们的剪枝策略是使用一个固定的剪枝因子对所有层重复剪枝和微调。

他们对一些方法进行了评估,包括修剪小滤波器(第四小节)、ThiNet(第六小节)、软滤波器修剪和NISP。这些方法在CIFAR-10和ImageNet数据训练的ResNets上进行评估,修剪率分别为30%和40%。一般来说,不同方法的精度下降是相似的,尽管与其他方法(例如,ThiNet 36.7%, Soft filter pruning 41%, NISP 44%)相比,在ResNet-50上使用几何中值方法时,FLOPS显著降低(53.5%)。

(6)ThiNet and AOFP: 识别较弱的通道

ThiNet

论文 ThiNet: A Filter Level Pruning Method for Deep Neural Network Compression将剪枝任务定义为一个优化问题,该问题的目标是找到最接近输出特征映射的输入通道子集。然后可以删除不在子集中的通道及其相应的过滤器。解决优化问题的计算具有挑战性,因此他们使用贪婪算法,首先找到贡献最少的通道,将其添加到要删除列表,并在剩下的通道重复这个过程,直到选择的通道数量等于被剪枝的数量。一旦识别出待保留滤波器的一个子集,利用最小二乘法求出使滤波器W最小的滤波器的权值:
在这里插入图片描述
Y是在输出通道中m个样本点,X是对应的输入通道。

作者进行了两个实验。第一个实验作者将VGGNet中全连接层替换为全局平均池化层,之后用ThiNet、APoZ、剪枝小的过滤器方法(第四小节)进行剪枝。他们的结果表明,相对于ApoZ, ThiNet在精度上的退化更小,相比于使用剪枝小过滤器的方法,减少了FLOPS的数量。

第二个实验中作者对ResNet和VGGNet在Imagenet数据集上进行了训练。当仅对VGGNet的前十个卷积层使用ThiNet,参数量减少了5%,准确率上升了1%,当使用全局平均池化,参数量减少了94%,准确率降低了1%。对ResNet中每个残差块的前两层卷积使用ThiNet,结果表明,ThiNet能够将参数数量减半,top-1精度损失1.87%。

AOFP

论文 Approximated Oracle Filter Pruning for Destructive CNN Width Optimization和ThiNet目的类似,也是是识别并移除对下一层的特征映射产生最小影响的子集。

然而,ThiNet中采用的搜索过程是贪婪的自底向上的方法,而AOFP采用的是自顶向下的二分搜索,随机选择一层中的一半过滤器并设置为剪枝。在下一层生成的特征图上删除这些过滤器的效果会根据设置为修剪的每个过滤器进行测量和记录。对不同的随机选择重复这个过程,每个过滤器的平均效果用来表示去除一个过滤器的影响。去掉后会产生最坏效果的前50%的过滤器被保留下来,并重复这个过程,除非这将导致不可接受的精度降低。与ThiNet等方法相比,AOFP在对一层进行修剪之前不需要确定修剪速率。

在和其他剪枝方法在不同网络结构上的结果表明AOFP能够显著减少FLOPS而不会大幅降低精度。

(7)使用Lasso回归优化通道选择

论文 Channel Pruning for Accelerating Very Deep Neural Networks也将通道选择看成优化问题。具体优化公式如下,W为过滤器,X为输入通道,Y为输出通道结果,β是[0,1]范围内的数,p是值留存的通道数。
在这里插入图片描述
不同于ThiNet的贪心搜索,该方法使用L0正则化方法和L1正则化方法进行Lasso回归
在这里插入图片描述
作者在VGGNet、ResNet和Xception网络上都进行了实验,另外,作者发现这种剪枝模型可以使用迁移学习应用在目标检测任务上。

三、相似度和聚类方法

一些作者已经发现了移除可能不必要地重复功能的相似参数的方法的潜力。以下两小节描述了两个相对较近的研究,说明了相似性和聚类度量如何用于修剪。

1.使用余弦相似度来验证重复

论文 Reducing duplicate filters in deep neural networks 中作者使用余弦相似度来寻找相似的过滤器,公式如下
在这里插入图片描述
作者分别在CIFAR数据集上使用MLP和CNN上进行实验。并和修剪小过滤器的方法进行对比,他们的主要发现是值得注意的,即在MLP中,随着第一层节点数量的增加,使用相似度方法更好,因为过多的参数会导致更多相似的权重。而在CNN中,修剪小过滤器的方法更好。

2.使用聚类来识别冗余

论文 Redundant feature pruning for accelerated inference in deep neural networks提出使用聚类方法来识别不同的过滤器。他们首先利用凝聚层次聚类( agglomerative hierarchical clustering)方法对相似的过滤器进行分组,然后从每个簇中随机选择一个过滤器,并从网络中删除其他过滤器。凝聚集群以一种自下而上的方式工作,从集群中的个体开始,反复合并被认为相似的集群。两个簇之间的相似性度量决定了两个簇是否被合并。

他们在CIFAR-10上用VGG-16和在ImageNet上用ResNet-34进行了各种实验。首先,他们考虑了改变两个聚类合并时的相似度阈值的影响,确定了随着对相似度的要求降低,聚类(和过滤器)的数量也会减少。

对于使用CIFAR-10数据对VGG-16进行的试验,他们表明,一旦确定了最优的相似阈值,他们的方法实现了比其他方法更好的剪枝率和准确性,包括小滤波器剪枝、网络sliming、一种使用正则化来识别弱通道的方法,以及一种使用灵敏度分析的尝试学习方法。

四、敏感度分析方法

剪枝的主要目的是去除对模型精度影响最小的权值、过滤器和通道。上面描述的基于量级和相似性的方法通过使用影响精度的权重、过滤器和通道的属性隐式地解决了这一目标。相比之下,本节介绍了使用灵敏度分析的方法,目的是建模扰动权值对损失函数的影响。

第一小节以骨架化的描述开始,骨架化是最早提出使用敏感性分析的研究之一。第二到四小节介绍了使用泰勒级数近似扰动权值对损失函数的影响的一系列研究的发展,从最初开发mlp方法的工作到最近旨在剪枝cnn的研究。

尽管使用泰勒级数近似主导这一类方法,新的灵敏度分析方法正在崛起,第五和第六小节描述了有潜力的两种方法:一种使用智能体(Agent),这意味着学习过滤器来剪枝,另一个采用多臂赌博机的使用。

1.使用骨架化(Skeletonization)来剪枝节点

论文 Skeletonization: A Technique for Trimming the Fat from a Network via Relevance Assessment.介绍了一种最早的剪枝神经网络节点的骨架化(Skeletonization)方法。为了计算移除节点的效果,作者引入了注意强度的概念来表示节点在计算激活时的重要性。给定节点的注意强度a,激活函数f,节点j的输出y可以被定义为:
在这里插入图片描述
节点ρ的重要性或相关性可以被定义为当a设为0和1时的区别,并且可以通过损失对注意强度的导数来进行估计
在这里插入图片描述
虽然作者试图利用二次损失函数进行训练,但他们得出的结论是,考虑到输出和目标与训练密切相关,当计算ρ时,二次损失函数表现不佳。因此,他们在计算ρ时采用了线性损失函数
在这里插入图片描述
其中t是输出单元j的目标,y是来自网络的相应输出。

另外,作者注意到导数随时间并不稳定,因此他们使用了权重平均方法
在这里插入图片描述

2.使用OBD和OBS来剪枝权重

许多研究通过泰勒公式来分析权重对损失的影响,给定权重的变化∆w,损失变化∆ℒ的泰勒级数近似可以表述为
在这里插入图片描述
H为海森矩阵,元素均为损失对权重的二阶导数
在这里插入图片描述
许多方法采用这种估计方法,假定三阶导可忽略不计。

OBD算法

在OBD(Optimal Brain Damage)算法中, 假设一阶项可以忽略,因为网络将被训练成达到局部最小值,从而产生一个简化的二次逼近。
在这里插入图片描述
当权重数量很多,计算海森矩阵需要很大的算力,所以作者假设损失的变化可以由海森矩阵的对角线元素来估计,因此有以下方法来计算权重的突出度s
在这里插入图片描述
其中二阶导的计算方式和反向传播类似

OBS算法

OBS算法中,作者使用了海森矩阵的全部元素,OBS使用单位向量e表示选择第m个权值作为被剪枝的权值,将剪枝重新定义为基于约束的优化任务:
在这里插入图片描述
使用拉格朗日乘子可以转化为:
在这里插入图片描述
通过求导和以上的限制条件,突出度s可以被计算为:
在这里插入图片描述
作者得到的结论表明,在XOR问题上,OBS算法表现较好,并且能够显著减少权重的数量。

3.使用一阶泰勒估计剪枝特征图

论文 Pruning Convolutional Neural Networks for Resource Efficient Inference介绍了一种方法通过泰勒公式建模当一个特征图被去掉后的结果。相比于OBD和OBS认为一阶导可以被忽略,该论文作者使用了一阶导估计,忽略了更高阶的项。作者认为,尽管一阶梯度趋于零,但是损失变化的期望值与方差成正比,方差不为零,是达到局部解时稳定性的度量。给定一个具有N个元素Yij的特征映射,使用Taylor级数的一阶近似可以得到以下损失绝对变化的度量:
在这里插入图片描述
该度量的尺度在不同的层会有所不同,因此作者在利用该度量在网络的所有层上选择特征映射时,在每一层内应用L2归一化。

他们采用的剪枝过程包括使用该方法选择一个特征图,剪枝,然后在重复此过程之前对网络进行微调,直到满足一个停止条件,考虑到在保持准确性的同时减少 FLOPs 的需要。

他们的实验揭示了一些有趣的发现:

  • 从VGG-16和AlexNet对UCSD-Birds和Oxford-Flowers数据的实验来看,他们的标准选择的特征图与oracle方法选择的特征图的相关性显著高于OBD和APoZ。在ImageNet数据上,他们发现OBD在使用AlexNet时相关性最好。
  • 在迁移学习实验中,他们在UCSD-Birds数据上对VGG-16进行了微调,结果显示,随着参数修剪数量的增加,他们的方法比APoZ和OBD表现得更好。在AlexNet针对Oxford Flowers的数据微调的实验中,结果显示,他们的方法和OBD都比APoZ表现得更好。
  • 在一个关于修剪潜在好处的显著例子中,他们在一个识别手势的网络上展示了他们的方法,一个单一推理需要超过37个GFLOPs,但经过修剪和微调后,需要3G FLOPs,仅降低了2.6%的准确性。

在后续的研究中,作者承认上述方法存在一些局限性;也就是说,假设所有层都具有相同的重要性对跳连(在ResNet架构中使用)不起作用,而且评估特性映射中更改的影响会导致内存需求的增加。因此,他们提出了另一种公式,也使用泰勒级数近似,但基于估计由于去掉第m个参数而造成的平方损失:
在这里插入图片描述
gm是一阶导梯度,Hm是海森矩阵的第m行。过滤器的重要性就由计算总和来表示。

所采用的剪枝算法如下。在每个阶段,他们利用固定数量的小批量估计每个滤波器的重要性,然后,根据其重要性,预定义数量的神经元被删除。然后对网络进行微调,并重复这一过程,直到达到一个修剪目标,如期望的过滤器数量或可接受的精度下降的极限。

4.学习用智能体(Agent)来剪枝过滤器

论文 Learning to Prune Filters in Convolutional Neural Networks提出使用智能体(Agent),每层一个,目的是学习要剪枝哪些过滤器。每个Agent都采用神经网络的形式,将一层过滤器作为输入并学习输出β,其中βi = 1表示应保留第i个滤波器,βi =0表示应剪枝第i个滤波器。

为Agent建模的网络经过训练,通过最大化奖励函数来寻找最有效的过滤器,奖励函数是两个函数的乘积,一个衡量表现𝜓,另一个表示模型的相对规模𝜑。给定E(验证集)、网络在剪枝前的性能p*、b(可容忍的精度降低),奖励R定义为:
在这里插入图片描述
𝜓定义为:
在这里插入图片描述
𝜑定义为:
在这里插入图片描述
为了训练代理,他们使用一种尝试和学习的方法,在网络上尝试β的样本设置,并计算相应的奖励,以提供一组使用策略梯度方法训练代理所需的示例

与其他研究一样,他们的评估是在CIFAR10上使用VGG和ResNet进行分类任务。他们还评估了在PASCAL VOC数据上使用FCN-32s网络和在CamVid数据上使用SegNet网络的语义分割任务。结果还可以。

5.多臂赌博机(MAB)中的剪枝

论文 Optimizing deep learning networks using multi-armed banditsPruning Neural Networks Using Multi-Armed Bandits提出了一个框架多臂赌博机,用于评估应该删除哪些权重和过滤器。MABs指的是一种基于对赌徒建模的框架,赌徒面对一堆老虎机,为了获得最大回报,需要选择玩哪台机器。在每次拉杠杆之前,赌徒将根据之前的奖励历史知道预期回报或回报,并能够利用这一点来决定下一步拉哪只手以实现他或她的目标。MABs的目标可以是最大化累积奖励或找到最好的臂。当目标是最大化累积奖励时,赌徒的一个关键决策便是决定是使用迄今为止最好的臂还是探索其他臂以获得更大的奖励。相反,当目标是寻找最佳的臂时,一个关键的决定是选择一个能够使人们高度相信最终选定的臂确实是最适合开发的臂。

通过将重量、节点或特征图谱与多臂赌博机联系在一起,和将遗憾定义为移除权重/节点/特性图后的平均损失增加,他们能够探索各种MAB算法的使用,例如 UCB (Upper Confidence Bounds),汤普森抽样,UGapEb来剪枝神经网络。

实证评价是基于在剪枝网络上训练UCI数据集的库,CIFAR-10和卷积网络,和SVHN数据,表明基于UCB的MAB方法优于 magnitude pruning 和OBD、OBS效果相当,但是会使用更少的时间。他们还评估了在牛津花卉和UCSDBirds的数据上使用MAB方法剪枝的AlexNet。结果表明,在不进行任何微调和不影响精度的情况下,可以剪枝这些网络上超过27%的权值。

  • 33
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
代码修剪卷积神经网络用于资源高效推理,是一种优化模型的方法,旨在减小模型的尺寸和计算量,从而实现在资源受限的设备上进行高效推理。 修剪是指通过删除模型中的一些参数或神经元来减小模型的复杂性。在卷积神经网络中,修剪通常包括删除一些卷积核或通道,以及减少连接权重的数量。这可以通过一些算法和技术来实现,例如剪枝算法、稀疏矩阵和低秩近似等。 修剪卷积神经网络可以带来多个好处。首先,它可以大大减小模型的尺寸,从而降低了存储模型所需的内存空间。其次,修剪可以减少模型的计算量,使得模型可以更快地进行推理。这对移动设备和嵌入式系统等资源受限的设备非常重要。此外,修剪还可以提高模型的泛化能力,减少过拟合的风险。 对于修剪卷积神经网络的代码实现,一般分为两个步骤。首先,需要训练一个初始的卷积神经网络模型。然后,通过一些修剪算法选择要修剪的参数或神经元,并将其从模型中移除。修剪的目标可以是按照权重大小或梯度大小进行选择。 在实际编程中,代码可以使用一些深度学习框架(如PyTorch或TensorFlow)来实现。这些框架通常提供了一些修剪工具和函数,以便进行参数和神经元的修剪。开发者需要根据具体的应用场景和需求来选择合适的修剪策略,并根据框架的API来实现修剪过程。 总之,代码修剪卷积神经网络是一种资源高效推理的方法,通过减小模型的尺寸和计算量,提高模型的效率和性能。这对于在资源受限的设备上进行深度学习推理任务非常有意义。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值