深度学习500问——Chapter17:模型压缩及移动端部署(1)

news2024/9/29 17:24:02

文章目录

17.1 模型压缩理解

17.2 为什么需要模型压缩和加速

17.3 模型压缩的必要性及可行性

17.4 目前有哪些深度学习模型压缩方法

17.4.1 前段压缩和后端压缩对比

17.4.2 网络剪枝

17.4.3 典型剪枝方法对比

17.4.4. 网络蒸馏

17.4.5 前端压缩

17.4.6 后端压缩


深度神经网络在人工智能的应用中,包括语音识别、计算机视觉、自然语言处理等各方面,在取得巨大成功的同时,这些深度神经网络需要巨大的计算开销和内存开销,严重阻碍了资源受限下的使用。本章总结了模型压缩、加速一般原理和方法,以及在移动端如何部署。

17.1 模型压缩理解

模型压缩是指利用数据集对已经训练好的深度模型进行精简,进而得到一个轻量且准确率相当的网络,压缩后的网络具有更小的结构和更少的参数,可以有效降低计算和存储开销,便于部署再受限的硬件环境中。

17.2 为什么需要模型压缩和加速

(1)随着AI技术的飞速发展,越来越多的公司希望在自己的移动端产品中注入AI能力。

(2)对于在线学习和增量学习等实时应用而言,如何减少含有大量层级及结点的大型神经网络所需要的内存和计算量显得极为重要。

(3)模型的参数在一定程度上能够表达其复杂性,相关研究表明,并不是所有的参数都在模型中发挥作用,部分参数作用有限、表达冗余甚至会降低模型的性能,

(4)复杂的模型固然有更好的性能,但是高额的存储空间、计算资源消耗都是使其难以有效的应用在各硬件平台上的重要原因。

(5)智能设备的流行提供了内存、CPU、能耗和宽带等资源,使得深度旭熙模型部署在智能移动设备上变得可行。

(6)高效的深度学习方法可以有效的帮助嵌入式设备、分布式系统完成复杂工作,在移动端部署深度学习有很重要的意义。

17.3 模型压缩的必要性及可行性

必要性首先是资源受限,其次在许多网络结构中,如VGG-16网络,参数数量1亿3千多万,占用500MB空间,需要进行309亿次浮点运算才能完成一次图像识别任务。
可行性模型的参数在一定程度上能够表达其复杂性,相关研究表明,并不是所有的参数都在模型中发挥作用,部分参数作用有限、表达冗余,甚至会降低模型的性能。论文提出,很多的深度神经网络仅仅使用很少一部分(5%)权值就足以预测剩余的权值。该论文还提出这些剩下的权值甚至可以直接不用被学习。也就是说,仅仅训练一小部分原来的权值参数就有可能达到和原来网络相近甚至超过原来网络的性能(可以看作一种正则化)。
最终目的最大程度的减小模型复杂度,减少模型存储需要的空间,也致力于加速模型的训练和推测

17.4 目前有哪些深度学习模型压缩方法

目前深度学习模型压缩方法主要分为更精细化模型设计、模型裁剪、核的稀疏化、量化、低秩分解、迁移学习等方法,而这些方法又可分为前端压缩和后端压缩。

17.4.1 前段压缩和后端压缩对比

对比项目前端压缩后端压缩
含义不会改变原始网络结构的压缩技术会大程度上盖拜年原始网络结构的压缩技术
主要方法知识蒸馏、紧凑的模型结构设计、滤波器层面的剪枝低秩近似、未加限制的剪枝、参数量化、二值网络
实现难度较简单较难
是否可逆可逆不可逆
成熟应用剪枝低秩近似、参数量化
待发展应用知识蒸馏二值网络

17.4.2 网络剪枝

 深度学习模型因其稀疏性,可以被裁剪为结构精简的网络模型,具体包括结构性剪枝与非结构性剪枝。

事项特点举例
非结构化剪枝通常是连接级、细粒度的剪枝方法,精度相对较高,但依赖于特定算法库或硬件平台的支持Deep Compression[5],Sparse-Winograd[6]算法等
结构化剪枝是filter级或layer级、粗粒度的剪枝方法,精度相对较低,但剪枝策略更为有效,不需要特定算法库或硬件平台的支持,能够直接在成熟深度如局部方式的、通过layer by layer方式的、最小化输出FM重建差的Channel Pruning[7],ThiNet[8],Discrimination-aware Channel Pruning[9];全局方式的、通过训练期间对BN层Gamma系数施加L1正则约束的Network Slimming[10];全局方式的、按Taylor准则对Filter作重要性排序的Neuron Pruning[11];全局方式的、可动态重新更新pruned filters参数的剪枝方法[12];
深度学习模型压缩与优化加速_模型优化和加速 量化-CSDN博客

