网络剪枝通俗解释

article/2025/9/16 0:09:51
  • 论文链接:Learning Efficient Convolutional Networks through Network
    Slimming
  • 视频链接:唐宇迪

基本思想


我们在模型生成通道数为[64,128,256,512]的特征图,但是这些特征图不一定都重要,我们希望能够体现特征图的主次之分,通过剪枝除去那些不那么重要的特征图,形成一个轻量化的模型。上述论文通过直接引用BN层的 γ \gamma γ参数,作为模型的scaling factor用来评判模型通道的重要程度,利用L1损失函数进行特征选择,最终达到轻量化模型。上述介绍的结构适用于大多数的CNN结构,但是对于具有跨层连接的网络,一个层的输出可以作为多个后续层的输入,例如ResNet的时候,我们将BN层放在卷积层之前,此时稀疏性是在层的传入端得到。此时该层优选地使用接收到的信息。
在这里插入图片描述
上图是模型的瘦身流程,据论文所述,当剪枝过高的时候,模型的精度可能会下降,但是通过微调操作可以弥补这些下降,有时候微调过后的网络比原先网络的效果更加优秀。其中我们的损失函数为
L = ∑ ( x , y ) l ( f ( x , W ) , y ) + λ ∑ g ( γ ) L = \sum_{(x,y)}l(f(x,W),y)+\lambda\sum g(\gamma) L=(x,y)l(f(x,W),y)+λg(γ)
g ( γ ) g(\gamma) g(γ)是我们所说的L1损失函数。

细节部分

目前通常搭建网络结构的做法是,在卷积层之后搭建一个BN结构,再通过激活函数。不断地进行堆叠。我们可以直接利用BN层中的γ参数作为网络瘦身所需的缩放因子,它具有不给网络引入开销的巨大优势。

Batch Normalization 的优点
神经网络学习过程中就是为了学习数据的分布,一旦训练数据与测试数据的分布不同,那么网络的泛化能力将大大下降。BN 在卷积神经网络应用中,得到的数据形式不一定是原始数据分布,因为在经过了不同的卷积层,原始数据的分布也被更改。由于卷积神经网络一开始的参数无序初始化的,因此为了能使网络更加容易的进行学习,我们希望数据的输入形式尽可能地一致,所以采用了BN层,增加网络的泛化能力。
在这里插入图片描述
以sigmoid激活函数为例,当数据输入处于中心点附近的时候,梯度较大, 更新的情况较快,但是当其远离中性点的时候梯度较小,且可能出现梯度消失的现象。我们希望输入在权重和偏移的作用下能够输出一个使得激活层较为敏感的值,因此需要采用BN结构。

BN层结构的目的是为了解决上述输入数据不处于原点附近,且分布不均衡的问题。通过采用BN层减去均值可以使其中心对称,在每个维度上除以各自的标准差可以使范围对称。但是BN层结构不仅仅是一个归一化处理,它是一个可学习、有参数的网络层,如下为BN层的公式。
x ^ ( k ) = x ( k ) − E [ x ( k ) ] V a r [ x ( k ) ] \hat{x}^{(k)} = \frac{x^{(k)}-E[x^{(k)}]}{\sqrt{Var[x^{(k)}]}} x^(k)=Var[x(k)] x(k)E[x(k)]
y ( k ) = γ ( k ) x ^ ( k ) + β ( k ) y^{(k)} = \gamma^{(k)}\hat{x}^{(k)} + \beta^{(k)} y(k)=γ(k)x^(k)+β(k)

BN引入了可学习参数 γ \gamma γ β \beta β ,每一层,每一个通道都会具有一个 γ \gamma γ β \beta β 参数,通过网络自身学习该参数,重构原始网络所需要学习的特征分布。

当BN不采用可学习的参数时,采用了BN层之后会将数值分布强制在了非线性函数的线性区域中,对于神经网络而言,多个矩阵运算在线性的条件下可以合并成一个矩阵进行计算。因此我们需要对数据进行还原
y ( k ) = γ ( k ) x ^ ( k ) + β ( k ) y^{(k)} = \gamma^{(k)}\hat{x}^{(k)}+\beta^{(k)} y(k)=γ(k)x^(k)+β(k)
其中 γ \gamma γ的数值越大越重要,因为当其数据较小的时候,相当于一个线性激活函数,可以进行合并,无需多出一个层结构。
L1 lossL2 loss

