模型剪枝综述

news2024/11/16 21:48:17

目录

1 深度神经网络的稀疏性:

2 剪枝算法分类:

3 具体的剪枝方法包括:

4 剪枝算法流程:

5 几种常见的剪枝算法:

6 结构化剪枝和非结构化剪枝各有其优缺点:

7 剪枝算法对模型精度的影响

8 影响剪枝算法对模型精度的因素


模型压缩中的剪枝算法是一种应用广泛的模型压缩方法,其通过剔除模型中“不重要”的权重,来减少模型的参数量和计算量,同时尽量保证模型的精度不受影响。

模型剪枝的核心是模型中的权重、激活、梯度等是稀疏的,减少部分参数不会影响模型的性能和泛化能力。

1 深度神经网络的稀疏性

  • 权重稀疏:在大多数神经网络中,权重数值的分布接近正态分布,越接近0的权重越多。通常认为权重数值的绝对值大小可作为重要性的一种度量,数值越大对模型输出贡献越大,反之则不重要,删去后对模型精度影响较小,但仍需再训练模型以恢复精度。

  • 激活稀疏:ReLU 激活函数会使负半轴的输入产生0值的输出,此外,max_pooling 池化操作也会产生类似稀疏的效果,即无论网络接收到什么输入,大型网络中很大一部分神经元的输出大多为零。

2 剪枝算法分类

  • 结构化剪枝:改变网络中的滤波器组和特征通道数目,所获得的模型不需要专门的算法和硬件就能运行。可进一步细分,如 channel-wise、filter-wise 或 shape-wise 等。

  • 非结构化剪枝:对连接或者神经元进行剪枝,能实现更高的压缩率并保持较高的模型性能,但会带来网络模型稀疏化,其稀疏结构对于硬件加速计算并不友好,除非底层硬件和计算加速库对稀疏计算有较好的支持,否则剪枝后很难获得实质的性能提升。

3 具体的剪枝方法包括:

  • 细粒度剪枝(fine-grained):粒度最小的剪枝,如随机将一些神经元的输出置零的 dropout,以及随机将部分神经元间的连接置零的 dropconnect 都属于细粒度剪枝。

  • 向量剪枝(vector-level):对卷积核内部(intra-kernel)进行剪枝,粒度稍大于细粒度剪枝。

  • 核剪枝(kernel-level):去除某个卷积核,丢弃对输入通道中对应卷积核的计算。

  • 滤波器剪枝(filter-level):对整个卷积核组进行剪枝,推理过程中输出特征通道数会改变。

4 剪枝算法流程

目前剪枝算法的总体流程可归结为以下三种:

  • 标准剪枝算法流程:主要包含训练、剪枝以及微调三个部分。首先对网络模型进行预训练,获得在特定基础任务上训练好的原始模型;然后进行如细粒度剪枝、向量剪枝、核剪枝、滤波器剪枝等操作,并对网络模型结构进行评估,确定需要剪枝的层,设定裁剪阈值或比例,通过加入 mask 矩阵来实现剪枝;最后进行微调,以恢复被剪枝操作影响的模型表达能力。微调时参数在计算时先乘以 mask,mask 为 1 的参数值可继续训练通过 BP 调整梯度,而 mask 为 0 的部分则不对后续部分产生影响。之后还可进行再剪枝,将微调后的网络模型再次进行模型结构评估和执行剪枝算法,不断迭代优化,直到满足剪枝目标需求。

  • 基于子模型采样的剪枝流程:得到训练好的模型后,对可修剪的网络结构按照剪枝目标进行采样(采样过程可以是随机的,也可按照网络结构的重要性或通过 KL 散度计算进行概率采样),得到采样子模型。通常进行多次采样,得到多个子模型,之后对每个子模型进行性能评估,选取最优的子模型进行微调得到最后的剪枝模型。

  • 基于搜索的剪枝流程:主要依靠强化学习等无监督学习或半监督学习算法,或神经网络结构搜索相关理论。给定剪枝目标后,在网络结构中搜索较优的子结构,此搜索过程往往伴随着网络参数的学习过程,因此部分基于搜索的剪枝算法在剪枝结束后不需要再进行微调。

