模型剪枝:给模型剪个头发

news2024/11/26 17:52:20

本文来自公众号“AI大道理”。

深度学习网络模型从卷积层到全连接层存在着大量冗余的参数,大量神经元激活值趋近于0,将这些神经元去除后可以表现出同样的模型表达能力,这种情况被称为过参数化,而对应的技术则被称为模型剪枝。

网络一般是over-parameterized参数过多的,有冗余的权重和神经元。

剪枝方法探索模型权重中的冗余, 并尝试删除/修剪冗余和非关键的权重。

减小模型大小并加速模型训练/推断,同时不会显着降低模型性能。

1、为什么要进行模型剪枝

CNN在实际应用中的部署主要受以下几个方面制约。

1)模型大小的限制

CNN强大的表示能力来自其数百万可训练参数。这些参数以及网络结构信息需要存储在磁盘上,并在推理期间加载到内存中。例如,在ImageNet上存储一个典型的CNN会消耗超过300MB的空间,这对嵌入式设备来说是一个巨大的资源负担。

2) 运行时内存

在推理期间,CNN的中间激活/响应甚至可能比存储模型参数占用更多内存空间,即使批量大小为1。这对于高端GPU来说不是问题,但对于许多计算能力较低的应用程序来说,这是负担不起的。

3) 计算操作数

卷积操作在高分辨率图像上计算量很大。大型CNN在移动设备上处理一张图像可能需要几分钟的时间,这使得在实际应用中采用它是不现实的。

因此有必要对模型进行压缩,而满足边缘设备的AI应用。

而剪枝就是模型压缩技术的一种。

(模型压缩技术:剪枝、蒸馏、量化、低秩分解等)

2、为什么可以进行模型剪枝

生物学启发:

生物研究发现人脑是高度稀疏的。

比如 2016 年早期经典的剪枝论文就曾提到,生理学上发现对于哺乳动物,婴儿期产生许多的突触连接,在后续的成长过程中,不怎么用的那些突触就会退化消失。突触修剪从出生时就开始了,一直持续到 20 多岁。

结合深度神经网络是模仿人类大脑结构,和该生理学现象,我们可以认为深度神经网络是存在稀疏性的。

过参数化:

深度学习网络模型从卷积层到全连接层存在着大量冗余的参数,大量神经元激活值趋近于0,将这些神经元去除后可以表现出同样的模型表达能力,这种情况被称为过参数化,而对应的技术则被称为模型剪枝。

尽管大型神经网络已经无数次证明了它们的学习能力,但事实证明,在训练过程结束后,并非它们的所有部分都仍然有用。

3、结构化剪枝与非结构化剪枝

非结构化剪枝:将每个单独的权重置为0。

结构化剪枝:移除一组规则的权重,如layer剪枝、filter剪枝、通道剪枝。

非结构化剪枝:

非结构化剪枝是指将神经网络中的一些权重设为0,但并不改变网络的整体结构。

这意味着网络中每个神经元和其他神经元之间的连接性不会发生变化,只是某些连接的权重为0,实际上这些连接已经被剪掉了。

这种剪枝方式的优点是剪枝操作可以非常精细,但缺点是可能不会显著减少实际的计算量和存储需求,因为0权重的连接仍需在存储和计算中被考虑(除非特别使用了针对稀疏矩阵的优化算法)。

1)权重修剪

将权重矩阵中的多个权重设置为 0,删除连接。

Dropout中随机的将一些神经元的输出置零,这就是神经元剪枝。

2)单元/神经元修剪

将权重矩阵中的多个整列设置为 0,从而删除对应的输出神经元。

DropConnect则随机的将一些神经元之间的连接置零,使得权重连接矩阵变得稀疏,这便是权重连接剪枝。

结构化剪枝:

结构化剪枝的重点,并不是在“剪枝”,而在于“结构”。

它更像是寻找一种优秀网络结构的方法,去让自己网络适配自己的数据集,而非“剪枝”方法。

