【论文笔记】神经网络压缩调研

news2024/11/18 23:50:47

神经网络压缩调研

    • 背景
    • 现有的深度模型压缩方法
    • NetWork Prunning 网络剪枝
    • 设计结构化矩阵
    • 知识蒸馏
    • 权值共享
    • Parameter Quantization(参数量化)
    • 量化和二进制化
    • 伪量化
    • Architecture Design(Depth Separable Convolution)
    • 分解卷积

背景

 小模型,参数少,容易将ML模型部署在资源有限的设备上,但是直接训练一个好的小网络比较困难

现有的深度模型压缩方法

  • 基于参数修建和共享的方法针对模型参数的冗余性 试图取出冗余和不重要的项
  • 基于低秩因子分解的技术使用矩阵/张量分解来估计深度学习模型的信息参数
  • 基于传输/紧凑卷积滤波器的方法设计页数的卷积滤波器来降低存储和计算复杂度
  • 知识蒸馏方法通过学习一个蒸馏模型,训练一个更紧凑的神经网络来重现一个更大的网络输出

综述论文 :A Survey of Model Compression and Acceleration for Deep Neural Networks

在这里插入图片描述

  • 转移层和参数修剪和共享可以一起使用
  • 模型量化和二值化可以与低秩近似一起使用以实现进一步的加速

NetWork Prunning 网络剪枝

 删减神经网络没有用的参数

  • 过程如下(PPT)叙述一遍
  • 训练一个网络
  • 针对网络的每一个参数评估一下重要性 每一个神经元的重要性
  • 移除不重要的参数或者神经元
  • 微调 重新训练一下 Fine-tune
  • 反复进行多次

在这里插入图片描述

修剪的单位 参数或者神经元

  • 移除若干个权重参数,但是实际操作不好定义 因为结构不对称,而且当Network不规则,不方便使用GPU进行加速
  • 评价weight重要性,我们可以用绝对值衡量,即绝对值越大,weight越重要,或者采用之前介绍的life long learning的想法
  • 评价neuron重要性,我们可以用其输出的结果为0的次数衡量,即输出0越多越不重要。

在这里插入图片描述

  • neuron pruning
    一神经元为单位进行剪枝,通过去除冗余的神经元,简化网络结构。这样得到的网络结构是规则的,相比于Weight pruning,这种方式更好实现,也更容易通过GPU加速。
    在这里插入图片描述

训练一个大的模型,保留比较有用的模型参数 然后得到一个小的模型,这样得到的小模型效果和原始的大模型效果差不多,而不是直接训练一个小的模型

在这里插入图片描述

设计结构化矩阵

 如果一个Mxn矩阵可以使用一个少于mxn的参数来描述,就是一个结构化的矩阵,通常这样的结构不仅能减少内存消耗,还可以通过快速的矩阵-向量乘法和梯度计算显著加快推理和训练的速度

 但是问题是结构的约束会导致精确度的损失,因为约束可能给模型带来偏差,另外一个方面如何找到一个合适的矩阵结构是很困难的,没有理论来支持推导。

知识蒸馏

 首先定义一个比较大的网络Teacher Net,然后训练,那么训练后的网络,比如手写数字识别任务,预测1的结果概率是 1:0.7 7:0.2 9:0.1,在定义一个小的网络Student Net ,然后让他学习Teacher Net,如果让比较小的网络得到和比较大的网络一样的效果比较难train,所以直接按照大的network的训练结果训练小的网络,跟容易train。
在这里插入图片描述

这个Teacher Net不一定是一个巨大的network,也有可能是将多个network组合(ensemble)得到的。但是多个network组合的模型往往比较复杂,在实际应用中,我们可以训练一个Student Net,让结果逼近N Networks的结果,使得模型准确度差不多的情况下,复杂度大大减少。

