【文章学习系列之技巧】Network Slimming

news2024/11/24 15:34:03

本章内容

  • 文章概况
  • 问题来源
  • 方法
  • 实验结果
  • 总结

文章概况

这是一篇2017年发表于ICCV的一篇论文。该论文指出深度卷积神经网络的应用受到了高计算成本的阻碍,并提出一种修剪模型结构的方式用于降低这种成本,使得模型大小减小、运行内存减小且不降低精度的情况减少参数量。

论文链接
代码链接

问题来源

对于卷积神经网络,在模型定义的时候我们会设计每一层的特征图数目(64、128……),然而如此大量的特征图是否每一个都对模型起到了关键的作用?如果有,应该用什么方法来分辨?

方法

在该文章中,作者利用BN(Batch Normalization)中的缩放因子γ作为每一个特征图的权重,从而代表特征图的重要性。

首先需要回顾一下BN的作用。为了防止原始数据经由权重和偏置的计算作用后,出现数据盲目扩大而导致的大量参数位于激活函数的饱和部分(下图蓝色椭圆区域)并梯度消失的情况。因此使用BN将数据保持在正态分布下,使得这些参数更多地位于激活函数的中间灵敏区域(下图红色方框区域)。
在这里插入图片描述

然而红色方框的区域虽然灵敏但近似线性,而非线性的网络参数计算方式才具有更好的表达能力,因此BN中对该部分做了优化,如下图所示,由网络自己学习γ和β,强制其进行非线性变化。
在这里插入图片描述
上式中,最能影响y的大小变化的便是γ,同时具备自训练、无额外参数引入的优点,由此,作者便想到了将γ作为通道重要性的衡量指标。

根据γ的对比,假设需要筛选掉γ较小的30%数目的通道(30%处为0.1),对小于0.1的特征图所在的γ和β赋值为0,这样就表明该处特征图置零,不参与后续计算。如下图,屏蔽橙色特征图的数据,模型精简至仅剩蓝色特征图。
在这里插入图片描述

随后,为了确保γ们的数值尽量不趋于一致,需要做稀疏化处理,作者在γ的计算中引入l1正则项,l1相比l2在0处的结果更干脆利落直接为0,而l2一直趋近于0不如l1的稀疏化效果好。

在这里插入图片描述
网络瘦身主要步骤如上图所示:初始化、用通道稀疏正则项的方式训练、用小比例因子修剪通道、修剪后的网络微调,最终形成紧凑型网络。

实验结果

在这里插入图片描述
上图展示了三种任务下的实验对比,作者使用多种百分比的剪枝比例,实验表明,剪枝后效果有所提升,模型参数量和模型计算量有显著减少。

在这里插入图片描述
上图对比了四种训练方式的结果。紫色表示常规训练结果;绿色表示添加了稀疏化的训练结果;红色表示剪枝瘦身结果;蓝色表示剪枝并微调后的结果。可以看出在剪枝比例不超过一半时,四者的效果依次提升,当剪枝过多时,红色和蓝色曲线效果显著降低。

总结

模型瘦身效果和性能都很显著,很大程度上解决了模型过大参数量过多计算复杂的痛点,因此在实际的应用部署中具有很高的价值。需要注意的是,该方法是基于BN实现的,因此需要以BN层的存在为前提。

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

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

相关文章

http\https协议

前言 小亭子正在努力的学习编程,接下来将开启javaEE的学习~~ 分享的文章都是学习的笔记和感悟,如有不妥之处希望大佬们批评指正~~ 同时如果本文对你有帮助的话,烦请点赞关注支持一波, 感激不尽~~ 目录 前言 一、 认识http协议 1.概念 1.1…

ChatGPT APP Plus升级全记录:购买礼品卡、兑换和处理失败

大家好,我是可夫小子,《小白玩转ChatGPT》专栏作者,关注AIGC、读书和自媒体。 在上一篇《ChatGPT APP来了,支持语音输入,还可以直接订阅Plus账号》文章中,我介绍了ChatGPT App下载安装教程。本文主要介绍怎…

YOLO中的值得借鉴的思想

关键理论的理解,后面会补充结构等。 1.YOLO1中将图像划分为7*7个网格,每个网格都预测网格中的的类别(是什么物体),以及预测到的物体所对应的框(四个位置量,一个置信度),所…

一、尚医通预约下单

文章目录 一、预约下单1、需求分析1.1订单表结构1.2下单分析 2、搭建service-order模块2.1 搭建service-order模块2.2 修改配置2.3 启动类2.4配置网关 3、添加订单基础类3.1 添加model3.2 添加Mapper3.3 添加service接口及实现类3.4 添加controller 4、封装Feign调用获取就诊人…

【Redis】聊一下Redis事务以及watch机制

我们知道熟悉MySQL的同学,一定了解ACID属性。ACID分别对应四种属性,但是Redis的事务和ACID属性有什么不一样的地方嘛,我们来深入探讨下。 Redis事务和MySQL事务的区别 ACID的本质是保证了事务执行前后对结果的保证,以及数据状态…

二、数据结构2:双链表 模板题+算法模板(双链表)