结构化修剪方法在通道或层的层次上进行修剪,不需要专用的硬件/库来实现。

结构化剪枝则是指按照一定的结构进行剪枝。

这种方式会改变神经网络的结构,剪枝后的网络会比原来的网络更小,更简单。

1)layer-level

非神经网络里面的一层网络,而是规则的一行向量。

3*3的卷积核移除某层变成只有3*2。

理论上,一个3x2的卷积核也是合法的,可以用于卷积运算。

尽管使用非方形卷积核的情况相对较少,但在某些网络结构和特定任务中

确实可以应用。

以下是一些使用非方形卷积核的具体例子:

MobileNet V2 中使用了非方形的卷积核,如3x1和1x3的卷积核,

以增强网络对不同方向特征的感知能力。

Hourglass 网络:Hourglass 网络是一种用于人体姿态估计的卷积神经

网络结构。它使用了多个堆叠的 Hourglass 模块,其中包含了非方形的卷

积核(如3x3和3x2的卷积核),用于对人体姿态进行多尺度的特征提取。

2)channel-level

一个卷积核有3个通道,移除某个通道,变成只有2通道卷积核。

为了满足神经网络的计算特性,必须对前后的网络一起剪枝。

卷积核和特征图的卷积通道数必须一致,特征图是3通道的,卷积核也要是3通道,才能进行空间卷积。

因此,卷积核剪掉一个通道后,特征图也要剪掉一个通道。

经典的通道剪枝有network slimming剪枝。

3)filter-level

滤波器,也就是卷积核,卷积核有个数2个,移除某个卷积核,等于移除3通道,变成只有1个卷积核。

在神经网络的计算中,卷积核的个数就是卷积结果的通道数,移除一个卷积核,后面的特征图将减少一个通道,将会连锁反应,因此也要一起剪枝,以满足计算特性。

在滤波器剪枝中,有一种方法是使用滤波器的lp范数来评估每个滤波器的重要性。

p为1则使用L1范数,p为2则使用L2范数。

L范数较小的滤波器的卷积结果,导致较低的激活值,对模型最终预测具有较小的数值影响。

L范数较小的滤波器被剪掉。

5、静态剪枝与动态剪枝

静态剪枝:

静态剪枝在推理前离线执行所有剪枝步骤。即训练后,推理前进行剪枝。

采用相应的剪枝参数和剪枝方法进行剪枝后,进行微调或再训练,来提高修剪后网络的性能,以达到修剪前网络相当的精度。

这需要大量的时间和能耗。

大量的时间在于剪枝和再训练可以多次进行,具体进行多少次凭借经验或者根据具体训练的结果判断。

适用于资源有限的边缘设备。

问题:

通道的删除是永久性的,可能无法通过再训练达到很好的精度。

动态剪枝:

动态剪枝在运行时执行剪枝。

网络中有一些奇怪的权重,他们在某些迭代中作用不大,但在其他的迭代却很重要。动态剪枝通过动态的恢复权重来得到更好的网络性能。动态剪枝在运行时才决定哪些层、通道、滤波器不会参与进一步的活动。

动态剪枝通常不会进行微调或再训练。

优点:动态剪枝能显著提高模型的表达能力,精度会较好。

问题:

很多动态剪枝的方法是通过强化学习的方式来实现的。

通过强化学习来实现动态剪枝,在训练中消耗非常多的运算资源。

阈门的开关是不可微的,梯度下降法用不了。

(改变了学习方法,不用梯度下降法,而用强化学习)

存储成本高,不适合资源有限的边缘设备。

6、硬剪枝与软剪枝

硬剪枝:

在每个epoch后将某些卷积核直接永久剪掉。

这样可能降低模型性能,依赖预先训练的模型。

即使相乘参数为0,不把这一神经元/group/block从网络结构中拿掉,计算量也会不变。

软剪枝:

被剪枝的卷积核不是永久剪掉,而是将内部的参数设置为0。