如果按剪枝粒度分,从粗到细,可分为中间隐含层剪枝、通道剪枝、卷积核剪枝、核内剪枝、单个权重剪枝。下面按照剪枝粒度的分类从粗(坐)到细(右)。

(a)层间剪枝                (b)特征图剪枝                (c)k*k核剪枝                        (d)核内剪枝

事项特点
单个权重粒度

早期Le Cun[16]提出的OBD(optimal brain damage)将网络中的任意权重参数都看作单个参数,能够有效地提高预测准确率,却不能减小运行时间;同时,剪枝代价过高,只使用于小网络

核内权重粒度网络中的任意权重被看作是单个参数并进行随机非结构化剪枝,该粒度的剪枝导致网络连接不规整,需要通过稀疏表达来减少内存占用,进而导致在前向传播预测时,需要大量的条件判断和额外空间来标明零或非零参数的位置,因此不适用于并行计算
卷积核粒度与通道粒度卷积核粒度与通道粒度属于粗粒度剪枝,不依赖于任何稀疏卷积计算库及专用硬件;同时,能够在获得高压缩率的同时大量减小测试阶段的计算时间

从剪枝目标上分类,可分为减少参数/网络复杂度、减少过拟合/增加泛化能力/提高准确率、减小部署运行时间/提高网络效率及减小训练时间等。

17.4.3 典型剪枝方法对比

剪枝方法修剪对象修剪方式效果
Deep Compression权重随机修剪50倍压缩
Structured Pruning权重组稀疏+排他性稀疏性能提升
Network Sliming特征图通道根据尺度因子修剪节省计算资源
mProp梯度修剪幅值小的梯度加速

17.4.4. 网络蒸馏

网络蒸馏是指利用大量未标记的迁移数据(transfer data),让小模型去拟合大模型,从而让小模型学到与大模型相似的函数映射。网络蒸馏可以看成在同一个域上迁移学习[34]的一种特例,目的是获得一个比原模型更为精简的网络,整体的框架图如图4所示。

17.4.5 前端压缩

(1)知识蒸馏

一个复杂模型可由多个简单模型或者强约束条件训练得到。复杂模型特点是性能好,但其参数量大,计算效率低。小模型特点是计算效率高,但是其性能差。

知识蒸馏是让复杂模型学习到的知识迁移到小模型当中,使其保持其快速的计算速度前提下,同时拥有复杂模型的性能,达到模型压缩的目的。

(2)紧凑的模型结构设计

紧凑的模型结构设计主要是对神经网络卷积的方式进行改进,比如使用两个3x3的卷积替换一个5x5的卷积、使用深度可分离卷积等等方式降低计算参数量。

目前很多网络都是基于模块化设计思想,在深度和宽度两个维度上都很大,导致参数冗余。因此有很多关于模型设计的研究,如SqueezeNet、MobileNet等,使用更加细致、高效的模型设计,能够很大程度的减少模型尺寸,并且也具有不错的性能。

(3)滤波器层面的剪枝

滤波器层面的剪枝属于非结构化剪枝,主要是对较小的权重矩阵整个剔除,然后对整个神经网络进行微调。此方式由于剪枝过于粗放,容易导致精度损失较大,而且部分权重矩阵中会存留一些较小的权重造成冗余,剪枝不彻底。具体操作是在训练时使用稀疏约束(加入权重的稀疏正则项,引导模型的大部分权重趋向于0)。完成训练后,剪去滤波器上的这些0。

优点是简单;缺点是剪的不干净,非结构化剪枝会增加内存访问成本。

17.4.6 后端压缩

(1)低秩近似

在卷积神经网络中,卷积运算都是以矩阵相乘的方式进行。对于复杂网络,权重矩阵往往非常大,非常消耗存储和计算资源。低秩近似就是用若干个低秩矩阵组合重构大的权重矩阵,以此降低存储和计算资源消耗。

事项特点
优点

可以降低存储和计算消耗;

一般可以压缩2-3倍;

精度几乎没有损失。

缺点

模型越复杂,权重矩阵越大,利用低秩近似重构参数矩阵不能保证模型的性能;

超参数的数量随着网络层数的增加呈线性变化趋势,例如中间层的特征通道数等等;

随着模型复杂度的提升,搜索空间急剧增大。

(2)未加限制的剪枝

完成训练后,不加限制地剪去那些冗余参数。

(3)参数量化