剪枝算法的发展趋势包括打破固定假设、走向自动化以及与 NAS(神经网络架构搜索)融合等。例如挑战已有的固有假设,将部分工作自动化,以及 NAS 中有针对结构化剪枝进行搜索的方法等。

5 几种常见的剪枝算法:

以下是一些常见的剪枝算法:

  • α-β剪枝(alpha-beta pruning) :这是对极小化-极大化算法的改进,用于减少博弈树搜索的节点数量,从而提高搜索效率,适用于博弈树的最小最大搜索过程。它通过设定下限α和上限β,记录搜索过程中得到的最优解的取值范围。在搜索过程中,当某个节点的取值范围超出了α和β的范围时,就可以剪枝,停止对该节点的搜索;

  • 极小化-极大化算法(minimax algorithm) :一种博弈树搜索算法,用于决策博弈过程中的最佳走法。该算法假设两个对手在博弈中都会采取最优策略,因此在搜索博弈树时,它会交替地考虑最大化自己的利益和最小化对手的利益。在每一层,算法会选择最大化自己利益的节点或最小化对手利益的节点,直到达到叶子节点,然后根据叶子节点的估值来进行决策。该算法适用于零和博弈,即一方获利就意味着另一方损失;

  • 启发式剪枝(heuristic pruning) :利用启发性信息来判断节点是否值得继续搜索。根据启发性信息,评估某个节点的潜在价值,如果该节点的价值低于阈值,则可以进行剪枝,停止对该节点的搜索;

  • 约束剪枝(constraint pruning) :在满足某种预定约束的情况下,可以直接进行剪枝。例如,在搜索排列组合时,若剩余的元素数量已经无法满足目标要求,就可以直接剪掉该分支;

  • 子问题剪枝(subproblem pruning) :在动态规划等问题中,利用子问题的最优解来剪枝。如果当前子问题的最优解已经计算出来,并且该最优解无法改进,则可以直接剪枝,避免重复计算;

  • 双向剪枝(bidirectional pruning) :在某些问题中,可以从问题的两个方向同时进行搜索。在搜索过程中,利用对称性或问题的特殊性质,可以剪掉对称的或重复的分支,从而减少搜索空间;

  • 排序剪枝(sorting pruning) :在搜索过程中,对搜索的待选节点进行排序,优先搜索那些更有可能满足条件的节点。通过先搜索可能更优的节点,可以尽早地找到最优解,从而剪去无需再搜索的分支;

  • 动态剪枝(dynamic pruning) :在搜索过程中,根据当前搜索状态和之前搜索的结果,动态地调整剪枝策略。可以基于实时信息来决定是否继续搜索,从而提高搜索效率。

剪枝算法的核心思想是通过合理的判断条件来剪掉不必要的搜索分支,从而减少搜索时间和空间消耗。选择合适的剪枝技术需要针对具体问题进行分析和设计,以达到更高效的搜索效果,它常用于回溯法、深度优先搜索和博弈树等问题中。

6 结构化剪枝和非结构化剪枝各有其优缺点:

结构化剪枝的优点

  • 硬件友好性:由于是按照一定的结构模式进行剪枝,如对整个卷积核或特征通道进行剪枝,所得模型在现有硬件上易于部署和加速,无需特殊的算法支持。

  • 计算效率高:能显著减少模型的计算量和内存占用,且不会引入额外的计算开销。

  • 模型稳定性较好:保留了模型的整体结构,对模型的泛化能力影响相对较小。

结构化剪枝的缺点

  • 压缩率受限:相比于非结构化剪枝,其压缩率可能相对较低,难以实现极高的模型压缩。

  • 灵活性较差:只能按照预定的结构模式进行剪枝,可能无法精确地去除那些不太重要但仍有一定作用的参数。