在这次被设置为0后,下一次迭代依然参与计算和迭代。

在每轮迭代后,为每个加权层计算所有滤波器的L2范数,作为滤波器选择的标准,将部分滤波器权重设置为0,进行下一轮训练。

被设置为0的滤波器下一轮之后可能不再是0,具体数值根据L2范数再进行调整。

7、总结

模型剪枝的方法多种多样,仅仅将权重等赋值为0的,不改变网络结构的,称之为非结构化剪枝。

而直接剔除某些结构的则为结构化剪枝。

 ——————

浅谈则止,细致入微AI大道理

扫描下方“AI大道理”,选择“关注”公众号

—————————————————————

—————————————————————

投稿吧   | 留言吧

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

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

相关文章

在价格战中苦苦挣扎的小鹏汽车和蔚来,哪个是最好的电动汽车股?

来源:猛兽财经 作者:猛兽财经 总结: 从长期来看,小鹏汽车(XPEV)的基本面优于蔚来(NIO),小鹏汽车目前的估值也更有吸引力,在全球电动汽车行业中也具有更好的长期投机性。 猛兽财经的投资组合中其中有一部分…

断更两个月的感悟

清明时节雨纷纷, 路上行人欲断魂, 借问酒家何处有, 牧童遥指杏花村。 1.断更 武汉的三月和四月是个多雨的季节,这样的天气经常让我患得患失,由于一些原因(后文再详细说明),不知不觉…

【Linux】分析Fuse中libfuse源码