同时,为了体现差异性,使较为重要的数据更加重要,采用L1损失函数进行训练。L1损失函数具有天然的输出稀疏性,把不重要的特征都置为0,因此也是一个天然的特征选择器。

L 1 = ∑ i = 1 n ∣ y t r u e − y p r e d i c t e d ∣ L1=\sum_{i=1}^n|y_{true}-y_{predicted}| L1=i=1nytrueypredicted
L 2 = ∑ i = 1 n ( y t r u e − y p r e d i c t e d ) 2 L2=\sum_{i=1}^n(y_{true}-y_{predicted})^2 L2=i=1n(ytrueypredicted)2

假设权重更新为 γ ^ = γ 1 − 0.5 ∗ g r a d i e n t \hat{\gamma} = \gamma_1-0.5*gradient γ^=γ10.5gradient
权重每次下降都会稳定前进,直到参数为0的时候,相反如右图所示,L2损失函数越靠近0,则其变化越小,不具有此类特征。


http://chatgpt.dhexx.cn/article/IUJyQa2X.shtml

相关文章

α、β剪枝法

在讲α、β剪枝法之前,我们先了解一下极大极小值算法;因为α、β剪枝法是为了简化极大极小值的计算而提出的。 极大极小值法 Minimax算法 又名极小化极大算法,是一种找出失败的最大可能性中的最小值的算法(即最小化对手的最大得益…

决策树的剪枝

目录 一、为什么要剪枝 二、剪枝的策略 1、预剪枝(pre-pruning) 2、后剪枝(post-pruning) 三、代码实现 1、收集、准备数据: 2、分析数据: 3、预剪枝及测试: 4、后剪枝及测试&#xff1…

决策树算法和剪枝原理

决策树算法和剪枝原理 本节我们对决策算法原理做简单的解析,帮助您理清算法思路,温故而知新。 我们知道,决策树算法是一种树形分类结构,要通过这棵树实现样本分类,就要根据 if -else 原理设置判别条件。因此您可以这…

决策树(decision tree)(二)——剪枝

决策树(decision tree)(二)——剪枝 **注:本博客为周志华《机器学习》读书笔记,虽然有一些自己的理解,但是其中仍然有大量文字摘自周老师的《机器学习》书。 决策树系列博客: 决策树(一&#x…

机器学习--决策树二(预剪枝和后剪枝)

一、什么是决策树的剪枝 对比日常生活中,环卫工人在大街上给生长茂密的树进行枝叶的修剪。在机器学习的决策树算法中,有对应的剪枝算法。将比较复杂的决策树,化简为较为简单的版本,并且不损失算法的性能。 二、为什么要剪枝 剪枝…

关于剪枝对象的分类(weights剪枝、神经元剪枝、filters剪枝、layers剪枝、channel剪枝、对channel分组剪枝、Stripe剪枝)

文章目录 剪枝对象分析:1.weights剪枝:2.神经元剪枝:3.Filters剪枝:4.通道剪枝5.Group-wise剪枝6.Stripe剪枝 剪枝对象分析: 剪枝分为结构化剪枝和非结构化剪枝,细化可分为weights剪枝、神经元剪枝、filte…

决策树——剪枝处理

剪枝处理 1:剪枝处理的原因 “剪枝”是决策树学习算法对付“过拟合”的主要手段,因此,可通过“剪枝”来一定程度避免因决策分支过多,以致于把训练集自身的一些特点当做所有数据都具有的一般性质而导致的过拟合 2:剪…

【ML】决策树--剪枝处理(预剪枝、后剪枝)

1. 剪枝(pruning)处理 首先,我们先说一下剪枝的目的——防止“过拟合”。 在决策树的学习过程中,为了保证正确性,会不断的进行划分,这样可能会导致对于训练样本能够达到一个很好的准确性,但是…

深度学习剪枝

一般来说,神经网络层数越深、参数越多,所得出的结果就越精细。但与此同时,问题也来了:越精细,意味着所消耗的计算资源也就越多。这个问题怎么破?这就要靠剪枝技术了。言下之意,把那些对输出结果…

决策树后剪枝算法(一)代价复杂度剪枝CPP

​  ​​ ​决策树后剪枝算法(一)代价复杂度剪枝CPP  ​​ ​决策树后剪枝算法(二)错误率降低剪枝REP  ​​ ​决策树后剪枝算法(三)悲观错误剪枝PEP  ​​ ​决策树后剪枝算法(四&…

机器学习-预剪枝和后剪枝

一棵完全生长的决策树会面临一个很严重的问题,即过拟合。当模型过拟合进行预测时,在测试集上的效果将会很差。因此我们需要对决策树进行剪枝, 剪掉一些枝叶,提升模型的泛化能力。 决策树的剪枝通常有两种方法,预剪枝&a…

【机器学习】Python实现决策树的预剪枝与后剪枝

决策树是一种用于分类和回归任务的非参数监督学习算法。它是一种分层树形结构,由根节点、分支、内部节点和叶节点组成。 从上图中可以看出,决策树从根节点开始,根节点没有任何传入分支。然后,根节点的传出分支为内部节点&#xff…

决策树的预剪枝与后剪枝

前言: 本次讲解参考的仍是周志华的《机器学习》,采用的是书中的样例,按照我个人的理解对其进行了详细解释,希望大家能看得懂。 1、数据集 其中{1,2,3,6,7,10,14,15,16,17}为测试集,{4,5,8,9,11,12,13}为训练集。 2、…

YOLOv5剪枝✂️ | 模型剪枝理论篇

文章目录 1. 前言2. 摘要精读3. 背景4. 本文提出的解决方式5. 通道层次稀疏性的优势6. 挑战7. 缩放因素和稀疏性惩罚8. 利用BN图层中的缩放因子9. 通道剪枝和微调10. 多通道方案11. 处理跨层连接和预激活结构12. 实验结果12.1 CIFAR-10数据集剪枝效果12.2 CIFAR-100数据集剪枝效…

决策树及决策树生成与剪枝

文章目录 1. 决策树学习2. 最优划分属性的选择2.1 信息增益 - ID32.1.1 什么是信息增益2.1.2 ID3 树中最优划分属性计算举例 2.2 信息增益率 - C4.52.3 基尼指数 - CART 3. 决策树剪枝3.1 决策树的损失函数3.2 如何进行决策树剪枝3.2.1 预剪枝3.2.2 后剪枝3.3.3 两种剪枝策略对…

剪枝

将复杂的决策树进行简化的过程称为剪枝,它的目的是去掉一些节点,包括叶节点和中间节点。 剪枝常用方法:预剪枝与后剪枝两种。 预剪枝:在构建决策树的过程中,提前终止决策树生长,从而避免过多的节点产生。该…

(剪枝)剪枝的理论

剪枝参考视频 本文将介绍深度学习模型压缩方法中的剪枝,内容从剪枝简介、剪枝步骤、结构化剪枝与非结构化剪枝、静态剪枝与动态剪枝、硬剪枝与软剪枝等五个部分展开。 剪枝简介 在介绍剪枝之前,首先来过参数化这个概念,过参数化主要是指在训…

剪枝总结

一、引子 剪枝,就是减小搜索树规模、尽早排除搜索树中不必要的分支的一种手段。 形象地看,就好像剪掉了搜索树的枝条,故被称为剪枝。 二、常见剪枝方法 1.优化搜索顺序 在一些问题中,搜索树的各个分支之间的顺序是不固定的 …

搜索剪枝

目录 什么是剪枝 几种常见的剪枝 1.可行性剪枝 2.排除等效冗余 3.最优性剪枝 4.顺序剪枝 5.记忆化 运用实例 1.选数 2.吃奶酪 3.小木棍 什么是剪枝 剪枝:通过某种判断,避免一些不必要的遍历过程。搜索的时间复杂度通常很大,通过剪…

【模型压缩】(二)—— 剪枝

一、概述 剪枝(Pruning)的一些概念: 当提及神经网络的"参数"时,大多数情况指的是网络的学习型参数,也就是权重矩阵weights和偏置bias;现代网络的参数量大概在百万至数十亿之间,因此…