非结构化剪枝的优点

  • 高压缩率:能够更精细地剪除权重参数,实现更高的压缩比例。

  • 灵活性强:可以根据模型的具体情况,更精准地选择剪除不重要的参数。

非结构化剪枝的缺点

  • 硬件不友好:由于剪枝后的模型具有不规则的稀疏结构,需要特定的硬件支持或者专门的算法来处理,否则难以有效提升计算效率。

  • 模型微调难度大:剪枝后的模型结构不规则,可能会对模型的稳定性和泛化能力产生较大影响,需要更复杂的微调策略来恢复模型性能。

  • 计算复杂度增加:在实际计算过程中,由于稀疏结构的存在,可能会导致计算效率的降低。

7 剪枝算法对模型精度的影响

剪枝算法对模型精度的积极影响

  • 合理应用剪枝算法可能对模型精度影响小甚至无影响。因为会去除对模型输出贡献小的权重或神经元。在适当剪枝比例和策略下,模型能减少参数和计算量并保持原有精度。

  • 对于过参数化模型,存在大量冗余权重连接,精心设计的剪枝算法能去除冗余部分,实现压缩且不损失精度。

剪枝算法对模型精度的消极影响

  • 剪枝过度或策略不当会对模型精度有显著负面影响。过度剪枝可能导致模型丢失关键特征表示能力,降低对输入数据的拟合和泛化能力。

  • 例如,剪枝掉对特定类别或复杂模式识别重要的权重,模型处理相关情况时可能出错致精度下降。

剪枝后模型精度的恢复相关

  • 剪枝后的模型通常需微调恢复精度,微调不充分或不合适可能无法完全弥补精度损失。

总结

  • 剪枝算法对模型精度的影响取决于多种因素,包括模型结构和复杂度、剪枝比例和策略、微调方法和程度等。实际应用中要权衡压缩率和精度关系,不断试验优化,找到适合特定模型和任务的剪枝方案,保证精度下实现有效模型压缩。

8 影响剪枝算法对模型精度的因素

  • 剪枝比例:

剪枝比例过高,即剪除过多的参数,可能会导致模型丢失重要的特征信息,从而显著降低精度。相反,剪枝比例过低可能无法达到有效的压缩效果。

  • 剪枝策略:

不同的剪枝策略会产生不同的结果。例如,基于权重绝对值大小的剪枝、基于神经元激活值的剪枝、基于梯度的剪枝等。策略的选择不当可能会误剪重要的参数。

  • 模型结构和复杂度:

简单的模型可能对剪枝的容忍度较低,因为其本身参数较少,可冗余的部分有限。而复杂的大型模型可能具有更多的冗余,但也需要更精细的剪枝策略以避免破坏关键结构。

  • 数据集特性:

数据集的大小、数据分布的多样性、数据的复杂度等都会影响。如果数据集较小或数据分布较单一,模型对剪枝可能更敏感,精度更容易受到影响。

  • 模型的训练程度:

未充分训练的模型进行剪枝可能更容易导致精度下降。而经过充分训练、已经达到较好性能的模型,在适当剪枝后可能更能保持精度。

  • 微调的效果:

剪枝后是否进行有效的微调以及微调的方法和程度对精度恢复至关重要。合适的微调可以帮助模型重新适应剪枝后的结构。

  • 任务的性质:

不同的任务对模型的要求不同。例如图像识别任务可能对某些特征的依赖较强,剪枝时需更谨慎;而某些简单的分类任务可能对剪枝的容忍度稍高。

  • 模型的层敏感度:

不同的层对模型的贡献不同,有些层对精度影响较大,对这些关键层的剪枝需要格外小心。

  • 硬件和计算环境:

在某些硬件平台上,特定的剪枝模式可能更有利于计算效率,但可能对精度产生间接影响。

综上所述,在应用剪枝算法时,需要综合考虑这些因素,通过试验和优化来找到最优的剪枝方案,以平衡模型压缩和精度保持之间的关系。