在Linux中,我们可以使用FUSE来进行自定义用户态文件系统的实现。编译example中的示例是学习FUSE的第一步,本文侧重于剖析FUSE的client端的源码。 文章目录 (一) 下载libfuse源码,避免重复造轮子(二&#xf…

什么是WePY?

WePY(微信小程序开发框架)是一个基于组件化开发思想的微信小程序开发框架。它类似于Vue.js框架,通过封装小程序原生的API,提供了更加简洁、高效的开发方式。 WePY的主要特点包括: 组件化开发:WePY将页面拆…

分布式锁原理与实战二:公平锁和可重入锁的原理

在单体的应用开发场景中,涉及并发同步的时候,大家往往采用synchronized 或者 Lock 的方式来解决多线程间的同步问题。但在分布式集群工作的开发场景中,那么就需要一种更加高级的锁机制,来处理种跨JVM 进程之间的数据同步问题&…

论证有效性写作模板

析错口诀: 1.概念不明确,我就说它概念模糊,并做不利它的解释。【有概念模糊之嫌,A是理解1?还是理解2?】 2.概念有变换,我就说它混淆概念,并指出混淆的环节。(概念推概念&…

华为OD机试真题 Java 实现【数列描述】【2023 B卷 100分】,附详细解题思路

一、题目描述 有一个数列a[N] (N60),从a[0]开始,每一项都是一个数字。数列中a[n1]都是a[n]的描述。其中a[0]1。 规则如下: a[0]:1 a[1]:11(含义:其前一项a[0]1是1个1,即“11”。表示a[0]从左到右,连续出…

【数据结构】图的定义、存储

对王道数据结构选择题做错和不清楚的题的简单纠错 图的定义 一个有n个顶点和n条边的无向图一定是有环的 一个无向图有n个顶点和n-1条边,可以使它连通单没有环,若再加一条边,则会形成环 若图中顶点数为n,则它的生成树有n-1条边&am…

网际互联及OSI七层模型:

网际互联及OSI七层模型: 物理层、数据链路层、网络层、传输层、会话层、表示层、应用层 物理层 作用:定义一些电器,机械,过程和规范,如集线器; PDU(协议数据单元):bit/比特 设备&#xff…

分布式锁原理与实战三:ZooKeeper分布式锁的原理

目录 ZooKeeper分布式锁的原理 ZooKeeper的每一个节点,都是一个天然的顺序发号器。 ZooKeeper节点的递增有序性,可以确保锁的公平 ZooKeeper的节点监听机制,可以保障占有锁的传递有序而且高效 ZooKeeper的节点监听机制,能避免羊群…

STM32开发——定时器led、PWM呼吸灯

目录 1.定时器控制LED亮灭 2.PWM呼吸灯——定时器 1.定时器控制LED亮灭 定时器分类: 基本定时器(TIM6~TIM7) 通用定时器(TIM2~TIM5) 高级定时器(TIM1和TIM8) 通用定时器介绍: 16 …

jenkins接口自动化测试,allure报告怎么清楚上一个项目的用例报告?

持续集成(CI Continuous integration/CD Continuous Deployment)的含义其实是在研发过程中团队开发成员持续性的将他们的工作集成到一个完整流程中,通常每个成员每天至少集成一次,每次集成都通过自动化的构建(包括编译,发布&#…

【数据分享】1929-2022年全球站点的逐月平均降水量(Shp\Excel\12000个站点)

气象数据是在各项研究中都经常使用的数据,气象指标包括气温、风速、降水、湿度等指标,说到常用的降水数据,最详细的降水数据是具体到气象监测站点的降水数据! 之前我们分享过1929-2022年全球气象站点的逐月平均气温、逐月最高气温…

【Windows】解决无线网卡TL-WN823N免驱版无法上网的问题

【Windows】解决无线网卡TL-WN823N免驱版无法上网的问题 1、背景2、解决办法3、查看适配器 1、背景 下午去前台领了一个"300M无线USB网卡"。 插到台式机上发现不能跳出WLAN网络信号。 我观察到每次插入无线上网卡,在window设置–>设备–>其他设…

员工资料导入

人事管理项目-员工资料导入 后端接口实现前端实现 既然有员工资料导出需求,当然也就有导入需求。对前端而言,员工资料导入就是文件上传,对后端而言,则是获取上传的文件进行解析,并把解析出来的数据保存到数据库中。 后…

Springboot实验二(用配置文件的方式整合Mybatis)仅供参考!

&#xff08;1)articleList.html 效果如下: <!DOCTYPE html> <html lang"en" xmlns:th"http://www.thymeleaf.org/"> <head> <meta charset"UTF-8"> <title>article 列表</title> </head> <body…

数论与组合数学 期末总结(未完

自然数的基本性质 数学归纳法(Principle of Mathematical Induction) n n 0 nn_{0} nn0​时成立&#xff0c;且 n k nk nk成立 ⇒ n k 1 \Rightarrow nk1 ⇒nk1成立&#xff0c;则定理对 n ≥ n 0 n\ge n_{0} n≥n0​成立良序定理(Well Ordering Principle) 每个非空集合…

网络编程 lesson7 广播组播和本地通信

目录 广播 什么是广播&#xff1f;&#xff08;了解&#xff09; 广播发送流程 广播接收流程 组播 什么是组播&#xff1f; 组播地址 组播结构体 组播发送流程 组播接收 本地套接字通信 什么是本地套接字通信&#xff1f; 特性 核心代码 程序实例 服务端 客户…

SpringCloud源码解析-gatewayopenFeign

SpringCloud高级应用-源码解析 1. gateway 源码解析1.1 自动装配1.2 核心装配1.2.1 GatewayClassPathWarningAutoConfiguration1.2.2 GatewayAutoConfiguration1.2.3 GatewayLoadBalancerClientAutoConfiguration1.2.4 GatewayRedisAutoConfiguration 1.3 Gateway 工作机制1.3.…

分布式任务调度XXL-JOB

XXL-JOB 分布式任务调度平台特点 职责分离&#xff0c;任务调度&#xff0c;任务执行解耦 执行一致性&#xff0c;任务执行不会多次重复执行 丰富的路由策略&#xff08;指定那个执行实例执行&#xff09; 阻塞处理 &#xff08;触发的任务&#xff0c;上一次没有执行完&am…