关于只是蒸馏的一个小技巧,就算是在softmax函数的基础上对每一个输出的结果加上一个temperature,这样会对最后最后的预测结果进行一个平滑的处理,使得Student Net更好训练

 基于知识蒸馏方法可以令更深的模型降低计算成本,但是只能用于具有Softmax损失函数分类任务,这阻碍应用,但是另一个缺点是太严格,性能比不上其他方法,老师和学生可以是不同的网络结构,比如BERT蒸馏到BiLSTM网络,但是一般相似网络结构,蒸馏的效果会更好。

权值共享

 ALBert,十二层共用一套参数,从而使得参数量降低到原来的1/12.这个方案对于模型压缩得作用很大,但是对于推理加速则收效甚微,因为共享权值并没有带来计算量得减少

Parameter Quantization(参数量化)

 参数量化,称之为参数压缩,这种方法主要是对weigth在存储量上减少的一类方法,

  • 对于weight的精度可能不需要太高就可以获得一个比较好的效果,比如从64->32 其实就是减少减少数据的存储位数

  • 权重聚类:将神经网络所有的weight按照值得大小进行划分,数值差不多的聚集在一起,然后对每一个类取一个值,替换里面所有的权值,相当于每一个堆只用一个值就可以存储,这样存储得数据量大大减少

  • 采用哈夫曼编码,比较常见得东西使用比较少的bit描述,不常见得东西使用比较多得bit描述,但是平均起来存储得数据量大大减少。

在这里插入图片描述

量化和二进制化

在这里插入图片描述

 网络量化通过减少表示每一个权重所需要的比特数目来压缩原始网络

  • Vanhoucke使用8比特参数量化可以在准确率损失极小的同时实现大幅加速
  • Han S提出了一整套完整的深度网络的压缩流程:
  • 首先修建不重要的连接,重新训练稀疏连接的网络
  • 然后使用权重共享量化连接的权重,
  • 再对量化之后的权重和码本进行霍夫曼编码,以进一步降低压缩率
  • 修剪、量化、和霍夫曼编码

修建减少了需要编码的权重数量,量化和霍夫曼编码减少了用于对每个权重编码的比特数。对于大部分元素为0的矩阵可以使用稀疏表示,进一步降低空间冗余,且这种压缩机制不会带来任何准确率

伪量化

 保存模型每一层的时候,使用低精度来保存每一个网络参数,同时保存拉伸比例scale和对应的浮点数zeroPoint,然后在推理阶段,使用如下公式来还原网络参数32bit

在这里插入图片描述

存储的时候使用低精度进行量化,但是推理的时候还原为正常的高精度,为量化只能实现模型压缩,但是不能加速模型

Architecture Design(Depth Separable Convolution)

 CNN减少参数量得结构化设计,深度可分离卷积 PPT 介绍这部分 逐层卷积 逐点卷积

对于CNN,假设输入有两个channel,对应的filter也就是两个channel,假设有四个filter,每一个filter都是3 *3 的,那么输出也有四个channel,卷积层一共包含3 * 3 * 2 * 4 = 72个参数

在这里插入图片描述

深度可分离卷积:Depthwise Convolution

  • 有几个channel 就有几个filter
  • 每一个filter只管一个channel
  • 每一个filter在一个channel上进行convolution 卷积操作 生成一个channel
  • channel和channel之间的关系没法体现出来

Depthwise Convolution首先经过第一次卷积运算,DW完全是在二维平面内进行。卷积核的数量与上一层的通道数相同(通道和卷积核一一对应)。所以一个三通道的图像经过运算后生成了3个Feature map(如果有same padding则尺寸与输入层相同为5×5),

在这里插入图片描述

PointWise Convolution

在这里插入图片描述

  • 每一个filter扫描所有的channel 得到一个新的channel

Pointwise Convolution的运算与常规卷积运算非常相似,它的卷积核的尺寸为 1×1×M,M为上一层的通道数。所以这里的卷积运算会将上一步的map在深度方向上进行加权组合,生成新的Feature map
在这里插入图片描述

对于深度可分离卷积DepthWise Separable Convolution 使用DepthWise Convolution和 PointWise Convlution 进行结合 ,用来提取特征feature map