有兴趣可以关注我的专栏《高性能开发基础教程》

该文章首发于 subscriptions极空AI,后续我会在上面整理完整的AI+HPC资料,并提供相关书籍推荐,至于视频要不要录制,看大家需要不需要。

有兴趣的可以关注。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1963424.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

什么是 5G?

什么是 5G? 5G 是第五代无线蜂窝技术,与以前的网络相比,它提供了更高的上传和下载速度、更一致的连接以及更高的容量。5G 比目前流行的 4G 网络更快、更可靠,并有可能改变我们使用互联网访问应用程序、社交网络和信息的方式。例如…

ETL数据集成丨将DB2数据同步至Postgres数仓实践

随着企业数字化转型的加速,数据已成为企业的重要资产。为了更好地挖掘数据价值,企业纷纷建立自己的数据仓库,以便于数据分析和决策。在众多数据库中,DB2和Postgres作为两款备受欢迎的数据库,如何实现它们之间的数据同步…

Qt基础 | 主机信息查询 | QHostInfo的介绍和使用 | QNetworkInterface的介绍和使用

文章目录 一、Qt 网络模块介绍二、主机信息查询1.QHostlnfo 和 QNetworkInterface 类2.QHostlnfo 的使用2.1 获取本机主机名和 IP 地址2.2 查找主机的地址信息 3.QNetworkInterface 的使用 Qt 网络模块: Qt基础 | 主机信息查询 | QHostInfo的介绍和使用 | QNetworkI…

线上语音交友平台成熟案例源码出售本地找搭子交友app软件线下陪玩系统开发服务

1、上麦相亲互动:直播间内除了红娘外,还有男女用户两个视频麦位,直播间符合要求的用户可以申请上麦, 2、公屏聊天:为上麦用户可以通过在公屏发言的方式参与直播间内的话题互动。 3、私信异性用户之间可以发送私信消息,通过付要或开通会员可解…

【获取Jmeter中正则获取的数据】

获取参数值保存在本地 Jmeter获取参数保存本地【三步走策略】【一】正则表达式提取器【二】BeanShell 后置处理程序【三】执行看结果 Jmeter获取参数保存本地【三步走策略】 节省人工成本之获取参数值保存本地 【一】正则表达式提取器 【二】BeanShell 后置处理程序 FileWri…

2023年中医药市场深度剖析:政策引领,创新驱动,迈向黄金发展期!

中医药作为中国传统文化的重要组成部分,在现代医学体系中占据着独特的地位。本文基于《药融咨询》发布的《中药行业现状与未来趋势白皮书》,深入分析了中医药行业的发展现状、政策环境、市场情况、研发进展及未来发展趋势,旨在为行业内外的读…

【Hot100】LeetCode—5. 最长回文子串

目录 题目1- 思路2- 实现⭐5. 最长回文子串——题解思路 3- ACM 实现 题目 原题连接:5. 最长回文子串 1- 思路 模式识别:最长回文子串——> 动规五部曲子串的概念 ——> 子串是连续的部分,区别与子序列 动规五部曲 1.定义dp数组 dp…

网络模型的使用以及修改 pytorch

VGG16_Weights.DEFAULT 或 VGG16_Weights.IMAGENET1K_V1:使用在 ImageNet 上训练的权重 import torchvision from torch import nnvgg16_false torchvision.models.vgg16() vgg16_true torchvision.models.vgg16(weightsDEFAULT) print(vgg16_true) train_data …

vue3项目结构梳理:

