首页 > 其他分享 >模型剪枝:给模型剪个头发

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

时间:2023-07-05 22:24:17浏览次数:29  
标签:剪枝 140 卷积 模型 注释 添加 剪个

​ 本文来自公众号“AI大道理”。   深度学习网络模型从卷积层到全连接层存在着大量冗余的参数,大量神经元激活值趋近于0,将这些神经元去除后可以表现出同样的模型表达能力,这种情况被称为过参数化,而对应的技术则被称为模型剪枝。 网络一般是over-parameterized参数过多的,有冗余的权重和神经元。 剪枝方法探索模型权重中的冗余, 并尝试删除/修剪冗余和非关键的权重。 减小模型大小并加速模型训练/推断,同时不会显着降低模型性能。     ​   添加图片注释,不超过 140 字(可选) 1、为什么要进行模型剪枝 CNN在实际应用中的部署主要受以下几个方面制约。 1)模型大小的限制 CNN强大的表示能力来自其数百万可训练参数。这些参数以及网络结构信息需要存储在磁盘上,并在推理期间加载到内存中。例如,在ImageNet上存储一个典型的CNN会消耗超过300MB的空间,这对嵌入式设备来说是一个巨大的资源负担。 2) 运行时内存 在推理期间,CNN的中间激活/响应甚至可能比存储模型参数占用更多内存空间,即使批量大小为1。这对于高端GPU来说不是问题,但对于许多计算能力较低的应用程序来说,这是负担不起的。 3) 计算操作数 卷积操作在高分辨率图像上计算量很大。大型CNN在移动设备上处理一张图像可能需要几分钟的时间,这使得在实际应用中采用它是不现实的。   因此有必要对模型进行压缩,而满足边缘设备的AI应用。 而剪枝就是模型压缩技术的一种。 (模型压缩技术:剪枝、蒸馏、量化、低秩分解等)   添加图片注释,不超过 140 字(可选) ​   ​   添加图片注释,不超过 140 字(可选) 2、为什么可以进行模型剪枝 生物学启发: 生物研究发现人脑是高度稀疏的。 比如 2016 年早期经典的剪枝论文就曾提到,生理学上发现对于哺乳动物,婴儿期产生许多的突触连接,在后续的成长过程中,不怎么用的那些突触就会退化消失。突触修剪从出生时就开始了,一直持续到 20 多岁。 结合深度神经网络是模仿人类大脑结构,和该生理学现象,我们可以认为深度神经网络是存在稀疏性的。 添加图片注释,不超过 140 字(可选) ​ 过参数化: 深度学习网络模型从卷积层到全连接层存在着大量冗余的参数,大量神经元激活值趋近于0,将这些神经元去除后可以表现出同样的模型表达能力,这种情况被称为过参数化,而对应的技术则被称为模型剪枝。 尽管大型神经网络已经无数次证明了它们的学习能力,但事实证明,在训练过程结束后,并非它们的所有部分都仍然有用。 添加图片注释,不超过 140 字(可选) ​   ​   添加图片注释,不超过 140 字(可选) 3、结构化剪枝与非结构化剪枝 非结构化剪枝:将每个单独的权重置为0。 结构化剪枝:移除一组规则的权重,如layer剪枝、filter剪枝、通道剪枝。   添加图片注释,不超过 140 字(可选)   添加图片注释,不超过 140 字(可选) 非结构化剪枝: 非结构化剪枝是指将神经网络中的一些权重设为0,但并不改变网络的整体结构。 这意味着网络中每个神经元和其他神经元之间的连接性不会发生变化,只是某些连接的权重为0,实际上这些连接已经被剪掉了。 这种剪枝方式的优点是剪枝操作可以非常精细,但缺点是可能不会显著减少实际的计算量和存储需求,因为0权重的连接仍需在存储和计算中被考虑(除非特别使用了针对稀疏矩阵的优化算法)。 1)权重修剪 将权重矩阵中的多个权重设置为 0,删除连接。 Dropout中随机的将一些神经元的输出置零,这就是神经元剪枝。 2)单元/神经元修剪 将权重矩阵中的多个整列设置为 0,从而删除对应的输出神经元。   DropConnect则随机的将一些神经元之间的连接置零,使得权重连接矩阵变得稀疏,这便是权重连接剪枝。 添加图片注释,不超过 140 字(可选) ​ 添加图片注释,不超过 140 字(可选) ​ 结构化剪枝: 结构化剪枝的重点,并不是在“剪枝”,而在于“结构”。 它更像是寻找一种优秀网络结构的方法,去让自己网络适配自己的数据集,而非“剪枝”方法。 结构化修剪方法在通道或层的层次上进行修剪,不需要专用的硬件/库来实现。 结构化剪枝则是指按照一定的结构进行剪枝。 这种方式会改变神经网络的结构,剪枝后的网络会比原来的网络更小,更简单。 添加图片注释,不超过 140 字(可选) ​ 1)layer-level 非神经网络里面的一层网络,而是规则的一行向量。 3*3的卷积核移除某层变成只有3*2。   理论上,一个3x2的卷积核也是合法的,可以用于卷积运算。 尽管使用非方形卷积核的情况相对较少,但在某些网络结构和特定任务中 确实可以应用。 以下是一些使用非方形卷积核的具体例子: MobileNet V2 中使用了非方形的卷积核,如3x1和1x3的卷积核, 以增强网络对不同方向特征的感知能力。 Hourglass 网络:Hourglass 网络是一种用于人体姿态估计的卷积神经 网络结构。它使用了多个堆叠的 Hourglass 模块,其中包含了非方形的卷 积核(如3x3和3x2的卷积核),用于对人体姿态进行多尺度的特征提取。   ​   添加图片注释,不超过 140 字(可选)   2)channel-level 一个卷积核有3个通道,移除某个通道,变成只有2通道卷积核。 为了满足神经网络的计算特性,必须对前后的网络一起剪枝。 卷积核和特征图的卷积通道数必须一致,特征图是3通道的,卷积核也要是3通道,才能进行空间卷积。 因此,卷积核剪掉一个通道后,特征图也要剪掉一个通道。   经典的通道剪枝有network slimming剪枝。   ​   添加图片注释,不超过 140 字(可选)   3)filter-level 滤波器,也就是卷积核,卷积核有个数2个,移除某个卷积核,等于移除3通道,变成只有1个卷积核。 在神经网络的计算中,卷积核的个数就是卷积结果的通道数,移除一个卷积核,后面的特征图将减少一个通道,将会连锁反应,因此也要一起剪枝,以满足计算特性。   在滤波器剪枝中,有一种方法是使用滤波器的lp范数来评估每个滤波器的重要性。 p为1则使用L1范数,p为2则使用L2范数。   添加图片注释,不超过 140 字(可选) L范数较小的滤波器的卷积结果,导致较低的激活值,对模型最终预测具有较小的数值影响。 L范数较小的滤波器被剪掉。   添加图片注释,不超过 140 字(可选)       ​   添加图片注释,不超过 140 字(可选)   5、静态剪枝与动态剪枝 静态剪枝:   静态剪枝在推理前离线执行所有剪枝步骤。即训练后,推理前进行剪枝。 采用相应的剪枝参数和剪枝方法进行剪枝后,进行微调或再训练,来提高修剪后网络的性能,以达到修剪前网络相当的精度。 这需要大量的时间和能耗。 大量的时间在于剪枝和再训练可以多次进行,具体进行多少次凭借经验或者根据具体训练的结果判断。 适用于资源有限的边缘设备。 问题: 通道的删除是永久性的,可能无法通过再训练达到很好的精度。   动态剪枝: 动态剪枝在运行时执行剪枝。 网络中有一些奇怪的权重,他们在某些迭代中作用不大,但在其他的迭代却很重要。动态剪枝通过动态的恢复权重来得到更好的网络性能。动态剪枝在运行时才决定哪些层、通道、滤波器不会参与进一步的活动。 动态剪枝通常不会进行微调或再训练。 优点:动态剪枝能显著提高模型的表达能力,精度会较好。 问题: 很多动态剪枝的方法是通过强化学习的方式来实现的。 通过强化学习来实现动态剪枝,在训练中消耗非常多的运算资源。 阈门的开关是不可微的,梯度下降法用不了。 (改变了学习方法,不用梯度下降法,而用强化学习) 存储成本高,不适合资源有限的边缘设备。   添加图片注释,不超过 140 字(可选) ​   ​   添加图片注释,不超过 140 字(可选)   6、硬剪枝与软剪枝 硬剪枝: 在每个epoch后将某些卷积核直接永久剪掉。 这样可能降低模型性能,依赖预先训练的模型。 即使相乘参数为0,不把这一神经元/group/block从网络结构中拿掉,计算量也会不变。   软剪枝: 被剪枝的卷积核不是永久剪掉,而是将内部的参数设置为0。 在这次被设置为0后,下一次迭代依然参与计算和迭代。 在每轮迭代后,为每个加权层计算所有滤波器的L2范数,作为滤波器选择的标准,将部分滤波器权重设置为0,进行下一轮训练。 被设置为0的滤波器下一轮之后可能不再是0,具体数值根据L2范数再进行调整。     ​   添加图片注释,不超过 140 字(可选) 7、总结 模型剪枝的方法多种多样,仅仅将权重等赋值为0的,不改变网络结构的,称之为非结构化剪枝。 而直接剔除某些结构的则为结构化剪枝。     —————— 浅谈则止,细致入微AI大道理 扫描下方“AI大道理”,选择“关注”公众号 —————————————————————   —————————————————————     |   ​