相比常规的卷积操作,它的参数数量和运算成本比较低

神经网络压缩的几种方法,并不是互斥的,可以先使用一个方法,再接着使用剩余的一个或者几个方法,直到满足压缩条件

分解卷积

  • 使用两个串联得小卷积核来代替一个大的卷积核。inceptionV2中创造性的提出了两个3x3的卷积核代替一个5x5的卷积核,在效果相同的情况下,参数量仅为原先的3x3x2/5x5 = 18/25
  • 使用两个并联的非对称卷积核来代替一个正常卷积核,inceptionV3中将一个7x7的卷积拆分成一个1x7和一个7x1的卷积,卷积效果相同的情况下,大大减少了参数量,同时还提高了卷积的多样性

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

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

相关文章

【Linux】进程轻松入门

目录 一, 冯* 诺依曼体系结构 1,存储结构 ​编辑 二, 操作系统 1,概念 2,设计OS的目的 3,定位 4,如何理解 "管理" 5, 总结 三,进程 1. 概念 那么…

【C语言所有操作符详解2】

目录 条件操作符 逗号表达式 下标引用、函数调用和结构成员 [ ] 下标引用操作符 ( ) 函数调用操作符 访问一个结构的成员 表达式求值 隐式类型转换 隐式类型转换 整型提升 整型提升的意义: 如何进行整型提升呢? 算术转换 操作符的属性 操作符优先级 …

Redis系列一:介绍

介绍 The open source, in-memory data store used by millions of developers as a database, cache, streaming engine, and message broker. 相关资源 Redis 官网:https://redis.io/ 源码地址:https://github.com/redis/redis Redis 在线测试&#…

RS232转ETHERCAT连接ethercat通讯过程描述

我们将为大家介绍一款强大的设备——捷米JM-ECT-RS485/232通讯网关。这是一款自主研发的ETHERCAT从站功能的网关,它能够将ETHERCAT网络和RS485或RS232设备无缝连接。 这款网关在ETHERCAT总线和RS485或RS232总线中均能发挥主站或从站的作用。它的最大特点就是解决了…

企业情报管理系统

软件简介 基于 SpringBoot 的权限管理系统,易读易懂、界面简洁美观。 核心技术采用 Spring、MyBatis、Shiro 没有任何其它重度依赖。直接运行即可。 平台简介 企业情报管理系统,主要包括情报分析、文章情报、报告情报、数据情报、数据管理、AI管理、平…

动态规划 丑数(三指针 谁先创造谁先功德++)

无语这是medium题目吗 先放暴力解法 反正超时 无法ac本题 2, 3, 5 这前 3 个丑数一定要乘以其它的丑数, 所得的结果才是新的丑数 合并过程中重复解的处理 nums2, nums3, nums5 中是存在重复的解的, 例如 nums2[2] 32, nums3[1] 23 都计算出了 6 这个结…

200+行代码写一个简易的Qt界面贪吃蛇

照例先演示一下: 一个简单的Qt贪吃蛇,所有的图片都是我自己画的(得意)。 大致的运行逻辑和之前那个200行写一个C小黑窗贪吃蛇差不多,因此在写这个项目的时候,大多情况是在想怎么通过Qt给展现出来。 背景图…

【Minio中间件】上传图片并Vue回显

流程: 目录 1.文件服务器Minio的安装 1.1 下载Minio安装后,新建1个data文件夹。并在该安装目录cmd 敲命令。注意不要进错目录。依次输入 1.2 登录Minio网页端 1.3 先建1个桶(buckets),点击create a bucket 2. Spr…

使用docker部署springboot微服务项目

文章目录 1. 环境准备1. 准备好所用jar包项目2.编写相应的Dockerfile文件3.构建镜像4. 运行镜像5. 测试服务是否OK6.端口说明7.进入容器内8. 操作容器的常用命令 1. 环境准备 检查docker是否已安装 [rootlocalhost /]# docker -v Docker version 1.13.1, build 7d71120/1.13.…