总览 1.vscode文件: 通常用于存放Visual Studio Code编辑器的插件的配置 2.node_moudles文件夹: 这个文件夹包含了项目所需的所有npm依赖包。(需要在根目录下执行npm i命令安装这个文件夹) 或者在项目根目录(packa…

深度学习论文: SAM 2: Segment Anything in Images and Videos

深度学习论文: SAM 2: Segment Anything in Images and Videos SAM 2: Segment Anything in Images and Videos PDF:https://ai.meta.com/research/publications/sam-2-segment-anything-in-images-and-videos/ PyTorch: https://github.com/shanglianlm0525/PyTorch-Networks …

前端开发不得不知道的那些事

文章目录 一、技能提升篇vueuseJavaScript中文网JavaScript.infoRxJsWeb安全学习书栈网码农之家 二、UI篇iconfont:阿里巴巴矢量图标库IconPark3dicons美叶UndrawError 404摹克 三、CSS篇You-need-to-know-cssCSS TricksAnimate.cssCSS ScanCSS Filter 四、颜色篇中…

滑模变结构控制仿真实例(s-function代码详解)

目录 一、建立系统数学模型二、控制器设计1. 设计滑模面(切换面)2.设计控制器 u3. 稳定性证明 三、 Matlab 仿真1. s-function 模型2. 主要代码3. 仿真结果(采用符号函数sign(s))4. 仿真结果(采用饱和函数sat(s)) 一、建立系统数学模型 { x ˙ 1 x 2 x ˙ 2 x 3 x ˙ 3 x 1 …

vue3中Cesium离线地图

最近的需求需要在vue3发布Cesium离线地图,之前openlayers我是在本地开启http server发布的地址可以使用,但是Cesium会报跨域错误,在网上查了一下,后用的是nginx代理,下面我记录一下自己的方法。 1.判断是否联网 expo…

Linux、Windows、Mac 系统安装 Nginx 及配置命令全攻略

一、Linux 系统安装 Nginx 及配置 (一)安装依赖包 在 Linux 系统中安装 Nginx 前,首先需要安装依赖包。以下是常见的依赖包安装命令: yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel 若安装过程中出现错…

力扣高频SQL 50题(基础版)第三十二题

文章目录 力扣高频SQL 50题(基础版)第三十二题1789.员工的直属部门题目说明实现过程准备数据实现方式结果截图 力扣高频SQL 50题(基础版)第三十二题 1789.员工的直属部门 题目说明 表:Employee ------------------…

Yolov8训练时正常,但验证时Cuda out of memory问题的解决方案(非完全解决)

【问题描述】 在Yolov8训练时,训练中正常,但每轮训练中做验证时报错Cuda out of memory: 【解决方案】 往下翻有具体的报错信息: 可知是显存爆了。在没有条件更换训练显卡的情况下,笔者尝试增加with torch.no_grad…

TiDB Hackathon 2024丨用 TiDB 构建未来的 AI 创新应用, 瓜分超 ¥210,000 奖金池!

2024 TiDB Future App Hackathon 来啦!这是第八届 TiDB Hackathon,TiDB Hackathon 自举办以来,已累计参赛人数超过 3000 人 !回顾去年的 TiDB Hackathon 赛事,有来自 88 个国家近 1500 名小伙伴参加,提交了…

IDEA某个项目被同事提交的代码导致不能进入Debug了,不是IDEA的问题。千万要避坑!

刚开始我发现突然不能进入debug了,打上去后就立马边灰了,我以为是我IDEA的问题,后来我换了其他项目都能正常进入debug. 而且后续,这个项目的其他同事也都不能进入debug了。 我就怀疑是项目中有人提交了代码导致的。 后来查…

必备插件自取 vue3.0 在vscode提升编码效率

一些vue开发中用到的插件,抽空总结一下,一是方便自己查看,另外是供其他需要的同学参考。在开发vue项目中,无论用什么编辑器一些好用的插件对我们来讲或许是必要的,因为好的插件既能方便我们编码,又能提升开…

文件解析漏洞--IIS--Vulhub

文件解析漏洞 一、IIS解析漏洞 用windowserver2003安装IIS测试 1.1 IIS6.X 方法一:目录解析 在网站下建立文件夹的名字为.asp/.asa的文件夹,其目录内的任何扩展名的文件都被IIS当作asp文件来解析并执行。 1.txt文件里是asp文件的语法查看当前时间 方…