神经网络的参数类型一般是32位浮点型,使用较小的精度代替32位所表示的精度。或者是将多个权重映射到同一数值,权重共享。量化其实是一种权值共享的策略。量化后的权值张量是一个高度稀疏的有很多共享权值的矩阵,对非零参数,我们还可以进行定点压缩,以获得更高的压缩率。

(4)二值网络

相对量化更为极致,对于32bit浮点型数用1bit二进制数 -1 或者 1 表示,可大大减小模型尺寸。

(5)三值网络

事项特点
优点

想对于二值神经网络,三值神经网络(Ternary Weight Networks)在同样的模型结构下可以达到成百上千倍的表达能力提升;并且,在计算时间复杂度上,三元网络和二元网络的计算复杂度是一样的。

例如,对于ResNet-18层网络中最常出现的卷积核(3x3大小),二值神经网络模型最多可以表达2的3x3次方(=512)种结构,而三元神经网络则可以表达3的3x3次方(=19683)种卷积核结构,在表达能力上,三元神经网络相对要高19683/512=38倍。因此,三元神经网络模型能够在保证计算复杂度很低的情况下大幅的提高网络的表达能力,进而可以在精度上相对于二值神经网络有质的飞跃。另外,由于对中间信息的保存更多,三元神经网络可以极大的加快网络训练时的收敛速度,从而更快、更稳定的达到最优的结果。

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

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

相关文章

刚毕业就做项目经理,现在感觉越做越没动力,还有必要坚持下去吗?

那种一毕业就做项目经理的,以为是少走10年弯路,干了一年后,才发现这简直就是在坑自己。没点真材实料,经理也变成了“空中架子”。 因此,很多一毕业就当上项目经理的人,要么是干着干着就转回到技术岗位&…

AI数字人:终于知道视频号咋爆的了

点击下方👇“拂晓AI数字人”关注公众号 一起学习AI 数字人,让服务更高效! 做视频号是不是有这种感觉,辛辛苦苦剪了几个小时的视频,上去就是几百播放量,就没有流量了,很抓狂。 找别人的爆的视频&…

2.点位管理——帝可得后台管理系统

目录 前言点位管理菜单模块1.需求说明2.库表设计3.生成基础代码0 .使用若依代码生成器最终目标1.创建点位管理2.添加数据字典3.配置代码生成信息4.下载代码并导入项目 4.优化菜单——点位管理1.优化区域管理2.增加点位数 前言 提示:本篇介绍点位管理模块&#xff0…

知识库管理系统盘点:2024年必备10款

在当今信息爆炸的时代,高效地组织、存储、管理和共享知识与信息,已成为企业提升竞争力和实现数字化转型的关键。知识库管理系统(Knowledge Base Management System, KBMS)作为重要工具,正受到越来越多企业的青睐。本文…

使用bat命令在没有java的环境下启动jar包

使用bat命令在没有java的环境下启动jar包 先看一下目录下面的文件 里面有三个比较重要的文件 clean.bat:用于清除占用程序的端口 一键启动_x64.bat:用于启动全部的项目 jre8_win64:用于jar所需要的java环境 注意事项: 关于jar…

【RabbitMq源码阅读】分析RabbitMq发送消息源码

一&#xff1a;基本介绍 本文通过demo构建测试代码&#xff0c;debug分析的方法查看RabbitMq源码。 rabbit的中文文档&#xff1a; 官方中文文档 二&#xff1a;测试Demo 2.1 引入Springboot整合的RabbitMq依赖 <dependency><groupId>org.springframework.boot…

使用npm link 把一个本地项目变成依赖,引入到另一个项目中

突然有天,发现线上的项目有块功能缺失,我以为是我优化的时候不小心改坏了什么代码,导致的,先上图 第一反应,就以为天塌了,完全无从入手,然后我就找了之前的离职的同事,他又给我两个包,让我打成依赖扔进去,这两个包分别是scratch-blocks,scratch-vm, 然后我就使用了npm link np…

淘宝api上货软件)一刻工具箱,一天上几万不出现爬虫违规,更新开放类目错放功能,淘宝电商必备软件!

天猫淘宝抖音上货神器&#xff0c;助力电商快速铺货 在当今这个信息爆炸、电商飞速发展的时代&#xff0c;如何快速有效地将产品铺货到各大电商平台&#xff0c;成为每一位电商从业者都需要面对的问题。 通过电商API接口能为电商从业者打造的综合辅助工具&#xff0c;支持天猫、…

uniapp学习(002 常用的内置组件)

零基础入门uniapp Vue3组合式API版本到咸虾米壁纸项目实战&#xff0c;开发打包微信小程序、抖音小程序、H5、安卓APP客户端等 总时长 23:40:00 共116P 此文章包含第5p-第p10的内容 文章目录 view组件相当于div标签按下松开例子冒泡例子 text组件 相当于span标签scroll-view纵…