LabVIEW开发航天器动力学与控制仿真系统

LabVIEW开发航天器动力学与控制仿真系统 计算机仿真是工程设计和验证的非常有用的工具。它节省了大量的时间、金钱和精力。航天器动力学与控制仿真系统由LabVIEW程序开发,它是模拟航天器等动态系统的有用工具。还可轻松与硬件连接并输出真实信号。 项目采用系统工…

《Kali渗透基础》11. 无线渗透(一)

kali渗透 1:无线技术特点2:IEEE 802.11 标准2.1:无线网络分层2.2:IEEE2.3:日常使用标准2.3.1:802.112.3.2:802.11b2.3.3:802.11a2.3.4:802.11g2.3.5:802.11n …

一维(1D)CNN模型下轴承故障诊断(Python,TensorFlow框架下,很容易改为其它模型,解压缩后可以直接运行,无需修改任何目录)

1.数据集 使用凯斯西储大学轴承数据集,一共有4种负载下采集的数据,每种负载下有10种 故障状态:三种不同尺寸下的内圈故障、三种不同尺寸下的外圈故障、三种不同尺寸下的滚动体故障和一种正常状态。 2.模型(1DCNN) 使…

【Git】git reset 版本回退 git rm

前言 在日常开发时,我们经常会需要撤销之前的一些修改内容或者回退到之前的某一个版本,这时候reset命令就派上用场了 git reset 用法1——所有文件回退到某个版本 1、使用git reflog查看要回退的commit对象 2、使用git reset [-- hard/soft /mixed] …

26 用lsqnonlin求解最小二乘问题(matlab程序)

1.简述 函数语法 x lsqnonlin(fun,x0) 函数用于: 解决非线性最小二乘(非线性数据拟合)问题 解决非线性最小二乘曲线拟合问题的形式 变量x的约束上下限为ub和lb, x lsqnonlin(fun,x0)从x0点开始,找到fun中描述的函数的最小平方和。函数fu…

【前端知识】React 基础巩固(三十九)——React-Router的基本使用

React 基础巩固(三十九)——React-Router的基本使用 一、Router的基本使用 Router中包含了对路径改变的监听,并且会将相应的路径传递给子组件。 Router包括两个API: BrowserRouter使用history模式 HashRouter使用hash模式(路径后面带有#号…

Debeizum 增量快照

在Debeizum1.6版本发布之后,成功推出了Incremental Snapshot(增量快照)的功能,同时取代了原有的实验性的Parallel Snapshot(并行快照)。在本篇博客中,我将介绍全新快照方式的原理,以…

S32K14x FlexNVM介绍(flexible Non-volatile memory)

S32K14x是一款NXP推出的32位汽车级微控制器,其存储结构相对复杂。下面是对其存储结构的中文介绍: S32K14x采用了分层存储结构,包括Flash存储器和SRAM存储器。Flash存储器用于存储程序代码和常量数据,而SRAM存储器用于存储变量数据…

常见的几种排序

🐶博主主页:ᰔᩚ. 一怀明月ꦿ ❤️‍🔥专栏系列:线性代数,C初学者入门训练,题解C,C的使用文章,「初学」C 🔥座右铭:“不要等到什么都没有了,才下…

【分布式系统】分布式系统的8个谬误

网络可靠 对于分布式系统来说,网络、计算、存储是三大基石,系统之间进行拆分隔离之后,那么必定存在网络通讯,而网络是最不可靠的。 不管是从硬件层面还是软件层面来说,网络是不可靠的。(断电、配置错误、ID…

ChatGPT结合知识图谱构建医疗问答应用 (一) - 构建知识图谱

一、ChatGPT结合知识图谱 在本专栏的前面文章中构建 ChatGPT 本地知识库问答应用,都是基于词向量检索 Embedding 嵌入的方式实现的,在传统的问答领域中,一般知识源采用知识图谱来进行构建,但基于知识图谱的问答对于自然语言的处理…