文章目录 算法模板双链表题目模板 模板题双链表原题链接题目思路题解 算法模板 双链表题目模板 // e[]表示节点的值,l[]表示节点的左指针,r[]表示节点的右指针,idx表示当前用到了哪个节点 int e[N], l[N], r[N], idx;// 初始化 void init()…

Android进阶 View事件体系(一):概要介绍和实现View的滑动

Android进阶 View事件体系(一):概要介绍和实现View的滑动 内容概要 本篇文章为总结View事件体系的第一篇文章,将介绍的内容主要有: 什么是View和ViewGroupAndroid中View的坐标轴手势检测和速度检测如何实现View的滑动…

【ZYNQ】ZYNQ7000 UART 控制器及驱动应用示例

UART 简介 我们在使用 PS 的时候,通常会添加 UART 控制器,用于打印信息和调试代码。除此之外,PS 在和外 部设备通信时,也会经常使用串口进行通信。 UART 控制器 UART 控制器是一个全双工异步收发控制器,ZYNQ 内部包…

ssm实现发送邮箱功能

参考:ssm整合JavaMail发送邮件_ssm整合mimemessage_ds_surk的博客-CSDN博客 我在这位前辈写的博客的基础上进行讲解完善,避免踩坑。 我的jdk版本:1.8.0_333 1、引入依赖 相信很多朋友都卡在这里: 1、没有JavaMailSenderImpl类 2、…

数字逻辑 期末

概述 教材:《电子技术基础(数字部分)》 第五版 7400系列是TTL型芯片,商用型 数制 十进制->二进制 除2取余法&乘2取整法(注意精度,但计科简单不考) 十六进制->二进制 一位变四位 八…

Linux下串口编程

Linux下串口编程 Linux下的串口编程是通过串口设备文件和串口通信的系统调用函数来实现的。Linux下的串口设备文件通常为/dev/ttyS或/dev/ttyUSB(*表示数字),这些设备文件代表了对应的串口硬件设备。 在进行串口编程之前,需要先打开并初始化串口设备,其中包括设置波特率…

Linux 在桌面添加快捷启动图标(可添加至收藏夹)

0 背景 在 Ubuntu 系统下启动程序一般在 Terminal 通过输入指令启动,如 ./cfw。对于常用的程序,为了方便,创建桌面快捷图标 .desktop。为了让图标能够添加在收藏栏中,将 .desktop 融入桌面环境。 1 创建 .desktop 文件 参考&…

dvwa靶场通关(一)

第一关:Brute force low 账号是admin,密码随便输入 用burp suite抓包 爆破得出密码为password 登录成功 Medium 中级跟low级别基本一致,分析源代码我们发现medium采用了符号转义,一定程度上防止了sql注入,采用暴力破…

如何成为一名黑客?小白必学的12个基本步骤

黑客攻防是一个极具魅力的技术领域,但成为一名黑客毫无疑问也并不容易。你必须拥有对新技术的好奇心和积极的学习态度,具备很深的计算机系统、编程语言和操作系统知识,并乐意不断地去学习和进步。 如果你想成为一名优秀的黑客,下…

大项目参考地址​编辑 大项目接口实现

目录 大项目参考地址​编辑 口语考试 纸笔口语考试通常会安排在笔试前一周至笔试后一周的任意一天,机考口语考试通常会安排在笔试当天或者与笔试日期尽可能相邻的日期。根据考务安排的需要,在特殊情况下,口试日期有可能超出此区间&#xff0…

Java——《面试题——多线程并发篇》

前文 java——《面试题——基础篇》 Java——《面试题——JVM篇》 目录 前文 1、说说Java中实现多线程有几种方法 2、如何停止一个正在运行的线程 3、notify()和notifyAll()有什么区别? 4、sleep()和wait() 有什么区别? 5、volatile 是什么?可…

nodejs+vue网络课程在线考试系统an7ib

在线考试系统的设计与实现主要实现角色有管理员和用户,管理员在后台管理学生模块、用户表模块、token表模块、考试资讯模块、考试记录表模块、试题表模块、试卷表模块、配置文件模块、在线答疑模块 采用了Windows10操作系统平台,使用vue前端模板node作为后台监控&am…

k8s补充+helm(待续)

目录 master高可用架构master节点——整个集群的控制中枢node节点——工作节点搭建kubeadm搭建二进制搭建 探针检测方式探针检查参数配置执行顺序为什么有了livenessProbe和readnessProbe还要有StartupProbe(1.16) 零宕机发布pod退出流程preStop 无状态服…

上网速度太慢?这样设置可以提升60%的上网速度!

虽然现在光纤上网是最好的上网方式,但是对于一般人的选择还是宽带上网,网速永远都是一个值得讨论的话题。花了那么多的钱,却得到的是低品质的网速服务,因此越来越多的人想方设法在现有条件上提高网速。网上的那些方法基本人人都会…

手把手教你用Python编写配置脚本引擎(福利篇)

版权声明:原创不易,本文禁止抄袭、转载需附上链接,侵权必究! 目录 一、配置信息写入二、读取配置信息三、修改配置信息四、配置引擎总结五、作者Info 一、配置信息写入 配置信息初始化 定义配置引擎类和初始化方法,其…