第二百五十八节 JPA教程 - JPA查询选择两个实体示例

JPA教程 - JPA查询选择两个实体示例 以下JPQL从两个实体中选择。 List l em.createQuery("SELECT d, m FROM Department d, Professor m WHERE d m.department").getResultList();例子 以下代码来自Professor.java。 package cn.w3cschool.common;import java.…

想跳槽,我懂你!

在职场的长河中&#xff0c;每个人都是自己航行船的舵手&#xff0c;时而顺流而下享受平静&#xff0c;时而逆流而上追求挑战。跳槽&#xff0c;作为职业生涯中常见且重要的决策之一&#xff0c;往往承载着对现状的不满、对未来的憧憬以及对自我价值的重新定位。本文将从跳槽的…

紫光 FPGA固化RAM位置的操作流程

1. 前提条件&#xff1a;需要已经编译出一个功能完整的没有时序违例的版本出来&#xff1b; 2. 将RAM导出至txt文件&#xff1a; 这个过程需要几分钟&#xff0c;耐心等待一下。 等待提示成功就可以进行下一步操作了。 3. 将【2】中的txt文件中的内容全选复制粘贴到pcf文件的…

离职赔偿一览表-这年头每人都应该备一份

离职赔偿一览表 离职时一定要知道N、N1&#xff0c;2N的计算方法 N&#xff08;经济补偿金&#xff09;、N1&#xff08;经济补偿金代通知金&#xff09;&#xff0c;2N&#xff08;赔偿金&#xff09;其实都是简称。 01 经济补偿金&#xff08;N&#xff09; 经济补偿金工…

led灯什么牌子的质量好?五款市面上非常适合孩子使用的护眼台灯

在当今这个数字化时代&#xff0c;孩子们从小就开始频繁接触各种数码设备&#xff0c;每日长时间面对着电子屏幕。由于疫情的影响&#xff0c;居家上网课更是让孩子们不得不持续面对电子屏幕。而儿童和青少年时期正是眼睛发育的关键阶段&#xff0c;许多孩子因为在这个时期过度…

Python从入门到精通-基础篇

1.Python的起源 1989年&#xff0c;为了打发圣诞节假期&#xff0c;Gudio van Rossum&#xff08;吉多范罗苏姆&#xff08;龟叔&#xff09;&#xff09;决心开发一个新的解释程序&#xff08;Python雏形&#xff09; 1991年&#xff0c;第一个Python解释器诞生 Python这个…

根据ip地址查网页怎么查询?

一、通过命令提示符查询查网页&#xff08;Windows系统&#xff09; ①按“WinR”键&#xff0c;打开运营窗口。 ②输入“cmd”“回车”&#xff0c;打开命令提示符窗口。 ③输入“nslookup ip地址”将ip地址换成查询的实际ip地址“回车” ⑤系统返回输入ip地址对应的域名信息…

Latex 首字母下沉,lettrine冲突报错,手动解决办法

在文章最开始&#xff0c;\usepackage{*}下面&#xff0c;设置两个命令&#xff0c; \newcommand{\calcfirstletterheight}[3]{ % #1 是高度变量&#xff0c;#2 是首字母&#xff0c;#3 是比例变量% 测量首字母的高度\settoheight{#1}{#2} % 测量首字母的高度% 计算比例&…

FristiLeaks靶场打靶记录

一、靶机介绍 靶机下载地址&#xff1a;https://download.vulnhub.com/fristileaks/FristiLeaks_1.3.ova 二、信息收集 扫描靶机ip arp-scan -l 确认靶机ip为&#xff1a;192.168.5.132 扫描端口 nmap -p- -A 192.168.5.132 扫描目录 dirb http://192.168.5.132/ 进入网…

【STM32】 TCP/IP通信协议--LwIP介绍

一、前言 TCP/IP是干啥的&#xff1f;它跟SPI、IIC、CAN有什么区别&#xff1f;它如何实现stm32的通讯&#xff1f;如何去配置&#xff1f;为了搞懂这些问题&#xff0c;查询资料可解决如下疑问&#xff1a; 1.为什么要用以太网通信? 以太网(Ethernet) 是指遵守 IEEE 802.3 …

一体式远程IO:纺织行业数字化转型的新引擎

在纺织行业这片古老而又充满活力的土地上&#xff0c;技术的每一次飞跃都深刻地改变着生产模式与效率。随着纺织技术的飞速发展和人工成本的日益提高&#xff0c;纺织企业正积极寻求通过自动化和智能化手段来降低生产成本、提升市场竞争力。一体式远程IO&#xff08;输入输出&a…