模型压缩:Networks Slimming-Learning Efficient Convolutional Networks through Network Slimming

本文主要是介绍模型压缩:Networks Slimming-Learning Efficient Convolutional Networks through Network Slimming,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Network Slimming-Learning Efficient Convolutional Networks through Network Slimming(Paper)
2017年ICCV的一篇paper,思路清晰,骨骼清奇~~

创新点:
1. 利用batch normalization中的缩放因子γ 作为重要性因子,即γ越小,所对应的channel不太重要,就可以裁剪(pruning)。
2. 为约束γ的大小,在目标方程中增加一个关于γ的正则项,这样可以做到在训练中自动剪枝,这是以往模型压缩所不具备的。
这里写图片描述

模型压缩三要素:
1. Model size ,模型大小
2. Run-time memory , 模型得小,效率也得高,不能参数少,运算却很多,还是不行滴。
3. Number of computing operations

模型压缩存在的不足:
1. 低秩分解方法:对全连接层效果可以,对卷积层不怎么样;模型大小可压缩3倍,但运算速度无明显提升。
2. Weight Quantization: HashNet虽然可采用分组、共享权值方法来压缩所需保存的参数数量,但是在 Run-time memory上面没有任何压缩。
3. 二值化权值: 损失精度
4. Weight Pruning/Sparsifying: 需要专用的硬件或者代码库;[12]训练过程中,没有一个对稀疏进行“约束”“指导”(guidance)
5. Structured Pruning/Sparsifying: 本文方法所属类型,当然没有缺点啦。。。就算就文章中也不会提嘛~

——————————————分割线—————————————
正文:
Network slimming,利用BN层中的缩放因子γ,在训练过程当中来衡量channel的重要性,将不重要的channel进行删减,达到压缩模型大小,提升运算速度的效果。
看一下模型图,左边为训练当中的模型,中间一列是scaling factors,也就是BN层当中的缩放因子γ,当γ较小时(如图中0.001,0.003),所对应的channel就会被删减,得到右边所示的模型。 道理是不是非常简单,而且巧妙的将γ增加到目标函数中去,达到了一边训练一边剪枝的奇效。
这里写图片描述

来看目标函数:这里写图片描述
第一项是模型预测所产生的损失,第二项就是用来约束γ的,λ是权衡两项的超参,后面实验会给出,一般设置为1e-4 或者 1e-5。g(*)采用的是g(s)=|s|, 就是L1范,可达到稀疏的作用。原理就讲完了~

接下来看看,整体是如何运行的,如何剪枝再训练,再剪枝。 整体流程框图如下图所示:
这里写图片描述
分为三部分,第一步,训练;第二步,剪枝;第三步,微调剪枝后的模型,循环执行。

具体操作细节:
γ通常取 1e-4或者1e-5,具体情况具体分析,
γ得出后,应该怎么剪,γ多小才算小? 这里采用与类似PCA里的能量占比差不多,将当前层的γ全都加起来,然后按从大到小的顺序排列,选取较大的那一部分,通常选取70%左右(具体情况具体分析)。

λ的选取对γ的影响如图所示:
这里写图片描述
λ为0的时候,目标函数不会对γ进行惩罚,λ等于1e-5时,可以发现,γ=0.0+的有450多个,整体都向0靠近。当λ=1e-4时,对γ有了更大的稀疏约束了,可以看到有接近2000个γ是在0.0x附近。

剪枝百分比: 剪得越多,模型越小;剪得太多,精度损失。这是矛盾的,所以作者做了实验对比,看看剪多少合适。实验发现,当剪枝超过80%,精度会下降。
这里写图片描述

具体实验请阅读原文,其中涉及了vgg,resnet-164(pre-actionvation),densenet-40。效果都很好,不仅压缩模型大小,提升运算速度,还能提升分类准确率。

torch代码:https://github.com/liuzhuang13/slimming

这篇关于模型压缩:Networks Slimming-Learning Efficient Convolutional Networks through Network Slimming的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1081377

相关文章

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

Spring AI Alibaba接入大模型时的依赖问题小结

《SpringAIAlibaba接入大模型时的依赖问题小结》文章介绍了如何在pom.xml文件中配置SpringAIAlibaba依赖,并提供了一个示例pom.xml文件,同时,建议将Maven仓... 目录(一)pom.XML文件:(二)application.yml配置文件(一)pom.xml文件:首

Python利用PIL进行图片压缩

《Python利用PIL进行图片压缩》有时在发送一些文件如PPT、Word时,由于文件中的图片太大,导致文件也太大,无法发送,所以本文为大家介绍了Python中图片压缩的方法,需要的可以参考下... 有时在发送一些文件如PPT、Word时,由于文件中的图片太大,导致文件也太大,无法发送,所有可以对文件中的图

如何在本地部署 DeepSeek Janus Pro 文生图大模型

《如何在本地部署DeepSeekJanusPro文生图大模型》DeepSeekJanusPro模型在本地成功部署,支持图片理解和文生图功能,通过Gradio界面进行交互,展示了其强大的多模态处... 目录什么是 Janus Pro1. 安装 conda2. 创建 python 虚拟环境3. 克隆 janus

本地私有化部署DeepSeek模型的详细教程

《本地私有化部署DeepSeek模型的详细教程》DeepSeek模型是一种强大的语言模型,本地私有化部署可以让用户在自己的环境中安全、高效地使用该模型,避免数据传输到外部带来的安全风险,同时也能根据自... 目录一、引言二、环境准备(一)硬件要求(二)软件要求(三)创建虚拟环境三、安装依赖库四、获取 Dee

DeepSeek模型本地部署的详细教程

《DeepSeek模型本地部署的详细教程》DeepSeek作为一款开源且性能强大的大语言模型,提供了灵活的本地部署方案,让用户能够在本地环境中高效运行模型,同时保护数据隐私,在本地成功部署DeepSe... 目录一、环境准备(一)硬件需求(二)软件依赖二、安装Ollama三、下载并部署DeepSeek模型选

Golang的CSP模型简介(最新推荐)

《Golang的CSP模型简介(最新推荐)》Golang采用了CSP(CommunicatingSequentialProcesses,通信顺序进程)并发模型,通过goroutine和channe... 目录前言一、介绍1. 什么是 CSP 模型2. Goroutine3. Channel4. Channe

Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)

《Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)》:本文主要介绍Python基于火山引擎豆包大模型搭建QQ机器人详细的相关资料,包括开通模型、配置APIKEY鉴权和SD... 目录豆包大模型概述开通模型付费安装 SDK 环境配置 API KEY 鉴权Ark 模型接口Prompt

Qt实现文件的压缩和解压缩操作

《Qt实现文件的压缩和解压缩操作》这篇文章主要为大家详细介绍了如何使用Qt库中的QZipReader和QZipWriter实现文件的压缩和解压缩功能,文中的示例代码简洁易懂,需要的可以参考一下... 目录一、实现方式二、具体步骤1、在.pro文件中添加模块gui-private2、通过QObject方式创建