标签:剪枝,140,卷积,模型,注释,添加,剪个
From: https://www.cnblogs.com/AIBigTruth/p/17530188.html

相关文章

  • 模型剪枝:Network Slimming剪枝实战
    ​本文来自公众号“AI大道理”​NetworkSlimming剪枝是比较广泛的一种模型剪枝方法,作者来自清华大学、英特尔中国实验室、复旦大学和科内尔大学。 ​ 添加图片注释,不超过140字(可选)​1、NetworkSlimming剪枝理论NetworkSlimming剪枝是结......
  • OSI TCP/IP模型 数据包报帧区别(自用)
    OSI七层模型OSI(OpenSystemInterconnectionReferenceModel,开放式通信系统互联参考模型)TCP/IP五层模型TCP/IP模型将OSI模型的应用层,表示层,会话层合并成了应用层数据包,数据报,帧的区别数据包与帧帧:数据链路层的传输单位数据包:可能由几个帧组成,可能超过MTUM......
  • 我也玩大模型-私有化部署
    chatGPT带火了整个AI,本来想让子弹飞会,但上上下下都在谈论,感觉很焦虑。那就试试吧。1、选型,只有开源的才可能私有化部署,最终从最容易入手的(资料做多):清华开源的chatGLM2-6B,毕竟现在是练手2、项目:github上有,huggingface上也有,但不一样。完整的模型实现在huggingface,带着模型参......
  • SpringMVC框架详解:模型+核心组件+实现原理等详解
     MVC模型SpringMVC基于MVC模式,因此理解SpringMVC需要先对MVC模式有所了解。MVC是model、view、和controller的缩写,是软件开发中一种常用的架构模式。MVC各部分根据职责进行分离,使程序的结构更为直观,增加了程序的可扩展性、可维护性、可复用性。可以用如下的图形来......
  • 04vgg剪枝
    数据集介绍Cifar10数据集是经典的图像分类数据。首先下载数据并制作成Dataset和DataLoaderDataset:Dataset是一个抽象类,它定义了数据的存储和访问方法。它的主要任务是加载和预处理数据。用户可以从此类派生出自定义的数据集类,以处理特定类型的数据(如图像、文本等)。DataLoader:D......
  • 建筑师们,你们该把模型弄到PPT里做汇报了!
    ➤如何实现项目汇报效率比传统的PPT高,同时汇报效果更直观?➤如何摆脱方案汇报只能向客户交付数据,安装专业软件查看项目成果?➤如何将无人机航测数据、CAD图纸、BIM设计成果进行融合,挖掘出更深层次的应用?➤如何创建一个高大上的实景三维展示系统向甲方进行工作汇报?     ......
  • 【Netty】「萌新入门」(四)异步编程模型:利用 Future 和 Promise 提高性能与响应能力
    前言本篇博文是《从0到1学习Netty》中入门系列的第四篇博文,主要内容是介绍Netty中Future与Promise的使用,通过使用异步的方式提高程序的性能和响应速度,往期系列文章请访问博主的Netty专栏,博文中的所有代码全部收集在博主的GitHub仓库中;为什么要使用异步?使用异步编程模式......
  • 多模态大语言模型首篇综述
    近来,多模态大语言模型(MultimodalLargeLanguageModel,MLLM)受到广泛关注,成为一个新兴的研究热点。MLLM通常以大语言模型(LargeLanguageModel,LLM)为基础,融入其它非文本的模态信息,完成各种多模态任务。相比于常规的多模态模型,MLLM涌现出一些令人惊叹的新能力,例如基于图片进行诗......
  • HuggingFace | 如何下载预训练模型
    本例我们在Linux上进行下载,下载的模型是bert-base-uncased。下载网址为:https://www.huggingface.co/bert-base-uncasedhuggingface的transformers框架,囊括了BERT、GPT、GPT2、ToBERTa、T5等众多模型,同时支持pytorch和tensorflow2,代码非常规范,使用也非常简单,但是模型使用的时候,......
  • 【AI新趋势期刊#2】AI发明计算机算法,如何给大模型排行,照片秒变二维码,视频一键动漫风
    前言每天都要浏览大量AI相关新闻,是不是感到信息量爆炸,有效信息少?这么多新产品和新工具,到底哪些是真正是有价值的,哪些只是浮躁的一时热点?想参与AI产品和工具的开发,从哪里能够获得大量的灵感和思路?我会把AI相关的新趋势、新想法、新思路,和成熟AI产品、工具、模型等整理在这里,帮......